diff -Nru boost1.81-1.81.0/debian/changelog boost1.81-1.81.0/debian/changelog --- boost1.81-1.81.0/debian/changelog 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/debian/changelog 2023-08-31 20:29:25.000000000 +0000 @@ -1,8 +1,8 @@ -boost1.81 (1.81.0-6636daily202308040601+git.2ec971c7d~ubuntu22.04.1) jammy; urgency=low +boost1.81 (1.81.0-6~22.04.sav0) jammy; urgency=medium - * Auto build. + * Backport to Jammy - -- Launchpad Package Builder Fri, 04 Aug 2023 06:01:47 +0000 + -- Rob Savoury Thu, 31 Aug 2023 13:29:25 -0700 boost1.81 (1.81.0-6) unstable; urgency=medium diff -Nru boost1.81-1.81.0/debian/control boost1.81-1.81.0/debian/control --- boost1.81-1.81.0/debian/control 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/debian/control 2023-07-20 08:33:07.000000000 +0000 @@ -1,195 +1,226 @@ Source: boost1.81 +Homepage: https://www.boost.org/ Section: libs Priority: optional -Maintainer: - AppImageLauncher Maintainers Team -Uploaders: Peter J. Mello -Build-Depends: debhelper-compat (= 13), dpkg-dev (>= 1.16.1~), dctrl-tools, - chrpath, lsb-release, zlib1g-dev, libbz2-dev, liblzma-dev, libzstd-dev, - libicu-dev (>= 63.1), mpi-default-dev, bison, flex, docbook-to-man, help2man, - xsltproc, doxygen, docbook-xsl, docbook-xml, texlive-latex-base, ghostscript, - dh-python, g++ (>= 4:5-0), python3, python3-all-dev (>= 3.1), python3-numpy +Maintainer: Debian Boost Team +Uploaders: + Giovanni Mascellani , + Anton Gladky +Build-Depends: debhelper-compat (= 12), dpkg-dev (>= 1.16.1~), dctrl-tools, chrpath, + zlib1g-dev, libbz2-dev, liblzma-dev, libzstd-dev, libicu-dev (>= 63.1), mpi-default-dev, + bison, flex, docbook-to-man, help2man, xsltproc, doxygen, + docbook-xsl, docbook-xml, texlive-latex-base, ghostscript, + dh-python, + g++ (>= 4:5-0), + python3, python3-all-dev (>= 3.1), python3-numpy Build-Depends-Indep: graphviz Build-Conflicts: libopenmpi-dev (= 1.3.2-2) +Vcs-Browser: https://salsa.debian.org/debian/boost +Vcs-Git: https://salsa.debian.org/debian/boost.git Standards-Version: 4.6.2 -Homepage: https://www.boost.org/ -Vcs-Git: https://git.launchpad.net/~appimagelauncher-team/boost/+git/boost-packaging -Vcs-Browser: https://git.launchpad.net/~appimagelauncher-team/boost/+git/boost-packaging -Rules-Requires-Root: no Package: libboost1.81-dev -Architecture: amd64 i386 arm64 armhf +Architecture: any Multi-Arch: same Section: libdevel -Depends: libstdc++-${gxx:major}-dev, ${shlibs:Depends}, ${misc:Depends} -Suggests: libboost1.81-doc, libboost-atomic1.81-dev, libboost-chrono1.81-dev, - libboost-container1.81-dev, libboost-context1.81-dev [i386 amd64 armhf arm64], - libboost-contract1.81-dev, libboost-coroutine1.81-dev [i386 amd64 armhf arm64], - libboost-date-time1.81-dev, libboost-exception1.81-dev, - libboost-fiber1.81-dev [i386 amd64 armhf arm64], libboost-filesystem1.81-dev, - libboost-graph1.81-dev, libboost-graph-parallel1.81-dev, - libboost-iostreams1.81-dev, libboost-locale1.81-dev, libboost-log1.81-dev, - libboost-math1.81-dev, libboost-mpi1.81-dev, libboost-mpi-python1.81-dev, - libboost-numpy1.81-dev, libboost-program-options1.81-dev, - libboost-python1.81-dev, libboost-random1.81-dev, libboost-regex1.81-dev, - libboost-serialization1.81-dev, libboost-stacktrace1.81-dev, - libboost-system1.81-dev, libboost-test1.81-dev, libboost-thread1.81-dev, - libboost-timer1.81-dev, libboost-type-erasure1.81-dev, libboost-wave1.81-dev, - libboost1.81-tools-dev, libmpfrc++-dev, libntl-dev, libboost-nowide1.81-dev -Conflicts: bjam, boost-build, libboost1.42-dev, libboost1.46-dev, - libboost1.48-dev, libboost1.49-dev, libboost1.50-dev, libboost1.52-dev, - libboost1.53-dev, libboost1.54-dev, libboost1.55-dev, libboost1.57-dev, - libboost1.58-dev, libboost1.60-dev, libboost1.61-dev, libboost1.62-dev, - libboost1.63-dev, libboost1.65-dev, libboost1.67-dev, libboost1.70-dev, - libboost1.71-dev, libboost1.74-dev, libboost1.80-dev +Depends: ${misc:Depends}, ${shlibs:Depends}, libstdc++-${gxx:major}-dev +Suggests: libboost1.81-doc, + libboost-atomic1.81-dev, + libboost-chrono1.81-dev, + libboost-container1.81-dev, + libboost-context1.81-dev [i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x], + libboost-contract1.81-dev, + libboost-coroutine1.81-dev [i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x], + libboost-date-time1.81-dev, + libboost-exception1.81-dev, + libboost-fiber1.81-dev [i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x], + libboost-filesystem1.81-dev, + libboost-graph1.81-dev, + libboost-graph-parallel1.81-dev, + libboost-iostreams1.81-dev, + libboost-locale1.81-dev, + libboost-log1.81-dev, + libboost-math1.81-dev, + libboost-mpi1.81-dev, + libboost-mpi-python1.81-dev, + libboost-numpy1.81-dev, + libboost-program-options1.81-dev, + libboost-python1.81-dev, + libboost-random1.81-dev, + libboost-regex1.81-dev, + libboost-serialization1.81-dev, + libboost-stacktrace1.81-dev, + libboost-system1.81-dev, + libboost-test1.81-dev, + libboost-thread1.81-dev, + libboost-timer1.81-dev, + libboost-type-erasure1.81-dev, + libboost-wave1.81-dev, + libboost1.81-tools-dev, + libmpfrc++-dev, libntl-dev, + libboost-nowide1.81-dev +Conflicts: bjam, boost-build, libboost1.42-dev, libboost1.46-dev, libboost1.48-dev, libboost1.49-dev, libboost1.50-dev, libboost1.52-dev, libboost1.53-dev, libboost1.54-dev, libboost1.55-dev, libboost1.57-dev, libboost1.58-dev, libboost1.60-dev, libboost1.61-dev, libboost1.62-dev, libboost1.63-dev, libboost1.65-dev, libboost1.67-dev, libboost1.70-dev, libboost1.71-dev, libboost1.74-dev, libboost1.80-dev Breaks: libleatherman-dev (<< 1.12.1+dfsg-1.1~) Replaces: libleatherman-dev (<< 1.12.1+dfsg-1.1~) Description: Boost C++ Libraries development files - The Boost web site provides free, peer-reviewed, portable C++ source libraries. - The emphasis is on libraries which work well with the C++ Standard Library. - One goal is to establish "existing practice" and provide reference - implementations so that the Boost libraries are suitable for eventual - standardization. Some of the libraries have already been proposed for inclusion - in the C++ Standards Committee's upcoming C++ Standard Library Technical - Report. + The Boost web site provides free, peer-reviewed, portable C++ source + libraries. The emphasis is on libraries which work well with the C++ + Standard Library. One goal is to establish "existing practice" and + provide reference implementations so that the Boost libraries are + suitable for eventual standardization. Some of the libraries have + already been proposed for inclusion in the C++ Standards Committee's + upcoming C++ Standard Library Technical Report. . This package provides headers for all Boost libraries. . - Extended precision arithmetic package libmpfrc++-dev or libntl-dev is required - to use the Boost.Multiprecision wrapping of the respective library. + Extended precision arithmetic package libmpfrc++-dev or libntl-dev is + required to use the Boost.Multiprecision wrapping of the respective + library. Package: libboost1.81-tools-dev -Architecture: amd64 i386 arm64 armhf +Architecture: any Multi-Arch: foreign Section: libdevel -Depends: ${shlibs:Depends}, ${misc:Depends} -Suggests: xsltproc, doxygen, docbook-xml (>= 4.2), docbook-xsl (>= 1.73.2), - default-jdk (>= 1.4), fop (>= 0.94) -Conflicts: bjam, boost-build, libboost1.49-dev, libboost1.53-tools-dev, - libboost1.54-tools-dev, libboost1.55-tools-dev, libboost1.57-tools-dev, - libboost1.58-tools-dev, libboost1.60-tools-dev, libboost1.61-tools-dev, - libboost1.62-tools-dev, libboost1.63-tools-dev, libboost1.65-tools-dev, - libboost1.67-tools-dev, libboost1.70-tools-dev, libboost1.71-tools-dev, - libboost1.74-tools-dev, libboost1.80-tools-dev -Replaces: bjam, boost-build, libboost1.49-dev, libboost1.53-dev, - libboost1.53-tools-dev +Depends: ${misc:Depends}, ${shlibs:Depends} +Suggests: xsltproc, + doxygen, + docbook-xml (>= 4.2), + docbook-xsl (>= 1.73.2), + default-jdk (>= 1.4), + fop (>= 0.94) +Conflicts: bjam, boost-build, libboost1.49-dev, libboost1.53-tools-dev, libboost1.54-tools-dev, libboost1.55-tools-dev, libboost1.57-tools-dev, libboost1.58-tools-dev, libboost1.60-tools-dev, libboost1.61-tools-dev, libboost1.62-tools-dev, libboost1.63-tools-dev, libboost1.65-tools-dev, libboost1.67-tools-dev, libboost1.70-tools-dev, libboost1.71-tools-dev, libboost1.74-tools-dev, libboost1.80-tools-dev +Replaces: bjam, boost-build, libboost1.49-dev, libboost1.53-dev, libboost1.53-tools-dev Description: Boost C++ Libraries development tools - The Boost web site provides free, peer-reviewed, portable C++ source libraries. - The emphasis is on libraries which work well with the C++ Standard Library. One - goal is to establish "existing practice" and provide reference implementations - so that the Boost libraries are suitable for eventual standardization. Some of - the libraries have already been proposed for inclusion in the C++ Standards - Committee's upcoming C++ Standard Library Technical Report. + The Boost web site provides free, peer-reviewed, portable C++ source + libraries. The emphasis is on libraries which work well with the C++ + Standard Library. One goal is to establish "existing practice" and + provide reference implementations so that the Boost libraries are + suitable for eventual standardization. Some of the libraries have + already been proposed for inclusion in the C++ Standards Committee's + upcoming C++ Standard Library Technical Report. . - This package provides the auxiliary tools bjam, Boost.Build, bcp, inspect, - boostbook and quickbook. + This package provides the auxiliary tools bjam, Boost.Build, bcp, + inspect, boostbook and quickbook. Package: libboost1.81-all-dev -Architecture: amd64 i386 arm64 armhf +Architecture: any Section: libdevel -Depends: libboost1.81-dev, libboost1.81-tools-dev, libboost-atomic1.81-dev, - libboost-chrono1.81-dev, libboost-container1.81-dev, - libboost-context1.81-dev [i386 amd64 armhf arm64], - libboost-coroutine1.81-dev [i386 amd64 armhf arm64], - libboost-date-time1.81-dev, libboost-exception1.81-dev, - libboost-fiber1.81-dev [i386 amd64 armhf arm64], libboost-filesystem1.81-dev, - libboost-graph1.81-dev, libboost-graph-parallel1.81-dev, - libboost-iostreams1.81-dev, libboost-json1.81-dev, libboost-locale1.81-dev, - libboost-log1.81-dev, libboost-math1.81-dev, libboost-mpi1.81-dev, - libboost-mpi-python1.81-dev, libboost-numpy1.81-dev, - libboost-program-options1.81-dev, libboost-python1.81-dev, - libboost-random1.81-dev, libboost-regex1.81-dev, - libboost-serialization1.81-dev, libboost-stacktrace1.81-dev, - libboost-system1.81-dev, libboost-test1.81-dev, libboost-thread1.81-dev, - libboost-timer1.81-dev, libboost-type-erasure1.81-dev, libboost-wave1.81-dev, - libboost-nowide1.81-dev, ${misc:Depends} +Depends: ${misc:Depends}, + libboost1.81-dev, + libboost1.81-tools-dev, + libboost-atomic1.81-dev, + libboost-chrono1.81-dev, + libboost-container1.81-dev, + libboost-context1.81-dev [i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x], + libboost-coroutine1.81-dev [i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x], + libboost-date-time1.81-dev, + libboost-exception1.81-dev, + libboost-fiber1.81-dev [i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x], + libboost-filesystem1.81-dev, + libboost-graph1.81-dev, + libboost-graph-parallel1.81-dev, + libboost-iostreams1.81-dev, + libboost-json1.81-dev, + libboost-locale1.81-dev, + libboost-log1.81-dev, + libboost-math1.81-dev, + libboost-mpi1.81-dev, + libboost-mpi-python1.81-dev, + libboost-numpy1.81-dev, + libboost-program-options1.81-dev, + libboost-python1.81-dev, + libboost-random1.81-dev, + libboost-regex1.81-dev, + libboost-serialization1.81-dev, + libboost-stacktrace1.81-dev, + libboost-system1.81-dev, + libboost-test1.81-dev, + libboost-thread1.81-dev, + libboost-timer1.81-dev, + libboost-type-erasure1.81-dev, + libboost-wave1.81-dev, + libboost-nowide1.81-dev Description: Boost C++ Libraries development files (ALL) - The Boost web site provides free, peer-reviewed, portable C++ source libraries. - The emphasis is on libraries which work well with the C++ Standard Library. One - goal is to establish "existing practice" and provide reference implementations - so that the Boost libraries are suitable for eventual standardization. Some of - the libraries have already been proposed for inclusion in the C++ Standards - Committee's upcoming C++ Standard Library Technical Report. + The Boost web site provides free, peer-reviewed, portable C++ source + libraries. The emphasis is on libraries which work well with the C++ + Standard Library. One goal is to establish "existing practice" and + provide reference implementations so that the Boost libraries are + suitable for eventual standardization. Some of the libraries have + already been proposed for inclusion in the C++ Standards Committee's + upcoming C++ Standard Library Technical Report. . - This metapackage provides the complete Boost development environment, including - all separately-packaged libraries. + This metapackage provides the complete Boost development environment, + including all separately-packaged libraries. Package: libboost1.81-doc +Homepage: http://www.boost.org/libs/ Architecture: all Section: doc -Depends: libjs-mathjax, ${misc:Depends} +Depends: ${misc:Depends}, libjs-mathjax Suggests: libboost1.81-dev (>= ${source:Version}) -Conflicts: libboost1.42-doc, libboost1.46-doc, libboost1.48-doc, - libboost1.49-doc, libboost1.50-doc, libboost1.52-doc, libboost1.53-doc, - libboost1.54-doc, libboost1.55-doc, libboost1.57-doc, libboost1.58-doc, - libboost1.60-doc, libboost1.61-doc, libboost1.62-doc, libboost1.63-doc, - libboost1.65-doc, libboost1.67-doc, libboost1.70-doc, libboost1.71-doc, - libboost1.74-doc, libboost1.80-doc -Homepage: https://www.boost.org/libs/ +Conflicts: libboost1.42-doc, libboost1.46-doc, libboost1.48-doc, libboost1.49-doc, libboost1.50-doc, libboost1.52-doc, libboost1.53-doc, libboost1.54-doc, libboost1.55-doc, libboost1.57-doc, libboost1.58-doc, libboost1.60-doc, libboost1.61-doc, libboost1.62-doc, libboost1.63-doc, libboost1.65-doc, libboost1.67-doc, libboost1.70-doc, libboost1.71-doc, libboost1.74-doc, libboost1.80-doc Description: Boost.org libraries documentation placeholder - This package originally provided documentation, but has since fallen into - disrepair and presently provides no documentation. Please use documentation at - . + This package originally provided documentation, but has since fallen + into disrepair and presently provides no documentation. Please + use documentation at www.boost.org. Package: libboost-atomic1.81.0 +Homepage: http://www.boost.org/libs/atomic/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/atomic/ Description: atomic data types, operations, and memory ordering constraints This package forms part of the Boost C++ Libraries collection. . - Boost.Atomic is a library that provides atomic data types and operations on - these data types, as well as memory ordering constraints required for - coordinating multiple threads through atomic variables. It implements the - interface as defined by the C++11 standard, but makes this feature available - for platforms lacking system/compiler support for this particular C++11 - feature. - . - Users of this library should already be familiar with concurrency in general, - as well as elementary concepts such as "mutual exclusion". - . - The implementation makes use of processor-specific instructions where possible - (via inline assembler, platform libraries or compiler intrinsics), and falls - back to "emulating" atomic operations through locking. + Boost.Atomic is a library that provides atomic data types and + operations on these data types, as well as memory ordering + constraints required for coordinating multiple threads through atomic + variables. It implements the interface as defined by the C++11 + standard, but makes this feature available for platforms lacking + system/compiler support for this particular C++11 feature. + . + Users of this library should already be familiar with concurrency in + general, as well as elementary concepts such as "mutual exclusion". + . + The implementation makes use of processor-specific instructions where + possible (via inline assembler, platform libraries or compiler + intrinsics), and falls back to "emulating" atomic operations through + locking. Package: libboost-atomic1.81-dev +Homepage: http://www.boost.org/libs/atomic/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-atomic1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-atomic1.53-dev, libboost-atomic1.54-dev, - libboost-atomic1.55-dev, libboost-atomic1.57-dev, libboost-atomic1.58-dev, - libboost-atomic1.60-dev, libboost-atomic1.61-dev, libboost-atomic1.62-dev, - libboost-atomic1.63-dev, libboost-atomic1.65-dev, libboost-atomic1.67-dev, - libboost-atomic1.70-dev, libboost-atomic1.71-dev, libboost-atomic1.74-dev, - libboost-atomic1.80-dev -Homepage: https://www.boost.org/libs/atomic/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-atomic1.81.0 (= ${binary:Version}) Description: atomic data types, operations, and memory ordering constraints This package forms part of the Boost C++ Libraries collection. . - Boost.Atomic is a library that provides atomic data types and operations on - these data types, as well as memory ordering constraints required for - coordinating multiple threads through atomic variables. It implements the - interface as defined by the C++11 standard, but makes this feature available - for platforms lacking system/compiler support for this particular C++11 - feature. - . - Users of this library should already be familiar with concurrency in general, - as well as elementary concepts such as "mutual exclusion". - . - The implementation makes use of processor-specific instructions where possible - (via inline assembler, platform libraries or compiler intrinsics), and falls - back to "emulating" atomic operations through locking. + Boost.Atomic is a library that provides atomic data types and + operations on these data types, as well as memory ordering + constraints required for coordinating multiple threads through atomic + variables. It implements the interface as defined by the C++11 + standard, but makes this feature available for platforms lacking + system/compiler support for this particular C++11 feature. + . + Users of this library should already be familiar with concurrency in + general, as well as elementary concepts such as "mutual exclusion". + . + The implementation makes use of processor-specific instructions where + possible (via inline assembler, platform libraries or compiler + intrinsics), and falls back to "emulating" atomic operations through + locking. +Conflicts: libboost-atomic1.53-dev, libboost-atomic1.54-dev, libboost-atomic1.55-dev, libboost-atomic1.57-dev, libboost-atomic1.58-dev, libboost-atomic1.60-dev, libboost-atomic1.61-dev, libboost-atomic1.62-dev, libboost-atomic1.63-dev, libboost-atomic1.65-dev, libboost-atomic1.67-dev, libboost-atomic1.70-dev, libboost-atomic1.71-dev, libboost-atomic1.74-dev, libboost-atomic1.80-dev Package: libboost-chrono1.81.0 +Homepage: http://www.boost.org/libs/chrono/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/chrono/ Description: C++ representation of time duration, time point, and clocks This package forms part of the Boost C++ Libraries collection. . @@ -197,521 +228,479 @@ . * A means to represent time durations: managed by the generic duration class.Examples of time durations include days, minutes, seconds and - nanoseconds, which can be represented with a fixed number of clock ticks per - unit. All of these units of time duration are united with a generic - interface by the duration facility. - * A type for representing points in time: time_point. A time_point represents - an epoch plus or minus a duration. The library leaves epochs unspecified. A - time_point is associated with a clock. - * Several clocks, some of which may not be available on a particular platform: - system_clock, steady_clock and high_resolution_clock. A clock is a pairing - of a time_point and duration, and a function which returns a time_point - representing now. - . - To make the timing facilities more generally useful, Boost.Chrono provides a - number of clocks that are thin wrappers around the operating system's time - APIs, thereby allowing the extraction of wall clock time, user CPU time, system - CPU time spent by the process: - . - * process_real_cpu_clock, captures wall clock CPU time spent by the current - process. - * process_user_cpu_clock, captures user-CPU time spent by the current process. - * process_system_cpu_clock, captures system-CPU time spent by the current + nanoseconds, which can be represented with a fixed number of clock + ticks per unit. All of these units of time duration are united with + a generic interface by the duration facility. + * A type for representing points in time: time_point. A time_point + represents an epoch plus or minus a duration. The library leaves + epochs unspecified. A time_point is associated with a clock. + * Several clocks, some of which may not be available on a particular + platform: system_clock, steady_clock and high_resolution_clock. A + clock is a pairing of a time_point and duration, and a function + which returns a time_point representing now. + . + To make the timing facilities more generally useful, Boost.Chrono + provides a number of clocks that are thin wrappers around the + operating system's time APIs, thereby allowing the extraction of wall + clock time, user CPU time, system CPU time spent by the process: + . + * process_real_cpu_clock, captures wall clock CPU time spent by the + current process. + * process_user_cpu_clock, captures user-CPU time spent by the current process. - * a tuple-like class process_cpu_clock, that captures real, user-CPU, and - system-CPU process times together. - * a thread_clock thread steady clock giving the time spent by the current - thread (when supported by a platform). + * process_system_cpu_clock, captures system-CPU time spent by the + current process. + * a tuple-like class process_cpu_clock, that captures real, user-CPU, + and system-CPU process times together. + * a thread_clock thread steady clock giving the time spent by the + current thread (when supported by a platform). . - Lastly, Boost.Chrono includes typeof registration for duration and time_point - to permit using emulated auto with C++03 compilers. + Lastly, Boost.Chrono includes typeof registration for duration and + time_point to permit using emulated auto with C++03 compilers. Package: libboost-chrono1.81-dev +Homepage: http://www.boost.org/libs/chrono/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-chrono1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-chrono1.48-dev, libboost-chrono1.49-dev, - libboost-chrono1.50-dev, libboost-chrono1.52-dev, libboost-chrono1.53-dev, - libboost-chrono1.54-dev, libboost-chrono1.55-dev, libboost-chrono1.57-dev, - libboost-chrono1.58-dev, libboost-chrono1.60-dev, libboost-chrono1.61-dev, - libboost-chrono1.62-dev, libboost-chrono1.63-dev, libboost-chrono1.65-dev, - libboost-chrono1.67-dev, libboost-chrono1.70-dev, libboost-chrono1.71-dev, - libboost-chrono1.74-dev, libboost-chrono1.80-dev -Homepage: https://www.boost.org/libs/chrono/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-chrono1.81.0 (= ${binary:Version}) +Conflicts: libboost-chrono1.48-dev, libboost-chrono1.49-dev, libboost-chrono1.50-dev, libboost-chrono1.52-dev, libboost-chrono1.53-dev, libboost-chrono1.54-dev, libboost-chrono1.55-dev, libboost-chrono1.57-dev, libboost-chrono1.58-dev, libboost-chrono1.60-dev, libboost-chrono1.61-dev, libboost-chrono1.62-dev, libboost-chrono1.63-dev, libboost-chrono1.65-dev, libboost-chrono1.67-dev, libboost-chrono1.70-dev, libboost-chrono1.71-dev, libboost-chrono1.74-dev, libboost-chrono1.80-dev Description: C++ representation of time duration, time point, and clocks This package forms part of the Boost C++ Libraries collection. . The Boost.Chrono library provides: . - * A means to represent time durations: managed by the generic duration class. - Examples of time durations include days, minutes, seconds and nanoseconds, - which can be represented with a fixed number of clock ticks per unit. All of - these units of time duration are united with a generic interface by the - duration facility. - * A type for representing points in time: time_point. A time_point represents - an epoch plus or minus a duration. The library leaves epochs unspecified. A - time_point is associated with a clock. - * Several clocks, some of which may not be available on a particular platform: - system_clock, steady_clock and high_resolution_clock. A clock is a pairing - of a time_point and duration, and a function which returns a time_point - representing now. - . - To make the timing facilities more generally useful, Boost.Chrono provides a - number of clocks that are thin wrappers around the operating system's time - APIs, thereby allowing the extraction of wall clock time, user CPU time, system - CPU time spent by the process: + * A means to represent time durations: managed by the generic + duration class . Examples of time durations include days, minutes, + seconds and nanoseconds, which can be represented with a fixed number + of clock ticks per unit. All of these units of time duration are + united with a generic interface by the duration facility. + * A type for representing points in time: time_point. A time_point + represents an epoch plus or minus a duration. The library leaves + epochs unspecified. A time_point is associated with a clock. + * Several clocks, some of which may not be available on a + particular platform: system_clock, steady_clock and + high_resolution_clock. A clock is a pairing of a time_point and + duration, and a function which returns a time_point representing now. + . + To make the timing facilities more generally useful, Boost.Chrono + provides a number of clocks that are thin wrappers around the + operating system's time APIs, thereby allowing the extraction of wall + clock time, user CPU time, system CPU time spent by the process: + . + * process_real_cpu_clock, captures wall clock CPU time spent by the + current process. + * process_user_cpu_clock, captures user-CPU time + spent by the current process. + * process_system_cpu_clock, captures + system-CPU time spent by the current process. + * A tuple-like class + process_cpu_clock, that captures real, user-CPU, and system-CPU + process times together. + * A thread_clock thread steady clock giving + the time spent by the current thread (when supported by a platform). . - * process_real_cpu_clock, captures wall clock CPU time spent by the current - process. - * process_user_cpu_clock, captures user-CPU time spent by the current process. - * process_system_cpu_clock, captures system-CPU time spent by the current - process. - * A tuple-like class process_cpu_clock, that captures real, user-CPU, and - system-CPU process times together. - * A thread_clock thread steady clock giving the time spent by the current - thread (when supported by a platform). - . - Lastly, Boost.Chrono includes typeof registration for duration and time_point - to permit using emulated auto with C++03 compilers. + Lastly, Boost.Chrono includes typeof registration for duration and + time_point to permit using emulated auto with C++03 compilers. Package: libboost-container1.81.0 +Homepage: http://boost.org/libs/container/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://boost.org/libs/container/ Description: C++ library that implements several well-known containers This package forms part of the Boost C++ Libraries collection. . - Boost.Container library implements several well-known containers, including STL - containers. The aim of the library is to offers advanced features not present - in standard containers or to offer the latest standard draft features for - compilers that don't comply with the latest C++ standard. + Boost.Container library implements several well-known containers, + including STL containers. The aim of the library is to offers + advanced features not present in standard containers or to offer the + latest standard draft features for compilers that don't comply with + the latest C++ standard. . In short, what does Boost.Container offer? . - * Move semantics are implemented, including move emulation for pre-C++11 - compilers. - * New advanced features (e.g. placement insertion, recursive containers) are - present. + * Move semantics are implemented, including move emulation + for pre-C++11 compilers. + * New advanced features (e.g. placement insertion, + recursive containers) are present. * Containers support stateful allocators and are compatible with Boost.Interprocess (they can be safely placed in shared memory). * The library offers new useful containers: - - flat_map, flat_set, flat_multimap and flat_multiset: drop-in replacements - for standard associative containers but more memory friendly and with - faster searches. - - stable_vector: a std::list and std::vector hybrid container: vector-like - random-access iterators and list-like iterator stability in insertions and - erasures. - - slist: the classic pre-standard singly linked list implementation offering - constant-time size(). Note that C++11 forward_list has no size(). + * flat_map, flat_set, flat_multimap and flat_multiset: drop-in + replacements for standard associative containers but more + memory friendly and with faster searches. + * stable_vector: a std::list and std::vector hybrid container: + vector-like random-access iterators and list-like iterator + stability in insertions and erasures. + * slist: the classic pre-standard singly linked list implementation + offering constant-time size(). Note that C++11 forward_list has no size(). Package: libboost-container1.81-dev +Homepage: http://boost.org/libs/container/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-container1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-container1.65-dev, libboost-container1.67-dev, - libboost-container1.70-dev, libboost-container1.71-dev, - libboost-container1.74-dev, libboost-container1.80-dev -Homepage: https://boost.org/libs/container/ -Description: C++ library that implements many well-known containers - dev files +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-container1.81.0 (= ${binary:Version}) +Description: C++ library that implements several well-known containers - dev files This package forms part of the Boost C++ Libraries collection. . - Boost.Container library implements several well-known containers, including STL - containers. The aim of the library is to offers advanced features not present - in standard containers or to offer the latest standard draft features for - compilers that don't comply with the latest C++ standard. + Boost.Container library implements several well-known containers, + including STL containers. The aim of the library is to offers + advanced features not present in standard containers or to offer the + latest standard draft features for compilers that don't comply with + the latest C++ standard. . In short, what does Boost.Container offer? . - * Move semantics are implemented, including move emulation for pre-C++11 - compilers. - * New advanced features (e.g. placement insertion, recursive containers) are - present. + * Move semantics are implemented, including move emulation + for pre-C++11 compilers. + * New advanced features (e.g. placement insertion, + recursive containers) are present. * Containers support stateful allocators and are compatible with Boost.Interprocess (they can be safely placed in shared memory). * The library offers new useful containers: - - flat_map, flat_set, flat_multimap and flat_multiset: drop-in replacements - for standard associative containers but more memory friendly and with - faster searches. - - stable_vector: a std::list and std::vector hybrid container: vector-like - random-access iterators and list-like iterator stability in insertions and - erasures. - - slist: the classic pre-standard singly linked list implementation offering - constant-time size(). Note that C++11 forward_list has no size(). + * flat_map, flat_set, flat_multimap and flat_multiset: drop-in + replacements for standard associative containers but more + memory friendly and with faster searches. + * stable_vector: a std::list and std::vector hybrid container: + vector-like random-access iterators and list-like iterator + stability in insertions and erasures. + * slist: the classic pre-standard singly linked list implementation + offering constant-time size(). Note that C++11 forward_list has no size(). +Conflicts: libboost-container1.65-dev, libboost-container1.67-dev, libboost-container1.70-dev, libboost-container1.71-dev, libboost-container1.74-dev, libboost-container1.80-dev Package: libboost-context1.81.0 -Architecture: i386 amd64 armhf arm64 +Homepage: http://www.boost.org/libs/context/ +Architecture: i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/context/ Description: provides a sort of cooperative multitasking on a single thread This package forms part of the Boost C++ Libraries collection. . - Boost.Context is a foundational library that provides a sort of cooperative - multitasking on a single thread. By providing an abstraction of the current - execution state in the current thread, including the stack (with local - variables) and stack pointer, all registers and CPU flags, and the instruction - pointer, a fcontext_t instance represents a specific point in the application's - execution path. This is useful for building higher-level abstractions, like - coroutines, cooperative threads (userland threads) or an equivalent to C# - keyword yield in C++. + Boost.Context is a foundational library that provides a sort of + cooperative multitasking on a single thread. By providing an + abstraction of the current execution state in the current thread, + including the stack (with local variables) and stack pointer, all + registers and CPU flags, and the instruction pointer, a fcontext_t + instance represents a specific point in the application's execution + path. This is useful for building higher-level abstractions, like + coroutines, cooperative threads (userland threads) or an equivalent + to C# keyword yield in C++. Package: libboost-context1.81-dev -Architecture: i386 amd64 armhf arm64 +Homepage: http://www.boost.org/libs/context/ +Architecture: i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-thread1.81-dev (= ${binary:Version}), - libboost-context1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-context1.53-dev, libboost-context1.54-dev, - libboost-context1.55-dev, libboost-context1.57-dev, libboost-context1.58-dev, - libboost-context1.60-dev, libboost-context1.61-dev, libboost-context1.62-dev, - libboost-context1.63-dev, libboost-context1.65-dev, libboost-context1.67-dev, - libboost-context1.70-dev, libboost-context1.71-dev, libboost-context1.74-dev, - libboost-context1.80-dev -Homepage: https://www.boost.org/libs/context/ + libboost-context1.81.0 (= ${binary:Version}) Description: provides a sort of cooperative multitasking on a single thread This package forms part of the Boost C++ Libraries collection. . - Boost.Context is a foundational library that provides a sort of cooperative - multitasking on a single thread. By providing an abstraction of the current - execution state in the current thread, including the stack (with local - variables) and stack pointer, all registers and CPU flags, and the instruction - pointer, a fcontext_t instance represents a specific point in the application's - execution path. This is useful for building higher-level abstractions, like - coroutines, cooperative threads (userland threads) or an equivalent to C# - keyword yield in C++. + Boost.Context is a foundational library that provides a sort of + cooperative multitasking on a single thread. By providing an + abstraction of the current execution state in the current thread, + including the stack (with local variables) and stack pointer, all + registers and CPU flags, and the instruction pointer, a fcontext_t + instance represents a specific point in the application's execution + path. This is useful for building higher-level abstractions, like + coroutines, cooperative threads (userland threads) or an equivalent + to C# keyword yield in C++. +Conflicts: libboost-context1.53-dev, libboost-context1.54-dev, libboost-context1.55-dev, libboost-context1.57-dev, libboost-context1.58-dev, libboost-context1.60-dev, libboost-context1.61-dev, libboost-context1.62-dev, libboost-context1.63-dev, libboost-context1.65-dev, libboost-context1.67-dev, libboost-context1.70-dev, libboost-context1.71-dev, libboost-context1.74-dev, libboost-context1.80-dev Package: libboost-contract1.81.0 +Homepage: http://boost.org/libs/contract/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://boost.org/libs/contract/ Description: Contract library for C++ This package forms part of the Boost C++ Libraries collection. . - All contract programming features are supported: Subcontracting, class - invariants, postconditions (with old and return values), preconditions, - customizable actions on assertion failure (e.g., terminate or throw), optional - compilation and checking of assertions, etc. + All contract programming features are supported: Subcontracting, + class invariants, postconditions (with old and return values), + preconditions, customizable actions on assertion failure (e.g., + terminate or throw), optional compilation and checking of assertions, + etc. Package: libboost-contract1.81-dev +Homepage: http://boost.org/libs/contract/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-contract1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-contract1.67-dev, libboost-contract1.70-dev, - libboost-contract1.71-dev, libboost-contract1.74-dev, libboost-contract1.80-dev -Homepage: https://boost.org/libs/contract/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-contract1.81.0 (= ${binary:Version}) Description: Contract library for C++ - dev files This package forms part of the Boost C++ Libraries collection. . - All contract programming features are supported: Subcontracting, class - invariants, postconditions (with old and return values), preconditions, - customizable actions on assertion failure (e.g., terminate or throw), optional - compilation and checking of assertions, etc. + All contract programming features are supported: Subcontracting, + class invariants, postconditions (with old and return values), + preconditions, customizable actions on assertion failure (e.g., + terminate or throw), optional compilation and checking of assertions, + etc. +Conflicts: libboost-contract1.67-dev, libboost-contract1.70-dev, libboost-contract1.71-dev, libboost-contract1.74-dev, libboost-contract1.80-dev Package: libboost-coroutine1.81.0 -Architecture: i386 amd64 armhf arm64 +Homepage: http://www.boost.org/libs/coroutine/ +Architecture: i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/coroutine/ Description: provides a sort of cooperative multitasking on a single thread This package forms part of the Boost C++ Libraries collection. . - Boost.Coroutine provides templates for generalized subroutines which allow - multiple entry points for suspending and resuming execution at certain - locations. It preserves the local state of execution and allows re-entering - subroutines more than once (useful if state must be kept across function - calls). + Boost.Coroutine provides templates for generalized subroutines which + allow multiple entry points for suspending and resuming execution at + certain locations. It preserves the local state of execution and + allows re-entering subroutines more than once (useful if state must + be kept across function calls). . - Coroutines can be viewed as a language-level construct providing a special kind - of control flow. + Coroutines can be viewed as a language-level construct providing a + special kind of control flow. . In contrast to threads, which are pre-emptive, coroutine switches are - cooperative (programmer controls when a switch will happen). The kernel is not - involved in the coroutine switches. + cooperative (programmer controls when a switch will happen). The + kernel is not involved in the coroutine switches. . The implementation uses Boost.Context for context switching. Package: libboost-coroutine1.81-dev -Architecture: i386 amd64 armhf arm64 +Homepage: http://www.boost.org/libs/coroutine/ +Architecture: i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-context1.81-dev (= ${binary:Version}), - libboost-coroutine1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-coroutine1.54-dev, libboost-coroutine1.55-dev, - libboost-coroutine1.57-dev, libboost-coroutine1.58-dev, - libboost-coroutine1.60-dev, libboost-coroutine1.61-dev, - libboost-coroutine1.62-dev, libboost-coroutine1.63-dev, - libboost-coroutine1.65-dev, libboost-coroutine1.67-dev, - libboost-coroutine1.70-dev, libboost-coroutine1.71-dev, - libboost-coroutine1.74-dev, libboost-coroutine1.80-dev -Homepage: https://www.boost.org/libs/coroutine/ + libboost-coroutine1.81.0 (= ${binary:Version}) Description: provides a sort of cooperative multitasking on a single thread This package forms part of the Boost C++ Libraries collection. . - Boost.Coroutine provides templates for generalized subroutines which allow - multiple entry points for suspending and resuming execution at certain - locations. It preserves the local state of execution and allows re-entering - subroutines more than once (useful if state must be kept across function - calls). + Boost.Coroutine provides templates for generalized subroutines which + allow multiple entry points for suspending and resuming execution at + certain locations. It preserves the local state of execution and + allows re-entering subroutines more than once (useful if state must + be kept across function calls). . - Coroutines can be viewed as a language-level construct providing a special kind - of control flow. + Coroutines can be viewed as a language-level construct providing a + special kind of control flow. . In contrast to threads, which are pre-emptive, coroutine switches are - cooperative (programmer controls when a switch will happen). The kernel is not - involved in the coroutine switches. + cooperative (programmer controls when a switch will happen). The + kernel is not involved in the coroutine switches. . The implementation uses Boost.Context for context switching. +Conflicts: libboost-coroutine1.54-dev, libboost-coroutine1.55-dev, libboost-coroutine1.57-dev, libboost-coroutine1.58-dev, libboost-coroutine1.60-dev, libboost-coroutine1.61-dev, libboost-coroutine1.62-dev, libboost-coroutine1.63-dev, libboost-coroutine1.65-dev, libboost-coroutine1.67-dev, libboost-coroutine1.70-dev, libboost-coroutine1.71-dev, libboost-coroutine1.74-dev, libboost-coroutine1.80-dev Package: libboost-date-time1.81.0 +Homepage: http://www.boost.org/libs/date_time/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/date_time/ Description: set of date-time libraries based on generic programming concepts This package forms part of the Boost C++ Libraries collection. . - These libraries are intended to make programming with dates and times almost as - simple and natural as programming with strings and integers. + These libraries are intended to make programming with dates and times + almost as simple and natural as programming with strings and integers. Package: libboost-date-time1.81-dev +Homepage: http://www.boost.org/libs/date_time/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-date-time1.81.0 (= ${binary:Version}), - libboost-serialization1.81-dev (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-date-time1.42-dev, libboost-date-time1.46-dev, - libboost-date-time1.48-dev, libboost-date-time1.49-dev, - libboost-date-time1.50-dev, libboost-date-time1.52-dev, - libboost-date-time1.53-dev, libboost-date-time1.54-dev, - libboost-date-time1.55-dev, libboost-date-time1.57-dev, - libboost-date-time1.58-dev, libboost-date-time1.60-dev, - libboost-date-time1.61-dev, libboost-date-time1.62-dev, - libboost-date-time1.63-dev, libboost-date-time1.65-dev, - libboost-date-time1.67-dev, libboost-date-time1.70-dev, - libboost-date-time1.71-dev, libboost-date-time1.74-dev, - libboost-date-time1.80-dev -Homepage: https://www.boost.org/libs/date_time/ + libboost-serialization1.81-dev (= ${binary:Version}) +Conflicts: libboost-date-time1.42-dev, libboost-date-time1.46-dev, libboost-date-time1.48-dev, libboost-date-time1.49-dev, libboost-date-time1.50-dev, libboost-date-time1.52-dev, libboost-date-time1.53-dev, libboost-date-time1.54-dev, libboost-date-time1.55-dev, libboost-date-time1.57-dev, libboost-date-time1.58-dev, libboost-date-time1.60-dev, libboost-date-time1.61-dev, libboost-date-time1.62-dev, libboost-date-time1.63-dev, libboost-date-time1.65-dev, libboost-date-time1.67-dev, libboost-date-time1.70-dev, libboost-date-time1.71-dev, libboost-date-time1.74-dev, libboost-date-time1.80-dev Description: set of date-time libraries based on generic programming concepts This package forms part of the Boost C++ Libraries collection. . - These libraries are intended to make programming with dates and times almost as - simple and natural as programming with strings and integers. + These libraries are intended to make programming with dates and times + almost as simple and natural as programming with strings and integers. Package: libboost-exception1.81-dev +Homepage: http://www.boost.org/libs/exception/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-exception1.50-dev, libboost-exception1.52-dev, - libboost-exception1.53-dev, libboost-exception1.54-dev, - libboost-exception1.55-dev, libboost-exception1.57-dev, - libboost-exception1.58-dev, libboost-exception1.60-dev, - libboost-exception1.61-dev, libboost-exception1.62-dev, - libboost-exception1.63-dev, libboost-exception1.65-dev, - libboost-exception1.67-dev, libboost-exception1.70-dev, - libboost-exception1.71-dev, libboost-exception1.74-dev, - libboost-exception1.80-dev -Homepage: https://www.boost.org/libs/exception/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}) Description: library to help write exceptions and handlers This package forms part of the Boost C++ Libraries collection. . - The purpose of Boost Exception is to ease the design of exception class - hierarchies and to help write exception handling and error reporting code. + The purpose of Boost Exception is to ease the design of exception + class hierarchies and to help write exception handling and error + reporting code. +Conflicts: libboost-exception1.50-dev, libboost-exception1.52-dev, libboost-exception1.53-dev, libboost-exception1.54-dev, libboost-exception1.55-dev, libboost-exception1.57-dev, libboost-exception1.58-dev, libboost-exception1.60-dev, libboost-exception1.61-dev, libboost-exception1.62-dev, libboost-exception1.63-dev, libboost-exception1.65-dev, libboost-exception1.67-dev, libboost-exception1.70-dev, libboost-exception1.71-dev, libboost-exception1.74-dev, libboost-exception1.80-dev Package: libboost-fiber1.81.0 -Architecture: i386 amd64 armhf arm64 +Homepage: http://www.boost.org/libs/fiber/ +Architecture: i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/fiber/ Description: cooperatively-scheduled micro-/userland-threads This package forms part of the Boost C++ Libraries collection. . - Boost.Fiber provides a framework for micro-/userland-threads (fibers) scheduled - cooperatively. The API contains classes and functions to manage and synchronize - fibers similarly to standard thread support library. + Boost.Fiber provides a framework for micro-/userland-threads (fibers) + scheduled cooperatively. The API contains classes and functions to + manage and synchronize fibers similarly to standard thread support + library. . Each fiber has its own stack. . - A fiber can save the current execution state, including all registers and CPU - flags, the instruction pointer, and the stack pointer and later restore this - state. The idea is to have multiple execution paths running on a single thread - using cooperative scheduling (versus threads, which are preemptively - scheduled). The running fiber decides explicitly when it should yield to allow - another fiber to run (context switching). Boost.Fiber internally uses - execution_context from Boost.Context; the classes in this library manage, - schedule and, when needed, synchronize those execution contexts. A context - switch between threads usually costs thousands of CPU cycles on x86, compared - to a fiber switch with less than a hundred cycles. A fiber runs on a single - thread at any point in time. + A fiber can save the current execution state, including all registers + and CPU flags, the instruction pointer, and the stack pointer and + later restore this state. The idea is to have multiple execution + paths running on a single thread using cooperative scheduling (versus + threads, which are preemptively scheduled). The running fiber decides + explicitly when it should yield to allow another fiber to run + (context switching). Boost.Fiber internally uses execution_context + from Boost.Context; the classes in this library manage, schedule and, + when needed, synchronize those execution contexts. A context switch + between threads usually costs thousands of CPU cycles on x86, + compared to a fiber switch with less than a hundred cycles. A fiber + runs on a single thread at any point in time. Package: libboost-fiber1.81-dev -Architecture: i386 amd64 armhf arm64 +Homepage: http://www.boost.org/libs/fiber/ +Architecture: i386 hurd-i386 kfreebsd-i386 amd64 kfreebsd-amd64 armel armhf arm64 mips mipsel mips64el powerpc ppc64el riscv64 s390x Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-context1.81-dev (= ${binary:Version}), libboost-filesystem1.81-dev (= ${binary:Version}), - libboost-fiber1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-fiber1.62-dev, libboost-fiber1.63-dev, - libboost-fiber1.65-dev, libboost-fiber1.67-dev, libboost-fiber1.70-dev, - libboost-fiber1.71-dev, libboost-fiber1.74-dev, libboost-fiber1.80-dev -Homepage: https://www.boost.org/libs/fiber/ + libboost-fiber1.81.0 (= ${binary:Version}) Description: cooperatively-scheduled micro-/userland-threads This package forms part of the Boost C++ Libraries collection. . - Boost.Fiber provides a framework for micro-/userland-threads (fibers) scheduled - cooperatively. The API contains classes and functions to manage and synchronize - fibers similarly to standard thread support library. + Boost.Fiber provides a framework for micro-/userland-threads (fibers) + scheduled cooperatively. The API contains classes and functions to + manage and synchronize fibers similarly to standard thread support + library. . Each fiber has its own stack. . - A fiber can save the current execution state, including all registers and CPU - flags, the instruction pointer, and the stack pointer and later restore this - state. The idea is to have multiple execution paths running on a single thread - using cooperative scheduling (versus threads, which are preemptively - scheduled). The running fiber decides explicitly when it should yield to allow - another fiber to run (context switching). Boost.Fiber internally uses - execution_context from Boost.Context; the classes in this library manage, - schedule and, when needed, synchronize those execution contexts. A context - switch between threads usually costs thousands of CPU cycles on x86, compared - to a fiber switch with less than a hundred cycles. A fiber runs on a single - thread at any point in time. + A fiber can save the current execution state, including all registers + and CPU flags, the instruction pointer, and the stack pointer and + later restore this state. The idea is to have multiple execution + paths running on a single thread using cooperative scheduling (versus + threads, which are preemptively scheduled). The running fiber decides + explicitly when it should yield to allow another fiber to run + (context switching). Boost.Fiber internally uses execution_context + from Boost.Context; the classes in this library manage, schedule and, + when needed, synchronize those execution contexts. A context switch + between threads usually costs thousands of CPU cycles on x86, + compared to a fiber switch with less than a hundred cycles. A fiber + runs on a single thread at any point in time. +Conflicts: libboost-fiber1.62-dev, libboost-fiber1.63-dev, libboost-fiber1.65-dev, libboost-fiber1.67-dev, libboost-fiber1.70-dev, libboost-fiber1.71-dev, libboost-fiber1.74-dev, libboost-fiber1.80-dev Package: libboost-filesystem1.81.0 +Homepage: http://boost.org/libs/filesystem/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://boost.org/libs/filesystem/ -Description: C++ filesystem operations (portable paths, folder iteration, etc.) +Description: filesystem operations (portable paths, iteration over directories, etc) in C++ This package forms part of the Boost C++ Libraries collection. . The Boost Filesystem Library provides portable facilities to query and - manipulate paths, files, and directories. The goal is to facilitate portable - script-like operations from within C++ programs. + manipulate paths, files, and directories. The goal is to + facilitate portable script-like operations from within C++ programs. Package: libboost-filesystem1.81-dev +Homepage: http://boost.org/libs/filesystem/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-atomic1.81-dev (= ${binary:Version}), libboost-filesystem1.81.0 (= ${binary:Version}), - libboost-system1.81-dev (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-filesystem1.42-dev, libboost-filesystem1.46-dev, - libboost-filesystem1.48-dev, libboost-filesystem1.49-dev, - libboost-filesystem1.50-dev, libboost-filesystem1.52-dev, - libboost-filesystem1.53-dev, libboost-filesystem1.54-dev, - libboost-filesystem1.55-dev, libboost-filesystem1.57-dev, - libboost-filesystem1.58-dev, libboost-filesystem1.60-dev, - libboost-filesystem1.61-dev, libboost-filesystem1.62-dev, - libboost-filesystem1.63-dev, libboost-filesystem1.65-dev, - libboost-filesystem1.67-dev, libboost-filesystem1.70-dev, - libboost-filesystem1.71-dev, libboost-filesystem1.74-dev, - libboost-filesystem1.80-dev -Homepage: https://boost.org/libs/filesystem/ -Description: C++ filesystem operations (portable paths, folder iteration, etc.) + libboost-system1.81-dev (= ${binary:Version}) +Conflicts: libboost-filesystem1.42-dev, libboost-filesystem1.46-dev, libboost-filesystem1.48-dev, libboost-filesystem1.49-dev, libboost-filesystem1.50-dev, libboost-filesystem1.52-dev, libboost-filesystem1.53-dev, libboost-filesystem1.54-dev, libboost-filesystem1.55-dev, libboost-filesystem1.57-dev, libboost-filesystem1.58-dev, libboost-filesystem1.60-dev, libboost-filesystem1.61-dev, libboost-filesystem1.62-dev, libboost-filesystem1.63-dev, libboost-filesystem1.65-dev, libboost-filesystem1.67-dev, libboost-filesystem1.70-dev, libboost-filesystem1.71-dev, libboost-filesystem1.74-dev, libboost-filesystem1.80-dev +Description: filesystem operations (portable paths, iteration over directories, etc) in C++ This package forms part of the Boost C++ Libraries collection. . The Boost Filesystem Library provides portable facilities to query and - manipulate paths, files, and directories. The goal is to facilitate portable - script-like operations from within C++ programs. + manipulate paths, files, and directories. The goal is to + facilitate portable script-like operations from within C++ programs. Package: libboost-graph1.81.0 +Homepage: http://www.boost.org/libs/graph/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} Suggests: graphviz -Homepage: https://www.boost.org/libs/graph/ Description: generic graph components and algorithms in C++ This package forms part of the Boost C++ Libraries collection. . - Graphs are mathematical abstractions that are useful for solving many types of - problems in computer science. Consequently, these abstractions must also be - represented in computer programs. A standardized generic interface for - traversing graphs is of utmost importance to encourage reuse of graph - algorithms and data structures. + Graphs are mathematical abstractions that are useful for solving + many types of problems in computer science. Consequently, these + abstractions must also be represented in computer programs. A + standardized generic interface for traversing graphs is of utmost + importance to encourage reuse of graph algorithms and data structures. Package: libboost-graph1.81-dev +Homepage: http://www.boost.org/libs/graph/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-graph1.81.0 (= ${binary:Version}), libboost-regex1.81-dev (= ${binary:Version}), libboost-serialization1.81-dev (= ${binary:Version}), - libboost-test1.81-dev (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-graph1.42-dev, libboost-graph1.46-dev, - libboost-graph1.48-dev, libboost-graph1.49-dev, libboost-graph1.50-dev, - libboost-graph1.52-dev, libboost-graph1.53-dev, libboost-graph1.54-dev, - libboost-graph1.55-dev, libboost-graph1.57-dev, libboost-graph1.58-dev, - libboost-graph1.60-dev, libboost-graph1.61-dev, libboost-graph1.62-dev, - libboost-graph1.63-dev, libboost-graph1.65-dev, libboost-graph1.67-dev, - libboost-graph1.70-dev, libboost-graph1.71-dev, libboost-graph1.74-dev, - libboost-graph1.80-dev -Homepage: https://www.boost.org/libs/graph/ + libboost-test1.81-dev (= ${binary:Version}) +Conflicts: libboost-graph1.42-dev, libboost-graph1.46-dev, libboost-graph1.48-dev, libboost-graph1.49-dev, libboost-graph1.50-dev, libboost-graph1.52-dev, libboost-graph1.53-dev, libboost-graph1.54-dev, libboost-graph1.55-dev, libboost-graph1.57-dev, libboost-graph1.58-dev, libboost-graph1.60-dev, libboost-graph1.61-dev, libboost-graph1.62-dev, libboost-graph1.63-dev, libboost-graph1.65-dev, libboost-graph1.67-dev, libboost-graph1.70-dev, libboost-graph1.71-dev, libboost-graph1.74-dev, libboost-graph1.80-dev Description: generic graph components and algorithms in C++ This package forms part of the Boost C++ Libraries collection. . - Graphs are mathematical abstractions that are useful for solving many types of - problems in computer science. Consequently, these abstractions must also be - represented in computer programs. A standardized generic interface for - traversing graphs is of utmost importance to encourage reuse of graph - algorithms and data structures. + Graphs are mathematical abstractions that are useful for solving + many types of problems in computer science. Consequently, these + abstractions must also be represented in computer programs. A + standardized generic interface for traversing graphs is of utmost + importance to encourage reuse of graph algorithms and data structures. Package: libboost-graph-parallel1.81.0 +Homepage: http://www.boost.org/libs/graph_parallel/ Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} Suggests: graphviz -Homepage: https://www.boost.org/libs/graph_parallel/ Description: generic graph components and algorithms in C++ This package forms part of the Boost C++ Libraries collection. . The Parallel Boost Graph Library is an extension to the Boost Graph Library - (BGL) for parallel and distributed computing. It offers distributed graphs and - graph algorithms to exploit coarse-grained parallelism along with parallel - algorithms that exploit fine-grained parallelism, while retaining the same - interfaces as the (sequential) BGL. Code written using the sequential BGL - should be easy to parallelize with the parallel BGL. + (BGL) for parallel and distributed computing. It offers distributed graphs + and graph algorithms to exploit coarse-grained parallelism along with + parallel algorithms that exploit fine-grained parallelism, while retaining + the same interfaces as the (sequential) BGL. Code written using the sequential + BGL should be easy to parallelize with the parallel BGL. Package: libboost-graph-parallel1.81-dev +Homepage: http://www.boost.org/libs/graph_parallel/ Architecture: any Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-graph-parallel1.81.0 (= ${binary:Version}), libboost-serialization1.81-dev (= ${binary:Version}), - libboost-test1.81-dev (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-graph-parallel1.42-dev, libboost-graph-parallel1.46-dev, - libboost-graph-parallel1.48-dev, libboost-graph-parallel1.49-dev, - libboost-graph-parallel1.50-dev, libboost-graph-parallel1.52-dev, - libboost-graph-parallel1.53-dev, libboost-graph-parallel1.54-dev, - libboost-graph-parallel1.55-dev, libboost-graph-parallel1.57-dev, - libboost-graph-parallel1.58-dev, libboost-graph-parallel1.60-dev, - libboost-graph-parallel1.61-dev, libboost-graph-parallel1.62-dev, - libboost-graph-parallel1.63-dev, libboost-graph-parallel1.65-dev, - libboost-graph-parallel1.67-dev, libboost-graph-parallel1.70-dev, - libboost-graph-parallel1.71-dev, libboost-graph-parallel1.74-dev, - libboost-graph-parallel1.80-dev -Homepage: https://www.boost.org/libs/graph_parallel/ + libboost-test1.81-dev (= ${binary:Version}) +Conflicts: libboost-graph-parallel1.42-dev, libboost-graph-parallel1.46-dev, libboost-graph-parallel1.48-dev, libboost-graph-parallel1.49-dev, libboost-graph-parallel1.50-dev, libboost-graph-parallel1.52-dev, libboost-graph-parallel1.53-dev, libboost-graph-parallel1.54-dev, libboost-graph-parallel1.55-dev, libboost-graph-parallel1.57-dev, libboost-graph-parallel1.58-dev, libboost-graph-parallel1.60-dev, libboost-graph-parallel1.61-dev, libboost-graph-parallel1.62-dev, libboost-graph-parallel1.63-dev, libboost-graph-parallel1.65-dev, libboost-graph-parallel1.67-dev, libboost-graph-parallel1.70-dev, libboost-graph-parallel1.71-dev, libboost-graph-parallel1.74-dev, libboost-graph-parallel1.80-dev Description: generic graph components and algorithms in C++ This package forms part of the Boost C++ Libraries collection. . @@ -723,229 +712,213 @@ BGL should be easy to parallelize with the parallel BGL. Package: libboost-iostreams1.81.0 +Homepage: http://www.boost.org/libs/iostreams/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/iostreams/ Description: Boost.Iostreams Library This package forms part of the Boost C++ Libraries collection. . - Boost.Iostreams are a collection of concepts and a set of templates which turn - models of these concepts into C++ standard library streams and stream buffers. + Boost.Iostreams are a collection of concepts and a set of templates + which turn models of these concepts into C++ standard library streams + and stream buffers. Package: libboost-iostreams1.81-dev +Homepage: http://www.boost.org/libs/iostreams/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-regex1.81-dev (= ${binary:Version}), - libboost-iostreams1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-iostreams1.42-dev, libboost-iostreams1.46-dev, - libboost-iostreams1.48-dev, libboost-iostreams1.49-dev, - libboost-iostreams1.50-dev, libboost-iostreams1.52-dev, - libboost-iostreams1.53-dev, libboost-iostreams1.54-dev, - libboost-iostreams1.55-dev, libboost-iostreams1.57-dev, - libboost-iostreams1.58-dev, libboost-iostreams1.60-dev, - libboost-iostreams1.61-dev, libboost-iostreams1.62-dev, - libboost-iostreams1.63-dev, libboost-iostreams1.65-dev, - libboost-iostreams1.67-dev, libboost-iostreams1.70-dev, - libboost-iostreams1.71-dev, libboost-iostreams1.74-dev, - libboost-iostreams1.80-dev -Homepage: https://www.boost.org/libs/iostreams/ + libboost-iostreams1.81.0 (= ${binary:Version}) +Conflicts: libboost-iostreams1.42-dev, libboost-iostreams1.46-dev, libboost-iostreams1.48-dev, libboost-iostreams1.49-dev, libboost-iostreams1.50-dev, libboost-iostreams1.52-dev, libboost-iostreams1.53-dev, libboost-iostreams1.54-dev, libboost-iostreams1.55-dev, libboost-iostreams1.57-dev, libboost-iostreams1.58-dev, libboost-iostreams1.60-dev, libboost-iostreams1.61-dev, libboost-iostreams1.62-dev, libboost-iostreams1.63-dev, libboost-iostreams1.65-dev, libboost-iostreams1.67-dev, libboost-iostreams1.70-dev, libboost-iostreams1.71-dev, libboost-iostreams1.74-dev, libboost-iostreams1.80-dev Description: Boost.Iostreams Library development files This package forms part of the Boost C++ Libraries collection. . - Boost.Iostreams are a collection of concepts and a set of templates which turn - models of these concepts into C++ standard library streams and stream buffers. + Boost.Iostreams are a collection of concepts and a set of templates + which turn models of these concepts into C++ standard library streams + and stream buffers. Package: libboost-locale1.81.0 +Homepage: http://www.boost.org/libs/locale/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/locale/ Description: C++ facilities for localization This package forms part of the Boost C++ Libraries collection. . - Boost.Locale gives powerful tools for development of cross platform localized - software - the software that talks to user in its language. + Boost.Locale gives powerful tools for development of cross platform + localized software - the software that talks to user in its language. . * Correct case conversion, case folding and normalization. - * Collation (sorting), including support for 4 Unicode collation levels. - * Date, time, timezone and calendar manipulations, formatting and parsing, - including transparent support for calendars other than Gregorian. - * Boundary analysis for characters, words, sentences and line-breaks. + * Collation (sorting), including support for 4 Unicode collation + levels. + * Date, time, timezone and calendar manipulations, formatting + and parsing, including transparent support for calendars other than + Gregorian. + * Boundary analysis for characters, words, sentences and + line-breaks. * Number formatting, spelling and parsing. * Monetary formatting and parsing. - * Powerful message formatting (string translation) including support for - plural forms, using GNU catalogs. + * Powerful message formatting (string translation) including + support for plural forms, using GNU catalogs. * Character set conversion. * Transparent support for 8-bit character sets like Latin1 * Support for char and wchar_t * Experimental support for C++0x char16_t and char32_t strings and streams. Package: libboost-locale1.81-dev +Homepage: http://www.boost.org/libs/math/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-thread1.81-dev (= ${binary:Version}), - libboost-locale1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-locale1.48-dev, libboost-locale1.49-dev, - libboost-locale1.50-dev, libboost-locale1.52-dev, libboost-locale1.53-dev, - libboost-locale1.54-dev, libboost-locale1.55-dev, libboost-locale1.57-dev, - libboost-locale1.58-dev, libboost-locale1.60-dev, libboost-locale1.61-dev, - libboost-locale1.62-dev, libboost-locale1.63-dev, libboost-locale1.65-dev, - libboost-locale1.67-dev, libboost-locale1.70-dev, libboost-locale1.71-dev, - libboost-locale1.74-dev, libboost-locale1.80-dev -Homepage: https://www.boost.org/libs/math/ + libboost-locale1.81.0 (= ${binary:Version}) +Conflicts: libboost-locale1.48-dev, libboost-locale1.49-dev, libboost-locale1.50-dev, libboost-locale1.52-dev, libboost-locale1.53-dev, libboost-locale1.54-dev, libboost-locale1.55-dev, libboost-locale1.57-dev, libboost-locale1.58-dev, libboost-locale1.60-dev, libboost-locale1.61-dev, libboost-locale1.62-dev, libboost-locale1.63-dev, libboost-locale1.65-dev, libboost-locale1.67-dev, libboost-locale1.70-dev, libboost-locale1.71-dev, libboost-locale1.74-dev, libboost-locale1.80-dev Description: C++ facilities for localization This package forms part of the Boost C++ Libraries collection. . - Boost.Locale gives powerful tools for development of cross platform localized - software - the software that talks to user in its language. + Boost.Locale gives powerful tools for development of cross platform + localized software - the software that talks to user in its language. . * Correct case conversion, case folding and normalization. - * Collation (sorting), including support for 4 Unicode collation levels. - * Date, time, timezone and calendar manipulations, formatting and parsing, - including transparent support for calendars other than Gregorian. - * Boundary analysis for characters, words, sentences and line-breaks. + * Collation (sorting), including support for 4 Unicode collation + levels. + * Date, time, timezone and calendar manipulations, formatting + and parsing, including transparent support for calendars other than + Gregorian. + * Boundary analysis for characters, words, sentences and + line-breaks. * Number formatting, spelling and parsing. * Monetary formatting and parsing. - * Powerful message formatting (string translation) including support for - plural forms, using GNU catalogs. + * Powerful message formatting (string translation) including + support for plural forms, using GNU catalogs. * Character set conversion. * Transparent support for 8-bit character sets like Latin1 * Support for char and wchar_t * Experimental support for C++0x char16_t and char32_t strings and streams. Package: libboost-log1.81.0 +Homepage: http://www.boost.org/libs/log/ Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/log/ +Depends: ${misc:Depends}, ${shlibs:Depends} Description: C++ logging library This package forms part of the Boost C++ Libraries collection. . - This library aims to make logging significantly easier for the application - developer. It provides a wide range of out-of-the-box tools along with public - interfaces for extending the library. The main goals of the library are: - . - * Simplicity. A small example code snippet should be enough to get the feel of - the library and be ready to use its basic features. - * Extensibility. A user should be able to extend functionality of the library - for collecting and storing information into logs. - * Performance. The library should have as little performance impact on the - user's application as possible. + This library aims to make logging significantly easier for the + application developer. It provides a wide range of out-of-the-box + tools along with public interfaces for extending the library. The + main goals of the library are: + . + * Simplicity. A small example code snippet should be enough to get + the feel of the library and be ready to use its basic features. + * Extensibility. A user should be able to extend functionality of the + library for collecting and storing information into logs. + * Performance. The library should have as little performance impact on + the user's application as possible. Package: libboost-log1.81-dev +Homepage: http://www.boost.org/libs/log/ Architecture: any Section: libdevel -Depends: libboost-log1.81.0 (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost-log1.81.0 (= ${binary:Version}), libboost1.81-dev (= ${binary:Version}), libboost-atomic1.81-dev (= ${binary:Version}), libboost-date-time1.81-dev (= ${binary:Version}), libboost-filesystem1.81-dev (= ${binary:Version}), libboost-system1.81-dev (= ${binary:Version}), libboost-regex1.81-dev (= ${binary:Version}), - libboost-thread1.81-dev (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-log1.54-dev, libboost-log1.55-dev, libboost-log1.57-dev, - libboost-log1.58-dev, libboost-log1.60-dev, libboost-log1.61-dev, - libboost-log1.62-dev, libboost-log1.63-dev, libboost-log1.65-dev, - libboost-log1.67-dev, libboost-log1.70-dev, libboost-log1.71-dev, - libboost-log1.74-dev, libboost-log1.80-dev -Homepage: https://www.boost.org/libs/log/ + libboost-thread1.81-dev (= ${binary:Version}) Description: C++ logging library This package forms part of the Boost C++ Libraries collection. . - This library aims to make logging significantly easier for the application - developer. It provides a wide range of out-of-the-box tools along with public - interfaces for extending the library. The main goals of the library are: - . - * Simplicity. A small example code snippet should be enough to get the feel of - the library and be ready to use its basic features. - * Extensibility. A user should be able to extend functionality of the library - for collecting and storing information into logs. - * Performance. The library should have as little performance impact on the - user's application as possible. + This library aims to make logging significantly easier for the + application developer. It provides a wide range of out-of-the-box + tools along with public interfaces for extending the library. The + main goals of the library are: + . + * Simplicity. A small example code snippet should be enough to get + the feel of the library and be ready to use its basic features. + * Extensibility. A user should be able to extend functionality of the + library for collecting and storing information into logs. + * Performance. The library should have as little performance impact on + the user's application as possible. +Conflicts: libboost-log1.54-dev, libboost-log1.55-dev, libboost-log1.57-dev, libboost-log1.58-dev, libboost-log1.60-dev, libboost-log1.61-dev, libboost-log1.62-dev, libboost-log1.63-dev, libboost-log1.65-dev, libboost-log1.67-dev, libboost-log1.70-dev, libboost-log1.71-dev, libboost-log1.74-dev, libboost-log1.80-dev Package: libboost-math1.81.0 +Homepage: http://www.boost.org/libs/math/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/math/ Description: Boost.Math Library This package forms part of the Boost C++ Libraries collection. . This library is divided into three interconnected parts: * Statistical Distributions: Provides a reasonably comprehensive set of - statistical distributions, upon which higher level statistical tests can be - built. + statistical distributions, upon which higher level statistical tests + can be built. * Mathematical Special Functions: Provides a small number of high quality special functions, initially these were concentrated on functions used in - statistical applications along with those in the Technical Report on C++ - Library Extensions. + statistical applications along with those in the Technical Report on + C++ Library Extensions. * Implementation Toolkit: Provides many of the tools required to implement mathematical special functions. Package: libboost-math1.81-dev +Homepage: http://www.boost.org/libs/math/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-math1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-math1.42-dev, libboost-math1.46-dev, libboost-math1.48-dev, - libboost-math1.49-dev, libboost-math1.50-dev, libboost-math1.52-dev, - libboost-math1.53-dev, libboost-math1.54-dev, libboost-math1.55-dev, - libboost-math1.57-dev, libboost-math1.58-dev, libboost-math1.60-dev, - libboost-math1.61-dev, libboost-math1.62-dev, libboost-math1.63-dev, - libboost-math1.65-dev, libboost-math1.67-dev, libboost-math1.70-dev, - libboost-math1.71-dev, libboost-math1.74-dev, libboost-math1.80-dev -Homepage: https://www.boost.org/libs/math/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-math1.81.0 (= ${binary:Version}) +Conflicts: libboost-math1.42-dev, libboost-math1.46-dev, libboost-math1.48-dev, libboost-math1.49-dev, libboost-math1.50-dev, libboost-math1.52-dev, libboost-math1.53-dev, libboost-math1.54-dev, libboost-math1.55-dev, libboost-math1.57-dev, libboost-math1.58-dev, libboost-math1.60-dev, libboost-math1.61-dev, libboost-math1.62-dev, libboost-math1.63-dev, libboost-math1.65-dev, libboost-math1.67-dev, libboost-math1.70-dev, libboost-math1.71-dev, libboost-math1.74-dev, libboost-math1.80-dev Description: Boost.Math Library development files This package forms part of the Boost C++ Libraries collection. . This library is divided into three interconnected parts: * Statistical Distributions: Provides a reasonably comprehensive set of - statistical distributions, upon which higher level statistical tests can be - built. + statistical distributions, upon which higher level statistical tests + can be built. * Mathematical Special Functions: Provides a small number of high quality special functions, initially these were concentrated on functions used in - statistical applications along with those in the Technical Report on C++ - Library Extensions. + statistical applications along with those in the Technical Report on + C++ Library Extensions. * Implementation Toolkit: Provides many of the tools required to implement mathematical special functions. Package: libboost-mpi1.81.0 +Homepage: http://www.boost.org/doc/html/mpi.html Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/doc/html/mpi.html Description: C++ interface to the Message Passing Interface (MPI) This package forms part of the Boost C++ Libraries collection. . - The Boost.MPI library provides a C++ interface to MPI that supports modern C++ - development styles, including complete support for user-defined data types and - C++ Standard Library types, arbitrary function objects for collective - algorithms, and the use of modern C++ library techniques to maintain maximal - efficiency. + The Boost.MPI library provides a C++ interface to MPI that + supports modern C++ development styles, including complete support for + user-defined data types and C++ Standard Library types, arbitrary function + objects for collective algorithms, and the use of modern C++ library + techniques to maintain maximal efficiency. Package: libboost-mpi1.81-dev +Homepage: http://www.boost.org/doc/html/mpi.html Architecture: any Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-serialization1.81-dev (= ${binary:Version}), - libboost-mpi1.81.0 (= ${binary:Version}), mpi-default-dev, ${misc:Depends} + libboost-mpi1.81.0 (= ${binary:Version}), + mpi-default-dev Suggests: libboost-graph1.81-dev -Conflicts: libboost-mpi1.42-dev, libboost-mpi1.46-dev, libboost-mpi1.48-dev, - libboost-mpi1.49-dev, libboost-mpi1.50-dev, libboost-mpi1.52-dev, - libboost-mpi1.53-dev, libboost-mpi1.54-dev, libboost-mpi1.55-dev, - libboost-mpi1.57-dev, libboost-mpi1.58-dev, libboost-mpi1.60-dev, - libboost-mpi1.61-dev, libboost-mpi1.62-dev, libboost-mpi1.63-dev, - libboost-mpi1.65-dev, libboost-mpi1.67-dev, libboost-mpi1.70-dev, - libboost-mpi1.71-dev, libboost-mpi1.74-dev, libboost-mpi1.80-dev -Homepage: https://www.boost.org/doc/html/mpi.html +Conflicts: libboost-mpi1.42-dev, libboost-mpi1.46-dev, libboost-mpi1.48-dev, libboost-mpi1.49-dev, libboost-mpi1.50-dev, libboost-mpi1.52-dev, libboost-mpi1.53-dev, libboost-mpi1.54-dev, libboost-mpi1.55-dev, libboost-mpi1.57-dev, libboost-mpi1.58-dev, libboost-mpi1.60-dev, libboost-mpi1.61-dev, libboost-mpi1.62-dev, libboost-mpi1.63-dev, libboost-mpi1.65-dev, libboost-mpi1.67-dev, libboost-mpi1.70-dev, libboost-mpi1.71-dev, libboost-mpi1.74-dev, libboost-mpi1.80-dev Description: C++ interface to the Message Passing Interface (MPI) This package forms part of the Boost C++ Libraries collection. . @@ -956,561 +929,495 @@ techniques to maintain maximal efficiency. Package: libboost-mpi-python1.81.0 +Homepage: http://www.boost.org/doc/html/mpi/python.html Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends}, ${python3:Depends}, mpi-default-bin Pre-Depends: ${misc:Pre-Depends} -Depends: mpi-default-bin, ${python3:Depends}, ${shlibs:Depends}, ${misc:Depends} Suggests: python3 -Conflicts: libboost-mpi-python1.40.0, libboost-mpi-python1.41.0, - libboost-mpi-python1.42.0, libboost-mpi-python1.46.0, - libboost-mpi-python1.46.1, libboost-mpi-python1.48.0, - libboost-mpi-python1.49.0, libboost-mpi-python1.50.0, - libboost-mpi-python1.52.0, libboost-mpi-python1.53.0, - libboost-mpi-python1.54.0, libboost-mpi-python1.55.0, - libboost-mpi-python1.57.0, libboost-mpi-python1.58.0, - libboost-mpi-python1.60.0, libboost-mpi-python1.61.0, - libboost-mpi-python1.62.0, libboost-mpi-python1.63.0, - libboost-mpi-python1.65.1, libboost-mpi-python1.67.0, - libboost-mpi-python1.70.0, libboost-mpi-python1.71.0, - libboost-mpi-python1.74.0, libboost-mpi-python1.80.0 +Conflicts: libboost-mpi-python1.40.0, + libboost-mpi-python1.41.0, + libboost-mpi-python1.42.0, + libboost-mpi-python1.46.0, libboost-mpi-python1.46.1, libboost-mpi-python1.48.0, libboost-mpi-python1.49.0, libboost-mpi-python1.50.0, libboost-mpi-python1.52.0, libboost-mpi-python1.53.0, libboost-mpi-python1.54.0, libboost-mpi-python1.55.0, libboost-mpi-python1.57.0, libboost-mpi-python1.58.0, libboost-mpi-python1.60.0, libboost-mpi-python1.61.0, libboost-mpi-python1.62.0, libboost-mpi-python1.63.0, libboost-mpi-python1.65.1, libboost-mpi-python1.67.0, libboost-mpi-python1.70.0, libboost-mpi-python1.71.0, libboost-mpi-python1.74.0, libboost-mpi-python1.80.0 Provides: ${boost:Provides} -Homepage: https://www.boost.org/doc/html/mpi/python.html -Description: C++ interface to Message Passing Interface (MPI), Python Bindings +Description: C++ interface to the Message Passing Interface (MPI), Python Bindings This package forms part of the Boost C++ Libraries collection. . - The Boost.MPI library provides a C++ interface to MPI that supports modern C++ - development styles, including complete support for user-defined data types and - C++ Standard Library types, arbitrary function objects for collective - algorithms, and the use of modern C++ library techniques to maintain maximal - efficiency. + The Boost.MPI library provides a C++ interface to MPI that + supports modern C++ development styles, including complete support for + user-defined data types and C++ Standard Library types, arbitrary function + objects for collective algorithms, and the use of modern C++ library + techniques to maintain maximal efficiency. . This package provides Python Bindings to the C++ interface. . One of the python interpreter packages is required to use the bindings. Package: libboost-mpi-python1.81-dev +Homepage: http://www.boost.org/doc/html/mpi/python.html Architecture: any Section: libdevel -Depends: libboost-mpi1.81-dev (= ${binary:Version}), - libboost-mpi-python1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-mpi-python1.42-dev, libboost-mpi-python1.46-dev, - libboost-mpi-python1.48-dev, libboost-mpi-python1.49-dev, - libboost-mpi-python1.50-dev, libboost-mpi-python1.52-dev, - libboost-mpi-python1.53-dev, libboost-mpi-python1.54-dev, - libboost-mpi-python1.55-dev, libboost-mpi-python1.57-dev, - libboost-mpi-python1.58-dev, libboost-mpi-python1.60-dev, - libboost-mpi-python1.61-dev, libboost-mpi-python1.62-dev, - libboost-mpi-python1.63-dev, libboost-mpi-python1.65-dev, - libboost-mpi-python1.67-dev, libboost-mpi-python1.70-dev, - libboost-mpi-python1.71-dev, libboost-mpi-python1.74-dev, - libboost-mpi-python1.80-dev -Homepage: https://www.boost.org/doc/html/mpi/python.html -Description: C++ interface to Message Passing Interface (MPI), Python Bindings - This package forms part of the Boost C++ Libraries collection. - . - The Boost.MPI library provides a C++ interface to MPI that supports modern C++ - development styles, including complete support for user-defined data types and - C++ Standard Library types, arbitrary function objects for collective - algorithms, and the use of modern C++ library techniques to maintain maximal - efficiency. +Depends: ${misc:Depends}, + libboost-mpi1.81-dev (= ${binary:Version}), + libboost-mpi-python1.81.0 (= ${binary:Version}) +Conflicts: libboost-mpi-python1.42-dev, libboost-mpi-python1.46-dev, libboost-mpi-python1.48-dev, libboost-mpi-python1.49-dev, libboost-mpi-python1.50-dev, libboost-mpi-python1.52-dev, libboost-mpi-python1.53-dev, libboost-mpi-python1.54-dev, libboost-mpi-python1.55-dev, libboost-mpi-python1.57-dev, libboost-mpi-python1.58-dev, libboost-mpi-python1.60-dev, libboost-mpi-python1.61-dev, libboost-mpi-python1.62-dev, libboost-mpi-python1.63-dev, libboost-mpi-python1.65-dev, libboost-mpi-python1.67-dev, libboost-mpi-python1.70-dev, libboost-mpi-python1.71-dev, libboost-mpi-python1.74-dev, libboost-mpi-python1.80-dev +Description: C++ interface to the Message Passing Interface (MPI), Python Bindings + This package forms part of the Boost C++ Libraries collection. + . + The Boost.MPI library provides a C++ interface to MPI that + supports modern C++ development styles, including complete support for + user-defined data types and C++ Standard Library types, arbitrary function + objects for collective algorithms, and the use of modern C++ library + techniques to maintain maximal efficiency. . This package provides Python Bindings to the C++ interface. Package: libboost-nowide1.81.0 +Homepage: http://www.boost.org/libs/python/ Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} Suggests: python3 Provides: ${boost:Provides} -Homepage: https://www.boost.org/libs/python/ Description: Standard library functions with UTF-8 API on Windows This package forms part of the Boost C++ Libraries collection. . - The library provides an implementation of standard C and C++ library functions - which are UTF-8 aware on Windows without requiring to use the Wipe API. + The library provides an implementation of standard C and C++ + library functions which are UTF-8 aware on Windows without + requiring to use the Wipe API. . - On POSIX platforms, where UTF-8 is already commonly used, the calls in Nowide - just alias to their standard counterparts. + On POSIX platforms, where UTF-8 is already commonly used, the + calls in Nowide just alias to their standard counterparts. Package: libboost-nowide1.81-dev +Homepage: http://www.boost.org/libs/python/ Architecture: any Section: libdevel -Depends: libboost-nowide1.81.0 (= ${binary:Version}), ${misc:Depends} +Depends: ${misc:Depends}, + libboost-nowide1.81.0 (= ${binary:Version}) Suggests: libboost1.81-doc -Conflicts: libboost-numpy1.65-dev, libboost-numpy1.67-dev, - libboost-numpy1.70-dev, libboost-numpy1.71-dev, libboost-nowide1.74-dev, - libboost-nowide1.80-dev -Homepage: https://www.boost.org/libs/python/ -Description: Std. lib. functions with UTF-8 API on Windows development files +Description: Standard library functions with UTF-8 API on Windows development files This package forms part of the Boost C++ Libraries collection. . - The library provides an implementation of standard C and C++ library functions - which are UTF-8 aware on Windows without requiring to use the Wipe API. + The library provides an implementation of standard C and C++ + library functions which are UTF-8 aware on Windows without + requiring to use the Wipe API. . - On POSIX platforms, where UTF-8 is already commonly used, the calls in Nowide - just alias to their standard counterparts. + On POSIX platforms, where UTF-8 is already commonly used, the + calls in Nowide just alias to their standard counterparts. +Conflicts: libboost-numpy1.65-dev, libboost-numpy1.67-dev, libboost-numpy1.70-dev, libboost-numpy1.71-dev, libboost-nowide1.74-dev, libboost-nowide1.80-dev Package: libboost-numpy1.81.0 +Homepage: http://www.boost.org/libs/python/ Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} Suggests: python3 Provides: ${boost:Provides} -Homepage: https://www.boost.org/libs/python/ Description: Boost.Python NumPy extensions This package forms part of the Boost C++ Libraries collection. . - The Boost Python library enables exporting a C++ library to Python. The NumPy - extensions lets the C++ code interact with NumPy types. + The Boost Python library enables exporting a C++ library to Python. + The NumPy extensions lets the C++ code interact with NumPy types. . - One of the python interpreter packages is required to use the created - extensions. + One of the python interpreter packages is required to use the + created extensions. Package: libboost-numpy1.81-dev +Homepage: http://www.boost.org/libs/python/ Architecture: any Section: libdevel -Depends: libboost-numpy1.81.0 (= ${binary:Version}), ${misc:Depends} +Depends: ${misc:Depends}, + libboost-numpy1.81.0 (= ${binary:Version}) Suggests: libboost1.81-doc -Conflicts: libboost-numpy1.65-dev, libboost-numpy1.67-dev, - libboost-numpy1.70-dev, libboost-numpy1.71-dev, libboost-numpy1.74-dev, - libboost-numpy1.80-dev -Homepage: https://www.boost.org/libs/python/ Description: Boost.Python NumPy extensions development files This package forms part of the Boost C++ Libraries collection. . - The Boost Python library enables exporting a C++ library to Python. The NumPy - extensions lets the C++ code interact with NumPy types. + The Boost Python library enables exporting a C++ library to Python. + The NumPy extensions lets the C++ code interact with NumPy types. . - This package allows development of a Python interface for all current versions - of Python in Debian. Code using this library will need also one of the Python - development packages. + This package allows development of a Python interface for all current + versions of Python in Debian. Code using this library will need also + one of the Python development packages. +Conflicts: libboost-numpy1.65-dev, libboost-numpy1.67-dev, libboost-numpy1.70-dev, libboost-numpy1.71-dev, libboost-numpy1.74-dev, libboost-numpy1.80-dev Package: libboost-program-options1.81.0 +Homepage: http://www.boost.org/libs/program_options/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/program_options/ Description: program options library for C++ This package forms part of the Boost C++ Libraries collection. . - Library to let program developers obtain program options, that is (name, value) - pairs from the user, via conventional methods such as command line and config - file. + Library to let program developers obtain program options, that is + (name, value) pairs from the user, via conventional methods such as + command line and config file. Package: libboost-program-options1.81-dev +Homepage: http://www.boost.org/libs/program_options/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-program-options1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-program-options1.42-dev, libboost-program-options1.46-dev, - libboost-program-options1.48-dev, libboost-program-options1.49-dev, - libboost-program-options1.50-dev, libboost-program-options1.52-dev, - libboost-program-options1.53-dev, libboost-program-options1.54-dev, - libboost-program-options1.55-dev, libboost-program-options1.57-dev, - libboost-program-options1.58-dev, libboost-program-options1.60-dev, - libboost-program-options1.61-dev, libboost-program-options1.62-dev, - libboost-program-options1.63-dev, libboost-program-options1.65-dev, - libboost-program-options1.67-dev, libboost-program-options1.70-dev, - libboost-program-options1.71-dev, libboost-program-options1.74-dev, - libboost-program-options1.80-dev -Homepage: https://www.boost.org/libs/program_options/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-program-options1.81.0 (= ${binary:Version}) +Conflicts: libboost-program-options1.42-dev, libboost-program-options1.46-dev, libboost-program-options1.48-dev, libboost-program-options1.49-dev, libboost-program-options1.50-dev, libboost-program-options1.52-dev, libboost-program-options1.53-dev, libboost-program-options1.54-dev, libboost-program-options1.55-dev, libboost-program-options1.57-dev, libboost-program-options1.58-dev, libboost-program-options1.60-dev, libboost-program-options1.61-dev, libboost-program-options1.62-dev, libboost-program-options1.63-dev, libboost-program-options1.65-dev, libboost-program-options1.67-dev, libboost-program-options1.70-dev, libboost-program-options1.71-dev, libboost-program-options1.74-dev, libboost-program-options1.80-dev Description: program options library for C++ This package forms part of the Boost C++ Libraries collection. . - Library to let program developers obtain program options, that is (name, value) - pairs from the user, via conventional methods such as command line and config - file. + Library to let program developers obtain program options, that is + (name, value) pairs from the user, via conventional methods such as + command line and config file. Package: libboost-python1.81.0 +Homepage: http://www.boost.org/libs/python/ Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends}, ${python3:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${python3:Depends}, ${shlibs:Depends}, ${misc:Depends} Suggests: python3 Breaks: ${python3:Breaks} Provides: ${boost:Provides} -Homepage: https://www.boost.org/libs/python/ Description: Boost.Python Library This package forms part of the Boost C++ Libraries collection. . - The Boost Python Library is used to quickly and easily export a C++ library to - Python such that the Python interface is very similar to the C++ interface. It - is designed to be minimally intrusive on your C++ design. In most cases, you - should not have to alter your C++ classes in any way in order to use them with - Boost.Python. The system should simply "reflect" your C++ classes and functions - into Python. The major features of Boost.Python include support for: - Subclassing extension types in Python, Overriding virtual functions in Python, - Member function Overloading, Automatic wrapping of numeric operators among - others. + The Boost Python Library is used to quickly and easily export a C++ + library to Python such that the Python interface is very similar to + the C++ interface. It is designed to be minimally intrusive on your + C++ design. In most cases, you should not have to alter your C++ + classes in any way in order to use them with Boost.Python. The + system should simply "reflect" your C++ classes and functions into + Python. The major features of Boost.Python include support for: + Subclassing extension types in Python, Overriding virtual functions + in Python, Member function Overloading, Automatic wrapping of + numeric operators among others. . - One of the python interpreter packages is required to use the created - extensions. + One of the python interpreter packages is required to use the + created extensions. Package: libboost-python1.81-dev +Homepage: http://www.boost.org/libs/python/ Architecture: any Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-python1.81.0 (= ${binary:Version}), - libpython3-dev, python3-dev:any, ${python3:Depends}, ${misc:Depends} -Suggests: gccxml, libboost1.81-doc -Conflicts: libboost-python1.42-dev, libboost-python1.46-dev, - libboost-python1.48-dev, libboost-python1.49-dev, libboost-python1.50-dev, - libboost-python1.52-dev, libboost-python1.53-dev, libboost-python1.54-dev, - libboost-python1.55-dev, libboost-python1.57-dev, libboost-python1.58-dev, - libboost-python1.60-dev, libboost-python1.61-dev, libboost-python1.62-dev, - libboost-python1.63-dev, libboost-python1.65-dev, libboost-python1.67-dev, - libboost-python1.70-dev, libboost-python1.71-dev, libboost-python1.74-dev, - libboost-python1.80-dev -Homepage: https://www.boost.org/libs/python/ + libpython3-dev, python3-dev:any, ${python3:Depends}, +Suggests: libboost1.81-doc, gccxml +Conflicts: libboost-python1.42-dev, libboost-python1.46-dev, libboost-python1.48-dev, libboost-python1.49-dev, libboost-python1.50-dev, libboost-python1.52-dev, libboost-python1.53-dev, libboost-python1.54-dev, libboost-python1.55-dev, libboost-python1.57-dev, libboost-python1.58-dev, libboost-python1.60-dev, libboost-python1.61-dev, libboost-python1.62-dev, libboost-python1.63-dev, libboost-python1.65-dev, libboost-python1.67-dev, libboost-python1.70-dev, libboost-python1.71-dev, libboost-python1.74-dev, libboost-python1.80-dev Description: Boost.Python Library development files This package forms part of the Boost C++ Libraries collection. . - The Boost Python Library is used to quickly and easily export a C++ library to - Python such that the Python interface is very similar to the C++ interface. It - is designed to be minimally intrusive on your C++ design. In most cases, you - should not have to alter your C++ classes in any way in order to use them with - Boost.Python. The system should simply "reflect" your C++ classes and functions - into Python. The major features of Boost.Python include support for: - Subclassing extension types in Python, Overriding virtual functions in Python, - Member function Overloading, Automatic wrapping of numeric operators among - others. - . - This package allows development of a Python interface for all current versions - of Python in Debian. Code using this library will need also one of the Python - development packages. + The Boost Python Library is used to quickly and easily export a C++ + library to Python such that the Python interface is very similar to + the C++ interface. It is designed to be minimally intrusive on your + C++ design. In most cases, you should not have to alter your C++ + classes in any way in order to use them with Boost.Python. The + system should simply "reflect" your C++ classes and functions into + Python. The major features of Boost.Python include support for: + Subclassing extension types in Python, Overriding virtual functions + in Python, Member function Overloading, Automatic wrapping of + numeric operators among others. + . + This package allows development of a Python interface for all current + versions of Python in Debian. Code using this library will need also + one of the Python development packages. Package: libboost-random1.81.0 +Homepage: http://www.boost.org/libs/random/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/random/ Description: Boost Random Number Library This package forms part of the Boost C++ Libraries collection. . - The Boost Random Number Library (Boost.Random for short) provides a variety of - generators and distributions to produce random numbers having useful - properties, such as uniform distribution. + The Boost Random Number Library (Boost.Random for short) provides a + variety of generators and distributions to produce random numbers + having useful properties, such as uniform distribution. Package: libboost-random1.81-dev +Homepage: http://www.boost.org/libs/random/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-system1.81-dev (= ${binary:Version}), - libboost-random1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-random1.42-dev, libboost-random1.46-dev, - libboost-random1.48-dev, libboost-random1.49-dev, libboost-random1.50-dev, - libboost-random1.52-dev, libboost-random1.53-dev, libboost-random1.54-dev, - libboost-random1.55-dev, libboost-random1.57-dev, libboost-random1.58-dev, - libboost-random1.60-dev, libboost-random1.61-dev, libboost-random1.62-dev, - libboost-random1.63-dev, libboost-random1.65-dev, libboost-random1.67-dev, - libboost-random1.70-dev, libboost-random1.71-dev, libboost-random1.74-dev, - libboost-random1.80-dev -Homepage: https://www.boost.org/libs/random/ + libboost-random1.81.0 (= ${binary:Version}) +Conflicts: libboost-random1.42-dev, libboost-random1.46-dev, libboost-random1.48-dev, libboost-random1.49-dev, libboost-random1.50-dev, libboost-random1.52-dev, libboost-random1.53-dev, libboost-random1.54-dev, libboost-random1.55-dev, libboost-random1.57-dev, libboost-random1.58-dev, libboost-random1.60-dev, libboost-random1.61-dev, libboost-random1.62-dev, libboost-random1.63-dev, libboost-random1.65-dev, libboost-random1.67-dev, libboost-random1.70-dev, libboost-random1.71-dev, libboost-random1.74-dev, libboost-random1.80-dev Description: Boost Random Number Library This package forms part of the Boost C++ Libraries collection. . - The Boost Random Number Library (Boost.Random for short) provides a variety of - generators and distributions to produce random numbers having useful - properties, such as uniform distribution. + The Boost Random Number Library (Boost.Random for short) provides a + variety of generators and distributions to produce random numbers + having useful properties, such as uniform distribution. Package: libboost-regex1.81.0 +Homepage: http://www.boost.org/libs/regex/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} Provides: ${boost:Provides} -Homepage: https://www.boost.org/libs/regex/ Description: regular expression library for C++ This package forms part of the Boost C++ Libraries collection. . - Regular expressions are a form of pattern-matching that are often used in text - processing; many users will be familiar with the Unix utilities grep, sed and - awk, and the programming language perl, each of which make extensive use of - regular expressions. Traditionally C++ users have been limited to the POSIX C - APIs for manipulating regular expressions, and while regex does provide these - APIs, they do not represent the best way to use the library. For example regex - can cope with wide character strings, or search and replace operations (in a - manner analogous to either sed or perl), something that traditional C libraries - can not do. + Regular expressions are a form of pattern-matching that are often + used in text processing; many users will be familiar with the Unix + utilities grep, sed and awk, and the programming language perl, each + of which make extensive use of regular expressions. Traditionally C++ + users have been limited to the POSIX C APIs for manipulating regular + expressions, and while regex does provide these APIs, they do not + represent the best way to use the library. For example regex can cope + with wide character strings, or search and replace operations (in a + manner analogous to either sed or perl), something that traditional C + libraries can not do. Package: libboost-regex1.81-dev +Homepage: http://www.boost.org/libs/regex/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-regex1.81.0 (= ${binary:Version}), libicu-dev, ${misc:Depends} -Conflicts: libboost-regex1.42-dev, libboost-regex1.46-dev, - libboost-regex1.48-dev, libboost-regex1.49-dev, libboost-regex1.50-dev, - libboost-regex1.52-dev, libboost-regex1.53-dev, libboost-regex1.54-dev, - libboost-regex1.55-dev, libboost-regex1.57-dev, libboost-regex1.58-dev, - libboost-regex1.60-dev, libboost-regex1.61-dev, libboost-regex1.62-dev, - libboost-regex1.63-dev, libboost-regex1.65-dev, libboost-regex1.67-dev, - libboost-regex1.70-dev, libboost-regex1.71-dev, libboost-regex1.74-dev, - libboost-regex1.80-dev -Homepage: https://www.boost.org/libs/regex/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-regex1.81.0 (= ${binary:Version}), + libicu-dev +Conflicts: libboost-regex1.42-dev, libboost-regex1.46-dev, libboost-regex1.48-dev, libboost-regex1.49-dev, libboost-regex1.50-dev, libboost-regex1.52-dev, libboost-regex1.53-dev, libboost-regex1.54-dev, libboost-regex1.55-dev, libboost-regex1.57-dev, libboost-regex1.58-dev, libboost-regex1.60-dev, libboost-regex1.61-dev, libboost-regex1.62-dev, libboost-regex1.63-dev, libboost-regex1.65-dev, libboost-regex1.67-dev, libboost-regex1.70-dev, libboost-regex1.71-dev, libboost-regex1.74-dev, libboost-regex1.80-dev Description: regular expression library for C++ This package forms part of the Boost C++ Libraries collection. . - Regular expressions are a form of pattern-matching that are often used in text - processing; many users will be familiar with the Unix utilities grep, sed and - awk, and the programming language perl, each of which make extensive use of - regular expressions. Traditionally C++ users have been limited to the POSIX C - APIs for manipulating regular expressions, and while regex does provide these - APIs, they do not represent the best way to use the library. For example regex - can cope with wide character strings, or search and replace operations (in a - manner analogous to either sed or perl), something that traditional C libraries - can not do. + Regular expressions are a form of pattern-matching that are often + used in text processing; many users will be familiar with the Unix + utilities grep, sed and awk, and the programming language perl, each + of which make extensive use of regular expressions. Traditionally C++ + users have been limited to the POSIX C APIs for manipulating regular + expressions, and while regex does provide these APIs, they do not + represent the best way to use the library. For example regex can cope + with wide character strings, or search and replace operations (in a + manner analogous to either sed or perl), something that traditional C + libraries can not do. Package: libboost-serialization1.81.0 +Homepage: http://www.boost.org/libs/serialization/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/serialization/ Description: serialization library for C++ - This package forms part of the Boost C++ Libraries collection, containing the - following functionalities: + This package forms part of the Boost C++ Libraries collection, + containing the following functionalities: . * proper restoration of pointers to shared data * serialization of STL containers and other commonly used templates - * data portability - streams of bytes created on one platform should be - readable on any other - * archive interface must be rich enough to permit the creation of an archive - that presents serialized data as XML in a useful manner - . - Here, "serialization" means the reversible deconstruction of an arbitrary set - of C++ data structures to a sequence of bytes. archive: to refer to a specific - rendering of this stream of bytes. + * data portability - streams of bytes created on one platform should + be readable on any other + * archive interface must be rich enough to permit the creation of an + archive that presents serialized data as XML in a useful manner + . + Here, "serialization" means the reversible deconstruction of an + arbitrary set of C++ data structures to a sequence of bytes. + archive: to refer to a specific rendering of this stream of bytes. Package: libboost-serialization1.81-dev +Homepage: http://www.boost.org/libs/serialization/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-serialization1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-serialization1.42-dev, libboost-serialization1.46-dev, - libboost-serialization1.48-dev, libboost-serialization1.49-dev, - libboost-serialization1.50-dev, libboost-serialization1.52-dev, - libboost-serialization1.53-dev, libboost-serialization1.54-dev, - libboost-serialization1.55-dev, libboost-serialization1.57-dev, - libboost-serialization1.58-dev, libboost-serialization1.60-dev, - libboost-serialization1.61-dev, libboost-serialization1.62-dev, - libboost-serialization1.63-dev, libboost-serialization1.65-dev, - libboost-serialization1.67-dev, libboost-serialization1.70-dev, - libboost-serialization1.71-dev, libboost-serialization1.74-dev, - libboost-serialization1.80-dev -Homepage: https://www.boost.org/libs/serialization/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-serialization1.81.0 (= ${binary:Version}) +Conflicts: libboost-serialization1.42-dev, libboost-serialization1.46-dev, libboost-serialization1.48-dev, libboost-serialization1.49-dev, libboost-serialization1.50-dev, libboost-serialization1.52-dev, libboost-serialization1.53-dev, libboost-serialization1.54-dev, libboost-serialization1.55-dev, libboost-serialization1.57-dev, libboost-serialization1.58-dev, libboost-serialization1.60-dev, libboost-serialization1.61-dev, libboost-serialization1.62-dev, libboost-serialization1.63-dev, libboost-serialization1.65-dev, libboost-serialization1.67-dev, libboost-serialization1.70-dev, libboost-serialization1.71-dev, libboost-serialization1.74-dev, libboost-serialization1.80-dev Description: serialization library for C++ - This package forms part of the Boost C++ Libraries collection, containing the - following functionalities: + This package forms part of the Boost C++ Libraries collection, + containing the following functionalities: . * proper restoration of pointers to shared data * serialization of STL containers and other commonly used templates - * data portability - streams of bytes created on one platform should be - readable on any other - * archive interface must be rich enough to permit the creation of an archive - that presents serialized data as XML in a useful manner - . - Here, "serialization" means the reversible deconstruction of an arbitrary set - of C++ data structures to a sequence of bytes. archive: to refer to a specific - rendering of this stream of bytes. + * data portability - streams of bytes created on one platform should + be readable on any other + * archive interface must be rich enough to permit the creation of an + archive that presents serialized data as XML in a useful manner + . + Here, "serialization" means the reversible deconstruction of an + arbitrary set of C++ data structures to a sequence of bytes. + archive: to refer to a specific rendering of this stream of bytes. Package: libboost-stacktrace1.81.0 +Homepage: http://boost.org/libs/stacktrace/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://boost.org/libs/stacktrace/ Description: library to capture and print stack traces This package forms part of the Boost C++ Libraries collection. . - Boost.Stacktrace library is a simple C++03 library that provides information - about call sequence in a human-readable form. + Boost.Stacktrace library is a simple C++03 library that provides + information about call sequence in a human-readable form. Package: libboost-stacktrace1.81-dev +Homepage: http://boost.org/libs/stacktrace/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-stacktrace1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-stacktrace1.65-dev, libboost-stacktrace1.67-dev, - libboost-stacktrace1.70-dev, libboost-stacktrace1.71-dev, - libboost-stacktrace1.74-dev, libboost-stacktrace1.80-dev -Homepage: https://boost.org/libs/stacktrace/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-stacktrace1.81.0 (= ${binary:Version}) Description: library to capture and print stack traces - development files This package forms part of the Boost C++ Libraries collection. . - Boost.Stacktrace library is a simple C++03 library that provides information - about call sequence in a human-readable form. + Boost.Stacktrace library is a simple C++03 library that provides + information about call sequence in a human-readable form. +Conflicts: libboost-stacktrace1.65-dev, libboost-stacktrace1.67-dev, libboost-stacktrace1.70-dev, libboost-stacktrace1.71-dev, libboost-stacktrace1.74-dev, libboost-stacktrace1.80-dev Package: libboost-system1.81.0 +Homepage: http://www.boost.org/libs/system/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/system/ Description: Operating system (e.g. diagnostics support) library This package forms part of the Boost C++ Libraries collection. . - The Boost System library provides simple, light-weight error_code objects that - encapsulate system-specific error code values, yet also provide access to more - abstract and portable error conditions via error_condition objects. Because - error_code objects can represent errors from sources other than the operating - system, including user-defined sources, each error_code and error_condition has - an associated error_category. + The Boost System library provides simple, light-weight error_code + objects that encapsulate system-specific error code values, yet also + provide access to more abstract and portable error conditions via + error_condition objects. Because error_code objects can represent + errors from sources other than the operating system, including + user-defined sources, each error_code and error_condition has an + associated error_category. Package: libboost-system1.81-dev +Homepage: http://www.boost.org/libs/system/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-system1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-system1.42-dev, libboost-system1.46-dev, - libboost-system1.48-dev, libboost-system1.49-dev, libboost-system1.50-dev, - libboost-system1.52-dev, libboost-system1.53-dev, libboost-system1.54-dev, - libboost-system1.55-dev, libboost-system1.57-dev, libboost-system1.58-dev, - libboost-system1.60-dev, libboost-system1.61-dev, libboost-system1.62-dev, - libboost-system1.63-dev, libboost-system1.65-dev, libboost-system1.67-dev, - libboost-system1.70-dev, libboost-system1.71-dev, libboost-system1.74-dev, - libboost-system1.80-dev -Homepage: https://www.boost.org/libs/system/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-system1.81.0 (= ${binary:Version}) +Conflicts: libboost-system1.42-dev, libboost-system1.46-dev, libboost-system1.48-dev, libboost-system1.49-dev, libboost-system1.50-dev, libboost-system1.52-dev, libboost-system1.53-dev, libboost-system1.54-dev, libboost-system1.55-dev, libboost-system1.57-dev, libboost-system1.58-dev, libboost-system1.60-dev, libboost-system1.61-dev, libboost-system1.62-dev, libboost-system1.63-dev, libboost-system1.65-dev, libboost-system1.67-dev, libboost-system1.70-dev, libboost-system1.71-dev, libboost-system1.74-dev, libboost-system1.80-dev Description: Operating system (e.g. diagnostics support) library This package forms part of the Boost C++ Libraries collection. . - The Boost System library provides simple, light-weight error_code objects that - encapsulate system-specific error code values, yet also provide access to more - abstract and portable error conditions via error_condition objects. Because - error_code objects can represent errors from sources other than the operating - system, including user-defined sources, each error_code and error_condition has - an associated error_category. + The Boost System library provides simple, light-weight error_code + objects that encapsulate system-specific error code values, yet also + provide access to more abstract and portable error conditions via + error_condition objects. Because error_code objects can represent + errors from sources other than the operating system, including + user-defined sources, each error_code and error_condition has an + associated error_category. Package: libboost-test1.81.0 +Homepage: http://www.boost.org/libs/test/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/test/ Description: components for writing and executing test suites - This package forms part of the Boost C++ Libraries collection. The library - contains several components. + This package forms part of the Boost C++ Libraries collection. The + library contains several components. . * Basic execution, error detection, and reporting facility. * Facilities to monitor program execution and produce error reports. * Unit test framework to simplify writing test cases. Package: libboost-test1.81-dev +Homepage: http://www.boost.org/libs/test/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), - libboost-test1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-test1.42-dev, libboost-test1.46-dev, libboost-test1.48-dev, - libboost-test1.49-dev, libboost-test1.50-dev, libboost-test1.52-dev, - libboost-test1.53-dev, libboost-test1.54-dev, libboost-test1.55-dev, - libboost-test1.57-dev, libboost-test1.58-dev, libboost-test1.60-dev, - libboost-test1.61-dev, libboost-test1.62-dev, libboost-test1.63-dev, - libboost-test1.65-dev, libboost-test1.67-dev, libboost-test1.70-dev, - libboost-test1.71-dev, libboost-test1.74-dev, libboost-test1.80-dev -Homepage: https://www.boost.org/libs/test/ +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), + libboost-test1.81.0 (= ${binary:Version}) +Conflicts: libboost-test1.42-dev, libboost-test1.46-dev, libboost-test1.48-dev, libboost-test1.49-dev, libboost-test1.50-dev, libboost-test1.52-dev, libboost-test1.53-dev, libboost-test1.54-dev, libboost-test1.55-dev, libboost-test1.57-dev, libboost-test1.58-dev, libboost-test1.60-dev, libboost-test1.61-dev, libboost-test1.62-dev, libboost-test1.63-dev, libboost-test1.65-dev, libboost-test1.67-dev, libboost-test1.70-dev, libboost-test1.71-dev, libboost-test1.74-dev, libboost-test1.80-dev Description: components for writing and executing test suites - This package forms part of the Boost C++ Libraries collection. The library - contains several components. + This package forms part of the Boost C++ Libraries collection. The + library contains several components. . * Basic execution, error detection, and reporting facility. * Facilities to monitor program execution and produce error reports. * Unit test framework to simplify writing test cases. Package: libboost-thread1.81.0 +Homepage: http://www.boost.org/libs/thread/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/thread/ Description: portable C++ multi-threading This package forms part of the Boost C++ Libraries collection. . - Toolkit for writing C++ programs that execute as multiple, asynchronous, - independent, threads-of-execution. Each thread has its own machine state - including program instruction counter and registers. + Toolkit for writing C++ programs that execute as multiple, + asynchronous, independent, threads-of-execution. Each thread has its + own machine state including program instruction counter and + registers. Package: libboost-thread1.81-dev +Homepage: http://www.boost.org/libs/thread/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-atomic1.81-dev (= ${binary:Version}), libboost-chrono1.81-dev (= ${binary:Version}), libboost-date-time1.81-dev (= ${binary:Version}), libboost-system1.81-dev (= ${binary:Version}), - libboost-thread1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-thread1.42-dev, libboost-thread1.46-dev, - libboost-thread1.48-dev, libboost-thread1.49-dev, libboost-thread1.50-dev, - libboost-thread1.52-dev, libboost-thread1.53-dev, libboost-thread1.54-dev, - libboost-thread1.55-dev, libboost-thread1.57-dev, libboost-thread1.58-dev, - libboost-thread1.60-dev, libboost-thread1.61-dev, libboost-thread1.62-dev, - libboost-thread1.63-dev, libboost-thread1.65-dev, libboost-thread1.67-dev, - libboost-thread1.70-dev, libboost-thread1.71-dev, libboost-thread1.74-dev, - libboost-thread1.80-dev -Homepage: https://www.boost.org/libs/thread/ + libboost-thread1.81.0 (= ${binary:Version}) +Conflicts: libboost-thread1.42-dev, libboost-thread1.46-dev, libboost-thread1.48-dev, libboost-thread1.49-dev, libboost-thread1.50-dev, libboost-thread1.52-dev, libboost-thread1.53-dev, libboost-thread1.54-dev, libboost-thread1.55-dev, libboost-thread1.57-dev, libboost-thread1.58-dev, libboost-thread1.60-dev, libboost-thread1.61-dev, libboost-thread1.62-dev, libboost-thread1.63-dev, libboost-thread1.65-dev, libboost-thread1.67-dev, libboost-thread1.70-dev, libboost-thread1.71-dev, libboost-thread1.74-dev, libboost-thread1.80-dev Description: portable C++ multi-threading This package forms part of the Boost C++ Libraries collection. . - Toolkit for writing C++ programs that execute as multiple, asynchronous, - independent, threads-of-execution. Each thread has its own machine state - including program instruction counter and registers. + Toolkit for writing C++ programs that execute as multiple, + asynchronous, independent, threads-of-execution. Each thread has its + own machine state including program instruction counter and + registers. Package: libboost-timer1.81.0 +Homepage: http://www.boost.org/libs/timer/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/timer/ Description: C++ wall clock and CPU process timers This package forms part of the Boost C++ Libraries collection. . - Portable C++ timer classes that answer the question "How long does my C++ code - take to run?" with as little as one #include and one additional line of code. - . - Class cpu_timer measures wall clock time, user CPU process time, and system CPU - process time. Class auto_cpu_timer is a refinement of cpu_timer that - automatically reports the elapsed times when an auto_cpu_timer object is - destroyed. + Portable C++ timer classes that answer the question "How long does my + C++ code take to run?" with as little as one #include and one + additional line of code. + . + Class cpu_timer measures wall clock time, user CPU process time, and + system CPU process time. Class auto_cpu_timer is a refinement of + cpu_timer that automatically reports the elapsed times when an + auto_cpu_timer object is destroyed. Package: libboost-timer1.81-dev +Homepage: http://www.boost.org/libs/timer/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-chrono1.81-dev (= ${binary:Version}), - libboost-timer1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-timer1.42-dev, libboost-timer1.46-dev, - libboost-timer1.48-dev, libboost-timer1.49-dev, libboost-timer1.50-dev, - libboost-timer1.52-dev, libboost-timer1.53-dev, libboost-timer1.54-dev, - libboost-timer1.55-dev, libboost-timer1.57-dev, libboost-timer1.58-dev, - libboost-timer1.60-dev, libboost-timer1.61-dev, libboost-timer1.62-dev, - libboost-timer1.63-dev, libboost-timer1.65-dev, libboost-timer1.67-dev, - libboost-timer1.70-dev, libboost-timer1.71-dev, libboost-timer1.74-dev, - libboost-timer1.80-dev -Homepage: https://www.boost.org/libs/timer/ + libboost-timer1.81.0 (= ${binary:Version}) +Conflicts: libboost-timer1.42-dev, libboost-timer1.46-dev, libboost-timer1.48-dev, libboost-timer1.49-dev, libboost-timer1.50-dev, libboost-timer1.52-dev, libboost-timer1.53-dev, libboost-timer1.54-dev, libboost-timer1.55-dev, libboost-timer1.57-dev, libboost-timer1.58-dev, libboost-timer1.60-dev, libboost-timer1.61-dev, libboost-timer1.62-dev, libboost-timer1.63-dev, libboost-timer1.65-dev, libboost-timer1.67-dev, libboost-timer1.70-dev, libboost-timer1.71-dev, libboost-timer1.74-dev, libboost-timer1.80-dev Description: C++ wall clock and CPU process timers This package forms part of the Boost C++ Libraries collection. . - Portable C++ timer classes that answer the question "How long does my C++ code - take to run?" with as little as one #include and one additional line of code. - . - Class cpu_timer measures wall clock time, user CPU process time, and system CPU - process time. Class auto_cpu_timer is a refinement of cpu_timer that - automatically reports the elapsed times when an auto_cpu_timer object is - destroyed. + Portable C++ timer classes that answer the question "How long does my + C++ code take to run?" with as little as one #include and one + additional line of code. + . + Class cpu_timer measures wall clock time, user CPU process time, and + system CPU process time. Class auto_cpu_timer is a refinement of + cpu_timer that automatically reports the elapsed times when an + auto_cpu_timer object is destroyed. Package: libboost-type-erasure1.81.0 +Homepage: http://www.boost.org/doc/libs/1_60_0/doc/html/boost_typeerasure.html Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/doc/libs/1_81_0/doc/html/boost_typeerasure.html Description: C++ runtime polymorphism based on concepts This package forms part of the Boost C++ Libraries collection. . @@ -1520,19 +1427,15 @@ runtime flexibility of virtual functions. Package: libboost-type-erasure1.81-dev +Homepage: http://www.boost.org/doc/libs/1_60_0/doc/html/boost_typeerasure.html Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-system1.81-dev (= ${binary:Version}), libboost-thread1.81-dev (= ${binary:Version}), - libboost-type-erasure1.81.0 (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-type-erasure1.60-dev, libboost-type-erasure1.61-dev, - libboost-type-erasure1.62-dev, libboost-type-erasure1.63-dev, - libboost-type-erasure1.65-dev, libboost-type-erasure1.67-dev, - libboost-type-erasure1.70-dev, libboost-type-erasure1.71-dev, - libboost-type-erasure1.74-dev, libboost-type-erasure1.80-dev -Homepage: https://www.boost.org/doc/libs/1_81_0/doc/html/boost_typeerasure.html + libboost-type-erasure1.81.0 (= ${binary:Version}) Description: C++ runtime polymorphism based on concepts This package forms part of the Boost C++ Libraries collection. . @@ -1540,89 +1443,88 @@ each of which has its own advantages and disadvantages. The Boost.TypeErasure library combines the superior abstraction capabilities of templates, with the runtime flexibility of virtual functions. +Conflicts: libboost-type-erasure1.60-dev, libboost-type-erasure1.61-dev, libboost-type-erasure1.62-dev, libboost-type-erasure1.63-dev, libboost-type-erasure1.65-dev, libboost-type-erasure1.67-dev, libboost-type-erasure1.70-dev, libboost-type-erasure1.71-dev, libboost-type-erasure1.74-dev, libboost-type-erasure1.80-dev Package: libboost-wave1.81.0 +Homepage: http://www.boost.org/libs/wave/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/libs/wave/ Description: C99/C++ preprocessor library This package forms part of the Boost C++ Libraries collection. . - The Wave C++ preprocessor library is a Standards conformant implementation of - the mandated C99/C++ preprocessor functionality packed behind a simple-to-use - interface, which integrates well with the well known idioms of the Standard - Template Library (STL). + The Wave C++ preprocessor library is a Standards conformant + implementation of the mandated C99/C++ preprocessor functionality + packed behind a simple to use interface, which integrates well with + the well known idioms of the Standard Template Library (STL). Package: libboost-wave1.81-dev +Homepage: http://www.boost.org/libs/wave/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-serialization1.81-dev (= ${binary:Version}), libboost-wave1.81.0 (= ${binary:Version}), - libboost-filesystem1.81-dev (= ${binary:Version}), ${misc:Depends} -Conflicts: libboost-wave1.42-dev, libboost-wave1.46-dev, libboost-wave1.48-dev, - libboost-wave1.49-dev, libboost-wave1.50-dev, libboost-wave1.52-dev, - libboost-wave1.53-dev, libboost-wave1.54-dev, libboost-wave1.55-dev, - libboost-wave1.57-dev, libboost-wave1.58-dev, libboost-wave1.60-dev, - libboolibboost1.6-dev, libboost-wave1.62-dev, libboost-wave1.63-dev, - libboost-wave1.65-dev, libboost-wave1.67-dev, libboost-wave1.70-dev, - libboost-wave1.71-dev, libboost-wave1.74-dev, libboost-wave1.80-dev -Homepage: https://www.boost.org/libs/wave/ + libboost-filesystem1.81-dev (= ${binary:Version}) +Conflicts: libboost-wave1.42-dev, libboost-wave1.46-dev, libboost-wave1.48-dev, libboost-wave1.49-dev, libboost-wave1.50-dev, libboost-wave1.52-dev, libboost-wave1.53-dev, libboost-wave1.54-dev, libboost-wave1.55-dev, libboost-wave1.57-dev, libboost-wave1.58-dev, libboost-wave1.60-dev, libboolibboost1.6-dev, libboost-wave1.62-dev, libboost-wave1.63-dev, libboost-wave1.65-dev, libboost-wave1.67-dev, libboost-wave1.70-dev, libboost-wave1.71-dev, libboost-wave1.74-dev, libboost-wave1.80-dev Description: C99/C++ preprocessor library This package forms part of the Boost C++ Libraries collection. . - The Wave C++ preprocessor library is a Standards conformant implementation of - the mandated C99/C++ preprocessor functionality packed behind a simple-to-use - interface, which integrates well with the well known idioms of the Standard - Template Library (STL). + The Wave C++ preprocessor library is a Standards conformant + implementation of the mandated C99/C++ preprocessor functionality + packed behind a simple to use interface, which integrates well with + the well known idioms of the Standard Template Library (STL). Package: libboost-json1.81.0 +Homepage: https://www.boost.org/doc/libs/release/libs/json/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/doc/libs/release/libs/json/ Description: C++ containers and algorithms that implement JSON - This library focuses on a common and popular use-case: parsing and serializing - to and from a container called value which holds JSON types. - . - Any value which you build can be serialized and then deserialized, guaranteeing - that the result will be equal to the original value. Whatever JSON output you - produce with this library will be readable by most common JSON implementations - in any language. + This library focuses on a common and popular use-case: parsing + and serializing to and from a container called value which holds + JSON types. + . + Any value which you build can be serialized and then deserialized, + guaranteeing that the result will be equal to the original value. + Whatever JSON output you produce with this library will be readable + by most common JSON implementations in any language. Package: libboost-json1.81-dev +Homepage: https://www.boost.org/doc/libs/release/libs/json/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-container1.81-dev (= ${binary:Version}), libboost-json1.81.0 (= ${binary:Version}), - libboost-system1.81-dev (= ${binary:Version}), ${misc:Depends} + libboost-system1.81-dev (= ${binary:Version}) Conflicts: libboost-json1.80-dev -Homepage: https://www.boost.org/doc/libs/release/libs/json/ Description: C++ containers and algorithms that implement JSON - This library focuses on a common and popular use-case: parsing and serializing - to and from a container called value which holds JSON types. - . - Any value which you build can be serialized and then deserialized, guaranteeing - that the result will be equal to the original value. Whatever JSON output you - produce with this library will be readable by most common JSON implementations - in any language. + This library focuses on a common and popular use-case: parsing + and serializing to and from a container called value which holds + JSON types. + . + Any value which you build can be serialized and then deserialized, + guaranteeing that the result will be equal to the original value. + Whatever JSON output you produce with this library will be readable + by most common JSON implementations in any language. Package: libboost-url1.81.0 +Homepage: https://www.boost.org/doc/libs/release/libs/url/ Architecture: any Multi-Arch: same +Depends: ${misc:Depends}, ${shlibs:Depends} Pre-Depends: ${misc:Pre-Depends} -Depends: ${shlibs:Depends}, ${misc:Depends} -Homepage: https://www.boost.org/doc/libs/release/libs/url/ Description: C++ library that implements "URL" - C++ library which provides containers and algorithms which model a "URL," the - Uniform Resource Identifier (URI) specification (henceforth referred to as - rfc3986). + C++ library which provides containers and algorithms which model a "URL," + the Uniform Resource Identifier (URI) specification (henceforth referred to + as rfc3986). . A URL is a compact sequence of characters that identifies an abstract or physical resource. @@ -1632,18 +1534,19 @@ normalization or resolution algorithms. Package: libboost-url1.81-dev +Homepage: https://www.boost.org/doc/libs/release/libs/url/ Architecture: any Multi-Arch: same Section: libdevel -Depends: libboost1.81-dev (= ${binary:Version}), +Depends: ${misc:Depends}, + libboost1.81-dev (= ${binary:Version}), libboost-system1.81-dev (= ${binary:Version}), - libboost-url1.81.0 (= ${binary:Version}), ${misc:Depends} + libboost-url1.81.0 (= ${binary:Version}) Conflicts: libboost-json1.80-dev -Homepage: https://www.boost.org/doc/libs/release/libs/url/ Description: C++ library that implements "URL" - C++ library which provides containers and algorithms which model a "URL," the - Uniform Resource Identifier (URI) specification (henceforth referred to as - rfc3986). + C++ library which provides containers and algorithms which model a "URL," + the Uniform Resource Identifier (URI) specification (henceforth referred to + as rfc3986). . A URL is a compact sequence of characters that identifies an abstract or physical resource. diff -Nru boost1.81-1.81.0/debian/git-build-recipe.manifest boost1.81-1.81.0/debian/git-build-recipe.manifest --- boost1.81-1.81.0/debian/git-build-recipe.manifest 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/debian/git-build-recipe.manifest 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -# git-build-recipe format 0.4 deb-version {debupstream}-6636daily202308040601+git.2ec971c7d -lp:~appimagelauncher-team/boost/+git/boost-packaging git-commit:2ec971c7d66b6db567ed65fe413a3355e58e02f4 diff -Nru boost1.81-1.81.0/debian/patches/0001-Remove-timestamps-and-dates-from-documentation.patch boost1.81-1.81.0/debian/patches/0001-Remove-timestamps-and-dates-from-documentation.patch --- boost1.81-1.81.0/debian/patches/0001-Remove-timestamps-and-dates-from-documentation.patch 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/debian/patches/0001-Remove-timestamps-and-dates-from-documentation.patch 2023-07-12 15:58:04.000000000 +0000 @@ -0,0 +1,89 @@ +From 7c9c189ea32470cd683939c11fabf78f0b2f3f17 Mon Sep 17 00:00:00 2001 +From: Vagrant Cascadian +Date: Sat, 22 Apr 2023 19:53:22 -0700 +Subject: [PATCH] Remove timestamps and dates from documentation. + +https://reproducible-builds.org/docs/timestamps/ +--- + libs/circular_buffer/doc/circular_buffer.qbk | 2 -- + libs/units/doc/units.qbk | 1 - + tools/boostbook/xsl/html-base.xsl | 22 -------------------- + tools/quickbook/doc/block.qbk | 4 ++-- + 4 files changed, 2 insertions(+), 27 deletions(-) + +diff --git a/libs/circular_buffer/doc/circular_buffer.qbk b/libs/circular_buffer/doc/circular_buffer.qbk +index a7177e4c..217c42b6 100644 +--- a/libs/circular_buffer/doc/circular_buffer.qbk ++++ b/libs/circular_buffer/doc/circular_buffer.qbk +@@ -596,8 +596,6 @@ Paul A. Bristow refactored the documentation in 2013 to use the full power of Qu + + [section:version_id Documentation Version Info] + +-Last edit to Quickbook file __FILENAME__ was at __TIME__ on __DATE__. +- + [tip This should appear on the pdf version + (but may be redundant on a html version where the last edit date is on the first (home) page).] + +diff --git a/libs/units/doc/units.qbk b/libs/units/doc/units.qbk +index 0c7345fc..b160ef21 100644 +--- a/libs/units/doc/units.qbk ++++ b/libs/units/doc/units.qbk +@@ -1309,7 +1309,6 @@ the design and implementation of this library. + + __boostroot + +-Last edit to Quickbook file __FILENAME__ was at __TIME__ on __DATE__. + + [tip This should appear on the pdf version (but may be redundant on html).] + [/ Useful on pdf version. See also Last revised timestamp on first page of html version.] +diff --git a/tools/boostbook/xsl/html-base.xsl b/tools/boostbook/xsl/html-base.xsl +index a1031710..cfba8727 100644 +--- a/tools/boostbook/xsl/html-base.xsl ++++ b/tools/boostbook/xsl/html-base.xsl +@@ -234,28 +234,6 @@ set toc,title + + +- +-

+- +- Last revised: +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +-

+-
+ + + +diff --git a/tools/quickbook/doc/block.qbk b/tools/quickbook/doc/block.qbk +index dbfdb8d2..bcf3f406 100644 +--- a/tools/quickbook/doc/block.qbk ++++ b/tools/quickbook/doc/block.qbk +@@ -602,8 +602,8 @@ Quickbook has some predefined macros that you can already use. + + [table Predefined Macros + [[Macro] [Meaning] [Example]] +- [[[^\__DATE__]] [Today's date] [__DATE__]] +- [[[^\__TIME__]] [The current time] [__TIME__]] ++ [[[^\__DATE__]] [Today's date] [2022-04-20]] ++ [[[^\__TIME__]] [The current time] [01:42:48 PM]] + [[[^\__FILENAME__]][Quickbook source filename] [__FILENAME__]] + ] + +-- +2.39.2 + diff -Nru boost1.81-1.81.0/debian/patches/116.patch boost1.81-1.81.0/debian/patches/116.patch --- boost1.81-1.81.0/debian/patches/116.patch 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/debian/patches/116.patch 2023-07-12 15:58:04.000000000 +0000 @@ -0,0 +1,24 @@ +From 50973dc10ea16931245ea61a00b2ce9041acc5ba Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Wed, 4 Jan 2023 17:33:31 +0100 +Subject: [PATCH] Avoid boost::phoenix::placeholders::uarg1..10 ODR violations + +Those variables, defined in an include file, had external linkage, causing ODR +violations. Make them const to implicitly give them internal linkage. +--- + include/boost/phoenix/stl/tuple.hpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libs/phoenix/include/boost/phoenix/stl/tuple.hpp b/libs/phoenix/include/boost/phoenix/stl/tuple.hpp +index a83014ac..7f61a402 100644 +--- a/libs/phoenix/include/boost/phoenix/stl/tuple.hpp ++++ b/libs/phoenix/include/boost/phoenix/stl/tuple.hpp +@@ -110,7 +110,7 @@ namespace boost { namespace phoenix { + namespace placeholders { + #define BOOST_PP_LOCAL_LIMITS (1, BOOST_PHOENIX_ARG_LIMIT) + #define BOOST_PP_LOCAL_MACRO(N) \ +- auto uarg##N = \ ++ auto const uarg##N = \ + boost::phoenix::get_<(N)-1>(boost::phoenix::placeholders::arg1); + #include BOOST_PP_LOCAL_ITERATE() + } diff -Nru boost1.81-1.81.0/debian/patches/15.patch boost1.81-1.81.0/debian/patches/15.patch --- boost1.81-1.81.0/debian/patches/15.patch 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/debian/patches/15.patch 2023-07-12 15:58:04.000000000 +0000 @@ -0,0 +1,25 @@ +From d87190a3b1ea23d6d684b21751e6f65927e6083f Mon Sep 17 00:00:00 2001 +From: Evan Lenz +Date: Tue, 23 Aug 2022 10:37:15 -0700 +Subject: [PATCH] Remove template rule conflict for text nodesa +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1016321 + + +fix https://github.com/boostorg/boostbook/issues/14 +--- + xsl/annotation.xsl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: boost1.80-1.80.0/tools/boostbook/xsl/annotation.xsl +=================================================================== +--- boost1.80-1.80.0.orig/tools/boostbook/xsl/annotation.xsl ++++ boost1.80-1.80.0/tools/boostbook/xsl/annotation.xsl +@@ -426,7 +426,7 @@ + + + +- ++ + + + diff -Nru boost1.81-1.81.0/debian/patches/20_remove_privacy_breach.patch boost1.81-1.81.0/debian/patches/20_remove_privacy_breach.patch --- boost1.81-1.81.0/debian/patches/20_remove_privacy_breach.patch 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/debian/patches/20_remove_privacy_breach.patch 2023-07-12 15:58:04.000000000 +0000 @@ -0,0 +1,99 @@ +Description: Rremove proviacy bridge +Author: Anton Gladky +Last-Update: 2022-12-09 + +Index: boost/tools/quickbook/doc/block.qbk +=================================================================== +--- boost.orig/tools/quickbook/doc/block.qbk ++++ boost/tools/quickbook/doc/block.qbk +@@ -557,14 +557,12 @@ character or the underscore. The replace + marked up). Example: + + ``` +-[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] ++[def sf_logo []] + sf_logo + ``` + + Now everywhere the sf_logo is placed, the picture will be inlined. + +-[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] +-sf_logo + + [tip It's a good idea to use macro identifiers that are distinguishable. + For instance, in this document, macro identifiers have two leading and +Index: boost/tools/quickbook/test/quickbook_manual-1_4.gold +=================================================================== +--- boost.orig/tools/quickbook/test/quickbook_manual-1_4.gold ++++ boost/tools/quickbook/test/quickbook_manual-1_4.gold +@@ -1756,14 +1756,10 @@ escape (no processing/formatting) + character or the underscore. The replacement text can be any phrase (even + marked up). Example: + +-[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] +-sf_logo +- + + Now everywhere the sf_logo is placed, the picture will be inlined. + + +- + + sflogo + +Index: boost/tools/quickbook/test/quickbook_manual-1_4.gold-html +=================================================================== +--- boost.orig/tools/quickbook/test/quickbook_manual-1_4.gold-html ++++ boost/tools/quickbook/test/quickbook_manual-1_4.gold-html +@@ -1934,16 +1934,9 @@ escape (no processing/formatting) + an alphabetic character or the underscore. The replacement text can + be any phrase (even marked up). Example: +

+-
[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]]
+-sf_logo
+-
+

+ Now everywhere the sf_logo is placed, the picture will be inlined. +

+-

+- [] +-

+
+

+ It's a good idea to use macro identifiers that are distinguishable. +@@ -3280,7 +3273,6 @@ boostbook standalone + : + my_doc + : +- <xsl:param>boost.image.src=images/my_project_logo.png + <xsl:param>boost.image.alt="\"My Project\"" + <xsl:param>boost.image.w=100 + <xsl:param>boost.image.h=50 +Index: boost/tools/quickbook/test/quickbook_manual-1_4.quickbook +=================================================================== +--- boost.orig/tools/quickbook/test/quickbook_manual-1_4.quickbook ++++ boost/tools/quickbook/test/quickbook_manual-1_4.quickbook +@@ -1081,14 +1081,9 @@ white space characters except '\]'. A ma + character or the underscore. The replacement text can be any phrase (even + marked up). Example: + +-[pre''' +-[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] +-sf_logo +-'''] + + Now everywhere the sf_logo is placed, the picture will be inlined. + +-[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] + sf_logo + + [tip It's a good idea to use macro identifiers that are distinguishable. +@@ -1878,7 +1873,6 @@ boostbook standalone + : + my_doc + : +- boost.image.src=images/my_project_logo.png + boost.image.alt="\\"My Project\\"" + boost.image.w=100 + boost.image.h=50 diff -Nru boost1.81-1.81.0/debian/patches/30.patch boost1.81-1.81.0/debian/patches/30.patch --- boost1.81-1.81.0/debian/patches/30.patch 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/debian/patches/30.patch 2023-07-20 08:28:38.000000000 +0000 @@ -0,0 +1,32 @@ +From 0039878782516ea3313608f99f0d50e846151bc2 Mon Sep 17 00:00:00 2001 +From: Jonathan Wakely +Date: Mon, 31 Jan 2022 11:37:29 +0000 +Subject: [PATCH] Fix narrowing conversions for ppc + +These constants are too large for `long long` so are unsigned, +and then cannot be narrowed to the signed type. + +Fixes #29 +--- + .../numeric/interval/detail/ppc_rounding_control.hpp | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp b/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp +index 87fe8ee..99f9986 100644 +--- a/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp ++++ b/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp +@@ -28,10 +28,10 @@ typedef union { + double dmode; + } rounding_mode_struct; + +-static const rounding_mode_struct mode_upward = { 0xFFF8000000000002LL }; +-static const rounding_mode_struct mode_downward = { 0xFFF8000000000003LL }; +-static const rounding_mode_struct mode_to_nearest = { 0xFFF8000000000000LL }; +-static const rounding_mode_struct mode_toward_zero = { 0xFFF8000000000001LL }; ++static const rounding_mode_struct mode_upward = { (::boost::long_long_type)0xFFF8000000000002LL }; ++static const rounding_mode_struct mode_downward = { (::boost::long_long_type)0xFFF8000000000003LL }; ++static const rounding_mode_struct mode_to_nearest = { (::boost::long_long_type)0xFFF8000000000000LL }; ++static const rounding_mode_struct mode_toward_zero = { (::boost::long_long_type)0xFFF8000000000001LL }; + + struct ppc_rounding_control + { diff -Nru boost1.81-1.81.0/debian/patches/fix_extension.patch boost1.81-1.81.0/debian/patches/fix_extension.patch --- boost1.81-1.81.0/debian/patches/fix_extension.patch 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/debian/patches/fix_extension.patch 2023-07-12 15:58:04.000000000 +0000 @@ -0,0 +1,41 @@ +Description: fix python extensions +Author: Anton Gladky +Last-Update: 2023-01-14 + +--- boost1.81-1.81.0.orig/tools/build/src/tools/python.jam ++++ boost1.81-1.81.0/tools/build/src/tools/python.jam +@@ -954,8 +954,32 @@ local rule configure ( version ? : cmd-o + toolset.add-requirements + "$(target-requirements:J=,):$(interpreter-cmd)" ; + +- # Register the right suffix for extensions. +- register-extension-suffix $(extension-suffix) : $(target-requirements) ; ++ # ++ # Discover and set extension suffix ++ # ++ debug-message "Checking for extension suffix..." ; ++ local full-cmd = "from __future__ import print_function; import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))" ; ++ local full-cmd = $(interpreter-cmd)" -c \"$(full-cmd)\"" ; ++ debug-message "running command '$(full-cmd)'" ; ++ local result = [ SHELL $(full-cmd) : strip-eol : exit-status ] ; ++ if $(result[2]) = 0 ++ { ++ debug-message "Python extenssion suffix is $(result[1])" ; ++ type.set-generated-target-suffix PYTHON_EXTENSION : $(target-requirements) : <$(result[1])> ; ++ } ++ else ++ { ++ debug-message "Failed to determine python extension suffix" ; ++ debug-message "Falling back to old behaviour" ; ++ if $(target-os) = windows && on in $(condition) ++ { ++ extension-suffix ?= _d ; ++ } ++ extension-suffix ?= "" ; ++ ++ # Register the right suffix for extensions. ++ register-extension-suffix $(extension-suffix) : $(target-requirements) ; ++ } + + # Make sure that the python feature is always considered + # relevant for any targets that depend on python. Without diff -Nru boost1.81-1.81.0/debian/patches/fix-mpi-python37.patch boost1.81-1.81.0/debian/patches/fix-mpi-python37.patch --- boost1.81-1.81.0/debian/patches/fix-mpi-python37.patch 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/debian/patches/fix-mpi-python37.patch 2023-07-12 15:58:04.000000000 +0000 @@ -0,0 +1,13 @@ +Index: boost1.67-1.67.0/libs/mpi/build/__init__.py +=================================================================== +--- boost1.67-1.67.0.orig/libs/mpi/build/__init__.py ++++ boost1.67-1.67.0/libs/mpi/build/__init__.py +@@ -5,6 +5,8 @@ if sys.platform == 'linux2': + sys.setdlopenflags(dl.RTLD_NOW|dl.RTLD_GLOBAL) + import mpi + sys.setdlopenflags(flags) ++if sys.platform == 'linux': ++ from . import mpi + else: + import mpi + diff -Nru boost1.81-1.81.0/debian/patches/series boost1.81-1.81.0/debian/patches/series --- boost1.81-1.81.0/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/debian/patches/series 2023-07-20 08:30:09.000000000 +0000 @@ -0,0 +1,7 @@ +15.patch +20_remove_privacy_breach.patch +116.patch +fix-mpi-python37.patch +fix_extension.patch +0001-Remove-timestamps-and-dates-from-documentation.patch +30.patch diff -Nru boost1.81-1.81.0/debian/rules boost1.81-1.81.0/debian/rules --- boost1.81-1.81.0/debian/rules 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/debian/rules 2023-07-12 15:58:04.000000000 +0000 @@ -1,52 +1,57 @@ #! /usr/bin/make -f -DEB_BUILD_MAINT_OPTIONS ::= hardening=+all - -DPKG_EXPORT_BUILDFLAGS ::= 1 -include /usr/share/dpkg/default.mk +DEB_BUILD_MAINT_OPTIONS = hardening=+all # Boost libraries for which we want separate packages # context is conditionally compiled because it is not supported yet on several architectures # coroutine, and fiber depend on context, so they are also conditionally compiled -boost_libs ::= atomic chrono container contract date-time exception filesystem \ - graph graph-parallel iostreams locale log math mpi mpi-python \ - nowide program-options python random regex serialization \ - stacktrace system test thread timer type-erasure wave json url - -# These are special cases, where /usr/lib name differs from Boost library name -boost_lib_log ::= log log_setup -boost_lib_math ::= math_c99 math_c99f math_tr1 math_tr1f -boost_lib_math_long_double ::= math_c99l math_tr1l -boost_lib_serialization ::= serialization wserialization -boost_lib_stacktrace ::= stacktrace_addr2line stacktrace_backtrace \ - stacktrace_noop stacktrace_basic -boost_lib_test ::= prg_exec_monitor test_exec_monitor \ - unit_test_framework +boost_libs := atomic chrono container contract date-time exception filesystem \ + graph graph-parallel iostreams locale log math mpi \ + mpi-python nowide program-options python random regex \ + serialization stacktrace system test thread timer \ + type-erasure wave json url + +# these are special cases, where /usr/lib name differs from Boost library name +boost_lib_log := log log_setup +boost_lib_math := math_c99 math_c99f math_tr1 math_tr1f +boost_lib_math_long_double := math_c99l math_tr1l +boost_lib_serialization := serialization wserialization +ifeq ($(DEB_BUILD_ARCH), m68k) +# See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=962072 +boost_lib_stacktrace := stacktrace_noop stacktrace_addr2line stacktrace_basic +else +boost_lib_stacktrace := stacktrace_noop stacktrace_addr2line stacktrace_backtrace stacktrace_basic +endif +boost_lib_test := prg_exec_monitor test_exec_monitor unit_test_framework -pyversions ::= $(shell py3versions -rv) -pyverids ::= $(subst .,,$(pyversions)) +pyversions = $(shell py3versions -rv) +pyverids = $(subst .,,$(pyversions)) # These are special cases for suffixes. -boost_suffixes_python ::= $(pyverids) -boost_suffixes_numpy ::= $(pyverids) -boost_suffixes_mpi-python ::= $(pyverids) +boost_suffixes_python := $(pyverids) +boost_suffixes_numpy := $(pyverids) +boost_suffixes_mpi-python := $(pyverids) # Files that are generated by filtering a template filtered_files = +DPKG_EXPORT_BUILDFLAGS = 1 +include /usr/share/dpkg/default.mk + # set the number of build jobs ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) - JOBS ::= -j$(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) + JOBS := -j$(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) endif -ver_full ::= $(shell dpkg-parsechangelog | grep Version | cut -d' ' -f2) -version_upstream ::= $(shell echo $(ver_full) | cut -d'-' -f1 | cut -d '+' -f1) -version_major ::= $(shell echo $(version_upstream) | cut -d'.' -f1,2) -PKGVERSION ::= $(version_major) -SOVERSION ::= $(version_upstream) +version_full := $(shell dpkg-parsechangelog | grep Version | cut -d' ' -f2) +version_upstream := $(shell echo $(version_full) | cut -d'-' -f1 | cut -d '+' -f1) +version_major := $(shell echo $(version_upstream) | cut -d'.' -f1,2) + +PKGVERSION = $(version_major) +SOVERSION = $(version_upstream) -icuabi ::= $(shell apt show libicu-dev 2>/dev/null | sed -n 's/Depends: .*libicu\([0-9]*\) .*/\1/p') -regexicuabi ::= libboost-regex$(SOVERSION)-icu$(icuabi) +icuabi = $(shell apt show libicu-dev 2>/dev/null | sed -n 's/Depends: .*libicu\([0-9]*\) .*/\1/p') +regexicuabi = libboost-regex$(SOVERSION)-icu$(icuabi) # Function to map Boost component name to set of shared library names # Input: Boost component name @@ -130,19 +135,13 @@ BUILD_LONG_DOUBLE = yes BUILD_NUMPY = yes -ifneq (,$(findstring armhf, $(DEB_HOST_GNU_CPU))) -DEB_ASFLAGS_MAINT_PREPEND ::= -mcpu=cortex-a7 -mfpu=neon-vfpv3 -mfloat-abi=hard -DEB_CXXFLAGS_MAINT_PREPEND ::= -march=native -mcpu=native -export DEB_ASFLAGS_MAINT_PREPEND DEB_CXXFLAGS_MAINT_PREPEND -endif - # Disable long double on some architectures -ifneq (,$(filter $(DEB_HOST_ARCH), arm armhf arm64)) +ifneq (,$(filter $(DEB_HOST_ARCH), alpha arm armel armhf arm64 ppc64el hppa mips mipsel sh4 powerpc ppc64)) BUILD_LONG_DOUBLE = no endif # Disable context, coroutine, fiber on some architectures -ifneq (,$(filter $(DEB_HOST_ARCH), x32)) +ifneq (,$(filter $(DEB_HOST_ARCH), alpha hppa ia64 m68k mips64 powerpcspe s390 sh4 sparc sparc64 x32)) BUILD_CONTEXT = no endif diff -Nru boost1.81-1.81.0/debian/source/format boost1.81-1.81.0/debian/source/format --- boost1.81-1.81.0/debian/source/format 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/debian/source/format 2023-07-12 15:58:04.000000000 +0000 @@ -1 +1 @@ -3.0 (native) +3.0 (quilt) \ No newline at end of file diff -Nru boost1.81-1.81.0/doc/accumulators.tag boost1.81-1.81.0/doc/accumulators.tag --- boost1.81-1.81.0/doc/accumulators.tag 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/accumulators.tag 1970-01-01 00:00:00.000000000 +0000 @@ -1,261 +0,0 @@ - - - - boost::accumulators::detail::accumulator_set_result - structboost_1_1accumulators_1_1detail_1_1accumulator__set__result.html - AccumulatorSet - Feature - - - accumulator_set_result< boost::remove_reference< parameter::binding< boost::remove_const< boost::remove_reference< Args >::type >::type, tag::accumulator >::type >::type, Feature > - structboost_1_1accumulators_1_1detail_1_1accumulator__set__result.html - - - boost::accumulators::detail::accumulator_wrapper - structboost_1_1accumulators_1_1detail_1_1accumulator__wrapper.html - - - - - boost::accumulators::detail::contains_feature_of_::apply - structboost_1_1accumulators_1_1detail_1_1contains__feature__of___1_1apply.html - - boost::accumulators::detail::contains_feature_of - - - boost::accumulators::detail::matches_feature::apply - structboost_1_1accumulators_1_1detail_1_1matches__feature_1_1apply.html - - - - boost::accumulators::detail::argument_pack_result - structboost_1_1accumulators_1_1detail_1_1argument__pack__result.html - - - accumulator_set_result< boost::remove_reference< parameter::binding< boost::remove_const< boost::remove_reference< Args >::type >::type, tag::accumulator >::type >::type, Feature > - - - boost::accumulators::as_feature - structboost_1_1accumulators_1_1as__feature.html - Feature - - - boost::accumulators::detail::as_feature_list - structboost_1_1accumulators_1_1detail_1_1as__feature__list.html - - - - - boost::accumulators::detail::as_feature_list< Features, void > - structboost_1_1accumulators_1_1detail_1_1as__feature__list_3_01Features_00_01void_01_4.html - - - - boost::accumulators::as_weighted_feature - structboost_1_1accumulators_1_1as__weighted__feature.html - Feature - - - boost::accumulators::detail::build_acc_list - structboost_1_1accumulators_1_1detail_1_1build__acc__list.html - - - is_empty - - - boost::accumulators::detail::build_acc_list< First, Last, false > - structboost_1_1accumulators_1_1detail_1_1build__acc__list_3_01First_00_01Last_00_01false_01_4.html - - - - - boost::accumulators::detail::build_acc_list< First, Last, true > - structboost_1_1accumulators_1_1detail_1_1build__acc__list_3_01First_00_01Last_00_01true_01_4.html - - - - - build_acc_list< fusion::result_of::begin< Sequence >::type, fusion::result_of::end< Sequence >::type > - structboost_1_1accumulators_1_1detail_1_1build__acc__list.html - - - boost::accumulators::detail::checked_as_weighted_feature - structboost_1_1accumulators_1_1detail_1_1checked__as__weighted__feature.html - - - - boost::accumulators::detail::collect_abstract_features - structboost_1_1accumulators_1_1detail_1_1collect__abstract__features.html - - - - boost::accumulators::detail::contains_feature_of - structboost_1_1accumulators_1_1detail_1_1contains__feature__of.html - - - - - boost::accumulators::detail::contains_feature_of_ - structboost_1_1accumulators_1_1detail_1_1contains__feature__of__.html - - boost::accumulators::detail::contains_feature_of_::apply - - - boost::accumulators::detail::dependencies_of - structboost_1_1accumulators_1_1detail_1_1dependencies__of.html - - - - boost::accumulators::depends_on - structboost_1_1accumulators_1_1depends__on.html - - - - depends_on_base< mpl::transform< mpl::vector< Feature1, Feature2,... >, as_feature< mpl::_1 > >::type > - - - boost::accumulators::detail::depends_on_base - structboost_1_1accumulators_1_1detail_1_1depends__on__base.html - Features - - - depends_on_base< mpl::transform< mpl::vector< Feature1, Feature2,... >, as_feature< mpl::_1 > >::type > - structboost_1_1accumulators_1_1detail_1_1depends__on__base.html - - - boost::accumulators::extractor - structboost_1_1accumulators_1_1extractor.html - - boost::accumulators::extractor::result - boost::accumulators::extractor::result< this_type(A1)> - - detail::extractor_result< Arg1, Feature >::type - operator() - structboost_1_1accumulators_1_1extractor.html - aec7e2a574f965c7ed44fceb4841377fa - (Arg1 const &arg1) const - - - detail::extractor_result< AccumulatorSet, Feature >::type - operator() - structboost_1_1accumulators_1_1extractor.html - a9fdee7122da942ff661f15ad2d159379 - (AccumulatorSet const &acc, A1 const &a1) const - - - detail::extractor_result< AccumulatorSet, Feature >::type - operator() - structboost_1_1accumulators_1_1extractor.html - aa2d708d723b762ee86ef3e03f79aec25 - (AccumulatorSet const &acc, A1 const &a1, A2 const &a2,...) - - - - boost::accumulators::detail::extractor_result - structboost_1_1accumulators_1_1detail_1_1extractor__result.html - A - Feature - - - extractor_result< A1, Feature > - structboost_1_1accumulators_1_1detail_1_1extractor__result.html - - - boost::accumulators::feature_of - structboost_1_1accumulators_1_1feature__of.html - Feature - - - boost::accumulators::detail::feature_tag - structboost_1_1accumulators_1_1detail_1_1feature__tag.html - - - - boost::accumulators::detail::insert_dependencies - structboost_1_1accumulators_1_1detail_1_1insert__dependencies.html - - - - - - boost::accumulators::detail::insert_feature - structboost_1_1accumulators_1_1detail_1_1insert__feature.html - - - - - boost::accumulators::detail::insert_sequence - structboost_1_1accumulators_1_1detail_1_1insert__sequence.html - - - - - - boost::accumulators::detail::is_dependent_on - structboost_1_1accumulators_1_1detail_1_1is__dependent__on.html - - - - - boost::accumulators::detail::meta::make_acc_list - structboost_1_1accumulators_1_1detail_1_1meta_1_1make__acc__list.html - - build_acc_list< fusion::result_of::begin< Sequence >::type, fusion::result_of::end< Sequence >::type > - - - boost::accumulators::detail::make_accumulator_tuple - structboost_1_1accumulators_1_1detail_1_1make__accumulator__tuple.html - - - - - - boost::accumulators::detail::matches_feature - structboost_1_1accumulators_1_1detail_1_1matches__feature.html - - boost::accumulators::detail::matches_feature::apply - - - boost::accumulators::extractor::result - structboost_1_1accumulators_1_1extractor_1_1result.html - - - - boost::accumulators::extractor::result< this_type(A1)> - structboost_1_1accumulators_1_1extractor_1_1result_3_01this__type_07A1_08_4.html - - extractor_result< A1, Feature > - - - boost::accumulators::detail::set_insert_range - structboost_1_1accumulators_1_1detail_1_1set__insert__range.html - - - - - boost::accumulators::detail::to_accumulator - structboost_1_1accumulators_1_1detail_1_1to__accumulator.html - - - - - - boost::accumulators::detail::to_accumulator< Feature, Sample, tag::external< Weight, Tag, AccumulatorSet > > - structboost_1_1accumulators_1_1detail_1_1to__accumulator_3_01Feature_00_01Sample_00_01tag_1_1ext0c26d8c3c18bcca084cb467b003ed836.html - - - - - - - - boost::accumulators::detail::undroppable - structboost_1_1accumulators_1_1detail_1_1undroppable.html - - - - boost::accumulators::detail::undroppable< tag::droppable< Feature > > - structboost_1_1accumulators_1_1detail_1_1undroppable_3_01tag_1_1droppable_3_01Feature_01_4_01_4.html - - - diff -Nru boost1.81-1.81.0/doc/AutoDoxywarnings.log boost1.81-1.81.0/doc/AutoDoxywarnings.log --- boost1.81-1.81.0/doc/AutoDoxywarnings.log 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/AutoDoxywarnings.log 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -/root/project/boost/circular_buffer/base.hpp:421: warning: unable to resolve link to `operator[](size_type)' for \link command -/root/project/boost/circular_buffer/base.hpp:440: warning: unable to resolve link to `operator[](size_type)const ' for \link command diff -Nru boost1.81-1.81.0/doc/dvips.version boost1.81-1.81.0/doc/dvips.version --- boost1.81-1.81.0/doc/dvips.version 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/dvips.version 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -This is dvips(k) 5.997 Copyright 2017 Radical Eye Software (www.radicaleye.com) diff -Nru boost1.81-1.81.0/doc/gs.version boost1.81-1.81.0/doc/gs.version --- boost1.81-1.81.0/doc/gs.version 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/gs.version 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -GPL Ghostscript 9.26 (2018-11-20) -Copyright (C) 2018 Artifex Software, Inc. All rights reserved. Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/alert.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/alert.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/10.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/10.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/11.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/11.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/12.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/12.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/13.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/13.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/14.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/14.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/15.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/15.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/1.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/1.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/2.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/2.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/3.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/3.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/4.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/4.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/5.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/5.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/6.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/6.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/7.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/7.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/8.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/8.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/callouts/9.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/callouts/9.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/draft.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/draft.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/bc_s.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/bc_s.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/bdwn.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/bdwn.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/classboost_1_1random_1_1faure__engine.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/classboost_1_1random_1_1faure__engine.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/classboost_1_1random_1_1niederreiter__base2__engine.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/classboost_1_1random_1_1niederreiter__base2__engine.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/classboost_1_1random_1_1random__device.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/classboost_1_1random_1_1random__device.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/classboost_1_1random_1_1sobol__engine.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/classboost_1_1random_1_1sobol__engine.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/closed.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/closed.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/doc.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/doc.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/doxygen.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/doxygen.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/folderclosed.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/folderclosed.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/folderopen.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/folderopen.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_0.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_0.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_10.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_10.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_11.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_11.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_12.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_12.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_13.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_13.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_14.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_14.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_15.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_15.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_16.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_16.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_17.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_17.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_18.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_18.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_19.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_19.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_1.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_1.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_20.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_20.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_21.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_21.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_22.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_22.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_23.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_23.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_24.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_24.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_25.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_25.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_26.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_26.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_27.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_27.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_28.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_28.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_29.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_29.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_2.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_2.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_30.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_30.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_31.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_31.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_32.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_32.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_33.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_33.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_34.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_34.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_35.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_35.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_36.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_36.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_37.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_37.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_38.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_38.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_39.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_39.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_3.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_3.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_40.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_40.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_41.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_41.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_42.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_42.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_43.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_43.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_44.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_44.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_45.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_45.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_46.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_46.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_47.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_47.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_48.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_48.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_49.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_49.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_4.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_4.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_50.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_50.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_51.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_51.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_52.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_52.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_53.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_53.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_54.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_54.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_55.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_55.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_56.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_56.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_57.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_57.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_5.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_5.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_6.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_6.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_7.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_7.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_8.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_8.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/form_9.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/form_9.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/nav_f.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/nav_f.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/nav_g.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/nav_g.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/nav_h.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/nav_h.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/open.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/open.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/splitbar.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/splitbar.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/structboost_1_1random_1_1traits_1_1is__integral.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/structboost_1_1random_1_1traits_1_1is__integral.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/structboost_1_1random_1_1traits_1_1is__signed.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/structboost_1_1random_1_1traits_1_1is__signed.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/sync_off.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/sync_off.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/sync_on.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/sync_on.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/tab_a.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/tab_a.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/tab_b.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/tab_b.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/tab_h.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/tab_h.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/random/tab_s.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/random/tab_s.png differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/html/images/smiley.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/html/images/smiley.png differ diff -Nru boost1.81-1.81.0/doc/latex.version boost1.81-1.81.0/doc/latex.version --- boost1.81-1.81.0/doc/latex.version 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/latex.version 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -pdfTeX 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) -kpathsea version 6.2.3 -Copyright 2017 Han The Thanh (pdfTeX) et al. -There is NO warranty. Redistribution of this software is -covered by the terms of both the pdfTeX copyright and -the Lesser GNU General Public License. -For more information about these matters, see the file -named COPYING and the pdfTeX source. -Primary author of pdfTeX: Han The Thanh (pdfTeX) et al. -Compiled with libpng 1.6.34; using libpng 1.6.34 -Compiled with zlib 1.2.11; using zlib 1.2.11 -Compiled with poppler version 0.62.0 diff -Nru boost1.81-1.81.0/doc/src/boostbook.css boost1.81-1.81.0/doc/src/boostbook.css --- boost1.81-1.81.0/doc/src/boostbook.css 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/doc/src/boostbook.css 2022-12-24 12:46:07.195741400 +0000 @@ -0,0 +1,789 @@ + +/*============================================================================= +Copyright (c) 2004 Joel de Guzman +http://spirit.sourceforge.net/ + +Copyright 2013 Niall Douglas additions for colors and alignment. +Copyright 2013 Paul A. Bristow additions for more colors and alignments. +Copyright 2017 Tom Westerhout font fixes to support Sphinx + +Distributed under the Boost Software License, Version 1.0. (See accompany- +ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +=============================================================================*/ + +/*============================================================================= +Body defaults +=============================================================================*/ + + body + { + margin: 1em; + font-size: 16px; + font-family: sans-serif; + } + +/*============================================================================= +Paragraphs +=============================================================================*/ + + p, div.document, div.footer + { + text-align: left; + font-size: 10pt; + line-height: 1.15; + } + +/*============================================================================= +Program listings +=============================================================================*/ + + /* Code on paragraphs */ + p tt.computeroutput + { + font-size: 9pt; + } + + pre.synopsis + { + font-size: 9pt; + margin: 1pc 4% 0pc 4%; + padding: 0.5pc 0.5pc 0.5pc 0.5pc; + } + + div.highlight, + .programlisting, + .screen + { + font-size: 9pt; + display: block; + margin: 1pc 4% 0pc 4%; + padding: 0.5pc 0.5pc 0.5pc 0.5pc; + } + + /* Program listings in tables don't get borders */ + td .programlisting, + td .screen + { + margin: 0pc 0pc 0pc 0pc; + padding: 0pc 0pc 0pc 0pc; + } + +/*============================================================================= +Headings +=============================================================================*/ + + h1, h2, h3, h4, h5, h6 + { + text-align: left; + margin: 1em 0em 0.5em 0em; + font-weight: bold; + } + + h1 { font-size: 140%; } + h2 { font-weight: bold; font-size: 140%; } + h3 { font-weight: bold; font-size: 130%; } + h4 { font-weight: bold; font-size: 120%; } + h5 { font-weight: normal; font-style: italic; font-size: 110%; } + h6 { font-weight: normal; font-style: italic; font-size: 100%; } + + /* Top page titles */ + title, + h1.title, + h2.title + h3.title, + h4.title, + h5.title, + h6.title, + .refentrytitle + { + font-weight: bold; + margin-bottom: 1pc; + } + + h1.title { font-size: 140% } + h2.title { font-size: 140% } + h3.title { font-size: 130% } + h4.title { font-size: 120% } + h5.title { font-size: 110% } + h6.title { font-size: 100% } + + .section h1 + { + margin: 0em 0em 0.5em 0em; + font-size: 140%; + } + + .section h2 { font-size: 140% } + .section h3 { font-size: 130% } + .section h4 { font-size: 120% } + .section h5 { font-size: 110% } + .section h6 { font-size: 100% } + + /* Code on titles */ + h1 tt.computeroutput { font-size: 140% } + h2 tt.computeroutput { font-size: 140% } + h3 tt.computeroutput { font-size: 130% } + h4 tt.computeroutput { font-size: 130% } + h5 tt.computeroutput { font-size: 130% } + h6 tt.computeroutput { font-size: 130% } + + +/*============================================================================= +Author +=============================================================================*/ + + h3.author + { + font-size: 100% + } + +/*============================================================================= +Lists +=============================================================================*/ + + li + { + font-size: 10pt; + line-height: 1.3; + } + + /* Unordered lists */ + ul + { + text-align: left; + } + + /* Ordered lists */ + ol + { + text-align: left; + } + +/*============================================================================= +Links +=============================================================================*/ + + a + { + text-decoration: none; /* no underline */ + } + + a:hover + { + text-decoration: underline; + } + +/*============================================================================= +Spirit style navigation +=============================================================================*/ + + .spirit-nav + { + text-align: right; + } + + .spirit-nav a + { + color: white; + padding-left: 0.5em; + } + + .spirit-nav img + { + border-width: 0px; + } + +/*============================================================================= +Copyright footer +=============================================================================*/ + .copyright-footer + { + text-align: right; + font-size: 70%; + } + + .copyright-footer p + { + text-align: right; + font-size: 80%; + } + +/*============================================================================= +Table of contents +=============================================================================*/ + + div.toc + { + margin: 1pc 4% 0pc 4%; + padding: 0.1pc 1pc 0.1pc 1pc; + font-size: 80%; + line-height: 1.15; + } + + .boost-toc + { + float: right; + padding: 0.5pc; + } + + /* Code on toc */ + .toc .computeroutput { font-size: 120% } + + /* No margin on nested menus */ + + .toc dl dl { margin: 0; } + +/*============================================================================= +Tables +=============================================================================*/ + + .table-title, + div.table p.title + { + margin-left: 4%; + padding-right: 0.5em; + padding-left: 0.5em; + } + + .informaltable table, + .table table + { + width: 92%; + margin-left: 4%; + margin-right: 4%; + } + + div.informaltable table, + div.table table + { + padding: 4px; + } + + /* Table Cells */ + div.informaltable table tr td, + div.table table tr td + { + padding: 0.5em; + text-align: left; + font-size: 9pt; + } + + div.informaltable table tr th, + div.table table tr th + { + padding: 0.5em 0.5em 0.5em 0.5em; + border: 1pt solid white; + font-size: 80%; + } + + table.simplelist + { + width: auto !important; + margin: 0em !important; + padding: 0em !important; + border: none !important; + } + table.simplelist td + { + margin: 0em !important; + padding: 0em !important; + text-align: left !important; + font-size: 9pt !important; + border: none !important; + } + +/*============================================================================= +Suppress margins in tables +=============================================================================*/ + + table th > *:first-child, + table td > *:first-child + { + margin-top: 0; + } + + table th > *:last-child, + table td > *:last-child + { + margin-bottom: 0; + } + +/*============================================================================= +Blurbs +=============================================================================*/ + + div.note, + div.tip, + div.important, + div.caution, + div.warning, + div.blurb, + p.blurb + { + font-size: 9pt; /* A little bit smaller than the main text */ + line-height: 1.2; + display: block; + margin: 1pc 4% 0pc 4%; + padding: 0.5pc 0.5pc 0.5pc 0.5pc; + } + + div.blurb img, + p.blurb img + { + padding: 1pt; + } + +/*============================================================================= +Variable Lists +=============================================================================*/ + + div.variablelist + { + margin: 1em 0; + } + + /* Make the terms in definition lists bold */ + div.variablelist dl dt, + span.term + { + font-weight: bold; + font-size: 10pt; + } + + div.variablelist table tbody tr td + { + text-align: left; + vertical-align: top; + padding: 0em 2em 0em 0em; + font-size: 10pt; + margin: 0em 0em 0.5em 0em; + line-height: 1; + } + + div.variablelist dl dt + { + margin-bottom: 0.2em; + } + + div.variablelist dl dd + { + margin: 0em 0em 0.5em 2em; + font-size: 10pt; + } + + div.variablelist table tbody tr td p, + div.variablelist dl dd p + { + margin: 0em 0em 0.5em 0em; + line-height: 1; + } + +/*============================================================================= +Misc +=============================================================================*/ + + /* Title of books and articles in bibliographies */ + span.title + { + font-style: italic; + } + + span.underline + { + text-decoration: underline; + } + + span.strikethrough + { + text-decoration: line-through; + } + + /* Copyright, Legal Notice */ + div div.legalnotice p + { + text-align: left + } + +/*============================================================================= +Colors +=============================================================================*/ + + @media screen + { + body { + background-color: #FFFFFF; + color: #000000; + } + + /* Syntax Highlighting */ + .property, + .highlight .k, + .highlight .kc, + .highlight .kd, + .highlight .kn, + .highlight .kp, + .highlight .kr, + .highlight .kt, + .keyword { color: #0000AA; } + + .highlight .n, + .highlight .na, + .highlight .nb, + .highlight .bp, + .highlight .nc, + .highlight .no, + .highlight .nd, + .highlight .ni, + .highlight .ne, + .highlight .nf, + .highlight .py, + .highlight .nl, + .highlight .nn, + .highlight .nx, + .highlight .nt, + .highlight .nv, + .highlight .vc, + .highlight .vg, + .highlight .vi, + .identifier { color: #000000; } + + .special { color: #707070; } + + .highlight .cp, + .preprocessor { color: #402080; } + + .highlight .sc + .char { color: teal; } + + .highlight .c, + .highlight .ch, + .highlight .cm, + .highlight .cp, + .highlight .cpf, + .highlight .c1, + .highlight .cs, + .highlight .sd, + .highlight .sh, + .comment { color: #800000; } + + .highlight .s, + .highlight .sa, + .highlight .sb, + .highlight .dl, + .highlight .s2, + .highlight .se, + .highlight .si, + .highlight .sx, + .highlight .sr, + .highlight .s1, + .highlight .ss, + .string { color: teal; } + + .highlight .m, + .highlight .mf, + .highlight .mh, + .highlight .mi, + .highlight .mo, + .number { color: teal; } + + .highlight, + .white_bkd { background-color: #FFFFFF; } + + .highlight .hll, + .dk_grey_bkd { background-color: #999999; } + + /* Links */ + a, a .keyword, a .identifier, a .special, a .preprocessor + a .char, a .comment, a .string, a .number + { + color: #005a9c; + } + + a:visited, a:visited .keyword, a:visited .identifier, + a:visited .special, a:visited .preprocessor a:visited .char, + a:visited .comment, a:visited .string, a:visited .number + { + color: #9c5a9c; + } + + h1 a, h2 a, h3 a, h4 a, h5 a, h6 a, + h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover, + h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited + { + text-decoration: none; /* no underline */ + color: #000000; + } + + /* Copyright, Legal Notice */ + .copyright + { + color: #666666; + font-size: small; + } + + div div.legalnotice p + { + color: #666666; + } + + /* Program listing */ + pre.synopsis + { + border: 1px solid #DCDCDC; + } + + div.highlight, + .programlisting, + .screen + { + border: 1px solid #DCDCDC; + } + + td .programlisting, + td .screen + { + border: 0px solid #DCDCDC; + } + + /* Blurbs */ + div.note, + div.tip, + div.important, + div.caution, + div.warning, + div.blurb, + p.blurb + { + border: 1px solid #DCDCDC; + } + + /* Table of contents */ + div.toc + { + border: 1px solid #DCDCDC; + } + + /* Tables */ + div.informaltable table tr td, + div.table table tr td + { + border: 1px solid #DCDCDC; + } + + div.informaltable table tr th, + div.table table tr th + { + background-color: #F0F0F0; + border: 1px solid #DCDCDC; + } + + .copyright-footer + { + color: #8F8F8F; + } + + /* Misc */ + span.highlight + { + color: #00A000; + } + } + + @media print + { + /* Links */ + a + { + color: black; + } + + a:visited + { + color: black; + } + + .spirit-nav + { + display: none; + } + + /* Program listing */ + pre.synopsis + { + border: 1px solid gray; + } + + div.highlight, + .programlisting, + .screen + { + border: 1px solid gray; + } + + td .programlisting, + td .screen + { + border: 0px solid #DCDCDC; + } + + /* Table of contents */ + div.toc + { + border: 1px solid gray; + } + + .informaltable table, + .table table + { + border: 1px solid gray; + border-collapse: collapse; + } + + /* Tables */ + div.informaltable table tr td, + div.table table tr td + { + border: 1px solid gray; + } + + div.informaltable table tr th, + div.table table tr th + { + border: 1px solid gray; + } + + table.simplelist tr td + { + border: none !important; + } + + /* Misc */ + span.highlight + { + font-weight: bold; + } + } + +/*============================================================================= +Images +=============================================================================*/ + + span.inlinemediaobject img + { + vertical-align: middle; + } + +/*============================================================================== +Super and Subscript: style so that line spacing isn't effected, see +http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=1&postId=5341 +==============================================================================*/ + +sup, +sub { +height: 0; +line-height: 1; +vertical-align: baseline; +position: relative; + +} + +/* For internet explorer: */ + +* html sup, +* html sub { +vertical-align: bottom; +} + +sup { +bottom: 1ex; +} + +sub { +top: .5ex; +} + +/*============================================================================== +Indexes: pretty much the same as the TOC. +==============================================================================*/ + + .index + { + font-size: 80%; + padding-top: 0px; + padding-bottom: 0px; + margin-top: 0px; + margin-bottom: 0px; + margin-left: 0px; + } + + .index ul + { + padding-left: 3em; + } + + .index p + { + padding: 2px; + margin: 2px; + } + + .index-entry-level-0 + { + font-weight: bold; + } + + .index em + { + font-weight: bold; + } + + +/*============================================================================== +Alignment and coloring use 'role' feature, available from Quickbook 1.6 up. +Added from Niall Douglas for role color and alignment. +http://article.gmane.org/gmane.comp.lib.boost.devel/243318 +*/ + +/* Add text alignment (see http://www.w3schools.com/cssref/pr_text_text-align.asp) */ +span.aligncenter +{ + display: inline-block; width: 100%; text-align: center; +} +span.alignright +{ + display: inline-block; width: 100%; text-align: right; +} +/* alignleft is the default. */ +span.alignleft +{ + display: inline-block; width: 100%; text-align: left; +} + +/* alignjustify stretches the word spacing so that each line has equal width +within a chosen fraction of page width (here arbitrarily 20%). +*Not* useful inside table items as the column width remains the total string width. +Nor very useful, except to temporarily restrict the width. +*/ +span.alignjustify +{ + display: inline-block; width: 20%; text-align: justify; +} + +/* Text colors. +Names at http://www.w3.org/TR/2002/WD-css3-color-20020219/ 4.3. X11 color keywords. +Quickbook Usage: [role red Some red text] + +*/ +span.red { inline-block; color: red; } +span.green { color: green; } +span.lime { color: #00FF00; } +span.blue { color: blue; } +span.navy { color: navy; } +span.yellow { color: yellow; } +span.magenta { color: magenta; } +span.indigo { color: #4B0082; } +span.cyan { color: cyan; } +span.purple { color: purple; } +span.gold { color: gold; } +span.silver { color: silver; } /* lighter gray */ +span.gray { color: #808080; } /* light gray */ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/src/images/draft.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/src/images/draft.png differ diff -Nru boost1.81-1.81.0/doc/src/images/tip.svg boost1.81-1.81.0/doc/src/images/tip.svg --- boost1.81-1.81.0/doc/src/images/tip.svg 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/doc/src/images/tip.svg 2022-12-24 12:46:07.199741400 +0000 @@ -0,0 +1,84 @@ + + + + + + lamp + + + + office + + lamp + + + + + Open Clip Art Library + + + + + Sergio Luiz Araujo Silva + + + + + Public Domain + + + set 2005 + image/svg+xml + + + en + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru boost1.81-1.81.0/doc/test/gold/boost/accumulators/extract/weighted_tail_quantile.html boost1.81-1.81.0/doc/test/gold/boost/accumulators/extract/weighted_tail_quantile.html --- boost1.81-1.81.0/doc/test/gold/boost/accumulators/extract/weighted_tail_quantile.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/boost/accumulators/extract/weighted_tail_quantile.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ - - - -Global weighted_tail_quantile - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-


-
-PrevUpHomeNext -
-
-
-
-

Global weighted_tail_quantile

-

boost::accumulators::extract::weighted_tail_quantile

-
-

Synopsis

-
// In header: <doc/test/weighted_tail_quantile.hpp>
-
-extractor< tag::quantile > const weighted_tail_quantile;
-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/boost/accumulators/impl/weighted_tail_quantile__id330053.html boost1.81-1.81.0/doc/test/gold/boost/accumulators/impl/weighted_tail_quantile__id330053.html --- boost1.81-1.81.0/doc/test/gold/boost/accumulators/impl/weighted_tail_quantile__id330053.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/boost/accumulators/impl/weighted_tail_quantile__id330053.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ - - - -Struct template weighted_tail_quantile_impl - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
-
-
-

Struct template weighted_tail_quantile_impl

-

boost::accumulators::impl::weighted_tail_quantile_impl — Tail quantile estimation based on order statistics of weighted samples (for both left and right tails).

-
-

Synopsis

-
// In header: <doc/test/weighted_tail_quantile.hpp>
-
-template<typename Sample, typename Weight, typename LeftRight> 
-struct weighted_tail_quantile_impl {
-  // types
-  typedef numeric::functional::average< Weight, std::size_t >::result_type float_type; 
-  typedef Sample                                                           result_type;
-
-  // construct/copy/destruct
-  weighted_tail_quantile_impl(dont_care);
-
-  // public member functions
-  template<typename Args> result_type result(Args const &) const;
-};
-
-

Description

-

An estimator of tail quantiles with level based on order statistics of weighted samples are given by (left tail) and (right tail), where

-
-

Equation 1. 

-
-
-


-

and

-
-

Equation 2. 

-
-
-


-

being the number of samples and the sum of all weights.

-

-

-
-

-weighted_tail_quantile_impl - public - construct/copy/destruct

-
  1. weighted_tail_quantile_impl(dont_care);
-
-
-

-weighted_tail_quantile_impl public member functions

-
  1. template<typename Args> result_type result(Args const & args) const;
-
-
-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/boost/accumulators/tag/weighted_tail_quantile.html boost1.81-1.81.0/doc/test/gold/boost/accumulators/tag/weighted_tail_quantile.html --- boost1.81-1.81.0/doc/test/gold/boost/accumulators/tag/weighted_tail_quantile.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/boost/accumulators/tag/weighted_tail_quantile.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ - - - -Struct template weighted_tail_quantile - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHome -
-
-
-
-

Struct template weighted_tail_quantile

-

boost::accumulators::tag::weighted_tail_quantile

-
-

Synopsis

-
// In header: <doc/test/weighted_tail_quantile.hpp>
-
-template<typename LeftRight> 
-struct weighted_tail_quantile : public boost::accumulators::depends_on< sum_of_weights, tail_weights< LeftRight > >
-{
-};
-
- - - -
-
-
-PrevUpHome -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/boost/array.html boost1.81-1.81.0/doc/test/gold/boost/array.html --- boost1.81-1.81.0/doc/test/gold/boost/array.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/boost/array.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,559 +0,0 @@ - - - -Class template array - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
-
-
-

Class template array

-

boost::array — STL compliant container wrapper for arrays of constant size

-
-

Synopsis

-
// In header: <boost/array.hpp>
-
-template<typename T, std::size_t N> 
-class array {
-public:
-  // types
-  typedef T                                                                        value_type;            
-  typedef T*                                                                       iterator;              
-  typedef const T*                                                                 const_iterator;        
-  typedef 
-                  std::reverse_iterator<iterator>
-                      reverse_iterator;      
-  typedef 
-                  std::reverse_iterator<const_iterator>
-                const_reverse_iterator;
-  typedef T&                                                                       reference;             
-  typedef const T&                                                                 const_reference;       
-  typedef std::size_t                                                              size_type;             
-  typedef std::ptrdiff_t                                                           difference_type;       
-
-  // static constants
-  static const size_type static_size = N;
-
-  // construct/copy/destruct
-  template<typename U> array& operator=(const array<U, N>&);
-
-  // iterator support
-  iterator begin();
-  const_iterator begin() const;
-  iterator end();
-  const_iterator end() const;
-
-  // reverse iterator support
-  reverse_iterator rbegin();
-  const_reverse_iterator rbegin() const;
-  reverse_iterator rend();
-  const_reverse_iterator rend() const;
-
-  // capacity
-  size_type size();
-  bool empty();
-  size_type max_size();
-
-  // element access
-  reference operator[](size_type);
-  const_reference operator[](size_type) const;
-  reference at(size_type);
-  const_reference at(size_type) const;
-  reference front();
-  const_reference front() const;
-  reference back();
-  const_reference back() const;
-  const T* data() const;
-  T* c_array();
-
-  // modifiers
-  void swap(array<T, N>&);
-  void assign(const T&);
-  T elems[N];
-};
-
-// specialized algorithms
-template<typename T, std::size_t N> void swap(array<T, N>&, array<T, N>&);
-
-// comparisons
-template<typename T, std::size_t N> 
-  bool operator==(const array<T, N>&, const array<T, N>&);
-template<typename T, std::size_t N> 
-  bool operator!=(const array<T, N>&, const array<T, N>&);
-template<typename T, std::size_t N> 
-  bool operator<(const array<T, N>&, const array<T, N>&);
-template<typename T, std::size_t N> 
-  bool operator>(const array<T, N>&, const array<T, N>&);
-template<typename T, std::size_t N> 
-  bool operator<=(const array<T, N>&, const array<T, N>&);
-template<typename T, std::size_t N> 
-  bool operator>=(const array<T, N>&, const array<T, N>&);
-
-

Description

-
-

-array - public - construct/copy/destruct

-
  1. -
    template<typename U> array& operator=(const array<U, N>& other);
    -
    -- - - - -

    Effects:

    - - std::copy(rhs.begin(),rhs.end(), begin()) - -
    -
-
-
-

-array iterator support

-
    -
  1. -
    iterator begin();
    -const_iterator begin() const;
    -
    -- - - - - - - - - - -

    Returns:

    iterator for the first element

    Throws:

    will not throw
    -
  2. -
  3. -
    iterator end();
    -const_iterator end() const;
    -
    -- - - - - - - - - - -

    Returns:

    iterator for position after the last element

    Throws:

    will not throw
    -
  4. -
-
-
-

-array reverse iterator support

-
    -
  1. -
    reverse_iterator rbegin();
    -const_reverse_iterator rbegin() const;
    -
    -- - - - -

    Returns:

    reverse iterator for the first element of reverse iteration
    -
  2. -
  3. -
    reverse_iterator rend();
    -const_reverse_iterator rend() const;
    -
    -- - - - -

    Returns:

    reverse iterator for position after the last element in reverse iteration
    -
  4. -
-
-
-

-array capacity

-
    -
  1. -
    size_type size();
    -
    -- - - - -

    Returns:

    - N -
    -
  2. -
  3. -
    bool empty();
    -
    -- - - - - - - - - - -

    Returns:

    - N==0 -

    Throws:

    will not throw
    -
  4. -
  5. -
    size_type max_size();
    -
    -- - - - - - - - - - -

    Returns:

    - N -

    Throws:

    will not throw
    -
  6. -
-
-
-

-array element access

-
    -
  1. -
    reference operator[](size_type i);
    -const_reference operator[](size_type i) const;
    -
    -- - - - - - - - - - - - - - -

    Requires:

    - i < N -

    Returns:

    - element with index i -

    Throws:

    will not throw.
    -
  2. -
  3. -
    reference at(size_type i);
    -const_reference at(size_type i) const;
    -
    -- - - - - - - - - - -

    Returns:

    - element with index i -

    Throws:

    - - std::range_error - if i >= N -
    -
  4. -
  5. -
    reference front();
    -const_reference front() const;
    -
    -- - - - - - - - - - - - - - -

    Requires:

    - N > 0 -

    Returns:

    the first element

    Throws:

    will not throw
    -
  6. -
  7. -
    reference back();
    -const_reference back() const;
    -
    -- - - - - - - - - - - - - - -

    Requires:

    - N > 0 -

    Returns:

    the last element

    Throws:

    will not throw
    -
  8. -
  9. -
    const T* data() const;
    -
    -- - - - - - - - - - -

    Returns:

    - elems -

    Throws:

    will not throw
    -
  10. -
  11. -
    T* c_array();
    -
    -- - - - - - - - - - -

    Returns:

    - elems -

    Throws:

    will not throw
    -
  12. -
-
-
-

-array modifiers

-
    -
  1. -
    void swap(array<T, N>& other);
    -
    -- - - - - - - - - - -

    Effects:

    - - std::swap_ranges(begin(), end(), other.begin()) - -

    Complexity:

    - linear in N -
    -
  2. -
  3. -
    void assign(const T& value);
    -
    -- - - - -

    Effects:

    - - std::fill_n(begin(), N, value) - -
    -
  4. -
-
-
-

-array specialized algorithms

-
  1. -
    template<typename T, std::size_t N> void swap(array<T, N>& x, array<T, N>& y);
    -
    -- - - - - - - - - - -

    Effects:

    - - x.swap(y) - -

    Throws:

    will not throw.
    -
-
-
-

-array comparisons

-
    -
  1. -
    template<typename T, std::size_t N> 
    -  bool operator==(const array<T, N>& x, const array<T, N>& y);
    -
    -- - - - -

    Returns:

    - - std::equal(x.begin(), x.end(), y.begin()) - -
    -
  2. -
  3. -
    template<typename T, std::size_t N> 
    -  bool operator!=(const array<T, N>& x, const array<T, N>& y);
    -
    -- - - - -

    Returns:

    - !(x == y) -
    -
  4. -
  5. -
    template<typename T, std::size_t N> 
    -  bool operator<(const array<T, N>& x, const array<T, N>& y);
    -
    -- - - - -

    Returns:

    - - std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()) - -
    -
  6. -
  7. -
    template<typename T, std::size_t N> 
    -  bool operator>(const array<T, N>& x, const array<T, N>& y);
    -
    -- - - - -

    Returns:

    - y < x -
    -
  8. -
  9. -
    template<typename T, std::size_t N> 
    -  bool operator<=(const array<T, N>& x, const array<T, N>& y);
    -
    -- - - - -

    Returns:

    - !(y < x) -
    -
  10. -
  11. -
    template<typename T, std::size_t N> 
    -  bool operator>=(const array<T, N>& x, const array<T, N>& y);
    -
    -- - - - -

    Returns:

    - !(x < y) -
    -
  12. -
-
-
-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/accumulators.html boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/accumulators.html --- boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/accumulators.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/accumulators.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ - - - -Accumulators Example Doxygen Documentation - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
- - -
-

-Statistics Library Reference

- -
- -
namespace boost {
-  namespace accumulators {
-    namespace extract {
-      extractor< tag::quantile > const weighted_tail_quantile;
-    }
-    namespace impl {
-      template<typename Sample, typename Weight, typename LeftRight> 
-        struct weighted_tail_quantile_impl;
-    }
-    namespace tag {
-      template<typename LeftRight> struct weighted_tail_quantile;
-    }
-  }
-}
-
-
-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/array.html boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/array.html --- boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/array.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/array.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,226 +0,0 @@ - - - -Array Example Boostbook XML Documentation - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
- - -
-

-Introduction

-

The C++ Standard Template Library STL as part of the C++ - Standard Library provides a framework for processing algorithms on - different kind of containers. However, ordinary arrays don't - provide the interface of STL containers (although, they provide - the iterator interface of STL containers).

-

As replacement for ordinary arrays, the STL provides class - std::vector. However, - std::vector<> provides - the semantics of dynamic arrays. Thus, it manages data to be able - to change the number of elements. This results in some overhead in - case only arrays with static size are needed.

-

In his book, Generic Programming and the - STL, Matthew H. Austern introduces a useful wrapper - class for ordinary arrays with static size, called - block. It is safer and has no worse performance than - ordinary arrays. In The C++ Programming - Language, 3rd edition, Bjarne Stroustrup introduces a - similar class, called c_array, which I (Nicolai Josuttis) present - slightly modified in my book The C++ Standard Library - - A Tutorial and Reference, called - carray. This is the essence of these approaches - spiced with many feedback from boost.

-

After considering different names, we decided to name this - class simply array.

-

Note that this class is suggested to be part of the next - Technical Report, which will extend the C++ Standard (see - http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1548.htm).

-

Class array fulfills most - but not all of the requirements of "reversible containers" (see - Section 23.1, [lib.container.requirements] of the C++ - Standard). The reasons array is not an reversible STL container is - because: -

-
    -
  • No constructors are provided.
  • -
  • Elements may have an undetermined initial value (see the section called “Design Rationale”).
  • -
  • -swap() has no constant complexity.
  • -
  • -size() is always constant, based on the second template argument of the type.
  • -
  • The container provides no allocator support.
  • -
-

-

-

It doesn't fulfill the requirements of a "sequence" (see Section 23.1.1, [lib.sequence.reqmts] of the C++ Standard), except that: -

-
-

-

-
-
-

-Reference

- -
-

-Header <boost/array.hpp>

-
namespace boost {
-  template<typename T, std::size_t N> class array;
-  template<typename T, std::size_t N> void swap(array<T, N>&, array<T, N>&);
-  template<typename T, std::size_t N> 
-    bool operator==(const array<T, N>&, const array<T, N>&);
-  template<typename T, std::size_t N> 
-    bool operator!=(const array<T, N>&, const array<T, N>&);
-  template<typename T, std::size_t N> 
-    bool operator<(const array<T, N>&, const array<T, N>&);
-  template<typename T, std::size_t N> 
-    bool operator>(const array<T, N>&, const array<T, N>&);
-  template<typename T, std::size_t N> 
-    bool operator<=(const array<T, N>&, const array<T, N>&);
-  template<typename T, std::size_t N> 
-    bool operator>=(const array<T, N>&, const array<T, N>&);
-}
-
-
-
-

-Design Rationale

-

- There was an important design tradeoff regarding the - constructors: We could implement array as an "aggregate" (see - Section 8.5.1, [dcl.init.aggr], of the C++ Standard). This would - mean: -

-
  • -

    - An array can be initialized with a - brace-enclosing, comma-separated list of initializers for the - elements of the container, written in increasing subscript - order: -

    -
    -               boost::array<int,4> a = { { 1, 2, 3 } };
    -            
    -

    - Note that if there are fewer elements in the - initializer list, then each remaining element gets - default-initialized (thus, it has a defined value). -

    -
-

-

-

- However, this approach has its drawbacks: - passing no initializer list means that the elements - have an indetermined initial value - , because the rule says - that aggregates may have: -

-
    -
  • No user-declared constructors.
  • -
  • No private or protected non-static data members.
  • -
  • No base classes.
  • -
  • No virtual functions.
  • -
-

-

-

Nevertheless, The current implementation uses this approach.

-

- Note that for standard conforming compilers it is possible to - use fewer braces (according to 8.5.1 (11) of the Standard). That is, - you can initialize an array as follows: -

-
-      boost::array<int,4> a = { 1, 2, 3 };
-   
-

- I'd appreciate any constructive feedback. - Please note: I don't have time to read all boost - mails. Thus, to make sure that feedback arrives to me, please send - me a copy of each mail regarding this class. - -

-

- The code is provided "as is" without expressed or implied - warranty. -

-
-
-

-For more information...

-

- To find more details about using ordinary arrays in C++ and - the framework of the STL, see e.g. - -

-


-         The C++ Standard Library - A Tutorial and Reference
-         by Nicolai M. Josuttis
-         Addison Wesley Longman, 1999
-         ISBN 0-201-37926-0
-      

-

-

-

- - Home Page of Nicolai - Josuttis - -

-
-
-

-Acknowledgements

-

Doug Gregor ported the documentation to the BoostBook format.

-
-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/basic_formatting.html boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/basic_formatting.html --- boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/basic_formatting.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/basic_formatting.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,208 +0,0 @@ - - - -Basic Formatting - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
- - -
- -

- Here we go with some inline formatting: italic, bold, underline, - teletype, strikethrough, - we can combine styles as well: bold italic, - teletype with underline. -

-
-
- -

- Text that is intended to be user-replaceable is rendered like - this. -

-
-
- -

- Here we go: A question that sometimes drives me hazy: am I or are - the others crazy?--Einstein -

-

- Note the proper left and right quote marks. Also, while you can simply use - ordinary quote marks like "quoted", our quotation, above, will - generate correct DocBook quotations (e.g. <quote>quoted</quote>). -

-

- Like all phrase elements, quotations may be nested. Example: -

-

- Here's the rule for bargains: Do other men, for they would - do you. That's the true business precept. -

-
-
- -

- This text has inlined code int main() { return 0; } - in it. The code should be syntax highlighted. -

-
-
-

-Links -

-

- Try this: this is boost's - website.... it should be visible as a link. -

-

- This is a link to a header - file (boost/math/distributions.hpp), it should be rewritable and - point to the website when built as a PDF. -

-

- This is a link to another library's - documentation (Boost.Regex), using the boost: protocol, it should - be rewritten to point to the website when building a PDF. -

-

- This is a link to another library's - documentation (Boost.Regex), using the boost:/ protocol, it should - be rewritten to point to the website when building a PDF. -

-

- This is a relative link to a header - file within the test source, it should be rewritten to point to the - website when building a PDF. Although it might be on the website yet. -

-
-
- -

- Here's one [1]. -

-

- And here's another [2]. -

-
-
- -

- Lets indent the next paragraph: -

-

- Here we go!!! -

-
-
- -

- Now try rendering some heading styles: -

-

- - Heading - 1 -

-

- - Heading - 2 -

-

- - Heading - 3 -

-
- - Heading - 4 -
-
- - Heading - 5 -
-

- - Heading - 6 -

-
-
-

-

[1] - A sample footnote -

-

[2] - Another sample footnote -

-
-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/blurbs.html boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/blurbs.html --- boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/blurbs.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/blurbs.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,160 +0,0 @@ - - - -Blurbs - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
-

-Blurbs -

- -
- -

- Here's some sample program output: -

-
F test for equal standard deviations
-____________________________________
-
-Sample 1:
-Number of Observations                                 =  240
-Sample Standard Deviation                              =  65.549
-
-Sample 2:
-Number of Observations                                 =  240
-Sample Standard Deviation                              =  61.854
-
-Test Statistic                                         =  1.123
-
-CDF of test statistic:                                 =  8.148e-001
-Upper Critical Value at alpha:                         =  1.238e+000
-Upper Critical Value at alpha/2:                       =  1.289e+000
-Lower Critical Value at alpha:                         =  8.080e-001
-Lower Critical Value at alpha/2:                       =  7.756e-001
-
-Results for Alternative Hypothesis and alpha           =  0.0500
-
-Alternative Hypothesis                                    Conclusion
-Standard deviations are unequal (two sided test)          REJECTED
-Standard deviation 1 is less than standard deviation 2    REJECTED
-Standard deviation 1 is greater than standard deviation 2 REJECTED
-
-
-
- -

- There are four admonishments supported by Docbook XML: -

-
- - - - - -
[Note]Note

- This is a note -

-
- - - - - -
[Tip]Tip

- This is a tip -

-
- - - - - -
[Important]Important

- This is important -

-
- - - - - -
[Caution]Caution

- This is a caution -

-
- - - - - -
[Warning]Warning
-

- This is a warning -

-

- They can contain more than one paragraph. -

-
-
-
-

-Blurbs -

- -
-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/code_blocks.html boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/code_blocks.html --- boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/code_blocks.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/code_blocks.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,426 +0,0 @@ - - - -Code Blocks - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
- - -
- -

- These should be syntax highlighted: -

-
#include <iostream>
-
-int main()
-{
-    // Sample code
-    std::cout << "Hello, World\n";
-    return 0;
-}
-
-
-
- -
template <class RealType> RealType inline foo(const RealType& a, const RealType& b, const RealType& c, const RealType& d, const RealType& e, const RealType& f, const RealType& g, const RealType& h){ return 0; }
-
-
-
- -

- Here's some code with left-placed callouts: -

-

- -

-
class x
-{
-public:
-
-    1x() : n(0)
-    {
-    }
-
-    2~x()
-    {
-    }
-
-    3int get() const
-    {
-        return n; 
-    }
-
-    4void set(int n_)
-    {
-        n = n_;
-    }
-};
-
-

-

-

-

-
- - - - - - - - - - - - - - - - -

1

Constructor

2

Destructor

3

Get the n - member variable

4

Set the n - member variable

-

-

-

- And again with callouts placed exactly where we put them: -

-

- -

-
std::string foo_bar() 1
-{
-    return "foo-bar"; 2
-}
-
-

-

-

-

-
- - - - - - - - -

1

The Mythical FooBar. See Foobar - for details

2

return 'em, foo-bar man!

-

-

-
-
- -

- Now let's include a larger example, this may span several pages and should - not be chopped off half way through... some FO processors get this wrong! -

-
namespace boost{
-
-template <class BidirectionalIterator>
-class sub_match;
-
-typedef sub_match<const char*>                    csub_match;
-typedef sub_match<const wchar_t*>                 wcsub_match;
-typedef sub_match<std::string::const_iterator>    ssub_match;
-typedef sub_match<std::wstring::const_iterator>   wssub_match;
-
-template <class BidirectionalIterator>
-class sub_match : public std::pair<BidirectionalIterator, BidirectionalIterator>
-{
-public:
-   typedef typename iterator_traits<BidirectionalIterator>::value_type value_type;
-   typedef typename iterator_traits<BidirectionalIterator>::difference_type   difference_type;
-   typedef          BidirectionalIterator                                    iterator;
-
-   bool  matched;
-
-   difference_type length()const;
-   operator basic_string<value_type>()const;
-   basic_string<value_type> str()const;
-
-   int compare(const sub_match& s)const;
-   int compare(const basic_string<value_type>& s)const;
-   int compare(const value_type* s)const;
-#ifdef BOOST_REGEX_MATCH_EXTRA
-   typedef implementation-private capture_sequence_type;
-   const capture_sequence_type& captures()const;
-#endif
-};
-//
-// comparisons to another sub_match:
-//
-template <class BidirectionalIterator>
-bool operator == (const sub_match<BidirectionalIterator>& lhs,
-                  const sub_match<BidirectionalIterator>& rhs);
-template <class BidirectionalIterator>
-bool operator != (const sub_match<BidirectionalIterator>& lhs,
-                  const sub_match<BidirectionalIterator>& rhs);
-template <class BidirectionalIterator>
-bool operator < (const sub_match<BidirectionalIterator>& lhs,
-               const sub_match<BidirectionalIterator>& rhs);
-template <class BidirectionalIterator>
-bool operator <= (const sub_match<BidirectionalIterator>& lhs,
-                  const sub_match<BidirectionalIterator>& rhs);
-template <class BidirectionalIterator>
-bool operator >= (const sub_match<BidirectionalIterator>& lhs,
-                  const sub_match<BidirectionalIterator>& rhs);
-template <class BidirectionalIterator>
-bool operator > (const sub_match<BidirectionalIterator>& lhs,
-               const sub_match<BidirectionalIterator>& rhs);
-
-
-//
-// comparisons to a basic_string:
-//
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator == (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
-                                          traits, 
-                                          Allocator>& lhs,
-                  const sub_match<BidirectionalIterator>& rhs);
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator != (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
-                                          traits, 
-                                          Allocator>& lhs,
-                  const sub_match<BidirectionalIterator>& rhs);
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator < (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
-                                          traits, 
-                                          Allocator>& lhs,
-                  const sub_match<BidirectionalIterator>& rhs);
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator > (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
-                                          traits, 
-                                          Allocator>& lhs,
-                  const sub_match<BidirectionalIterator>& rhs);
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator >= (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
-                                          traits, 
-                                          Allocator>& lhs,
-                  const sub_match<BidirectionalIterator>& rhs);
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator <= (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
-                                          traits, 
-                                          Allocator>& lhs,
-                  const sub_match<BidirectionalIterator>& rhs);
-
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator == (const sub_match<BidirectionalIterator>& lhs,
-                  const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, 
-                                          traits, 
-                                          Allocator>& rhs);
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator != (const sub_match<BidirectionalIterator>& lhs,
-                  const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, 
-                                          traits, 
-                                          Allocator>& rhs);
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator < (const sub_match<BidirectionalIterator>& lhs,
-               const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, 
-                                       traits, 
-                                       Allocator>& rhs);
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator > (const sub_match<BidirectionalIterator>& lhs,
-               const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, 
-                                       traits, 
-                                       Allocator>& rhs);
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator >= (const sub_match<BidirectionalIterator>& lhs,
-                  const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, 
-                                       traits, 
-                                       Allocator>& rhs);
-template <class BidirectionalIterator, class traits, class Allocator> 
-bool operator <= (const sub_match<BidirectionalIterator>& lhs,
-                  const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, 
-                                          traits, 
-                                          Allocator>& rhs);
-
-//
-// comparisons to a pointer to a character array:
-//
-template <class BidirectionalIterator> 
-bool operator == (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
-                  const sub_match<BidirectionalIterator>& rhs); 
-template <class BidirectionalIterator> 
-bool operator != (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
-                  const sub_match<BidirectionalIterator>& rhs); 
-template <class BidirectionalIterator> 
-bool operator < (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
-               const sub_match<BidirectionalIterator>& rhs); 
-template <class BidirectionalIterator> 
-bool operator > (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
-               const sub_match<BidirectionalIterator>& rhs); 
-template <class BidirectionalIterator> 
-bool operator >= (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
-                  const sub_match<BidirectionalIterator>& rhs); 
-template <class BidirectionalIterator> 
-bool operator <= (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
-                  const sub_match<BidirectionalIterator>& rhs); 
-
-template <class BidirectionalIterator> 
-bool operator == (const sub_match<BidirectionalIterator>& lhs,
-                  typename iterator_traits<BidirectionalIterator>::value_type const* rhs); 
-template <class BidirectionalIterator> 
-bool operator != (const sub_match<BidirectionalIterator>& lhs,
-                  typename iterator_traits<BidirectionalIterator>::value_type const* rhs); 
-template <class BidirectionalIterator> 
-bool operator < (const sub_match<BidirectionalIterator>& lhs,
-               typename iterator_traits<BidirectionalIterator>::value_type const* rhs); 
-template <class BidirectionalIterator> 
-bool operator > (const sub_match<BidirectionalIterator>& lhs,
-               typename iterator_traits<BidirectionalIterator>::value_type const* rhs); 
-template <class BidirectionalIterator> 
-bool operator >= (const sub_match<BidirectionalIterator>& lhs,
-                  typename iterator_traits<BidirectionalIterator>::value_type const* rhs); 
-template <class BidirectionalIterator> 
-bool operator <= (const sub_match<BidirectionalIterator>& lhs,
-                  typename iterator_traits<BidirectionalIterator>::value_type const* rhs); 
-
-//
-// comparisons to a single character:
-//
-template <class BidirectionalIterator> 
-bool operator == (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
-                  const sub_match<BidirectionalIterator>& rhs); 
-template <class BidirectionalIterator> 
-bool operator != (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
-                  const sub_match<BidirectionalIterator>& rhs); 
-template <class BidirectionalIterator> 
-bool operator < (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
-               const sub_match<BidirectionalIterator>& rhs); 
-template <class BidirectionalIterator> 
-bool operator > (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
-               const sub_match<BidirectionalIterator>& rhs); 
-template <class BidirectionalIterator> 
-bool operator >= (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
-                  const sub_match<BidirectionalIterator>& rhs); 
-template <class BidirectionalIterator> 
-bool operator <= (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
-                  const sub_match<BidirectionalIterator>& rhs); 
-
-template <class BidirectionalIterator> 
-bool operator == (const sub_match<BidirectionalIterator>& lhs,
-                  typename iterator_traits<BidirectionalIterator>::value_type const& rhs); 
-template <class BidirectionalIterator> 
-bool operator != (const sub_match<BidirectionalIterator>& lhs,
-                  typename iterator_traits<BidirectionalIterator>::value_type const& rhs); 
-template <class BidirectionalIterator> 
-bool operator < (const sub_match<BidirectionalIterator>& lhs,
-               typename iterator_traits<BidirectionalIterator>::value_type const& rhs); 
-template <class BidirectionalIterator> 
-bool operator > (const sub_match<BidirectionalIterator>& lhs,
-               typename iterator_traits<BidirectionalIterator>::value_type const& rhs); 
-template <class BidirectionalIterator> 
-bool operator >= (const sub_match<BidirectionalIterator>& lhs,
-                  typename iterator_traits<BidirectionalIterator>::value_type const& rhs); 
-template <class BidirectionalIterator> 
-bool operator <= (const sub_match<BidirectionalIterator>& lhs,
-                  typename iterator_traits<BidirectionalIterator>::value_type const& rhs); 
-// 
-// addition operators: 
-//
-template <class BidirectionalIterator, class traits, class Allocator> 
-std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> 
-   operator + (const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type,
-                                       traits, 
-                                       Allocator>& s, 
-               const sub_match<BidirectionalIterator>& m); 
-template <class BidirectionalIterator, class traits, class Allocator> 
-std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator>
-   operator + (const sub_match<BidirectionalIterator>& m,
-               const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, 
-                                       traits, 
-                                       Allocator>& s); 
-template <class BidirectionalIterator> 
-std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> 
-   operator + (typename iterator_traits<BidirectionalIterator>::value_type const* s,
-               const sub_match<BidirectionalIterator>& m); 
-template <class BidirectionalIterator> 
-std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> 
-   operator + (const sub_match<BidirectionalIterator>& m,
-               typename iterator_traits<BidirectionalIterator>::value_type const * s);
-template <class BidirectionalIterator> 
-std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> 
-   operator + (typename iterator_traits<BidirectionalIterator>::value_type const& s,
-               const sub_match<BidirectionalIterator>& m); 
-template <class BidirectionalIterator> 
-std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> 
-   operator + (const sub_match<BidirectionalIterator>& m,
-               typename iterator_traits<BidirectionalIterator>::value_type const& s); 
-template <class BidirectionalIterator> 
-std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> 
-   operator + (const sub_match<BidirectionalIterator>& m1,
-               const sub_match<BidirectionalIterator>& m2);
-
-//
-// stream inserter:
-//
-template <class charT, class traits, class BidirectionalIterator>
-basic_ostream<charT, traits>&
-   operator << (basic_ostream<charT, traits>& os,
-               const sub_match<BidirectionalIterator>& m);
-
-} // namespace boost
-
-
-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/images.html boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/images.html --- boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/images.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/images.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ - - - -Images - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
-

-Images -

-

- These are tricky enough that they warrent their own section. -

-

- Let's start with a PNG file that's set to 120dpi, it should render at a sensible - size in both html and PDF forms. It should print OK too! -

-

- digamma3 -

-

- Now try again with a sample SVG image: -

-

- -

-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/lists_and_tables.html boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/lists_and_tables.html --- boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/lists_and_tables.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/lists_and_tables.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,459 +0,0 @@ - - - -Lists and Tables - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
- - -
-

-Lists -

-

- A numbered list: -

-
    -
  1. - One -
  2. -
  3. - Two -
  4. -
  5. - Three -
      -
    1. - Three.a -
    2. -
    3. - Three.b -
    4. -
    5. - Three.c -
    6. -
    -
  6. -
  7. - Four -
    1. - Four.a -
        -
      1. - Four.a.i -
      2. -
      3. - Four.a.ii -
      4. -
      -
    -
  8. -
  9. - Five -
  10. -
-

- An unordered list: -

-
    -
  • - First -
  • -
  • - Second -
  • -
  • - Third -
  • -
-

- A mixture of the two: -

-
    -
  1. - 1 -
      -
    • - 1.a -
        -
      1. - 1.a.1 -
      2. -
      3. - 1.a.2 -
      4. -
      -
    • -
    • - 1.b -
    • -
    -
  2. -
  3. - 2 -
      -
    • - 2.a -
    • -
    • - 2.b -
        -
      1. - 2.b.1 -
      2. -
      3. - 2.b.2 -
          -
        • - 2.b.2.a -
        • -
        • - 2.b.2.b -
        • -
        -
      4. -
      -
    • -
    -
  4. -
-
-
- -
-

A Variable List

-
-
term 1
-

- The definition of term 1 -

-
term 2
-

- The definition of term 2 -

-
term 3
-

- The definition of term 3 -

-
-
-
-
-

-Tables -

-

- Here's a big table with code and other tricky things: -

-
-

Table 1. Notes on the Implementation of the Beta Distribution

-
---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- Implementation Notes -

-
-

- pdf -

-
-

- f(x;α,β) = xα - 1 (1 - x)β -1 / B(α, β) -

-

- Implemented using ibeta_derivative(a, b, x). -

-
-

- cdf -

-
-

- Using the incomplete beta function ibeta(a, b, x) -

-
-

- cdf complement -

-
-

- ibetac(a, b, x) -

-
-

- quantile -

-
-

- Using the inverse incomplete beta function ibeta_inv(a, b, p) -

-
-

- quantile from the complement -

-
-

- ibetac_inv(a, b, q) -

-
-

- mean -

-
-

- a/(a+b) -

-
-

- variance -

-
-

- a * - b / - (a+b)^2 * (a + - b + - 1) -

-
-

- mode -

-
-

- (a-1) / (a - + b - + 2) -

-
-

- skewness -

-
-

- 2 (b-a) - sqrt(a+b+1)/(a+b+2) * sqrt(a - * b) -

-
-

- kurtosis excess -

-
-

- beta_dist_kurtosis -

-
-

- kurtosis -

-
-

- kurtosis + - 3 -

-
-

- parameter estimation -

-
-
-

- alpha -

-

- from mean and variance -

-
-

- mean * - (( (mean * - (1 - - mean)) / variance)- - 1) -

-
-

- beta -

-

- from mean and variance -

-
-

- (1 - - mean) * (((mean - * (1 - mean)) - /variance)-1) -

-
-

- The member functions estimate_alpha - and estimate_beta -

-

- from cdf and probability x -

-

- and either alpha - or beta -

-
-

- Implemented in terms of the inverse incomplete beta functions -

-

- ibeta_inva, and ibeta_invb respectively. -

-
-

- estimate_alpha -

-
-

- ibeta_inva(beta, - x, - probability) -

-
-

- estimate_beta -

-
-

- ibeta_invb(alpha, - x, - probability) -

-
-
-
-
-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/remez.html boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/remez.html --- boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/remez.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/remez.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,535 +0,0 @@ - - - -Sample Article (The Remez Method) - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
- -

- The Remez algorithm - is a methodology for locating the minimax rational approximation to a function. - This short article gives a brief overview of the method, but it should not - be regarded as a thorough theoretical treatment, for that you should consult - your favorite textbook. -

-

- Imagine that you want to approximate some function f(x) by way of a rational - function R(x), where R(x) may be either a polynomial P(x) or a ratio of two - polynomials P(x)/Q(x) (a rational function). Initially we'll concentrate on - the polynomial case, as it's by far the easier to deal with, later we'll extend - to the full rational function case. -

-

- We want to find the "best" rational approximation, where "best" - is defined to be the approximation that has the least deviation from f(x). - We can measure the deviation by way of an error function: -

-

- Eabs(x) = f(x) - R(x) -

-

- which is expressed in terms of absolute error, but we can equally use relative - error: -

-

- Erel(x) = (f(x) - R(x)) / |f(x)| -

-

- And indeed in general we can scale the error function in any way we want, it - makes no difference to the maths, although the two forms above cover almost - every practical case that you're likely to encounter. -

-

- The minimax rational function R(x) is then defined to be the function that - yields the smallest maximal value of the error function. Chebyshev showed that - there is a unique minimax solution for R(x) that has the following properties: -

-
    -
  • - If R(x) is a polynomial of degree N, then there are N+2 unknowns: the N+1 - coefficients of the polynomial, and maximal value of the error function. -
  • -
  • - The error function has N+1 roots, and N+2 extrema (minima and maxima). -
  • -
  • - The extrema alternate in sign, and all have the same magnitude. -
  • -
-

- That means that if we know the location of the extrema of the error function - then we can write N+2 simultaneous equations: -

-

- R(xi) + (-1)iE = f(xi) -

-

- where E is the maximal error term, and xi are the abscissa values of the N+2 - extrema of the error function. It is then trivial to solve the simultaneous - equations to obtain the polynomial coefficients and the error term. -

-

- Unfortunately we don't know where the extrema of the error function - are located! -

-
- - The Remez - Method -
-

- The Remez method is an iterative technique which, given a broad range of assumptions, - will converge on the extrema of the error function, and therefore the minimax - solution. -

-

- In the following discussion we'll use a concrete example to illustrate the - Remez method: an approximation to the function ex over the range [-1, 1]. -

-

- Before we can begin the Remez method, we must obtain an initial value for the - location of the extrema of the error function. We could "guess" these, - but a much closer first approximation can be obtained by first constructing - an interpolated polynomial approximation to f(x). -

-

- In order to obtain the N+1 coefficients of the interpolated polynomial we need - N+1 points (x0...xN): with our interpolated form passing through each of those - points that yields N+1 simultaneous equations: -

-

- f(xi) = P(xi) = c0 + c1xi ... + cNxiN -

-

- Which can be solved for the coefficients c0...cN in P(x). -

-

- Obviously this is not a minimax solution, indeed our only guarantee is that - f(x) and P(x) touch at N+1 locations, away from those points the error may - be arbitrarily large. However, we would clearly like this initial approximation - to be as close to f(x) as possible, and it turns out that using the zeros of - an orthogonal polynomial as the initial interpolation points is a good choice. - In our example we'll use the zeros of a Chebyshev polynomial as these are particularly - easy to calculate, interpolating for a polynomial of degree 4, and measuring - relative error we get the following error function: -

-

- remez-2 -

-

- Which has a peak relative error of 1.2x10-3. -

-

- While this is a pretty good approximation already, judging by the shape of - the error function we can clearly do better. Before starting on the Remez method - propper, we have one more step to perform: locate all the extrema of the error - function, and store these locations as our initial Chebyshev control - points. -

-
- - - - - -
[Note]Note
-

- In the simple case of a polynomial approximation, by interpolating through - the roots of a Chebyshev polynomial we have in fact created a Chebyshev - approximation to the function: in terms of absolute - error this is the best a priori choice for the interpolated form - we can achieve, and typically is very close to the minimax solution. -

-

- However, if we want to optimise for relative error, - or if the approximation is a rational function, then the initial Chebyshev - solution can be quite far from the ideal minimax solution. -

-

- A more technical discussion of the theory involved can be found in this - online - course. -

-
-
- - Remez Step 1 -
-

- The first step in the Remez method, given our current set of N+2 Chebyshev - control points xi, is to solve the N+2 simultaneous equations: -

-

- P(xi) + (-1)iE = f(xi) -

-

- To obtain the error term E, and the coefficients of the polynomial P(x). -

-

- This gives us a new approximation to f(x) that has the same error E - at each of the control points, and whose error function alternates - in sign at the control points. This is still not necessarily the - minimax solution though: since the control points may not be at the extrema - of the error function. After this first step here's what our approximation's - error function looks like: -

-

- remez-3 -

-

- Clearly this is still not the minimax solution since the control points are - not located at the extrema, but the maximum relative error has now dropped - to 5.6x10-4. -

-
- - Remez Step 2 -
-

- The second step is to locate the extrema of the new approximation, which we - do in two stages: first, since the error function changes sign at each control - point, we must have N+1 roots of the error function located between each pair - of N+2 control points. Once these roots are found by standard root finding - techniques, we know that N extrema are bracketed between each pair of roots, - plus two more between the endpoints of the range and the first and last roots. - The N+2 extrema can then be found using standard function minimisation techniques. -

-

- We now have a choice: multi-point exchange, or single point exchange. -

-

- In single point exchange, we move the control point nearest to the largest - extrema to the absissa value of the extrema. -

-

- In multi-point exchange we swap all the current control points, for the locations - of the extrema. -

-

- In our example we perform multi-point exchange. -

-
- - Iteration -
-

- The Remez method then performs steps 1 and 2 above iteratively until the control - points are located at the extrema of the error function: this is then the minimax - solution. -

-

- For our current example, two more iterations converges on a minimax solution - with a peak relative error of 5x10-4 and an error function that looks like: -

-

- remez-4 -

-
- - Rational - Approximations -
-

- If we wish to extend the Remez method to a rational approximation of the form -

-

- f(x) = R(x) = P(x) / Q(x) -

-

- where P(x) and Q(x) are polynomials, then we proceed as before, except that - now we have N+M+2 unknowns if P(x) is of order N and Q(x) is of order M. This - assumes that Q(x) is normalised so that it's leading coefficient is 1, giving - N+M+1 polynomial coefficients in total, plus the error term E. -

-

- The simultaneous equations to be solved are now: -

-

- P(xi) / Q(xi) + (-1)iE = f(xi) -

-

- Evaluated at the N+M+2 control points xi. -

-

- Unfortunately these equations are non-linear in the error term E: we can only - solve them if we know E, and yet E is one of the unknowns! -

-

- The method usually adopted to solve these equations is an iterative one: we - guess the value of E, solve the equations to obtain a new value for E (as well - as the polynomial coefficients), then use the new value of E as the next guess. - The method is repeated until E converges on a stable value. -

-

- These complications extend the running time required for the development of - rational approximations quite considerably. It is often desirable to obtain - a rational rather than polynomial approximation none the less: rational approximations - will often match more difficult to approximate functions, to greater accuracy, - and with greater efficiency, than their polynomial alternatives. For example, - if we takes our previous example of an approximation to ex, we obtained 5x10-4 accuracy - with an order 4 polynomial. If we move two of the unknowns into the denominator - to give a pair of order 2 polynomials, and re-minimise, then the peak relative - error drops to 8.7x10-5. That's a 5 fold increase in accuracy, for the same - number of terms overall. -

-
- - Practical - Considerations -
-

- Most treatises on approximation theory stop at this point. However, from a - practical point of view, most of the work involves finding the right approximating - form, and then persuading the Remez method to converge on a solution. -

-

- So far we have used a direct approximation: -

-

- f(x) = R(x) -

-

- But this will converge to a useful approximation only if f(x) is smooth. In - addition round-off errors when evaluating the rational form mean that this - will never get closer than within a few epsilon of machine precision. Therefore - this form of direct approximation is often reserved for situations where we - want efficiency, rather than accuracy. -

-

- The first step in improving the situation is generally to split f(x) into a - dominant part that we can compute accurately by another method, and a slowly - changing remainder which can be approximated by a rational approximation. We - might be tempted to write: -

-

- f(x) = g(x) + R(x) -

-

- where g(x) is the dominant part of f(x), but if f(x)/g(x) is approximately - constant over the interval of interest then: -

-

- f(x) = g(x)(c + R(x)) -

-

- Will yield a much better solution: here c is a constant - that is the approximate value of f(x)/g(x) and R(x) is typically tiny compared - to c. In this situation if R(x) is optimised for absolute - error, then as long as its error is small compared to the constant c, - that error will effectively get wiped out when R(x) is added to c. -

-

- The difficult part is obviously finding the right g(x) to extract from your - function: often the asymptotic behaviour of the function will give a clue, - so for example the function __erfc becomes proportional to e-x2/x as x becomes - large. Therefore using: -

-

- erfc(z) = (C + R(x)) e-x2/x -

-

- as the approximating form seems like an obvious thing to try, and does indeed - yield a useful approximation. -

-

- However, the difficulty then becomes one of converging the minimax solution. - Unfortunately, it is known that for some functions the Remez method can lead - to divergent behaviour, even when the initial starting approximation is quite - good. Furthermore, it is not uncommon for the solution obtained in the first - Remez step above to be a bad one: the equations to be solved are generally - "stiff", often very close to being singular, and assuming a solution - is found at all, round-off errors and a rapidly changing error function, can - lead to a situation where the error function does not in fact change sign at - each control point as required. If this occurs, it is fatal to the Remez method. - It is also possible to obtain solutions that are perfectly valid mathematically, - but which are quite useless computationally: either because there is an unavoidable - amount of roundoff error in the computation of the rational function, or because - the denominator has one or more roots over the interval of the approximation. - In the latter case while the approximation may have the correct limiting value - at the roots, the approximation is nonetheless useless. -

-

- Assuming that the approximation does not have any fatal errors, and that the - only issue is converging adequately on the minimax solution, the aim is to - get as close as possible to the minimax solution before beginning the Remez - method. Using the zeros of a Chebyshev polynomial for the initial interpolation - is a good start, but may not be ideal when dealing with relative errors and/or - rational (rather than polynomial) approximations. One approach is to skew the - initial interpolation points to one end: for example if we raise the roots - of the Chebyshev polynomial to a positive power greater than 1 then the roots - will be skewed towards the middle of the [-1,1] interval, while a positive - power less than one will skew them towards either end. More usefully, if we - initially rescale the points over [0,1] and then raise to a positive power, - we can skew them to the left or right. Returning to our example of ex over [-1,1], - the initial interpolated form was some way from the minimax solution: -

-

- remez-2 -

-

- However, if we first skew the interpolation points to the left (rescale them - to [0, 1], raise to the power 1.3, and then rescale back to [-1,1]) we reduce - the error from 1.3x10-3to 6x10-4: -

-

- remez-5 -

-

- It's clearly still not ideal, but it is only a few percent away from our desired - minimax solution (5x10-4). -

-
- - Remez - Method Checklist -
-

- The following lists some of the things to check if the Remez method goes wrong, - it is by no means an exhaustive list, but is provided in the hopes that it - will prove useful. -

-
    -
  • - Is the function smooth enough? Can it be better separated into a rapidly - changing part, and an asymptotic part? -
  • -
  • - Does the function being approximated have any "blips" in it? - Check for problems as the function changes computation method, or if a - root, or an infinity has been divided out. The telltale sign is if there - is a narrow region where the Remez method will not converge. -
  • -
  • - Check you have enough accuracy in your calculations: remember that the - Remez method works on the difference between the approximation and the - function being approximated: so you must have more digits of precision - available than the precision of the approximation being constructed. So - for example at double precision, you shouldn't expect to be able to get - better than a float precision approximation. -
  • -
  • - Try skewing the initial interpolated approximation to minimise the error - before you begin the Remez steps. -
  • -
  • - If the approximation won't converge or is ill-conditioned from one starting - location, try starting from a different location. -
  • -
  • - If a rational function won't converge, one can minimise a polynomial (which - presents no problems), then rotate one term from the numerator to the denominator - and minimise again. In theory one can continue moving terms one at a time - from numerator to denominator, and then re-minimising, retaining the last - set of control points at each stage. -
  • -
  • - Try using a smaller interval. It may also be possible to optimise over - one (small) interval, rescale the control points over a larger interval, - and then re-minimise. -
  • -
  • - Keep absissa values small: use a change of variable to keep the abscissa - over, say [0, b], for some smallish value b. -
  • -
-
- - References -
-

- The original references for the Remez Method and it's extension to rational - functions are unfortunately in Russian: -

-

- Remez, E.Ya., Fundamentals of numerical methods for Chebyshev approximations, - "Naukova Dumka", Kiev, 1969. -

-

- Remez, E.Ya., Gavrilyuk, V.T., Computer development of certain approaches - to the approximate construction of solutions of Chebyshev problems nonlinearly - depending on parameters, Ukr. Mat. Zh. 12 (1960), 324-338. -

-

- Gavrilyuk, V.T., Generalization of the first polynomial algorithm - of E.Ya.Remez for the problem of constructing rational-fractional Chebyshev - approximations, Ukr. Mat. Zh. 16 (1961), 575-585. -

-

- Some English language sources include: -

-

- Fraser, W., Hart, J.F., On the computation of rational approximations - to continuous functions, Comm. of the ACM 5 (1962), 401-403, 414. -

-

- Ralston, A., Rational Chebyshev approximation by Remes' algorithms, - Numer.Math. 7 (1965), no. 4, 322-330. -

-

- A. Ralston, Rational Chebyshev approximation, Mathematical Methods - for Digital Computers v. 2 (Ralston A., Wilf H., eds.), Wiley, New - York, 1967, pp. 264-284. -

-

- Hart, J.F. e.a., Computer approximations, Wiley, New York - a.o., 1968. -

-

- Cody, W.J., Fraser, W., Hart, J.F., Rational Chebyshev approximation - using linear equations, Numer.Math. 12 (1968), 242-251. -

-

- Cody, W.J., A survey of practical rational and polynomial approximation - of functions, SIAM Review 12 (1970), no. 3, 400-423. -

-

- Barrar, R.B., Loeb, H.J., On the Remez algorithm for non-linear families, - Numer.Math. 15 (1970), 382-391. -

-

- Dunham, Ch.B., Convergence of the Fraser-Hart algorithm for rational - Chebyshev approximation, Math. Comp. 29 (1975), no. 132, 1078-1082. -

-

- G. L. Litvinov, Approximate construction of rational approximations - and the effect of error autocorrection, Russian Journal of Mathematical - Physics, vol.1, No. 3, 1994. -

-
- - - -
-
-
-PrevUpHomeNext -
- - diff -Nru boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/test.html boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/test.html --- boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/test.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/document_to_test_formatting/test.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ - - - -test HTML4 symbols - - - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-PrevUpHomeNext -
-
- - -
- -

- ƒ, Α, Β, Γ, Δ, Ε, Ζ, Η, Θ, Ι, Κ, Λ, Μ, Ν, Ξ, Ο, Π, Ρ, Σ, Τ, Υ, Φ, Χ, Ψ, Ω, α, β, γ, δ, ε, ζ, η, θ, ι, κ, λ, μ, - ν, ξ, ο, π, ρ, ς, σ, τ, υ, φ, χ, ψ, ω, ϑ, ϒ, ϖ, •, …, ′, ″, ‾, ⁄, ℘, ℑ, ℜ, ™, ℵ, ←, ↑, →, ↓, ↔, ↵, ⇐, ⇑, ⇒, ⇓, - ⇔, ∀, ∂, ∃, ∅, ∇, ∈, ∉, ∋, ∏, ∑, −, ∗, √, ∝, ∞, ∠, ∧, ∨, ∩, ∪, ∫, ∴, ∼, ≅, ≈, ≠, ≡, ≤, ≥, ⊂, ⊃, ⊄, ⊆, ⊇, ⊕, ⊗, - ⊥, ⋅, ⌈, ⌉, ⌊, ⌋, 〈, 〉, ◊, ♠, ♣, ♥, ♦ -

-
-
- -

-  , ¡, ¢, £, ¤, ¥, ¦, §, ¨, ©, ª, «, ¬, ­, ®, ¯, °, ±, ², ³, ´, µ, ¶, ·, ¸, ¹, º, », ¼, ½, ¾, ¿, À, Á, Â, Ã, Ä, - Å, Æ, Ç, È, É, Ê, Ë, Ì, Í, Î, Ï, Ð, Ñ, Ò, Ó, Ô, Õ, Ö, ×, Ø, Ù, Ú, Û, Ü, Ý, Þ, ß, à, á, â, ã, ä, å, æ, ç, è, é, - ê, ë, ì, í, î, ï, ð, ñ, ò, ó, ô, õ, ö, ÷, ø, ù, ú, û, ü, ý, þ, ÿ, -

-
-
- - - -
-
-
-PrevUpHomeNext -
- - Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/doc/test/gold/images/doctest.png and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/doc/test/gold/images/doctest.png differ diff -Nru boost1.81-1.81.0/doc/test/gold/index.html boost1.81-1.81.0/doc/test/gold/index.html --- boost1.81-1.81.0/doc/test/gold/index.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/doc/test/gold/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,151 +0,0 @@ - - - -Document To Test Formatting - - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
Next
-
-
-
-

-Document To Test Formatting

-
-

-John Maddock -

-

-Joel de Guzman -

-

-Eric Niebler -

-

-Matias Capeletto -

-
-
-
-

- Distributed under the Boost Software License, Version 1.0. (See accompanying - file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -

-
-
-
-
- -
- -

- This document is purely a test case to test out HTML and PDF generation and - style. -

-

- This is some body text. -

-
int main()
-{
-    double d = 2.345;
-    return d;
-}
-
-

- We can count in Greek too: α, β, γ. -

-

- Try some superscrips and subscripts: x2, xi3, α2, βα, ⌊x⌋, ⌊α⌋, ⌈a⌉. -

-
-
- - - -

Last revised: July 22, 2010 at 21:58:58 GMT

-
-
Next
- - diff -Nru boost1.81-1.81.0/index.htm boost1.81-1.81.0/index.htm --- boost1.81-1.81.0/index.htm 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/index.htm 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ - - - - - - - - - - - - Automatic redirection failed, please go to index.html. - - - - diff -Nru boost1.81-1.81.0/index.html boost1.81-1.81.0/index.html --- boost1.81-1.81.0/index.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ - - - - - Boost C++ Libraries - - - - - - - - - -
- - boost.png (6897 bytes) -

- Release 1.81.0 -

-
- - - - - -
Getting Started    -   Libraries    -   Tools    -   Web Site    -   News    -   Community    -   FAQ    -   More Info
- - -

Welcome to the Boost C++ Libraries

- -

Boost provides free peer-reviewed portable C++ source libraries.

- -

We emphasize libraries that work well with the C++ Standard Library. - Boost libraries are intended to be widely useful, and usable across a broad - spectrum of applications. The Boost license encourages both - commercial and non-commercial use.

- -

We aim to establish "existing practice" and provide reference - implementations so that Boost libraries are suitable for eventual - standardization. Ten Boost libraries are already included in the C++ Standards Committee's - Library Technical Report (TR1) - and will be included in the upcoming revision of the C++ Standard. More - Boost libraries are proposed for the upcoming TR2.

- -

Changes in this release

- -

The release includes updates to many existing libraries. - See - Release - History for more information.

- -

Getting Started

- -

If Boost hasn't already been installed on your system, follow the - Getting Started Guide to - complete the installation. But if you've reached to this point by - installing Boost from a Windows pre-build executable or a pre-built Linux - and Unix distribution package, that's already been completed. Likewise, if - you're reading this on your organization's internal web server, the - installation is probably already complete.

- -

Contents

- -

The release directory tree contains almost all of Boost; documentation, - sources, headers, scripts, tools, and everything else a Boost user might - need!

- -

Library Documentation

- -

The starting point for the documentation of individual libraries is the - Libraries page, which gives a brief - description of each library and links to its documentation.

- -

Web Site

- -

Some general interest or often changing Boost information lives only on - the Boost web site. The release contains - links to the site, so while browsing it you'll see occasional broken links - if you aren't connected to the Internet. But everything needed to use the - Boost libraries is contained within the release.

- -

Background

- -

Read the introductory material - to help you understand what Boost is about and to help in educating your - organization about Boost.

- -

Community

- -

Boost welcomes and thrives on participation from a variety of - individuals and organizations. Many avenues for participation are available - in the Boost Community.

- - - - diff -Nru boost1.81-1.81.0/libs/algorithm/string/doc/autodoc.xml boost1.81-1.81.0/libs/algorithm/string/doc/autodoc.xml --- boost1.81-1.81.0/libs/algorithm/string/doc/autodoc.xml 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/libs/algorithm/string/doc/autodoc.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,5240 +0,0 @@ - -
-Cumulative include for string_algo library
-
-Defines sequence case-conversion algorithms. Algorithms convert each element in the input sequence to the desired case using provided locales. - - - - - - - - - - - - - - - - - - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input range const std::locale &std::locale()A locale used for conversion SequenceTconst SequenceT &const std::locale &std::locale()Convert to lower case. Each element of the input sequence is converted to lower case. The result is a copy of the input converted to lower case. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a copy of the input - - -voidWritableRangeT &A range const std::locale &std::locale()a locale used for conversion Convert to lower case. Each element of the input sequence is converted to lower case. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input range const std::locale &std::locale()A locale used for conversion SequenceTconst SequenceT &const std::locale &std::locale()Convert to upper case. Each element of the input sequence is converted to upper case. The result is a copy of the input converted to upper case. It is returned as a sequence or copied to the output iterator - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a copy of the input - - -voidWritableRangeT &An input range const std::locale &std::locale()a locale used for conversion Convert to upper case. Each element of the input sequence is converted to upper case. The input sequence is modified in-place. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Classification predicates are included in the library to give some more convenience when using algorithms like trim() and all(). They wrap functionality of STL classification functions ( e.g. std::isspace() ) into generic functors. - -unspecifiedstd::ctype_base::maskA std::ctype category const std::locale &std::locale()A locale used for classification is_classified predicate Construct the is_classified predicate. This predicate holds if the input is of specified std::ctype category. - -An instance of the is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_space predicate Construct the is_classified predicate for the ctype_base::space category. - -An instance of the is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_alnum predicate Construct the is_classified predicate for the ctype_base::alnum category. - -An instance of the is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_alpha predicate Construct the is_classified predicate for the ctype_base::alpha category. - -An instance of the is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_cntrl predicate Construct the is_classified predicate for the ctype_base::cntrl category. - -An instance of the is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_digit predicate Construct the is_classified predicate for the ctype_base::digit category. - -An instance of the is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_graph predicate Construct the is_classified predicate for the ctype_base::graph category. - -An instance of the is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_lower predicate Construct the is_classified predicate for the ctype_base::lower category. - -An instance of is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_print predicate Construct the is_classified predicate for the ctype_base::print category. - -An instance of the is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_punct predicate Construct the is_classified predicate for the ctype_base::punct category. - -An instance of the is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_upper predicate Construct the is_classified predicate for the ctype_base::upper category. - -An instance of the is_classified predicate - -unspecifiedconst std::locale &std::locale()A locale used for classification is_xdigit predicate Construct the is_classified predicate for the ctype_base::xdigit category. - -An instance of the is_classified predicate - -unspecifiedconst RangeT &A set of characters to be recognized is_any_of predicate Construct the is_any_of predicate. The predicate holds if the input is included in the specified set of characters. - -An instance of the is_any_of predicate - -unspecifiedCharTThe start of the range CharTThe end of the range is_from_range predicate Construct the is_from_range predicate. The predicate holds if the input is included in the specified range. (i.e. From <= Ch <= To ) - -An instance of the is_from_range predicate - -unspecifiedconst predicate_facade< Pred1T > &The first predicate const predicate_facade< Pred2T > &The second predicate predicate 'and' composition predicate Construct the class_and predicate. This predicate can be used to logically combine two classification predicates. class_and holds, if both predicates return true. - -An instance of the class_and predicate - -unspecifiedconst predicate_facade< Pred1T > &The first predicate const predicate_facade< Pred2T > &The second predicate predicate 'or' composition predicate Construct the class_or predicate. This predicate can be used to logically combine two classification predicates. class_or holds, if one of the predicates return true. - -An instance of the class_or predicate - -unspecifiedconst predicate_facade< PredT > &The predicate to be negated predicate negation operator Construct the class_not predicate. This predicate represents a negation. class_or holds if of the predicates return false. - -An instance of the class_not predicate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines element comparison predicates. Many algorithms in this library can take an additional argument with a predicate used to compare elements. This makes it possible, for instance, to have case insensitive versions of the algorithms. - -is_equal functor Standard STL equal_to only handle comparison between arguments of the same type. This is a less restrictive version which wraps operator ==. -boolconst T1 &const T2 &Function operator. Compare two operands for equality - -case insensitive version of is_equal Case insensitive comparison predicate. Comparison is done using specified locales. -boolconst T1 &const T2 &Function operator. Compare two operands. Case is ignored. - -const std::locale &std::locale()locales used for comparison Constructor. - -case insensitive version of is_less Case insensitive comparison predicate. Comparison is done using specified locales. -boolconst T1 &const T2 &Function operator. Compare two operands. Case is ignored. - -const std::locale &std::locale()locales used for comparison Constructor. - -is_less functor Convenient version of standard std::less. Operation is templated, therefore it is not required to specify the exact types upon the construction -boolconst T1 &const T2 &Functor operation. Compare two operands using > operator - -is_not_greater functor Convenient version of standard std::not_greater_to. Operation is templated, therefore it is not required to specify the exact types upon the construction -boolconst T1 &const T2 &Functor operation. Compare two operands using > operator - -case insensitive version of is_not_greater Case insensitive comparison predicate. Comparison is done using specified locales. -boolconst T1 &const T2 &Function operator. Compare two operands. Case is ignored. - -const std::locale &std::locale()locales used for comparison Constructor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines concepts used in string_algo library - -Finder concept. Defines the Finder concept. Finder is a functor which selects an arbitrary part of a string. Search is performed on the range specified by starting and ending iterators.Result of the find operation must be convertible to iterator_range. -void - -Formatter concept. Defines the Formatter concept. Formatter is a functor, which takes a result from a finder operation and transforms it in a specific way.Result must be a container supported by container_traits, or a reference to it. -void - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Compress adjacent tokens. Do not compress adjacent tokens. Token compression mode. Specifies token compression mode for the token_finder. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines various erase algorithms. Each algorithm removes part(s) of the input according to a searching criteria. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input sequence const iterator_range< typename range_const_iterator< RangeT >::type > &A range in the input to be removed SequenceTconst SequenceT &const iterator_range< typename range_const_iterator< SequenceT >::type > &Erase range algorithm. Remove the given range from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input sequence const iterator_range< typename range_iterator< SequenceT >::type > &A range in the input to be removed Erase range algorithm. Remove the given range from the input. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for SequenceTconst SequenceT &const RangeT &Erase first algorithm. Remove the first occurrence of the substring from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const RangeT &A substring to be searched for. Erase first algorithm. Remove the first occurrence of the substring from the input. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for const std::locale &std::locale()A locale used for case insensitive comparison SequenceTconst SequenceT &const RangeT &const std::locale &std::locale()Erase first algorithm ( case insensitive ) Remove the first occurrence of the substring from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const RangeT &A substring to be searched for const std::locale &std::locale()A locale used for case insensitive comparison Erase first algorithm ( case insensitive ) Remove the first occurrence of the substring from the input. The input sequence is modified in-place. Searching is case insensitive. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for. SequenceTconst SequenceT &const RangeT &Erase last algorithm. Remove the last occurrence of the substring from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const RangeT &A substring to be searched for Erase last algorithm. Remove the last occurrence of the substring from the input. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for const std::locale &std::locale()A locale used for case insensitive comparison SequenceTconst SequenceT &const RangeT &const std::locale &std::locale()Erase last algorithm ( case insensitive ) Remove the last occurrence of the substring from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const RangeT &A substring to be searched for const std::locale &std::locale()A locale used for case insensitive comparison Erase last algorithm ( case insensitive ) Remove the last occurrence of the substring from the input. The input sequence is modified in-place. Searching is case insensitive. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for intAn index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. SequenceTconst SequenceT &const RangeT &intErase nth algorithm. Remove the Nth occurrence of the substring in the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const RangeT &A substring to be searched for. intAn index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. Erase nth algorithm. Remove the Nth occurrence of the substring in the input. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for. intAn index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. const std::locale &std::locale()A locale used for case insensitive comparison SequenceTconst SequenceT &const RangeT &intconst std::locale &std::locale()Erase nth algorithm ( case insensitive ) Remove the Nth occurrence of the substring in the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const RangeT &A substring to be searched for. intAn index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. const std::locale &std::locale()A locale used for case insensitive comparison Erase nth algorithm. Remove the Nth occurrence of the substring in the input. The input sequence is modified in-place. Searching is case insensitive. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input sequence const Range2T &A substring to be searched for. SequenceTconst SequenceT &const RangeT &Erase all algorithm. Remove all the occurrences of the string from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const RangeT &A substring to be searched for. Erase all algorithm. Remove all the occurrences of the string from the input. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for const std::locale &std::locale()A locale used for case insensitive comparison SequenceTconst SequenceT &const RangeT &const std::locale &std::locale()Erase all algorithm ( case insensitive ) Remove all the occurrences of the string from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const RangeT &A substring to be searched for. const std::locale &std::locale()A locale used for case insensitive comparison Erase all algorithm ( case insensitive ) Remove all the occurrences of the string from the input. The input sequence is modified in-place. Searching is case insensitive. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input string intLength of the head. For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. SequenceTconst SequenceT &intErase head algorithm. Remove the head from the input. The head is a prefix of a sequence of given size. If the sequence is shorter then required, the whole string is considered to be the head. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string intLength of the head For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. Erase head algorithm. Remove the head from the input. The head is a prefix of a sequence of given size. If the sequence is shorter then required, the whole string is considered to be the head. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input string intLength of the tail.SequenceTconst SequenceT &intErase tail algorithm. Remove the tail from the input. The tail is a suffix of a sequence of given size. If the sequence is shorter then required, the whole string is considered to be the tail. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. -For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string intLength of the tail For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. Erase tail algorithm. Remove the tail from the input. The tail is a suffix of a sequence of given size. If the sequence is shorter then required, the whole string is considered to be the tail. The input sequence is modified in-place. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines a set of find algorithms. The algorithms are searching for a substring of the input. The result is given as an iterator_range delimiting the substring. - - - - - - - - - - - - - - - - - - - - - - - - -iterator_range< typename range_iterator< RangeT >::type >RangeT &A string which will be searched. const FinderT &Finder object used for searching. Generic find algorithm. Search the input using the given finder. - -An iterator_range delimiting the match. Returned iterator is either RangeT::iterator or RangeT::const_iterator, depending on the constness of the input parameter. - -iterator_range< typename range_iterator< Range1T >::type >Range1T &A string which will be searched. const Range2T &A substring to be searched for. Find first algorithm. Search for the first occurrence of the substring in the input. - -This function provides the strong exception-safety guarantee - -An iterator_range delimiting the match. Returned iterator is either RangeT::iterator or RangeT::const_iterator, depending on the constness of the input parameter. - -iterator_range< typename range_iterator< Range1T >::type >Range1T &A string which will be searched. const Range2T &A substring to be searched for. const std::locale &std::locale()A locale used for case insensitive comparison Find first algorithm ( case insensitive ) Search for the first occurrence of the substring in the input. Searching is case insensitive. - -This function provides the strong exception-safety guarantee - -An iterator_range delimiting the match. Returned iterator is either Range1T::iterator or Range1T::const_iterator, depending on the constness of the input parameter. - -iterator_range< typename range_iterator< Range1T >::type >Range1T &A string which will be searched. const Range2T &A substring to be searched for. Find last algorithm. Search for the last occurrence of the substring in the input. - -This function provides the strong exception-safety guarantee - -An iterator_range delimiting the match. Returned iterator is either Range1T::iterator or Range1T::const_iterator, depending on the constness of the input parameter. - -iterator_range< typename range_iterator< Range1T >::type >Range1T &A string which will be searched. const Range2T &A substring to be searched for. const std::locale &std::locale()A locale used for case insensitive comparison Find last algorithm ( case insensitive ) Search for the last match a string in the input. Searching is case insensitive. - -This function provides the strong exception-safety guarantee - -An iterator_range delimiting the match. Returned iterator is either Range1T::iterator or Range1T::const_iterator, depending on the constness of the input parameter. - -iterator_range< typename range_iterator< Range1T >::type >Range1T &A string which will be searched. const Range2T &A substring to be searched for. intAn index (zero-indexed) of the match to be found. For negative N, the matches are counted from the end of string. Find n-th algorithm. Search for the n-th (zero-indexed) occurrence of the substring in the input. - -An iterator_range delimiting the match. Returned iterator is either Range1T::iterator or Range1T::const_iterator, depending on the constness of the input parameter. - -iterator_range< typename range_iterator< Range1T >::type >Range1T &A string which will be searched. const Range2T &A substring to be searched for. intAn index (zero-indexed) of the match to be found. For negative N, the matches are counted from the end of string. const std::locale &std::locale()A locale used for case insensitive comparison Find n-th algorithm ( case insensitive ). Search for the n-th (zero-indexed) occurrence of the substring in the input. Searching is case insensitive. - -This function provides the strong exception-safety guarantee - -An iterator_range delimiting the match. Returned iterator is either Range1T::iterator or Range1T::const_iterator, depending on the constness of the input parameter. - -iterator_range< typename range_iterator< RangeT >::type >RangeT &An input string intLength of the head For N>=0, at most N characters are extracted. For N<0, at most size(Input)-|N| characters are extracted. Find head algorithm. Get the head of the input. Head is a prefix of the string of the given size. If the input is shorter then required, whole input is considered to be the head. - -This function provides the strong exception-safety guarantee - -An iterator_range delimiting the match. Returned iterator is either Range1T::iterator or Range1T::const_iterator, depending on the constness of the input parameter. - -iterator_range< typename range_iterator< RangeT >::type >RangeT &An input string intLength of the tail. For N>=0, at most N characters are extracted. For N<0, at most size(Input)-|N| characters are extracted. Find tail algorithm. Get the tail of the input. Tail is a suffix of the string of the given size. If the input is shorter then required, whole input is considered to be the tail. - -This function provides the strong exception-safety guarantee - -An iterator_range delimiting the match. Returned iterator is either RangeT::iterator or RangeT::const_iterator, depending on the constness of the input parameter. - -iterator_range< typename range_iterator< RangeT >::type >RangeT &A input string. PredicateTA unary predicate to identify a token token_compress_mode_typetoken_compress_offEnable/Disable compressing of adjacent tokens Find token algorithm. Look for a given token in the string. Token is a character that matches the given predicate. If the "token compress mode" is enabled, adjacent tokens are considered to be one match. - -This function provides the strong exception-safety guarantee - -An iterator_range delimiting the match. Returned iterator is either RangeT::iterator or RangeT::const_iterator, depending on the constness of the input parameter. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines generic replace algorithms. Each algorithm replaces part(s) of the input. The part to be replaced is looked up using a Finder object. Result of finding is then used by a Formatter object to generate the replacement. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input sequence FinderTA Finder object used to search for a match to be replaced FormatterTA Formatter object used to format a match SequenceTconst SequenceT &FinderTFormatterTGeneric replace algorithm. Use the Finder to search for a substring. Use the Formatter to format this substring and replace it in the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input sequence FinderTA Finder object used to search for a match to be replaced FormatterTA Formatter object used to format a match Generic replace algorithm. Use the Finder to search for a substring. Use the Formatter to format this substring and replace it in the input. The input is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input sequence FinderTA Finder object used to search for a match to be replaced FormatterTA Formatter object used to format a match SequenceTconst SequenceT &FinderTFormatterTGeneric replace all algorithm. Use the Finder to search for a substring. Use the Formatter to format this substring and replace it in the input. Repeat this for all matching substrings. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input sequence FinderTA Finder object used to search for a match to be replaced FormatterTA Formatter object used to format a match Generic replace all algorithm. Use the Finder to search for a substring. Use the Formatter to format this substring and replace it in the input. Repeat this for all matching substrings.The input is modified in-place. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines find iterator classes. Find iterator repeatedly applies a Finder to the specified input string to search for matches. Dereferencing the iterator yields the current match or a range between the last and the current match depending on the iterator used. - -iterator_facade< find_iterator< IteratorT >, const iterator_range< IteratorT >, forward_traversal_tag >find_iterator Find iterator encapsulates a Finder and allows for incremental searching in a string. Each increment moves the iterator to the next match.Find iterator is a readable forward traversal iterator.Dereferencing the iterator yields an iterator_range delimiting the current match. IteratorT -IteratorT FinderT - -find_iterator &(const find_iterator &Other){ if(this==&Other) return *this;this->base_type::operator=(Other);m_Match=Other.m_Match;m_End=Other.m_End;return *this;}Copy assignment. Assigns a copy of the find_iteratorConstructorConstruct new find_iterator for a given finder and a range. -IteratorT FinderTBeginBegin -IteratorT FinderTEnd -boolEof check. Check the eof condition. Eof condition means that there is nothing more to be searched i.e. find_iterator is after the last match. - -const find_iterator &Default constructor. Construct null iterator. All null iterators are equal. -Construct a copy of the find_iterator eof()==trueCopy constructor - -RangeT &FinderTConstructor. Construct new find_iterator for a given finder and a range. - -const match_type & -void -boolconst find_iterator & - -iterator_facade< split_iterator< IteratorT >, const iterator_range< IteratorT >, forward_traversal_tag >split_iterator Split iterator encapsulates a Finder and allows for incremental searching in a string. Unlike the find iterator, split iterator iterates through gaps between matches.Find iterator is a readable forward traversal iterator.Dereferencing the iterator yields an iterator_range delimiting the current match. IteratorT -IteratorT FinderT - -split_iterator &(const split_iterator &Other){ if(this==&Other) return *this;this->base_type::operator=(Other);m_Match=Other.m_Match;m_Next=Other.m_Next;m_End=Other.m_End;m_bEof=Other.m_bEof;return *this;}Assignment operator. Assigns a copy of the split_iteratorConstructorConstruct new split_iterator for a given finder and a range. -IteratorT FinderTBeginBegin -IteratorT FinderTBegin -IteratorT FinderTEnd -IteratorT FinderTfalse -boolEof check. Check the eof condition. Eof condition means that there is nothing more to be searched i.e. find_iterator is after the last match. - -Default constructor. Construct null iterator. All null iterators are equal. -eof()==true - -const split_iterator &Copy constructor. Construct a copy of the split_iterator -RangeT &FinderTConstructor. Construct new split_iterator for a given finder and a collection. - -const match_type & -void -boolconst split_iterator & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -find_iterator< typename range_iterator< RangeT >::type >RangeT &FinderTfind iterator construction helper Construct a find iterator to iterate through the specified string -split_iterator< typename range_iterator< RangeT >::type >RangeT &FinderTsplit iterator construction helper Construct a split iterator to iterate through the specified collection - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines Finder generators. Finder object is a functor which is able to find a substring matching a specific criteria in the input. Finders are used as a pluggable components for replace, find and split facilities. This header contains generator functions for finders provided in this library. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -unspecifiedconst RangeT &A substring to be searched for. unspecifiedconst RangeT &PredicateT"First" finder Construct the first_finder. The finder searches for the first occurrence of the string in a given input. The result is given as an iterator_range delimiting the match. - -An instance of the first_finder object - - -unspecifiedconst RangeT &A substring to be searched for. unspecifiedconst RangeT &PredicateT"Last" finder Construct the last_finder. The finder searches for the last occurrence of the string in a given input. The result is given as an iterator_range delimiting the match. - -An instance of the last_finder object - - -unspecifiedconst RangeT &A substring to be searched for. intAn index of the match to be find unspecifiedconst RangeT &intPredicateT"Nth" finder Construct the nth_finder. The finder searches for the n-th (zero-indexed) occurrence of the string in a given input. The result is given as an iterator_range delimiting the match. - -An instance of the nth_finder object - - -unspecifiedintThe size of the head "Head" finder Construct the head_finder. The finder returns a head of a given input. The head is a prefix of a string up to n elements in size. If an input has less then n elements, whole input is considered a head. The result is given as an iterator_range delimiting the match. - -An instance of the head_finder object - -unspecifiedintThe size of the head "Tail" finder Construct the tail_finder. The finder returns a tail of a given input. The tail is a suffix of a string up to n elements in size. If an input has less then n elements, whole input is considered a head. The result is given as an iterator_range delimiting the match. - -An instance of the tail_finder object - -unspecifiedPredicateTAn element selection predicate token_compress_mode_typetoken_compress_offCompress flag "Token" finder Construct the token_finder. The finder searches for a token specified by a predicate. It is similar to std::find_if algorithm, with an exception that it return a range of instead of a single iterator.If "compress token mode" is enabled, adjacent matching tokens are concatenated into one match. Thus the finder can be used to search for continuous segments of characters satisfying the given predicate.The result is given as an iterator_range delimiting the match. - -An instance of the token_finder object - -unspecifiedForwardIteratorTBeginning of the range ForwardIteratorTEnd of the range unspecifiediterator_range< ForwardIteratorT >"Range" finder Construct the range_finder. The finder does not perform any operation. It simply returns the given range for any input. - -An instance of the range_finger object - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines Formatter generators. Formatter is a functor which formats a string according to given parameters. A Formatter works in conjunction with a Finder. A Finder can provide additional information for a specific Formatter. An example of such a cooperation is regex_finder and regex_formatter.Formatters are used as pluggable components for replace facilities. This header contains generator functions for the Formatters provided in this library. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -unspecifiedconst RangeT &A predefined value used as a result for formatting Constant formatter. Constructs a const_formatter. Const formatter always returns the same value, regardless of the parameter. - -An instance of the const_formatter object. - -unspecifiedIdentity formatter. Constructs an identity_formatter. Identity formatter always returns the parameter. -An instance of the identity_formatter object. - -unspecifiedconst RangeT &Empty formatter. Constructs an empty_formatter. Empty formatter always returns an empty sequence. - -An instance of the empty_formatter object. - -unspecifiedconst FinderT &a finder used to select a portion of the formatted sequence Empty formatter. Constructs a dissect_formatter. Dissect formatter uses a specified finder to extract a portion of the formatted sequence. The first finder's match is returned as a result - -An instance of the dissect_formatter object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines generic split algorithms. Split algorithms can be used to divide a sequence into several part according to a given criteria. Result is given as a 'container of containers' where elements are copies or references to extracted parts.There are two algorithms provided. One iterates over matching substrings, the other one over the gaps between these matches. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -SequenceSequenceT &SequenceSequenceT &A 'container container' to contain the result of search. Both outer and inner container must have constructor taking a pair of iterators as an argument. Typical type of the result is std::vector<boost::iterator_range<iterator>> (each element of such a vector will container a range delimiting a match). RangeT &&A container which will be searched. FinderTA Finder object used for searching Iter find algorithm. This algorithm executes a given finder in iteration on the input, until the end of input is reached, or no match is found. Iteration is done using built-in find_iterator, so the real searching is performed only when needed. In each iteration new match is found and added to the result. - -Prior content of the result will be overwritten. - -A reference to the result - -SequenceSequenceT &SequenceSequenceT &A 'container container' to contain the result of search. Both outer and inner container must have constructor taking a pair of iterators as an argument. Typical type of the result is std::vector<boost::iterator_range<iterator>> (each element of such a vector will container a range delimiting a match). RangeT &&A container which will be searched. FinderTA finder object used for searching Split find algorithm. This algorithm executes a given finder in iteration on the input, until the end of input is reached, or no match is found. Iteration is done using built-in find_iterator, so the real searching is performed only when needed. Each match is used as a separator of segments. These segments are then returned in the result. - -Prior content of the result will be overwritten. - -A reference to the result - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines join algorithm.Join algorithm is a counterpart to split algorithms. It joins strings from a 'list' by adding user defined separator. Additionally there is a version that allows simple filtering by providing a predicate. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -range_value< SequenceSequenceT >::typeconst SequenceSequenceT &A container that holds the input strings. It must be a container-of-containers. const Range1T &A string that will separate the joined segments. Join algorithm. This algorithm joins all strings in a 'list' into one long string. Segments are concatenated by given separator. - -This function provides the strong exception-safety guarantee - -Concatenated string. - -range_value< SequenceSequenceT >::typeconst SequenceSequenceT &A container that holds the input strings. It must be a container-of-containers. const Range1T &A string that will separate the joined segments. PredicateTA segment selection predicate Conditional join algorithm. This algorithm joins all strings in a 'list' into one long string. Segments are concatenated by given separator. Only segments that satisfy the predicate will be added to the result. - -This function provides the strong exception-safety guarantee - -Concatenated string. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines string-related predicates. The predicates determine whether a substring is contained in the input string under various conditions: a string starts with the substring, ends with the substring, simply contains the substring or if both strings are equal. Additionaly the algorithm all() checks all elements of a container to satisfy a condition.All predicates provide the strong exception guarantee. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolconst Range1T &An input sequence const Range2T &A test sequence PredicateTAn element comparison predicate boolconst Range1T &const Range2T &'Starts with' predicate This predicate holds when the test string is a prefix of the Input. In other words, if the input starts with the test. When the optional predicate is specified, it is used for character-wise comparison. - -This function provides the strong exception-safety guarantee - -The result of the test - - -boolconst Range1T &An input sequence const Range2T &A test sequence const std::locale &std::locale()A locale used for case insensitive comparison 'Starts with' predicate ( case insensitive ) This predicate holds when the test string is a prefix of the Input. In other words, if the input starts with the test. Elements are compared case insensitively. - -This function provides the strong exception-safety guarantee - -The result of the test - -boolconst Range1T &An input sequence const Range2T &A test sequence PredicateTAn element comparison predicate boolconst Range1T &const Range2T &'Ends with' predicate This predicate holds when the test string is a suffix of the Input. In other words, if the input ends with the test. When the optional predicate is specified, it is used for character-wise comparison. - -This function provides the strong exception-safety guarantee - -The result of the test - - -boolconst Range1T &An input sequence const Range2T &A test sequence const std::locale &std::locale()A locale used for case insensitive comparison 'Ends with' predicate ( case insensitive ) This predicate holds when the test container is a suffix of the Input. In other words, if the input ends with the test. Elements are compared case insensitively. - -This function provides the strong exception-safety guarantee - -The result of the test - -boolconst Range1T &An input sequence const Range2T &A test sequence PredicateTAn element comparison predicate boolconst Range1T &const Range2T &'Contains' predicate This predicate holds when the test container is contained in the Input. When the optional predicate is specified, it is used for character-wise comparison. - -This function provides the strong exception-safety guarantee - -The result of the test - - -boolconst Range1T &An input sequence const Range2T &A test sequence const std::locale &std::locale()A locale used for case insensitive comparison 'Contains' predicate ( case insensitive ) This predicate holds when the test container is contained in the Input. Elements are compared case insensitively. - -This function provides the strong exception-safety guarantee - -The result of the test - -boolconst Range1T &An input sequence const Range2T &A test sequence PredicateTAn element comparison predicate boolconst Range1T &const Range2T &'Equals' predicate This predicate holds when the test container is equal to the input container i.e. all elements in both containers are same. When the optional predicate is specified, it is used for character-wise comparison. - -This is a two-way version of std::equal algorithm - -This function provides the strong exception-safety guarantee - -The result of the test - - -boolconst Range1T &An input sequence const Range2T &A test sequence const std::locale &std::locale()A locale used for case insensitive comparison 'Equals' predicate ( case insensitive ) This predicate holds when the test container is equal to the input container i.e. all elements in both containers are same. Elements are compared case insensitively. - -This is a two-way version of std::equal algorithm - -This function provides the strong exception-safety guarantee - -The result of the test - -boolconst Range1T &First argument const Range2T &Second argument PredicateTComparison predicate boolconst Range1T &const Range2T &Lexicographical compare predicate. This predicate is an overload of std::lexicographical_compare for range argumentsIt check whether the first argument is lexicographically less then the second one.If the optional predicate is specified, it is used for character-wise comparison - -This function provides the strong exception-safety guarantee - -The result of the test - - -boolconst Range1T &First argument const Range2T &Second argument const std::locale &std::locale()A locale used for case insensitive comparison Lexicographical compare predicate (case-insensitive) This predicate is an overload of std::lexicographical_compare for range arguments. It check whether the first argument is lexicographically less then the second one. Elements are compared case insensitively - -This function provides the strong exception-safety guarantee - -The result of the test - -boolconst RangeT &An input sequence PredicateTA predicate 'All' predicate This predicate holds it all its elements satisfy a given condition, represented by the predicate. - -This function provides the strong exception-safety guarantee - -The result of the test - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines regex variants of the algorithms. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -iterator_range< typename range_iterator< RangeT >::type >RangeT &A container which will be searched. const basic_regex< CharT, RegexTraitsT > &A regular expression match_flag_typematch_defaultRegex options Find regex algorithm. Search for a substring matching the given regex in the input. - -This function provides the strong exception-safety guarantee - -An iterator_range delimiting the match. Returned iterator is either RangeT::iterator or RangeT::const_iterator, depending on the constness of the input parameter. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input string const basic_regex< CharT, RegexTraitsT > &A regular expression const std::basic_string< CharT, FormatStringTraitsT, FormatStringAllocatorT > &Regex format definition match_flag_typematch_default|format_defaultRegex options SequenceTconst SequenceT &const basic_regex< CharT, RegexTraitsT > &const std::basic_string< CharT, FormatStringTraitsT, FormatStringAllocatorT > &match_flag_typematch_default|format_defaultReplace regex algorithm. Search for a substring matching given regex and format it with the specified format.The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const basic_regex< CharT, RegexTraitsT > &A regular expression const std::basic_string< CharT, FormatStringTraitsT, FormatStringAllocatorT > &Regex format definition match_flag_typematch_default|format_defaultRegex options Replace regex algorithm. Search for a substring matching given regex and format it with the specified format. The input string is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input string const basic_regex< CharT, RegexTraitsT > &A regular expression const std::basic_string< CharT, FormatStringTraitsT, FormatStringAllocatorT > &Regex format definition match_flag_typematch_default|format_defaultRegex options SequenceTconst SequenceT &const basic_regex< CharT, RegexTraitsT > &const std::basic_string< CharT, FormatStringTraitsT, FormatStringAllocatorT > &match_flag_typematch_default|format_defaultReplace all regex algorithm. Format all substrings, matching given regex, with the specified format. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const basic_regex< CharT, RegexTraitsT > &A regular expression const std::basic_string< CharT, FormatStringTraitsT, FormatStringAllocatorT > &Regex format definition match_flag_typematch_default|format_defaultRegex options Replace all regex algorithm. Format all substrings, matching given regex, with the specified format. The input string is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input string const basic_regex< CharT, RegexTraitsT > &A regular expression match_flag_typematch_defaultRegex options SequenceTconst SequenceT &const basic_regex< CharT, RegexTraitsT > &match_flag_typematch_defaultErase regex algorithm. Remove a substring matching given regex from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const basic_regex< CharT, RegexTraitsT > &A regular expression match_flag_typematch_defaultRegex options Erase regex algorithm. Remove a substring matching given regex from the input. The input string is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input string const basic_regex< CharT, RegexTraitsT > &A regular expression match_flag_typematch_defaultRegex options SequenceTconst SequenceT &const basic_regex< CharT, RegexTraitsT > &match_flag_typematch_defaultErase all regex algorithm. Erase all substrings, matching given regex, from the input. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const basic_regex< CharT, RegexTraitsT > &A regular expression match_flag_typematch_defaultRegex options Erase all regex algorithm. Erase all substrings, matching given regex, from the input. The input string is modified in-place. - -SequenceSequenceT &SequenceSequenceT &A container that can hold copies of references to the substrings. const RangeT &A container which will be searched. const basic_regex< CharT, RegexTraitsT > &A regular expression match_flag_typematch_defaultRegex options Find all regex algorithm. This algorithm finds all substrings matching the give regex in the input.Each part is copied and added as a new element to the output container. Thus the result container must be able to hold copies of the matches (in a compatible structure like std::string) or a reference to it (e.g. using the iterator range class). Examples of such a container are std::vector<std::string> or std::list<boost::iterator_range<std::string::iterator>> - -Prior content of the result will be overwritten. - -This function provides the strong exception-safety guarantee - -A reference to the result - -SequenceSequenceT &SequenceSequenceT &A container that can hold copies of references to the substrings.const RangeT &A container which will be searched. const basic_regex< CharT, RegexTraitsT > &A regular expression match_flag_typematch_defaultRegex options Split regex algorithm. Tokenize expression. This function is equivalent to C strtok. Input sequence is split into tokens, separated by separators. Separator is an every match of the given regex. Each part is copied and added as a new element to the output container. Thus the result container must be able to hold copies of the matches (in a compatible structure like std::string) or a reference to it (e.g. using the iterator range class). Examples of such a container are std::vector<std::string> or std::list<boost::iterator_range<std::string::iterator>> - -Prior content of the result will be overwritten. - -This function provides the strong exception-safety guarantee - -A reference to the result - -range_value< SequenceSequenceT >::typeconst SequenceSequenceT &A container that holds the input strings. It must be a container-of-containers. const Range1T &A string that will separate the joined segments. const basic_regex< CharT, RegexTraitsT > &A regular expression match_flag_typematch_defaultRegex options Conditional join algorithm. This algorithm joins all strings in a 'list' into one long string. Segments are concatenated by given separator. Only segments that match the given regular expression will be added to the resultThis is a specialization of join_if algorithm. - -This function provides the strong exception-safety guarantee - -Concatenated string. - - - - - - - - - - - - - -
-
-Defines the regex_finder and regex_formatter generators. These two functors are designed to work together. regex_formatter uses additional information about a match contained in the regex_finder search result. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -unspecifiedconst basic_regex< CharT, RegexTraitsT > &A regular expression match_flag_typematch_defaultRegex search options "Regex" finder Construct the regex_finder. Finder uses the regex engine to search for a match. Result is given in regex_search_result. This is an extension of the iterator_range. In addition it contains match results from the regex_search algorithm. - -An instance of the regex_finder object - -unspecifiedconst std::basic_string< CharT, TraitsT, AllocT > &Regex format definition match_flag_typeformat_defaultFormat flags Regex formatter. Construct the regex_formatter. Regex formatter uses the regex engine to format a match found by the regex_finder. This formatted it designed to closely cooperate with regex_finder. - -An instance of the regex_formatter functor - - - - - - - - - - - -
-
-Defines various replace algorithms. Each algorithm replaces part(s) of the input according to set of searching and replace criteria. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const iterator_range< typename range_const_iterator< Range1T >::type > &A range in the input to be substituted const Range2T &A substitute string SequenceTconst SequenceT &const iterator_range< typename range_const_iterator< SequenceT >::type > &const RangeT &Replace range algorithm. Replace the given range in the input string. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const iterator_range< typename range_iterator< SequenceT >::type > &A range in the input to be substituted const RangeT &A substitute string Replace range algorithm. Replace the given range in the input string. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for const Range3T &A substitute string SequenceTconst SequenceT &const Range1T &const Range2T &Replace first algorithm. Replace the first match of the search substring in the input with the format string. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const Range1T &A substring to be searched for const Range2T &A substitute string Replace first algorithm. replace the first match of the search substring in the input with the format string. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for const Range3T &A substitute string const std::locale &std::locale()A locale used for case insensitive comparison SequenceTconst SequenceT &const Range2T &const Range1T &const std::locale &std::locale()Replace first algorithm ( case insensitive ) Replace the first match of the search substring in the input with the format string. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const Range1T &A substring to be searched for const Range2T &A substitute string const std::locale &std::locale()A locale used for case insensitive comparison Replace first algorithm ( case insensitive ) Replace the first match of the search substring in the input with the format string. Input sequence is modified in-place. Searching is case insensitive. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for const Range3T &A substitute string SequenceTconst SequenceT &const Range1T &const Range2T &Replace last algorithm. Replace the last match of the search string in the input with the format string. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const Range1T &A substring to be searched for const Range2T &A substitute string Replace last algorithm. Replace the last match of the search string in the input with the format string. Input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for const Range3T &A substitute string const std::locale &std::locale()A locale used for case insensitive comparison SequenceTconst SequenceT &const Range1T &const Range2T &const std::locale &std::locale()Replace last algorithm ( case insensitive ) Replace the last match of the search string in the input with the format string. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const Range1T &A substring to be searched for const Range2T &A substitute string const std::locale &std::locale()A locale used for case insensitive comparison Replace last algorithm ( case insensitive ) Replace the last match of the search string in the input with the format string.The input sequence is modified in-place. Searching is case insensitive. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for intAn index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. const Range3T &A substitute string SequenceTconst SequenceT &const Range1T &intconst Range2T &Replace nth algorithm. Replace an Nth (zero-indexed) match of the search string in the input with the format string. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const Range1T &A substring to be searched for intAn index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. const Range2T &A substitute string Replace nth algorithm. Replace an Nth (zero-indexed) match of the search string in the input with the format string. Input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for intAn index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. const Range3T &A substitute string const std::locale &std::locale()A locale used for case insensitive comparison SequenceTconst SequenceT &const Range1T &intconst Range2T &const std::locale &std::locale()Replace nth algorithm ( case insensitive ) Replace an Nth (zero-indexed) match of the search string in the input with the format string. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const Range1T &A substring to be searched for intAn index of the match to be replaced. The index is 0-based. For negative N, matches are counted from the end of string. const Range2T &A substitute string const std::locale &std::locale()A locale used for case insensitive comparison Replace nth algorithm ( case insensitive ) Replace an Nth (zero-indexed) match of the search string in the input with the format string. Input sequence is modified in-place. Searching is case insensitive. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for const Range3T &A substitute string SequenceTconst SequenceT &const Range1T &const Range2T &Replace all algorithm. Replace all occurrences of the search string in the input with the format string. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const Range1T &A substring to be searched for const Range2T &A substitute string Replace all algorithm. Replace all occurrences of the search string in the input with the format string. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string const Range2T &A substring to be searched for const Range3T &A substitute string const std::locale &std::locale()A locale used for case insensitive comparison SequenceTconst SequenceT &const Range1T &const Range2T &const std::locale &std::locale()Replace all algorithm ( case insensitive ) Replace all occurrences of the search string in the input with the format string. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. Searching is case insensitive. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string const Range1T &A substring to be searched for const Range2T &A substitute string const std::locale &std::locale()A locale used for case insensitive comparison Replace all algorithm ( case insensitive ) Replace all occurrences of the search string in the input with the format string.The input sequence is modified in-place. Searching is case insensitive. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string intLength of the head. For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. const Range2T &A substitute string SequenceTconst SequenceT &intconst RangeT &Replace head algorithm. Replace the head of the input with the given format string. The head is a prefix of a string of given size. If the sequence is shorter then required, whole string if considered to be the head. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string intLength of the head. For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. const RangeT &A substitute string Replace head algorithm. Replace the head of the input with the given format string. The head is a prefix of a string of given size. If the sequence is shorter then required, the whole string is considered to be the head. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const Range1T &An input string intLength of the tail. For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. const Range2T &A substitute string SequenceTconst SequenceT &intconst RangeT &Replace tail algorithm. Replace the tail of the input with the given format string. The tail is a suffix of a string of given size. If the sequence is shorter then required, whole string is considered to be the tail. The result is a modified copy of the input. It is returned as a sequence or copied to the output iterator. - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a modified copy of the input - - -voidSequenceT &An input string intLength of the tail. For N>=0, at most N characters are extracted. For N<0, size(Input)-|N| characters are extracted. const RangeT &A substitute string Replace tail algorithm. Replace the tail of the input with the given format sequence. The tail is a suffix of a string of given size. If the sequence is shorter then required, the whole string is considered to be the tail. The input sequence is modified in-place. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Traits defined in this header are used by various algorithms to achieve better performance for specific containers. Traits provide fail-safe defaults. If a container supports some of these features, it is possible to specialize the specific trait for this container. For lacking compilers, it is possible of define an override for a specific tester function.Due to a language restriction, it is not currently possible to define specializations for stl containers without including the corresponding header. To decrease the overhead needed by this inclusion, user can selectively include a specialization header for a specific container. They are located in boost/algorithm/string/stl directory. Alternatively she can include boost/algorithm/string/std_collection_traits.hpp header which contains specializations for all stl containers. - -Const time erase trait. This trait specifies that the sequence's erase method has constant time complexity. mpl::bool_< has_const_time_erase< T >::value > -const bool -Const time insert trait. This trait specifies that the sequence's insert method has constant time complexity. mpl::bool_< has_const_time_insert< T >::value > -const bool -Native replace trait. This trait specifies that the sequence has std::string like replace method mpl::bool_< has_native_replace< T >::value > -const bool -Stable iterators trait. This trait specifies that the sequence has stable iterators. It means that operations like insert/erase/replace do not invalidate iterators. mpl::bool_< has_stable_iterators< T >::value > -const bool - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines basic split algorithms. Split algorithms can be used to divide a string into several parts according to given criteria.Each part is copied and added as a new element to the output container. Thus the result container must be able to hold copies of the matches (in a compatible structure like std::string) or a reference to it (e.g. using the iterator range class). Examples of such a container are std::vector<std::string> or std::list<boost::iterator_range<std::string::iterator>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -SequenceSequenceT &SequenceSequenceT &A container that can hold copies of references to the substrings Range1T &&A container which will be searched. const Range2T &A substring to be searched for. Find all algorithm. This algorithm finds all occurrences of the search string in the input.Each part is copied and added as a new element to the output container. Thus the result container must be able to hold copies of the matches (in a compatible structure like std::string) or a reference to it (e.g. using the iterator range class). Examples of such a container are std::vector<std::string> or std::list<boost::iterator_range<std::string::iterator>> - -Prior content of the result will be overwritten. - -This function provides the strong exception-safety guarantee - -A reference the result - -SequenceSequenceT &SequenceSequenceT &A container that can hold copies of references to the substrings Range1T &&A container which will be searched. const Range2T &A substring to be searched for. const std::locale &std::locale()A locale used for case insensitive comparison Find all algorithm ( case insensitive ) This algorithm finds all occurrences of the search string in the input. Each part is copied and added as a new element to the output container. Thus the result container must be able to hold copies of the matches (in a compatible structure like std::string) or a reference to it (e.g. using the iterator range class). Examples of such a container are std::vector<std::string> or std::list<boost::iterator_range<std::string::iterator>> Searching is case insensitive. - -Prior content of the result will be overwritten. - -This function provides the strong exception-safety guarantee - -A reference the result - -SequenceSequenceT &SequenceSequenceT &A container that can hold copies of references to the substringsRangeT &&A container which will be searched. PredicateTA predicate to identify separators. This predicate is supposed to return true if a given element is a separator. token_compress_mode_typetoken_compress_offIf eCompress argument is set to token_compress_on, adjacent separators are merged together. Otherwise, every two separators delimit a token. Split algorithm. Tokenize expression. This function is equivalent to C strtok. Input sequence is split into tokens, separated by separators. Separators are given by means of the predicate.Each part is copied and added as a new element to the output container. Thus the result container must be able to hold copies of the matches (in a compatible structure like std::string) or a reference to it (e.g. using the iterator range class). Examples of such a container are std::vector<std::string> or std::list<boost::iterator_range<std::string::iterator>> - -Prior content of the result will be overwritten. - -This function provides the strong exception-safety guarantee - -A reference the result - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-This file includes sequence traits for stl containers.
-
-Defines trim algorithms. Trim algorithms are used to remove trailing and leading spaces from a sequence (string). Space is recognized using given locales.Parametric (_if) variants use a predicate (functor) to select which characters are to be trimmed.. Functions take a selection predicate as a parameter, which is used to determine whether a character is a space. Common predicates are provided in classification.hpp header. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input range PredicateTA unary predicate identifying spaces SequenceTconst SequenceT &PredicateTLeft trim - parametric. Remove all leading spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The result is a trimmed copy of the input. It is returned as a sequence or copied to the output iterator - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a copy of the input - - -SequenceTconst SequenceT &An input sequence const std::locale &std::locale()a locale used for 'space' classification Left trim - parametric. Remove all leading spaces from the input. The result is a trimmed copy of the input. - -This function provides the strong exception-safety guarantee - -A trimmed copy of the input - -voidSequenceT &An input sequence PredicateTA unary predicate identifying spaces Left trim. Remove all leading spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The input sequence is modified in-place. - -voidSequenceT &An input sequence const std::locale &std::locale()A locale used for 'space' classification Left trim. Remove all leading spaces from the input. The Input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input range PredicateTA unary predicate identifying spaces SequenceTconst SequenceT &PredicateTRight trim - parametric. Remove all trailing spaces from the input.The supplied predicate is used to determine which characters are considered spaces. The result is a trimmed copy of the input. It is returned as a sequence or copied to the output iterator - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a copy of the input - - -SequenceTconst SequenceT &An input sequence const std::locale &std::locale()A locale used for 'space' classification Right trim. Remove all trailing spaces from the input. The result is a trimmed copy of the input - -This function provides the strong exception-safety guarantee - -A trimmed copy of the input - -voidSequenceT &An input sequence PredicateTA unary predicate identifying spaces Right trim - parametric. Remove all trailing spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The input sequence is modified in-place. - -voidSequenceT &An input sequence const std::locale &std::locale()A locale used for 'space' classification Right trim. Remove all trailing spaces from the input. The input sequence is modified in-place. - -OutputIteratorTOutputIteratorTAn output iterator to which the result will be copied const RangeT &An input range PredicateTA unary predicate identifying spaces SequenceTconst SequenceT &PredicateTTrim - parametric. Remove all trailing and leading spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The result is a trimmed copy of the input. It is returned as a sequence or copied to the output iterator - -The second variant of this function provides the strong exception-safety guarantee - -An output iterator pointing just after the last inserted character or a copy of the input - - -SequenceTconst SequenceT &An input sequence const std::locale &std::locale()A locale used for 'space' classification Trim. Remove all leading and trailing spaces from the input. The result is a trimmed copy of the input - -This function provides the strong exception-safety guarantee - -A trimmed copy of the input - -voidSequenceT &An input sequence PredicateTA unary predicate identifying spaces Trim. Remove all leading and trailing spaces from the input. The supplied predicate is used to determine which characters are considered spaces. The input sequence is modified in-place. - -voidSequenceT &An input sequence const std::locale &std::locale()A locale used for 'space' classification Trim. Remove all leading and trailing spaces from the input. The input sequence is modified in-place. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines trim_all algorithms.Just like trim, trim_all removes all trailing and leading spaces from a sequence (string). In addition, spaces in the middle of the sequence are truncated to just one character. Space is recognized using given locales.trim_fill acts as trim_all, but the spaces in the middle are replaces with a user-define sequence of character.Parametric (_if) variants use a predicate (functor) to select which characters are to be trimmed.. Functions take a selection predicate as a parameter, which is used to determine whether a character is a space. Common predicates are provided in classification.hpp header. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -SequenceTconst SequenceT &An input sequence PredicateTA unary predicate identifying spaces Trim All - parametric. Remove all leading and trailing spaces from the input and compress all other spaces to a single character. The result is a trimmed copy of the input - -A trimmed copy of the input - -voidSequenceT &An input sequence PredicateTA unary predicate identifying spaces Trim All. Remove all leading and trailing spaces from the input and compress all other spaces to a single character. The input sequence is modified in-place. - -SequenceTconst SequenceT &An input sequence const std::locale &std::locale()A locale used for 'space' classification Trim All. Remove all leading and trailing spaces from the input and compress all other spaces to a single character. The result is a trimmed copy of the input - -A trimmed copy of the input - -voidSequenceT &An input sequence const std::locale &std::locale()A locale used for 'space' classification Trim All. Remove all leading and trailing spaces from the input and compress all other spaces to a single character. The input sequence is modified in-place. - -A trimmed copy of the input - -SequenceTconst SequenceT &An input sequence const RangeT &A string used to fill the inner spaces PredicateTA unary predicate identifying spaces Trim Fill - parametric. Remove all leading and trailing spaces from the input and replace all every block of consecutive spaces with a fill string defined by user. The result is a trimmed copy of the input - -A trimmed copy of the input - -voidSequenceT &An input sequence const RangeT &A string used to fill the inner spaces PredicateTA unary predicate identifying spaces Trim Fill. Remove all leading and trailing spaces from the input and replace all every block of consecutive spaces with a fill string defined by user. The input sequence is modified in-place. - -SequenceTconst SequenceT &An input sequence const RangeT &A string used to fill the inner spaces const std::locale &std::locale()A locale used for 'space' classification Trim Fill. Remove all leading and trailing spaces from the input and replace all every block of consecutive spaces with a fill string defined by user. The result is a trimmed copy of the input - -A trimmed copy of the input - -voidSequenceT &An input sequence const RangeT &A string used to fill the inner spaces const std::locale &std::locale()A locale used for 'space' classification Trim Fill. Remove all leading and trailing spaces from the input and replace all every block of consecutive spaces with a fill string defined by user. The input sequence is modified in-place. - -A trimmed copy of the input - - - -
-
-Cumulative include for string_algo library. In addition to string.hpp contains also regex-related stuff.
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/algorithm/string/doc/external_concepts.html boost1.81-1.81.0/libs/algorithm/string/doc/external_concepts.html --- boost1.81-1.81.0/libs/algorithm/string/doc/external_concepts.html 2023-08-04 06:01:44.000000000 +0000 +++ boost1.81-1.81.0/libs/algorithm/string/doc/external_concepts.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ - Concepts and External Concepts

Concepts and External Concepts

Generic programming in C++ is characterized by the use of function and class templates where - the template parameter(s) must satisfy certain requirements.Often these - requirements are so important that we give them a name: we call - such a set of type requirements a concept. We say that a type - conforms to a concept or that it is a model of a concept if it - satisfies all of those requirements. The concept can be specified as a set - of member functions with well-defined semantics - and a set of nested typedefs with well-defined properties.

Often it much more flexible to provide free-standing functions and typedefs - which provides the exact same semantics (but a different syntax) as - specified - by the concept. This allows generic code to treat different types as if - they fulfilled the concept. In this case we say that the concept has - been externalized or that the new requirements constitutes an external - concept . We say that a type conforms to an external concept - or that it is a model of an external concept . A concept may exist - without a corresponding external concept and conversely.

Whenever a concept specifies a member function, the corresponding external - concept - must specify a free-standing function of the same name, same return type and - the same argument list except there is an extra first argument which must - be of the type (or a reference to that type) that is to fulfill the external - concept. If the corresonding member function has any cv-qulifiers, the - first argument must have the same cv-qualifiers. Whenever a concept - specifies a nested typedef, the corresponding external concept - specifies a type-generator, that is, a type with a nested typedef - named type. The type-generator has the name as the nested typedef with - _of appended. - The converse relationship of an external concept and its corresponding concept - also holds.

Example:

A type T fulfills the FooConcept if it - has the follwing public members:

void T::foo( int ) const;
- int T::bar();
- typedef implementation defined foo_type;

The corresponding external concept is the ExternalFooConcept.

A type T fullfills the ExternalFooConcept if these - free-standing functions and type-generators exists:

void foo( const T&, int );
- int bar( T& );
- foo_type_of< T >::type;



Literature


© Thorsten Ottosen 2003-2004 (nesotto_AT_cs.auc.dk). -
Use, modification and distribution is subject to the Boost - Software License, Version 1.0. (See accompanying file - LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -
-

- diff -Nru boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_1K.html boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_1K.html --- boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_1K.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_1K.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ - - - - -The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the
- - - - diff -Nru boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_2K.html boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_2K.html --- boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_2K.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_2K.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ - - - - -The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps ove
- - - - diff -Nru boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_4K.html boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_4K.html --- boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_4K.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_4K.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ - - - - -The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox
- - - - diff -Nru boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_8K.html boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_8K.html --- boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_8K.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/asio/example/cpp03/http/doc_root/data_8K.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,175 +0,0 @@ - - - - -The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-The quick brown fox jumps over the lazy dog
-.... - - - - diff -Nru boost1.81-1.81.0/libs/asio/index.html boost1.81-1.81.0/libs/asio/index.html --- boost1.81-1.81.0/libs/asio/index.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/asio/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ - - - Boost.Asio - - - -

- Automatic redirection failed, please go to - ../../doc/html/boost_asio.html -

-
-

- Copyright (c) 2008 Christopher M. Kohlhoff -

-

- Distributed under the Boost Software License, Version 1.0. (See accompanying - file LICENSE_1_0.txt or copy at - www.boost.org/LICENSE_1_0.txt) -

- - diff -Nru boost1.81-1.81.0/libs/beast/example/websocket/server/chat-multi/chat_client.html boost1.81-1.81.0/libs/beast/example/websocket/server/chat-multi/chat_client.html --- boost1.81-1.81.0/libs/beast/example/websocket/server/chat-multi/chat_client.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/example/websocket/server/chat-multi/chat_client.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ - - - - - Boost.Beast WebSocket Chat Client - - -

Boost.Beast WebSocket Chat Client

-

- Boost.Beast - Source Code -

- Server URI: - -
- Your Name:
-

-  
- Message
- - -
- - - diff -Nru boost1.81-1.81.0/libs/beast/index.html boost1.81-1.81.0/libs/beast/index.html --- boost1.81-1.81.0/libs/beast/index.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ - - - Boost.Beast - - - - Automatic redirection failed, please go to - ./doc/html/index.html -
- - Boost.Beast
-
- Copyright (C) 2016-2017 Vinnie Falco
-
- Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt)
-
-
- - diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/AssemblyInfo.cs boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/AssemblyInfo.cs --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/AssemblyInfo.cs 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/AssemblyInfo.cs 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -// -[assembly: AssemblyTitle("DotZLib")] -[assembly: AssemblyDescription(".Net bindings for ZLib compression dll 1.2.x")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Henrik Ravn")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("(c) 2004 by Henrik Ravn")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: - -[assembly: AssemblyVersion("1.0.*")] - -// -// In order to sign your assembly you must specify a key to use. Refer to the -// Microsoft .NET Framework documentation for more information on assembly signing. -// -// Use the attributes below to control which key is used for signing. -// -// Notes: -// (*) If no key is specified, the assembly is not signed. -// (*) KeyName refers to a key that has been installed in the Crypto Service -// Provider (CSP) on your machine. KeyFile refers to a file which contains -// a key. -// (*) If the KeyFile and the KeyName values are both specified, the -// following processing occurs: -// (1) If the KeyName can be found in the CSP, that key is used. -// (2) If the KeyName does not exist and the KeyFile does exist, the key -// in the KeyFile is installed into the CSP and used. -// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. -// When specifying the KeyFile, the location of the KeyFile should be -// relative to the project output directory which is -// %Project Directory%\obj\. For example, if your KeyFile is -// located in the project directory, you would specify the AssemblyKeyFile -// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] -// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework -// documentation for more information on this. -// -[assembly: AssemblyDelaySign(false)] -[assembly: AssemblyKeyFile("")] -[assembly: AssemblyKeyName("")] diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/ChecksumImpl.cs boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/ChecksumImpl.cs --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/ChecksumImpl.cs 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/ChecksumImpl.cs 1970-01-01 00:00:00.000000000 +0000 @@ -1,202 +0,0 @@ -// -// © Copyright Henrik Ravn 2004 -// -// Use, modification and distribution are subject to the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -using System; -using System.Runtime.InteropServices; -using System.Text; - - -namespace DotZLib -{ - #region ChecksumGeneratorBase - /// - /// Implements the common functionality needed for all s - /// - /// - public abstract class ChecksumGeneratorBase : ChecksumGenerator - { - /// - /// The value of the current checksum - /// - protected uint _current; - - /// - /// Initializes a new instance of the checksum generator base - the current checksum is - /// set to zero - /// - public ChecksumGeneratorBase() - { - _current = 0; - } - - /// - /// Initializes a new instance of the checksum generator basewith a specified value - /// - /// The value to set the current checksum to - public ChecksumGeneratorBase(uint initialValue) - { - _current = initialValue; - } - - /// - /// Resets the current checksum to zero - /// - public void Reset() { _current = 0; } - - /// - /// Gets the current checksum value - /// - public uint Value { get { return _current; } } - - /// - /// Updates the current checksum with part of an array of bytes - /// - /// The data to update the checksum with - /// Where in data to start updating - /// The number of bytes from data to use - /// The sum of offset and count is larger than the length of data - /// data is a null reference - /// Offset or count is negative. - /// All the other Update methods are implmeneted in terms of this one. - /// This is therefore the only method a derived class has to implement - public abstract void Update(byte[] data, int offset, int count); - - /// - /// Updates the current checksum with an array of bytes. - /// - /// The data to update the checksum with - public void Update(byte[] data) - { - Update(data, 0, data.Length); - } - - /// - /// Updates the current checksum with the data from a string - /// - /// The string to update the checksum with - /// The characters in the string are converted by the UTF-8 encoding - public void Update(string data) - { - Update(Encoding.UTF8.GetBytes(data)); - } - - /// - /// Updates the current checksum with the data from a string, using a specific encoding - /// - /// The string to update the checksum with - /// The encoding to use - public void Update(string data, Encoding encoding) - { - Update(encoding.GetBytes(data)); - } - - } - #endregion - - #region CRC32 - /// - /// Implements a CRC32 checksum generator - /// - public sealed class CRC32Checksum : ChecksumGeneratorBase - { - #region DLL imports - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern uint crc32(uint crc, int data, uint length); - - #endregion - - /// - /// Initializes a new instance of the CRC32 checksum generator - /// - public CRC32Checksum() : base() {} - - /// - /// Initializes a new instance of the CRC32 checksum generator with a specified value - /// - /// The value to set the current checksum to - public CRC32Checksum(uint initialValue) : base(initialValue) {} - - /// - /// Updates the current checksum with part of an array of bytes - /// - /// The data to update the checksum with - /// Where in data to start updating - /// The number of bytes from data to use - /// The sum of offset and count is larger than the length of data - /// data is a null reference - /// Offset or count is negative. - public override void Update(byte[] data, int offset, int count) - { - if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); - if ((offset+count) > data.Length) throw new ArgumentException(); - GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned); - try - { - _current = crc32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count); - } - finally - { - hData.Free(); - } - } - - } - #endregion - - #region Adler - /// - /// Implements a checksum generator that computes the Adler checksum on data - /// - public sealed class AdlerChecksum : ChecksumGeneratorBase - { - #region DLL imports - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern uint adler32(uint adler, int data, uint length); - - #endregion - - /// - /// Initializes a new instance of the Adler checksum generator - /// - public AdlerChecksum() : base() {} - - /// - /// Initializes a new instance of the Adler checksum generator with a specified value - /// - /// The value to set the current checksum to - public AdlerChecksum(uint initialValue) : base(initialValue) {} - - /// - /// Updates the current checksum with part of an array of bytes - /// - /// The data to update the checksum with - /// Where in data to start updating - /// The number of bytes from data to use - /// The sum of offset and count is larger than the length of data - /// data is a null reference - /// Offset or count is negative. - public override void Update(byte[] data, int offset, int count) - { - if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); - if ((offset+count) > data.Length) throw new ArgumentException(); - GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned); - try - { - _current = adler32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count); - } - finally - { - hData.Free(); - } - } - - } - #endregion - -} \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/CircularBuffer.cs boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/CircularBuffer.cs --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/CircularBuffer.cs 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/CircularBuffer.cs 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -// -// © Copyright Henrik Ravn 2004 -// -// Use, modification and distribution are subject to the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -using System; -using System.Diagnostics; - -namespace DotZLib -{ - - /// - /// This class implements a circular buffer - /// - internal class CircularBuffer - { - #region Private data - private int _capacity; - private int _head; - private int _tail; - private int _size; - private byte[] _buffer; - #endregion - - public CircularBuffer(int capacity) - { - Debug.Assert( capacity > 0 ); - _buffer = new byte[capacity]; - _capacity = capacity; - _head = 0; - _tail = 0; - _size = 0; - } - - public int Size { get { return _size; } } - - public int Put(byte[] source, int offset, int count) - { - Debug.Assert( count > 0 ); - int trueCount = Math.Min(count, _capacity - Size); - for (int i = 0; i < trueCount; ++i) - _buffer[(_tail+i) % _capacity] = source[offset+i]; - _tail += trueCount; - _tail %= _capacity; - _size += trueCount; - return trueCount; - } - - public bool Put(byte b) - { - if (Size == _capacity) // no room - return false; - _buffer[_tail++] = b; - _tail %= _capacity; - ++_size; - return true; - } - - public int Get(byte[] destination, int offset, int count) - { - int trueCount = Math.Min(count,Size); - for (int i = 0; i < trueCount; ++i) - destination[offset + i] = _buffer[(_head+i) % _capacity]; - _head += trueCount; - _head %= _capacity; - _size -= trueCount; - return trueCount; - } - - public int Get() - { - if (Size == 0) - return -1; - - int result = (int)_buffer[_head++ % _capacity]; - --_size; - return result; - } - - } -} diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/CodecBase.cs boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/CodecBase.cs --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/CodecBase.cs 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/CodecBase.cs 1970-01-01 00:00:00.000000000 +0000 @@ -1,198 +0,0 @@ -// -// © Copyright Henrik Ravn 2004 -// -// Use, modification and distribution are subject to the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -using System; -using System.Runtime.InteropServices; - -namespace DotZLib -{ - /// - /// Implements the common functionality needed for all s - /// - public abstract class CodecBase : Codec, IDisposable - { - - #region Data members - - /// - /// Instance of the internal zlib buffer structure that is - /// passed to all functions in the zlib dll - /// - internal ZStream _ztream = new ZStream(); - - /// - /// True if the object instance has been disposed, false otherwise - /// - protected bool _isDisposed = false; - - /// - /// The size of the internal buffers - /// - protected const int kBufferSize = 16384; - - private byte[] _outBuffer = new byte[kBufferSize]; - private byte[] _inBuffer = new byte[kBufferSize]; - - private GCHandle _hInput; - private GCHandle _hOutput; - - private uint _checksum = 0; - - #endregion - - /// - /// Initializes a new instance of the CodeBase class. - /// - public CodecBase() - { - try - { - _hInput = GCHandle.Alloc(_inBuffer, GCHandleType.Pinned); - _hOutput = GCHandle.Alloc(_outBuffer, GCHandleType.Pinned); - } - catch (Exception) - { - CleanUp(false); - throw; - } - } - - - #region Codec Members - - /// - /// Occurs when more processed data are available. - /// - public event DataAvailableHandler DataAvailable; - - /// - /// Fires the event - /// - protected void OnDataAvailable() - { - if (_ztream.total_out > 0) - { - if (DataAvailable != null) - DataAvailable( _outBuffer, 0, (int)_ztream.total_out); - resetOutput(); - } - } - - /// - /// Adds more data to the codec to be processed. - /// - /// Byte array containing the data to be added to the codec - /// Adding data may, or may not, raise the DataAvailable event - public void Add(byte[] data) - { - Add(data,0,data.Length); - } - - /// - /// Adds more data to the codec to be processed. - /// - /// Byte array containing the data to be added to the codec - /// The index of the first byte to add from data - /// The number of bytes to add - /// Adding data may, or may not, raise the DataAvailable event - /// This must be implemented by a derived class - public abstract void Add(byte[] data, int offset, int count); - - /// - /// Finishes up any pending data that needs to be processed and handled. - /// - /// This must be implemented by a derived class - public abstract void Finish(); - - /// - /// Gets the checksum of the data that has been added so far - /// - public uint Checksum { get { return _checksum; } } - - #endregion - - #region Destructor & IDisposable stuff - - /// - /// Destroys this instance - /// - ~CodecBase() - { - CleanUp(false); - } - - /// - /// Releases any unmanaged resources and calls the method of the derived class - /// - public void Dispose() - { - CleanUp(true); - } - - /// - /// Performs any codec specific cleanup - /// - /// This must be implemented by a derived class - protected abstract void CleanUp(); - - // performs the release of the handles and calls the dereived CleanUp() - private void CleanUp(bool isDisposing) - { - if (!_isDisposed) - { - CleanUp(); - if (_hInput.IsAllocated) - _hInput.Free(); - if (_hOutput.IsAllocated) - _hOutput.Free(); - - _isDisposed = true; - } - } - - - #endregion - - #region Helper methods - - /// - /// Copies a number of bytes to the internal codec buffer - ready for proccesing - /// - /// The byte array that contains the data to copy - /// The index of the first byte to copy - /// The number of bytes to copy from data - protected void copyInput(byte[] data, int startIndex, int count) - { - Array.Copy(data, startIndex, _inBuffer,0, count); - _ztream.next_in = _hInput.AddrOfPinnedObject(); - _ztream.total_in = 0; - _ztream.avail_in = (uint)count; - - } - - /// - /// Resets the internal output buffers to a known state - ready for processing - /// - protected void resetOutput() - { - _ztream.total_out = 0; - _ztream.avail_out = kBufferSize; - _ztream.next_out = _hOutput.AddrOfPinnedObject(); - } - - /// - /// Updates the running checksum property - /// - /// The new checksum value - protected void setChecksum(uint newSum) - { - _checksum = newSum; - } - #endregion - - } -} diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/Deflater.cs boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/Deflater.cs --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/Deflater.cs 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/Deflater.cs 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -// -// © Copyright Henrik Ravn 2004 -// -// Use, modification and distribution are subject to the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -using System; -using System.Diagnostics; -using System.Runtime.InteropServices; - -namespace DotZLib -{ - - /// - /// Implements a data compressor, using the deflate algorithm in the ZLib dll - /// - public sealed class Deflater : CodecBase - { - #region Dll imports - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)] - private static extern int deflateInit_(ref ZStream sz, int level, string vs, int size); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int deflate(ref ZStream sz, int flush); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int deflateReset(ref ZStream sz); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int deflateEnd(ref ZStream sz); - #endregion - - /// - /// Constructs an new instance of the Deflater - /// - /// The compression level to use for this Deflater - public Deflater(CompressLevel level) : base() - { - int retval = deflateInit_(ref _ztream, (int)level, Info.Version, Marshal.SizeOf(_ztream)); - if (retval != 0) - throw new ZLibException(retval, "Could not initialize deflater"); - - resetOutput(); - } - - /// - /// Adds more data to the codec to be processed. - /// - /// Byte array containing the data to be added to the codec - /// The index of the first byte to add from data - /// The number of bytes to add - /// Adding data may, or may not, raise the DataAvailable event - public override void Add(byte[] data, int offset, int count) - { - if (data == null) throw new ArgumentNullException(); - if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); - if ((offset+count) > data.Length) throw new ArgumentException(); - - int total = count; - int inputIndex = offset; - int err = 0; - - while (err >= 0 && inputIndex < total) - { - copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize)); - while (err >= 0 && _ztream.avail_in > 0) - { - err = deflate(ref _ztream, (int)FlushTypes.None); - if (err == 0) - while (_ztream.avail_out == 0) - { - OnDataAvailable(); - err = deflate(ref _ztream, (int)FlushTypes.None); - } - inputIndex += (int)_ztream.total_in; - } - } - setChecksum( _ztream.adler ); - } - - - /// - /// Finishes up any pending data that needs to be processed and handled. - /// - public override void Finish() - { - int err; - do - { - err = deflate(ref _ztream, (int)FlushTypes.Finish); - OnDataAvailable(); - } - while (err == 0); - setChecksum( _ztream.adler ); - deflateReset(ref _ztream); - resetOutput(); - } - - /// - /// Closes the internal zlib deflate stream - /// - protected override void CleanUp() { deflateEnd(ref _ztream); } - - } -} diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/DotZLib.cs boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/DotZLib.cs --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/DotZLib.cs 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/DotZLib.cs 1970-01-01 00:00:00.000000000 +0000 @@ -1,288 +0,0 @@ -// -// © Copyright Henrik Ravn 2004 -// -// Use, modification and distribution are subject to the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -using System; -using System.IO; -using System.Runtime.InteropServices; -using System.Text; - - -namespace DotZLib -{ - - #region Internal types - - /// - /// Defines constants for the various flush types used with zlib - /// - internal enum FlushTypes - { - None, Partial, Sync, Full, Finish, Block - } - - #region ZStream structure - // internal mapping of the zlib zstream structure for marshalling - [StructLayoutAttribute(LayoutKind.Sequential, Pack=4, Size=0, CharSet=CharSet.Ansi)] - internal struct ZStream - { - public IntPtr next_in; - public uint avail_in; - public uint total_in; - - public IntPtr next_out; - public uint avail_out; - public uint total_out; - - [MarshalAs(UnmanagedType.LPStr)] - string msg; - uint state; - - uint zalloc; - uint zfree; - uint opaque; - - int data_type; - public uint adler; - uint reserved; - } - - #endregion - - #endregion - - #region Public enums - /// - /// Defines constants for the available compression levels in zlib - /// - public enum CompressLevel : int - { - /// - /// The default compression level with a reasonable compromise between compression and speed - /// - Default = -1, - /// - /// No compression at all. The data are passed straight through. - /// - None = 0, - /// - /// The maximum compression rate available. - /// - Best = 9, - /// - /// The fastest available compression level. - /// - Fastest = 1 - } - #endregion - - #region Exception classes - /// - /// The exception that is thrown when an error occurs on the zlib dll - /// - public class ZLibException : ApplicationException - { - /// - /// Initializes a new instance of the class with a specified - /// error message and error code - /// - /// The zlib error code that caused the exception - /// A message that (hopefully) describes the error - public ZLibException(int errorCode, string msg) : base(String.Format("ZLib error {0} {1}", errorCode, msg)) - { - } - - /// - /// Initializes a new instance of the class with a specified - /// error code - /// - /// The zlib error code that caused the exception - public ZLibException(int errorCode) : base(String.Format("ZLib error {0}", errorCode)) - { - } - } - #endregion - - #region Interfaces - - /// - /// Declares methods and properties that enables a running checksum to be calculated - /// - public interface ChecksumGenerator - { - /// - /// Gets the current value of the checksum - /// - uint Value { get; } - - /// - /// Clears the current checksum to 0 - /// - void Reset(); - - /// - /// Updates the current checksum with an array of bytes - /// - /// The data to update the checksum with - void Update(byte[] data); - - /// - /// Updates the current checksum with part of an array of bytes - /// - /// The data to update the checksum with - /// Where in data to start updating - /// The number of bytes from data to use - /// The sum of offset and count is larger than the length of data - /// data is a null reference - /// Offset or count is negative. - void Update(byte[] data, int offset, int count); - - /// - /// Updates the current checksum with the data from a string - /// - /// The string to update the checksum with - /// The characters in the string are converted by the UTF-8 encoding - void Update(string data); - - /// - /// Updates the current checksum with the data from a string, using a specific encoding - /// - /// The string to update the checksum with - /// The encoding to use - void Update(string data, Encoding encoding); - } - - - /// - /// Represents the method that will be called from a codec when new data - /// are available. - /// - /// The byte array containing the processed data - /// The index of the first processed byte in data - /// The number of processed bytes available - /// On return from this method, the data may be overwritten, so grab it while you can. - /// You cannot assume that startIndex will be zero. - /// - public delegate void DataAvailableHandler(byte[] data, int startIndex, int count); - - /// - /// Declares methods and events for implementing compressors/decompressors - /// - public interface Codec - { - /// - /// Occurs when more processed data are available. - /// - event DataAvailableHandler DataAvailable; - - /// - /// Adds more data to the codec to be processed. - /// - /// Byte array containing the data to be added to the codec - /// Adding data may, or may not, raise the DataAvailable event - void Add(byte[] data); - - /// - /// Adds more data to the codec to be processed. - /// - /// Byte array containing the data to be added to the codec - /// The index of the first byte to add from data - /// The number of bytes to add - /// Adding data may, or may not, raise the DataAvailable event - void Add(byte[] data, int offset, int count); - - /// - /// Finishes up any pending data that needs to be processed and handled. - /// - void Finish(); - - /// - /// Gets the checksum of the data that has been added so far - /// - uint Checksum { get; } - - - } - - #endregion - - #region Classes - /// - /// Encapsulates general information about the ZLib library - /// - public class Info - { - #region DLL imports - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern uint zlibCompileFlags(); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern string zlibVersion(); - #endregion - - #region Private stuff - private uint _flags; - - // helper function that unpacks a bitsize mask - private static int bitSize(uint bits) - { - switch (bits) - { - case 0: return 16; - case 1: return 32; - case 2: return 64; - } - return -1; - } - #endregion - - /// - /// Constructs an instance of the Info class. - /// - public Info() - { - _flags = zlibCompileFlags(); - } - - /// - /// True if the library is compiled with debug info - /// - public bool HasDebugInfo { get { return 0 != (_flags & 0x100); } } - - /// - /// True if the library is compiled with assembly optimizations - /// - public bool UsesAssemblyCode { get { return 0 != (_flags & 0x200); } } - - /// - /// Gets the size of the unsigned int that was compiled into Zlib - /// - public int SizeOfUInt { get { return bitSize(_flags & 3); } } - - /// - /// Gets the size of the unsigned long that was compiled into Zlib - /// - public int SizeOfULong { get { return bitSize((_flags >> 2) & 3); } } - - /// - /// Gets the size of the pointers that were compiled into Zlib - /// - public int SizeOfPointer { get { return bitSize((_flags >> 4) & 3); } } - - /// - /// Gets the size of the z_off_t type that was compiled into Zlib - /// - public int SizeOfOffset { get { return bitSize((_flags >> 6) & 3); } } - - /// - /// Gets the version of ZLib as a string, e.g. "1.2.1" - /// - public static string Version { get { return zlibVersion(); } } - } - - #endregion - -} diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/DotZLib.csproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/DotZLib.csproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/DotZLib.csproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/DotZLib.csproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/GZipStream.cs boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/GZipStream.cs --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/GZipStream.cs 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/GZipStream.cs 1970-01-01 00:00:00.000000000 +0000 @@ -1,301 +0,0 @@ -// -// © Copyright Henrik Ravn 2004 -// -// Use, modification and distribution are subject to the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -using System; -using System.IO; -using System.Runtime.InteropServices; - -namespace DotZLib -{ - /// - /// Implements a compressed , in GZip (.gz) format. - /// - public class GZipStream : Stream, IDisposable - { - #region Dll Imports - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)] - private static extern IntPtr gzopen(string name, string mode); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int gzclose(IntPtr gzFile); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int gzwrite(IntPtr gzFile, int data, int length); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int gzread(IntPtr gzFile, int data, int length); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int gzgetc(IntPtr gzFile); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int gzputc(IntPtr gzFile, int c); - - #endregion - - #region Private data - private IntPtr _gzFile; - private bool _isDisposed = false; - private bool _isWriting; - #endregion - - #region Constructors - /// - /// Creates a new file as a writeable GZipStream - /// - /// The name of the compressed file to create - /// The compression level to use when adding data - /// If an error occurred in the internal zlib function - public GZipStream(string fileName, CompressLevel level) - { - _isWriting = true; - _gzFile = gzopen(fileName, String.Format("wb{0}", (int)level)); - if (_gzFile == IntPtr.Zero) - throw new ZLibException(-1, "Could not open " + fileName); - } - - /// - /// Opens an existing file as a readable GZipStream - /// - /// The name of the file to open - /// If an error occurred in the internal zlib function - public GZipStream(string fileName) - { - _isWriting = false; - _gzFile = gzopen(fileName, "rb"); - if (_gzFile == IntPtr.Zero) - throw new ZLibException(-1, "Could not open " + fileName); - - } - #endregion - - #region Access properties - /// - /// Returns true of this stream can be read from, false otherwise - /// - public override bool CanRead - { - get - { - return !_isWriting; - } - } - - - /// - /// Returns false. - /// - public override bool CanSeek - { - get - { - return false; - } - } - - /// - /// Returns true if this tsream is writeable, false otherwise - /// - public override bool CanWrite - { - get - { - return _isWriting; - } - } - #endregion - - #region Destructor & IDispose stuff - - /// - /// Destroys this instance - /// - ~GZipStream() - { - cleanUp(false); - } - - /// - /// Closes the external file handle - /// - public void Dispose() - { - cleanUp(true); - } - - // Does the actual closing of the file handle. - private void cleanUp(bool isDisposing) - { - if (!_isDisposed) - { - gzclose(_gzFile); - _isDisposed = true; - } - } - #endregion - - #region Basic reading and writing - /// - /// Attempts to read a number of bytes from the stream. - /// - /// The destination data buffer - /// The index of the first destination byte in buffer - /// The number of bytes requested - /// The number of bytes read - /// If buffer is null - /// If count or offset are negative - /// If offset + count is > buffer.Length - /// If this stream is not readable. - /// If this stream has been disposed. - public override int Read(byte[] buffer, int offset, int count) - { - if (!CanRead) throw new NotSupportedException(); - if (buffer == null) throw new ArgumentNullException(); - if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); - if ((offset+count) > buffer.Length) throw new ArgumentException(); - if (_isDisposed) throw new ObjectDisposedException("GZipStream"); - - GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned); - int result; - try - { - result = gzread(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count); - if (result < 0) - throw new IOException(); - } - finally - { - h.Free(); - } - return result; - } - - /// - /// Attempts to read a single byte from the stream. - /// - /// The byte that was read, or -1 in case of error or End-Of-File - public override int ReadByte() - { - if (!CanRead) throw new NotSupportedException(); - if (_isDisposed) throw new ObjectDisposedException("GZipStream"); - return gzgetc(_gzFile); - } - - /// - /// Writes a number of bytes to the stream - /// - /// - /// - /// - /// If buffer is null - /// If count or offset are negative - /// If offset + count is > buffer.Length - /// If this stream is not writeable. - /// If this stream has been disposed. - public override void Write(byte[] buffer, int offset, int count) - { - if (!CanWrite) throw new NotSupportedException(); - if (buffer == null) throw new ArgumentNullException(); - if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); - if ((offset+count) > buffer.Length) throw new ArgumentException(); - if (_isDisposed) throw new ObjectDisposedException("GZipStream"); - - GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned); - try - { - int result = gzwrite(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count); - if (result < 0) - throw new IOException(); - } - finally - { - h.Free(); - } - } - - /// - /// Writes a single byte to the stream - /// - /// The byte to add to the stream. - /// If this stream is not writeable. - /// If this stream has been disposed. - public override void WriteByte(byte value) - { - if (!CanWrite) throw new NotSupportedException(); - if (_isDisposed) throw new ObjectDisposedException("GZipStream"); - - int result = gzputc(_gzFile, (int)value); - if (result < 0) - throw new IOException(); - } - #endregion - - #region Position & length stuff - /// - /// Not supported. - /// - /// - /// Always thrown - public override void SetLength(long value) - { - throw new NotSupportedException(); - } - - /// - /// Not suppported. - /// - /// - /// - /// - /// Always thrown - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotSupportedException(); - } - - /// - /// Flushes the GZipStream. - /// - /// In this implementation, this method does nothing. This is because excessive - /// flushing may degrade the achievable compression rates. - public override void Flush() - { - // left empty on purpose - } - - /// - /// Gets/sets the current position in the GZipStream. Not suppported. - /// - /// In this implementation this property is not supported - /// Always thrown - public override long Position - { - get - { - throw new NotSupportedException(); - } - set - { - throw new NotSupportedException(); - } - } - - /// - /// Gets the size of the stream. Not suppported. - /// - /// In this implementation this property is not supported - /// Always thrown - public override long Length - { - get - { - throw new NotSupportedException(); - } - } - #endregion - } -} diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/Inflater.cs boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/Inflater.cs --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/Inflater.cs 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/Inflater.cs 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ -// -// © Copyright Henrik Ravn 2004 -// -// Use, modification and distribution are subject to the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -using System; -using System.Diagnostics; -using System.Runtime.InteropServices; - -namespace DotZLib -{ - - /// - /// Implements a data decompressor, using the inflate algorithm in the ZLib dll - /// - public class Inflater : CodecBase - { - #region Dll imports - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)] - private static extern int inflateInit_(ref ZStream sz, string vs, int size); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int inflate(ref ZStream sz, int flush); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int inflateReset(ref ZStream sz); - - [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] - private static extern int inflateEnd(ref ZStream sz); - #endregion - - /// - /// Constructs an new instance of the Inflater - /// - public Inflater() : base() - { - int retval = inflateInit_(ref _ztream, Info.Version, Marshal.SizeOf(_ztream)); - if (retval != 0) - throw new ZLibException(retval, "Could not initialize inflater"); - - resetOutput(); - } - - - /// - /// Adds more data to the codec to be processed. - /// - /// Byte array containing the data to be added to the codec - /// The index of the first byte to add from data - /// The number of bytes to add - /// Adding data may, or may not, raise the DataAvailable event - public override void Add(byte[] data, int offset, int count) - { - if (data == null) throw new ArgumentNullException(); - if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); - if ((offset+count) > data.Length) throw new ArgumentException(); - - int total = count; - int inputIndex = offset; - int err = 0; - - while (err >= 0 && inputIndex < total) - { - copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize)); - err = inflate(ref _ztream, (int)FlushTypes.None); - if (err == 0) - while (_ztream.avail_out == 0) - { - OnDataAvailable(); - err = inflate(ref _ztream, (int)FlushTypes.None); - } - - inputIndex += (int)_ztream.total_in; - } - setChecksum( _ztream.adler ); - } - - - /// - /// Finishes up any pending data that needs to be processed and handled. - /// - public override void Finish() - { - int err; - do - { - err = inflate(ref _ztream, (int)FlushTypes.Finish); - OnDataAvailable(); - } - while (err == 0); - setChecksum( _ztream.adler ); - inflateReset(ref _ztream); - resetOutput(); - } - - /// - /// Closes the internal zlib inflate stream - /// - protected override void CleanUp() { inflateEnd(ref _ztream); } - - - } -} diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/UnitTests.cs boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/UnitTests.cs --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/UnitTests.cs 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib/UnitTests.cs 1970-01-01 00:00:00.000000000 +0000 @@ -1,274 +0,0 @@ -// -// © Copyright Henrik Ravn 2004 -// -// Use, modification and distribution are subject to the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -using System; -using System.Collections; -using System.IO; - -// uncomment the define below to include unit tests -//#define nunit -#if nunit -using NUnit.Framework; - -// Unit tests for the DotZLib class library -// ---------------------------------------- -// -// Use this with NUnit 2 from http://www.nunit.org -// - -namespace DotZLibTests -{ - using DotZLib; - - // helper methods - internal class Utils - { - public static bool byteArrEqual( byte[] lhs, byte[] rhs ) - { - if (lhs.Length != rhs.Length) - return false; - for (int i = lhs.Length-1; i >= 0; --i) - if (lhs[i] != rhs[i]) - return false; - return true; - } - - } - - - [TestFixture] - public class CircBufferTests - { - #region Circular buffer tests - [Test] - public void SinglePutGet() - { - CircularBuffer buf = new CircularBuffer(10); - Assert.AreEqual( 0, buf.Size ); - Assert.AreEqual( -1, buf.Get() ); - - Assert.IsTrue(buf.Put( 1 )); - Assert.AreEqual( 1, buf.Size ); - Assert.AreEqual( 1, buf.Get() ); - Assert.AreEqual( 0, buf.Size ); - Assert.AreEqual( -1, buf.Get() ); - } - - [Test] - public void BlockPutGet() - { - CircularBuffer buf = new CircularBuffer(10); - byte[] arr = {1,2,3,4,5,6,7,8,9,10}; - Assert.AreEqual( 10, buf.Put(arr,0,10) ); - Assert.AreEqual( 10, buf.Size ); - Assert.IsFalse( buf.Put(11) ); - Assert.AreEqual( 1, buf.Get() ); - Assert.IsTrue( buf.Put(11) ); - - byte[] arr2 = (byte[])arr.Clone(); - Assert.AreEqual( 9, buf.Get(arr2,1,9) ); - Assert.IsTrue( Utils.byteArrEqual(arr,arr2) ); - } - - #endregion - } - - [TestFixture] - public class ChecksumTests - { - #region CRC32 Tests - [Test] - public void CRC32_Null() - { - CRC32Checksum crc32 = new CRC32Checksum(); - Assert.AreEqual( 0, crc32.Value ); - - crc32 = new CRC32Checksum(1); - Assert.AreEqual( 1, crc32.Value ); - - crc32 = new CRC32Checksum(556); - Assert.AreEqual( 556, crc32.Value ); - } - - [Test] - public void CRC32_Data() - { - CRC32Checksum crc32 = new CRC32Checksum(); - byte[] data = { 1,2,3,4,5,6,7 }; - crc32.Update(data); - Assert.AreEqual( 0x70e46888, crc32.Value ); - - crc32 = new CRC32Checksum(); - crc32.Update("penguin"); - Assert.AreEqual( 0x0e5c1a120, crc32.Value ); - - crc32 = new CRC32Checksum(1); - crc32.Update("penguin"); - Assert.AreEqual(0x43b6aa94, crc32.Value); - - } - #endregion - - #region Adler tests - - [Test] - public void Adler_Null() - { - AdlerChecksum adler = new AdlerChecksum(); - Assert.AreEqual(0, adler.Value); - - adler = new AdlerChecksum(1); - Assert.AreEqual( 1, adler.Value ); - - adler = new AdlerChecksum(556); - Assert.AreEqual( 556, adler.Value ); - } - - [Test] - public void Adler_Data() - { - AdlerChecksum adler = new AdlerChecksum(1); - byte[] data = { 1,2,3,4,5,6,7 }; - adler.Update(data); - Assert.AreEqual( 0x5b001d, adler.Value ); - - adler = new AdlerChecksum(); - adler.Update("penguin"); - Assert.AreEqual(0x0bcf02f6, adler.Value ); - - adler = new AdlerChecksum(1); - adler.Update("penguin"); - Assert.AreEqual(0x0bd602f7, adler.Value); - - } - #endregion - } - - [TestFixture] - public class InfoTests - { - #region Info tests - [Test] - public void Info_Version() - { - Info info = new Info(); - Assert.AreEqual("1.2.12", Info.Version); - Assert.AreEqual(32, info.SizeOfUInt); - Assert.AreEqual(32, info.SizeOfULong); - Assert.AreEqual(32, info.SizeOfPointer); - Assert.AreEqual(32, info.SizeOfOffset); - } - #endregion - } - - [TestFixture] - public class DeflateInflateTests - { - #region Deflate tests - [Test] - public void Deflate_Init() - { - using (Deflater def = new Deflater(CompressLevel.Default)) - { - } - } - - private ArrayList compressedData = new ArrayList(); - private uint adler1; - - private ArrayList uncompressedData = new ArrayList(); - private uint adler2; - - public void CDataAvail(byte[] data, int startIndex, int count) - { - for (int i = 0; i < count; ++i) - compressedData.Add(data[i+startIndex]); - } - - [Test] - public void Deflate_Compress() - { - compressedData.Clear(); - - byte[] testData = new byte[35000]; - for (int i = 0; i < testData.Length; ++i) - testData[i] = 5; - - using (Deflater def = new Deflater((CompressLevel)5)) - { - def.DataAvailable += new DataAvailableHandler(CDataAvail); - def.Add(testData); - def.Finish(); - adler1 = def.Checksum; - } - } - #endregion - - #region Inflate tests - [Test] - public void Inflate_Init() - { - using (Inflater inf = new Inflater()) - { - } - } - - private void DDataAvail(byte[] data, int startIndex, int count) - { - for (int i = 0; i < count; ++i) - uncompressedData.Add(data[i+startIndex]); - } - - [Test] - public void Inflate_Expand() - { - uncompressedData.Clear(); - - using (Inflater inf = new Inflater()) - { - inf.DataAvailable += new DataAvailableHandler(DDataAvail); - inf.Add((byte[])compressedData.ToArray(typeof(byte))); - inf.Finish(); - adler2 = inf.Checksum; - } - Assert.AreEqual( adler1, adler2 ); - } - #endregion - } - - [TestFixture] - public class GZipStreamTests - { - #region GZipStream test - [Test] - public void GZipStream_WriteRead() - { - using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best)) - { - BinaryWriter writer = new BinaryWriter(gzOut); - writer.Write("hi there"); - writer.Write(Math.PI); - writer.Write(42); - } - - using (GZipStream gzIn = new GZipStream("gzstream.gz")) - { - BinaryReader reader = new BinaryReader(gzIn); - string s = reader.ReadString(); - Assert.AreEqual("hi there",s); - double d = reader.ReadDouble(); - Assert.AreEqual(Math.PI, d); - int i = reader.ReadInt32(); - Assert.AreEqual(42,i); - } - - } - #endregion - } -} - -#endif diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib.sln boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib.sln --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib.sln 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/dotzlib/DotZLib.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotZLib", "DotZLib\DotZLib.csproj", "{BB1EE0B1-1808-46CB-B786-949D91117FC5}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.ActiveCfg = Debug|.NET - {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.Build.0 = Debug|.NET - {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.ActiveCfg = Release|.NET - {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.Build.0 = Release|.NET - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/miniunz.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/miniunz.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/miniunz.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/miniunz.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,310 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {C52F9E7B-498A-42BE-8DB4-85A15694382A} - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\MiniUnzip$(Configuration)\ - x86\MiniUnzip$(Configuration)\Tmp\ - true - false - x86\MiniUnzip$(Configuration)\ - x86\MiniUnzip$(Configuration)\Tmp\ - false - false - x64\MiniUnzip$(Configuration)\ - x64\MiniUnzip$(Configuration)\Tmp\ - true - false - ia64\MiniUnzip$(Configuration)\ - ia64\MiniUnzip$(Configuration)\Tmp\ - true - false - x64\MiniUnzip$(Configuration)\ - x64\MiniUnzip$(Configuration)\Tmp\ - false - false - ia64\MiniUnzip$(Configuration)\ - ia64\MiniUnzip$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebug - false - - - $(IntDir) - Level3 - EditAndContinue - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/miniunz.vcxproj.filters boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/miniunz.vcxproj.filters --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/miniunz.vcxproj.filters 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/miniunz.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ - - - - - {048af943-022b-4db6-beeb-a54c34774ee2} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {c1d600d2-888f-4aea-b73e-8b0dd9befa0c} - h;hpp;hxx;hm;inl;inc - - - {0844199a-966b-4f19-81db-1e0125e141b9} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/minizip.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/minizip.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/minizip.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/minizip.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,307 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\MiniZip$(Configuration)\ - x86\MiniZip$(Configuration)\Tmp\ - true - false - x86\MiniZip$(Configuration)\ - x86\MiniZip$(Configuration)\Tmp\ - false - x64\$(Configuration)\ - x64\$(Configuration)\ - true - false - ia64\$(Configuration)\ - ia64\$(Configuration)\ - true - false - x64\$(Configuration)\ - x64\$(Configuration)\ - false - ia64\$(Configuration)\ - ia64\$(Configuration)\ - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebug - false - - - $(IntDir) - Level3 - EditAndContinue - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/minizip.vcxproj.filters boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/minizip.vcxproj.filters --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/minizip.vcxproj.filters 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/minizip.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ - - - - - {c0419b40-bf50-40da-b153-ff74215b79de} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {bb87b070-735b-478e-92ce-7383abb2f36c} - h;hpp;hxx;hm;inl;inc - - - {f46ab6a6-548f-43cb-ae96-681abb5bd5db} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlibdll.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlibdll.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlibdll.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlibdll.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,310 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {C52F9E7B-498A-42BE-8DB4-85A15694366A} - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\TestZlibDll$(Configuration)\ - x86\TestZlibDll$(Configuration)\Tmp\ - true - false - x86\TestZlibDll$(Configuration)\ - x86\TestZlibDll$(Configuration)\Tmp\ - false - false - x64\TestZlibDll$(Configuration)\ - x64\TestZlibDll$(Configuration)\Tmp\ - true - false - ia64\TestZlibDll$(Configuration)\ - ia64\TestZlibDll$(Configuration)\Tmp\ - true - false - x64\TestZlibDll$(Configuration)\ - x64\TestZlibDll$(Configuration)\Tmp\ - false - false - ia64\TestZlibDll$(Configuration)\ - ia64\TestZlibDll$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebug - false - - - $(IntDir) - Level3 - EditAndContinue - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlibdll.vcxproj.filters boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlibdll.vcxproj.filters --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlibdll.vcxproj.filters 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlibdll.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ - - - - - {fa61a89f-93fc-4c89-b29e-36224b7592f4} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {d4b85da0-2ba2-4934-b57f-e2584e3848ee} - h;hpp;hxx;hm;inl;inc - - - {e573e075-00bd-4a7d-bd67-a8cc9bfc5aca} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlib.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlib.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlib.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlib.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,420 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} - testzlib - Win32Proj - - - - Application - MultiByte - true - - - Application - MultiByte - true - - - Application - MultiByte - - - Application - MultiByte - true - - - Application - MultiByte - true - - - Application - MultiByte - - - Application - true - - - Application - true - - - Application - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - true - false - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - false - false - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - false - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - true - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - false - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebug - false - - - AssemblyAndSourceCode - $(IntDir) - Level3 - EditAndContinue - - - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)testzlib.exe - true - $(OutDir)testzlib.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)testzlib.exe - true - Console - true - true - false - - - MachineX86 - - - - - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDebugDLL - false - $(IntDir) - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - - - - - Itanium - - - Disabled - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - AssemblyAndSourceCode - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - $(OutDir)testzlib.pdb - Console - MachineIA64 - - - - - ..\..\..;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - false - $(IntDir) - - - %(AdditionalDependencies) - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - MachineIA64 - - - - - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - false - $(IntDir) - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - MachineIA64 - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlib.vcxproj.filters boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlib.vcxproj.filters --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlib.vcxproj.filters 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/testzlib.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ - - - - - {c1f6a2e3-5da5-4955-8653-310d3efe05a9} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {c2aaffdc-2c95-4d6f-8466-4bec5890af2c} - h;hpp;hxx;hm;inl;inc - - - {c274fe07-05f2-461c-964b-f6341e4e7eb5} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlib.rc boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlib.rc --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlib.rc 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlib.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -#include - -#define IDR_VERSION1 1 -IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 2, 12, 0 - PRODUCTVERSION 1, 2, 12, 0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS 0 - FILEOS VOS_DOS_WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0 // not used -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - //language ID = U.S. English, char set = Windows, Multilingual - - BEGIN - VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.2.12\0" - VALUE "InternalName", "zlib\0" - VALUE "OriginalFilename", "zlibwapi.dll\0" - VALUE "ProductName", "ZLib.DLL\0" - VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1252 - END -END diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibstat.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibstat.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibstat.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibstat.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,473 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} - - - - StaticLibrary - false - - - StaticLibrary - false - - - StaticLibrary - false - - - StaticLibrary - false - - - StaticLibrary - false - - - StaticLibrary - false - - - StaticLibrary - false - - - StaticLibrary - false - - - StaticLibrary - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - - - MultiThreadedDebug - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - cd ..\..\masmx86 -bld_ml32.bat - - - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)zlibstat.lib - true - - - cd ..\..\masmx86 -bld_ml32.bat - - - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - cd ..\..\masmx64 -bld_ml64.bat - - - - - Itanium - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - $(OutDir)zlibstat.lib - true - - - cd ..\..\masmx64 -bld_ml64.bat - - - - - Itanium - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - Itanium - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibstat.vcxproj.filters boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibstat.vcxproj.filters --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibstat.vcxproj.filters 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibstat.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,77 +0,0 @@ - - - - - {174213f6-7f66-4ae8-a3a8-a1e0a1e6ffdd} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Source Files - - - - - Source Files - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.sln boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.sln --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.sln 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,135 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Itanium = Debug|Itanium - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Itanium = Release|Itanium - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium - ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 - ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,657 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {8FD826F8-3739-44E6-8CC8-997122E53B8D} - - - - DynamicLibrary - false - true - - - DynamicLibrary - false - true - - - DynamicLibrary - false - - - DynamicLibrary - false - true - - - DynamicLibrary - false - true - - - DynamicLibrary - false - - - DynamicLibrary - false - true - - - DynamicLibrary - false - true - - - DynamicLibrary - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - true - false - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - false - false - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - false - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - true - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - true - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - false - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - false - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - false - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - zlibwapid - zlibwapi - zlibwapi - zlibwapid - zlibwapi - zlibwapi - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions) - - - MultiThreadedDebug - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - EditAndContinue - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - true - .\zlibvc.def - true - true - Windows - false - - - - - cd ..\..\masmx86 -bld_ml32.bat - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - true - false - .\zlibvc.def - true - Windows - false - - - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - true - false - .\zlibvc.def - true - Windows - false - - - - - cd ..\..\masmx86 -bld_ml32.bat - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - true - .\zlibvc.def - true - true - Windows - MachineX64 - - - cd ..\..\masmx64 -bld_ml64.bat - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - .\zlibvc.def - true - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - true - false - .\zlibvc.def - true - Windows - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - true - false - .\zlibvc.def - true - Windows - MachineX64 - - - cd ..\..\masmx64 -bld_ml64.bat - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.vcxproj.filters boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.vcxproj.filters --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.vcxproj.filters 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc10/zlibvc.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ - - - - - {07934a85-8b61-443d-a0ee-b2eedb74f3cd} - cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90 - - - {1d99675b-433d-4a21-9e50-ed4ab8b19762} - h;hpp;hxx;hm;inl;fi;fd - - - {431c0958-fa71-44d0-9084-2d19d100c0cc} - ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Source Files - - - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/miniunz.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/miniunz.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/miniunz.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/miniunz.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,314 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {C52F9E7B-498A-42BE-8DB4-85A15694382A} - Win32Proj - - - - Application - MultiByte - v110 - - - Application - Unicode - v110 - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - v110 - - - Application - MultiByte - v110 - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\MiniUnzip$(Configuration)\ - x86\MiniUnzip$(Configuration)\Tmp\ - true - false - x86\MiniUnzip$(Configuration)\ - x86\MiniUnzip$(Configuration)\Tmp\ - false - false - x64\MiniUnzip$(Configuration)\ - x64\MiniUnzip$(Configuration)\Tmp\ - true - false - ia64\MiniUnzip$(Configuration)\ - ia64\MiniUnzip$(Configuration)\Tmp\ - true - false - x64\MiniUnzip$(Configuration)\ - x64\MiniUnzip$(Configuration)\Tmp\ - false - false - ia64\MiniUnzip$(Configuration)\ - ia64\MiniUnzip$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/minizip.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/minizip.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/minizip.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/minizip.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,311 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} - Win32Proj - - - - Application - MultiByte - v110 - - - Application - Unicode - v110 - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - v110 - - - Application - MultiByte - v110 - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\MiniZip$(Configuration)\ - x86\MiniZip$(Configuration)\Tmp\ - true - false - x86\MiniZip$(Configuration)\ - x86\MiniZip$(Configuration)\Tmp\ - false - x64\$(Configuration)\ - x64\$(Configuration)\ - true - false - ia64\$(Configuration)\ - ia64\$(Configuration)\ - true - false - x64\$(Configuration)\ - x64\$(Configuration)\ - false - ia64\$(Configuration)\ - ia64\$(Configuration)\ - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/testzlibdll.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/testzlibdll.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/testzlibdll.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/testzlibdll.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,314 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {C52F9E7B-498A-42BE-8DB4-85A15694366A} - Win32Proj - - - - Application - MultiByte - v110 - - - Application - Unicode - v110 - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - v110 - - - Application - MultiByte - v110 - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\TestZlibDll$(Configuration)\ - x86\TestZlibDll$(Configuration)\Tmp\ - true - false - x86\TestZlibDll$(Configuration)\ - x86\TestZlibDll$(Configuration)\Tmp\ - false - false - x64\TestZlibDll$(Configuration)\ - x64\TestZlibDll$(Configuration)\Tmp\ - true - false - ia64\TestZlibDll$(Configuration)\ - ia64\TestZlibDll$(Configuration)\Tmp\ - true - false - x64\TestZlibDll$(Configuration)\ - x64\TestZlibDll$(Configuration)\Tmp\ - false - false - ia64\TestZlibDll$(Configuration)\ - ia64\TestZlibDll$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/testzlib.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/testzlib.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/testzlib.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/testzlib.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,426 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} - testzlib - Win32Proj - - - - Application - MultiByte - true - v110 - - - Application - MultiByte - true - v110 - - - Application - Unicode - v110 - - - Application - MultiByte - true - - - Application - MultiByte - true - - - Application - MultiByte - - - Application - true - v110 - - - Application - true - v110 - - - Application - v110 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - true - false - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - false - false - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - false - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - true - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - false - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - AssemblyAndSourceCode - $(IntDir) - Level3 - ProgramDatabase - - - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)testzlib.exe - true - $(OutDir)testzlib.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)testzlib.exe - true - Console - true - true - false - - - MachineX86 - - - - - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDebugDLL - false - $(IntDir) - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - - - - - Itanium - - - Disabled - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - AssemblyAndSourceCode - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - $(OutDir)testzlib.pdb - Console - MachineIA64 - - - - - ..\..\..;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - false - $(IntDir) - - - %(AdditionalDependencies) - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - MachineIA64 - - - - - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - false - $(IntDir) - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - MachineIA64 - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlib.rc boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlib.rc --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlib.rc 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlib.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -#include - -#define IDR_VERSION1 1 -IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 2, 12, 0 - PRODUCTVERSION 1, 2, 12, 0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS 0 - FILEOS VOS_DOS_WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0 // not used -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - //language ID = U.S. English, char set = Windows, Multilingual - - BEGIN - VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.2.12\0" - VALUE "InternalName", "zlib\0" - VALUE "OriginalFilename", "zlibwapi.dll\0" - VALUE "ProductName", "ZLib.DLL\0" - VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1252 - END -END diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibstat.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibstat.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibstat.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibstat.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,464 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} - - - - StaticLibrary - false - v110 - - - StaticLibrary - false - v110 - - - StaticLibrary - false - v110 - Unicode - - - StaticLibrary - false - - - StaticLibrary - false - - - StaticLibrary - false - - - StaticLibrary - false - v110 - - - StaticLibrary - false - v110 - - - StaticLibrary - false - v110 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)zlibstat.lib - true - - - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - Itanium - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - $(OutDir)zlibstat.lib - true - - - - - Itanium - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - Itanium - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibvc.sln boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibvc.sln --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibvc.sln 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibvc.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,117 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Itanium = Debug|Itanium - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Itanium = Release|Itanium - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium - ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 - ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibvc.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibvc.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibvc.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc11/zlibvc.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,688 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {8FD826F8-3739-44E6-8CC8-997122E53B8D} - - - - DynamicLibrary - false - true - v110 - - - DynamicLibrary - false - true - v110 - - - DynamicLibrary - false - v110 - Unicode - - - DynamicLibrary - false - true - - - DynamicLibrary - false - true - - - DynamicLibrary - false - - - DynamicLibrary - false - true - v110 - - - DynamicLibrary - false - true - v110 - - - DynamicLibrary - false - v110 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - true - false - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - false - false - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - false - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - true - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - true - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - false - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - false - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - false - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - zlibwapi - zlibwapi - zlibwapi - zlibwapi - zlibwapi - zlibwapi - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - .\zlibvc.def - true - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - false - - - $(OutDir)zlibwapi.lib - - - cd ..\..\masmx86 -bld_ml32.bat - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - false - - - $(OutDir)zlibwapi.lib - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - false - - - $(OutDir)zlibwapi.lib - - - cd ..\..\masmx86 -bld_ml32.bat - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - .\zlibvc.def - true - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineX64 - - - cd ..\..\contrib\masmx64 -bld_ml64.bat - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - .\zlibvc.def - true - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineX64 - - - cd ..\..\masmx64 -bld_ml64.bat - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/miniunz.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/miniunz.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/miniunz.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/miniunz.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,316 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {C52F9E7B-498A-42BE-8DB4-85A15694382A} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - Unicode - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\MiniUnzip$(Configuration)\ - x86\MiniUnzip$(Configuration)\Tmp\ - true - false - x86\MiniUnzip$(Configuration)\ - x86\MiniUnzip$(Configuration)\Tmp\ - false - false - x64\MiniUnzip$(Configuration)\ - x64\MiniUnzip$(Configuration)\Tmp\ - true - false - ia64\MiniUnzip$(Configuration)\ - ia64\MiniUnzip$(Configuration)\Tmp\ - true - false - x64\MiniUnzip$(Configuration)\ - x64\MiniUnzip$(Configuration)\Tmp\ - false - false - ia64\MiniUnzip$(Configuration)\ - ia64\MiniUnzip$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/minizip.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/minizip.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/minizip.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/minizip.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,313 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - Unicode - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\MiniZip$(Configuration)\ - x86\MiniZip$(Configuration)\Tmp\ - true - false - x86\MiniZip$(Configuration)\ - x86\MiniZip$(Configuration)\Tmp\ - false - x64\$(Configuration)\ - x64\$(Configuration)\ - true - false - ia64\$(Configuration)\ - ia64\$(Configuration)\ - true - false - x64\$(Configuration)\ - x64\$(Configuration)\ - false - ia64\$(Configuration)\ - ia64\$(Configuration)\ - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/testzlibdll.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/testzlibdll.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/testzlibdll.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/testzlibdll.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,316 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {C52F9E7B-498A-42BE-8DB4-85A15694366A} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - Unicode - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\TestZlibDll$(Configuration)\ - x86\TestZlibDll$(Configuration)\Tmp\ - true - false - x86\TestZlibDll$(Configuration)\ - x86\TestZlibDll$(Configuration)\Tmp\ - false - false - x64\TestZlibDll$(Configuration)\ - x64\TestZlibDll$(Configuration)\Tmp\ - true - false - ia64\TestZlibDll$(Configuration)\ - ia64\TestZlibDll$(Configuration)\Tmp\ - true - false - x64\TestZlibDll$(Configuration)\ - x64\TestZlibDll$(Configuration)\Tmp\ - false - false - ia64\TestZlibDll$(Configuration)\ - ia64\TestZlibDll$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/testzlib.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/testzlib.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/testzlib.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/testzlib.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,430 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} - testzlib - Win32Proj - - - - Application - MultiByte - true - v120 - - - Application - MultiByte - true - v120 - - - Application - Unicode - v120 - - - Application - MultiByte - true - v120 - - - Application - MultiByte - true - v120 - - - Application - MultiByte - v120 - - - Application - true - v120 - - - Application - true - v120 - - - Application - v120 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - true - false - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - false - false - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - false - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - true - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - false - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - AssemblyAndSourceCode - $(IntDir) - Level3 - ProgramDatabase - - - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)testzlib.exe - true - $(OutDir)testzlib.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)testzlib.exe - true - Console - true - true - false - - - MachineX86 - false - - - - - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDebugDLL - false - $(IntDir) - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - - - - - Itanium - - - Disabled - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - AssemblyAndSourceCode - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - $(OutDir)testzlib.pdb - Console - MachineIA64 - - - - - ..\..\..;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - false - $(IntDir) - - - %(AdditionalDependencies) - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - MachineIA64 - - - - - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - false - $(IntDir) - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - MachineIA64 - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlib.rc boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlib.rc --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlib.rc 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlib.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -#include - -#define IDR_VERSION1 1 -IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 2, 12, 0 - PRODUCTVERSION 1, 2, 12, 0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS 0 - FILEOS VOS_DOS_WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0 // not used -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - //language ID = U.S. English, char set = Windows, Multilingual - - BEGIN - VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.2.12\0" - VALUE "InternalName", "zlib\0" - VALUE "OriginalFilename", "zlibwapi.dll\0" - VALUE "ProductName", "ZLib.DLL\0" - VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1252 - END -END diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibstat.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibstat.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibstat.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibstat.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,467 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} - - - - StaticLibrary - false - v120 - - - StaticLibrary - false - v120 - - - StaticLibrary - false - v120 - Unicode - - - StaticLibrary - false - v120 - - - StaticLibrary - false - v120 - - - StaticLibrary - false - v120 - - - StaticLibrary - false - v120 - - - StaticLibrary - false - v120 - - - StaticLibrary - false - v120 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)zlibstat.lib - true - - - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - Itanium - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - $(OutDir)zlibstat.lib - true - - - - - Itanium - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - Itanium - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibvc.sln boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibvc.sln --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibvc.sln 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibvc.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.40629.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Itanium = Debug|Itanium - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Itanium = Release|Itanium - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium - ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 - ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibvc.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibvc.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibvc.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc12/zlibvc.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,692 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {8FD826F8-3739-44E6-8CC8-997122E53B8D} - - - - DynamicLibrary - false - true - v120 - - - DynamicLibrary - false - true - v120 - - - DynamicLibrary - false - v120 - Unicode - - - DynamicLibrary - false - true - v120 - - - DynamicLibrary - false - true - v120 - - - DynamicLibrary - false - v120 - - - DynamicLibrary - false - true - v120 - - - DynamicLibrary - false - true - v120 - - - DynamicLibrary - false - v120 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - true - false - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - false - false - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - false - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - true - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - true - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - false - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - false - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - false - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - zlibwapi - zlibwapi - zlibwapi - zlibwapi - zlibwapi - zlibwapi - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - .\zlibvc.def - true - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - false - - - $(OutDir)zlibwapi.lib - - - cd ..\..\masmx86 -bld_ml32.bat - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - false - - - $(OutDir)zlibwapi.lib - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - false - - - $(OutDir)zlibwapi.lib - false - - - cd ..\..\masmx86 -bld_ml32.bat - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - .\zlibvc.def - true - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineX64 - - - cd ..\..\contrib\masmx64 -bld_ml64.bat - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - .\zlibvc.def - true - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineX64 - - - cd ..\..\masmx64 -bld_ml64.bat - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/miniunz.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/miniunz.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/miniunz.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/miniunz.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,316 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {C52F9E7B-498A-42BE-8DB4-85A15694382A} - Win32Proj - - - - Application - MultiByte - v140 - - - Application - Unicode - v140 - - - Application - MultiByte - v140 - - - Application - MultiByte - v140 - - - Application - MultiByte - v140 - - - Application - MultiByte - v140 - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\MiniUnzip$(Configuration)\ - x86\MiniUnzip$(Configuration)\Tmp\ - true - false - x86\MiniUnzip$(Configuration)\ - x86\MiniUnzip$(Configuration)\Tmp\ - false - false - x64\MiniUnzip$(Configuration)\ - x64\MiniUnzip$(Configuration)\Tmp\ - true - false - ia64\MiniUnzip$(Configuration)\ - ia64\MiniUnzip$(Configuration)\Tmp\ - true - false - x64\MiniUnzip$(Configuration)\ - x64\MiniUnzip$(Configuration)\Tmp\ - false - false - ia64\MiniUnzip$(Configuration)\ - ia64\MiniUnzip$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - $(OutDir)miniunz.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)miniunz.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/minizip.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/minizip.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/minizip.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/minizip.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,313 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} - Win32Proj - - - - Application - MultiByte - v140 - - - Application - Unicode - v140 - - - Application - MultiByte - v140 - - - Application - MultiByte - v140 - - - Application - MultiByte - v140 - - - Application - MultiByte - v140 - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\MiniZip$(Configuration)\ - x86\MiniZip$(Configuration)\Tmp\ - true - false - x86\MiniZip$(Configuration)\ - x86\MiniZip$(Configuration)\Tmp\ - false - x64\$(Configuration)\ - x64\$(Configuration)\ - true - false - ia64\$(Configuration)\ - ia64\$(Configuration)\ - true - false - x64\$(Configuration)\ - x64\$(Configuration)\ - false - ia64\$(Configuration)\ - ia64\$(Configuration)\ - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - $(OutDir)minizip.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)minizip.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/testzlibdll.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/testzlibdll.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/testzlibdll.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/testzlibdll.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,316 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {C52F9E7B-498A-42BE-8DB4-85A15694366A} - Win32Proj - - - - Application - MultiByte - v140 - - - Application - Unicode - v140 - - - Application - MultiByte - v140 - - - Application - MultiByte - v140 - - - Application - MultiByte - v140 - - - Application - MultiByte - v140 - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\TestZlibDll$(Configuration)\ - x86\TestZlibDll$(Configuration)\Tmp\ - true - false - x86\TestZlibDll$(Configuration)\ - x86\TestZlibDll$(Configuration)\Tmp\ - false - false - x64\TestZlibDll$(Configuration)\ - x64\TestZlibDll$(Configuration)\Tmp\ - true - false - ia64\TestZlibDll$(Configuration)\ - ia64\TestZlibDll$(Configuration)\Tmp\ - true - false - x64\TestZlibDll$(Configuration)\ - x64\TestZlibDll$(Configuration)\Tmp\ - false - false - ia64\TestZlibDll$(Configuration)\ - ia64\TestZlibDll$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - false - - - MachineX86 - - - - - X64 - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - MachineX64 - - - - - Itanium - - - Disabled - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - $(OutDir)testzlib.pdb - Console - MachineIA64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - MachineX64 - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) - $(OutDir)testzlibdll.exe - true - Console - true - true - MachineIA64 - - - - - - - - {8fd826f8-3739-44e6-8cc8-997122e53b8d} - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/testzlib.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/testzlib.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/testzlib.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/testzlib.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,430 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} - testzlib - Win32Proj - - - - Application - MultiByte - true - v140 - - - Application - MultiByte - true - v140 - - - Application - Unicode - v140 - - - Application - MultiByte - true - v140 - - - Application - MultiByte - true - v140 - - - Application - MultiByte - v140 - - - Application - true - v140 - - - Application - true - v140 - - - Application - v140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - true - false - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - false - false - x86\TestZlib$(Configuration)\ - x86\TestZlib$(Configuration)\Tmp\ - false - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - true - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - false - false - x64\TestZlib$(Configuration)\ - x64\TestZlib$(Configuration)\Tmp\ - false - ia64\TestZlib$(Configuration)\ - ia64\TestZlib$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - AssemblyAndSourceCode - $(IntDir) - Level3 - ProgramDatabase - - - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)testzlib.exe - true - $(OutDir)testzlib.pdb - Console - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - false - - - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - Default - MultiThreaded - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)testzlib.exe - true - Console - true - true - false - - - MachineX86 - false - - - - - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDebugDLL - false - $(IntDir) - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - - - - - Itanium - - - Disabled - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDebugDLL - false - - - AssemblyAndSourceCode - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - $(OutDir)testzlib.pdb - Console - MachineIA64 - - - - - ..\..\..;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - false - $(IntDir) - - - %(AdditionalDependencies) - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - MachineIA64 - - - - - ..\..\..;%(AdditionalIncludeDirectories) - ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - false - $(IntDir) - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - - - - - Itanium - - - MaxSpeed - OnlyExplicitInline - true - ..\..\..;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - Default - MultiThreadedDLL - false - true - - - $(IntDir) - Level3 - ProgramDatabase - - - $(OutDir)testzlib.exe - true - Console - true - true - MachineIA64 - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlib.rc boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlib.rc --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlib.rc 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlib.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -#include - -#define IDR_VERSION1 1 -IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 2, 12, 0 - PRODUCTVERSION 1, 2, 12, 0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS 0 - FILEOS VOS_DOS_WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0 // not used -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - //language ID = U.S. English, char set = Windows, Multilingual - - BEGIN - VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.2.12\0" - VALUE "InternalName", "zlib\0" - VALUE "OriginalFilename", "zlibwapi.dll\0" - VALUE "ProductName", "ZLib.DLL\0" - VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1252 - END -END diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibstat.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibstat.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibstat.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibstat.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,467 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} - - - - StaticLibrary - false - v140 - - - StaticLibrary - false - v140 - - - StaticLibrary - false - v140 - Unicode - - - StaticLibrary - false - v140 - - - StaticLibrary - false - v140 - - - StaticLibrary - false - v140 - - - StaticLibrary - false - v140 - - - StaticLibrary - false - v140 - - - StaticLibrary - false - v140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x86\ZlibStat$(Configuration)\ - x86\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - x64\ZlibStat$(Configuration)\ - x64\ZlibStat$(Configuration)\Tmp\ - ia64\ZlibStat$(Configuration)\ - ia64\ZlibStat$(Configuration)\Tmp\ - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)zlibstat.lib - true - - - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - Itanium - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - OldStyle - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - $(OutDir)zlibstat.lib - true - - - - - Itanium - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - X64 - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - Itanium - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibstat.pch - $(IntDir) - $(IntDir) - $(OutDir) - Level3 - true - - - 0x040c - - - /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) - $(OutDir)zlibstat.lib - true - - - - - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibvc.sln boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibvc.sln --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibvc.sln 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibvc.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Itanium = Debug|Itanium - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Itanium = Release|Itanium - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium - ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 - ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibvc.vcxproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibvc.vcxproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibvc.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc14/zlibvc.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,692 +0,0 @@ - - - - - Debug - Itanium - - - Debug - Win32 - - - Debug - x64 - - - ReleaseWithoutAsm - Itanium - - - ReleaseWithoutAsm - Win32 - - - ReleaseWithoutAsm - x64 - - - Release - Itanium - - - Release - Win32 - - - Release - x64 - - - - {8FD826F8-3739-44E6-8CC8-997122E53B8D} - - - - DynamicLibrary - false - true - v140 - - - DynamicLibrary - false - true - v140 - - - DynamicLibrary - false - v140 - Unicode - - - DynamicLibrary - false - true - v140 - - - DynamicLibrary - false - true - v140 - - - DynamicLibrary - false - v140 - - - DynamicLibrary - false - true - v140 - - - DynamicLibrary - false - true - v140 - - - DynamicLibrary - false - v140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - true - false - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - false - false - x86\ZlibDll$(Configuration)\ - x86\ZlibDll$(Configuration)\Tmp\ - false - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - true - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - true - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - false - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - false - false - x64\ZlibDll$(Configuration)\ - x64\ZlibDll$(Configuration)\Tmp\ - false - false - ia64\ZlibDll$(Configuration)\ - ia64\ZlibDll$(Configuration)\Tmp\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - zlibwapi - zlibwapi - zlibwapi - zlibwapi - zlibwapi - zlibwapi - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - .\zlibvc.def - true - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - false - - - $(OutDir)zlibwapi.lib - - - cd ..\..\masmx86 -bld_ml32.bat - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - false - - - $(OutDir)zlibwapi.lib - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions) - true - - - MultiThreaded - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - /MACHINE:I386 %(AdditionalOptions) - ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - false - - - $(OutDir)zlibwapi.lib - false - - - cd ..\..\masmx86 -bld_ml32.bat - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - .\zlibvc.def - true - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineX64 - - - cd ..\..\contrib\masmx64 -bld_ml64.bat - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - Disabled - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - - - MultiThreadedDebugDLL - false - $(IntDir)zlibvc.pch - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - .\zlibvc.def - true - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineX64 - - - cd ..\..\masmx64 -bld_ml64.bat - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Itanium - $(OutDir)zlibvc.tlb - - - OnlyExplicitInline - ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) - _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - $(IntDir)zlibvc.pch - All - $(IntDir) - $(IntDir) - $(OutDir) - - - Level3 - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x040c - - - $(OutDir)zlibwapi.dll - true - false - .\zlibvc.def - $(OutDir)zlibwapi.pdb - true - $(OutDir)zlibwapi.map - Windows - $(OutDir)zlibwapi.lib - MachineIA64 - - - - - - - - - - - - - - true - true - true - true - true - true - - - - - - - - - - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - ZLIB_INTERNAL;%(PreprocessorDefinitions) - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/miniunz.vcproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/miniunz.vcproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/miniunz.vcproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/miniunz.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,565 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/minizip.vcproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/minizip.vcproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/minizip.vcproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/minizip.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,562 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/testzlibdll.vcproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/testzlibdll.vcproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/testzlibdll.vcproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/testzlibdll.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,565 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/testzlib.vcproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/testzlib.vcproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/testzlib.vcproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/testzlib.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,852 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlib.rc boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlib.rc --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlib.rc 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlib.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -#include - -#define IDR_VERSION1 1 -IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 2, 12, 0 - PRODUCTVERSION 1, 2, 12, 0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS 0 - FILEOS VOS_DOS_WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0 // not used -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - //language ID = U.S. English, char set = Windows, Multilingual - - BEGIN - VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.2.12\0" - VALUE "InternalName", "zlib\0" - VALUE "OriginalFilename", "zlibwapi.dll\0" - VALUE "ProductName", "ZLib.DLL\0" - VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1252 - END -END diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibstat.vcproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibstat.vcproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibstat.vcproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibstat.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,835 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibvc.sln boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibvc.sln --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibvc.sln 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibvc.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestZlibDll", "testzlibdll.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" - ProjectSection(ProjectDependencies) = postProject - {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" - ProjectSection(ProjectDependencies) = postProject - {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" - ProjectSection(ProjectDependencies) = postProject - {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Itanium = Debug|Itanium - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Itanium = Release|Itanium - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium - ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 - ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 - {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 - {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibvc.vcproj boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibvc.vcproj --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibvc.vcproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/contrib/vstudio/vc9/zlibvc.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,1156 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/doc/crc-doc.1.0.pdf and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/doc/crc-doc.1.0.pdf differ diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/examples/zlib_how.html boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/examples/zlib_how.html --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/examples/zlib_how.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/examples/zlib_how.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,545 +0,0 @@ - - - - -zlib Usage Example - - - -

zlib Usage Example

-We often get questions about how the deflate() and inflate() functions should be used. -Users wonder when they should provide more input, when they should use more output, -what to do with a Z_BUF_ERROR, how to make sure the process terminates properly, and -so on. So for those who have read zlib.h (a few times), and -would like further edification, below is an annotated example in C of simple routines to compress and decompress -from an input file to an output file using deflate() and inflate() respectively. The -annotations are interspersed between lines of the code. So please read between the lines. -We hope this helps explain some of the intricacies of zlib. -

-Without further adieu, here is the program zpipe.c: -


-/* zpipe.c: example of proper use of zlib's inflate() and deflate()
-   Not copyrighted -- provided to the public domain
-   Version 1.4  11 December 2005  Mark Adler */
-
-/* Version history:
-   1.0  30 Oct 2004  First version
-   1.1   8 Nov 2004  Add void casting for unused return values
-                     Use switch statement for inflate() return values
-   1.2   9 Nov 2004  Add assertions to document zlib guarantees
-   1.3   6 Apr 2005  Remove incorrect assertion in inf()
-   1.4  11 Dec 2005  Add hack to avoid MSDOS end-of-line conversions
-                     Avoid some compiler warnings for input and output buffers
- */
-
-We now include the header files for the required definitions. From -stdio.h we use fopen(), fread(), fwrite(), -feof(), ferror(), and fclose() for file i/o, and -fputs() for error messages. From string.h we use -strcmp() for command line argument processing. -From assert.h we use the assert() macro. -From zlib.h -we use the basic compression functions deflateInit(), -deflate(), and deflateEnd(), and the basic decompression -functions inflateInit(), inflate(), and -inflateEnd(). -

-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include "zlib.h"
-
-This is an ugly hack required to avoid corruption of the input and output data on -Windows/MS-DOS systems. Without this, those systems would assume that the input and output -files are text, and try to convert the end-of-line characters from one standard to -another. That would corrupt binary data, and in particular would render the compressed data unusable. -This sets the input and output to binary which suppresses the end-of-line conversions. -SET_BINARY_MODE() will be used later on stdin and stdout, at the beginning of main(). -

-#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
-#  include <fcntl.h>
-#  include <io.h>
-#  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
-#else
-#  define SET_BINARY_MODE(file)
-#endif
-
-CHUNK is simply the buffer size for feeding data to and pulling data -from the zlib routines. Larger buffer sizes would be more efficient, -especially for inflate(). If the memory is available, buffers sizes -on the order of 128K or 256K bytes should be used. -

-#define CHUNK 16384
-
-The def() routine compresses data from an input file to an output file. The output data -will be in the zlib format, which is different from the gzip or zip -formats. The zlib format has a very small header of only two bytes to identify it as -a zlib stream and to provide decoding information, and a four-byte trailer with a fast -check value to verify the integrity of the uncompressed data after decoding. -

-/* Compress from file source to file dest until EOF on source.
-   def() returns Z_OK on success, Z_MEM_ERROR if memory could not be
-   allocated for processing, Z_STREAM_ERROR if an invalid compression
-   level is supplied, Z_VERSION_ERROR if the version of zlib.h and the
-   version of the library linked do not match, or Z_ERRNO if there is
-   an error reading or writing the files. */
-int def(FILE *source, FILE *dest, int level)
-{
-
-Here are the local variables for def(). ret will be used for zlib -return codes. flush will keep track of the current flushing state for deflate(), -which is either no flushing, or flush to completion after the end of the input file is reached. -have is the amount of data returned from deflate(). The strm structure -is used to pass information to and from the zlib routines, and to maintain the -deflate() state. in and out are the input and output buffers for -deflate(). -

-    int ret, flush;
-    unsigned have;
-    z_stream strm;
-    unsigned char in[CHUNK];
-    unsigned char out[CHUNK];
-
-The first thing we do is to initialize the zlib state for compression using -deflateInit(). This must be done before the first use of deflate(). -The zalloc, zfree, and opaque fields in the strm -structure must be initialized before calling deflateInit(). Here they are -set to the zlib constant Z_NULL to request that zlib use -the default memory allocation routines. An application may also choose to provide -custom memory allocation routines here. deflateInit() will allocate on the -order of 256K bytes for the internal state. -(See zlib Technical Details.) -

-deflateInit() is called with a pointer to the structure to be initialized and -the compression level, which is an integer in the range of -1 to 9. Lower compression -levels result in faster execution, but less compression. Higher levels result in -greater compression, but slower execution. The zlib constant Z_DEFAULT_COMPRESSION, -equal to -1, -provides a good compromise between compression and speed and is equivalent to level 6. -Level 0 actually does no compression at all, and in fact expands the data slightly to produce -the zlib format (it is not a byte-for-byte copy of the input). -More advanced applications of zlib -may use deflateInit2() here instead. Such an application may want to reduce how -much memory will be used, at some price in compression. Or it may need to request a -gzip header and trailer instead of a zlib header and trailer, or raw -encoding with no header or trailer at all. -

-We must check the return value of deflateInit() against the zlib constant -Z_OK to make sure that it was able to -allocate memory for the internal state, and that the provided arguments were valid. -deflateInit() will also check that the version of zlib that the zlib.h -file came from matches the version of zlib actually linked with the program. This -is especially important for environments in which zlib is a shared library. -

-Note that an application can initialize multiple, independent zlib streams, which can -operate in parallel. The state information maintained in the structure allows the zlib -routines to be reentrant. -


-    /* allocate deflate state */
-    strm.zalloc = Z_NULL;
-    strm.zfree = Z_NULL;
-    strm.opaque = Z_NULL;
-    ret = deflateInit(&strm, level);
-    if (ret != Z_OK)
-        return ret;
-
-With the pleasantries out of the way, now we can get down to business. The outer do-loop -reads all of the input file and exits at the bottom of the loop once end-of-file is reached. -This loop contains the only call of deflate(). So we must make sure that all of the -input data has been processed and that all of the output data has been generated and consumed -before we fall out of the loop at the bottom. -

-    /* compress until end of file */
-    do {
-
-We start off by reading data from the input file. The number of bytes read is put directly -into avail_in, and a pointer to those bytes is put into next_in. We also -check to see if end-of-file on the input has been reached. If we are at the end of file, then flush is set to the -zlib constant Z_FINISH, which is later passed to deflate() to -indicate that this is the last chunk of input data to compress. We need to use feof() -to check for end-of-file as opposed to seeing if fewer than CHUNK bytes have been read. The -reason is that if the input file length is an exact multiple of CHUNK, we will miss -the fact that we got to the end-of-file, and not know to tell deflate() to finish -up the compressed stream. If we are not yet at the end of the input, then the zlib -constant Z_NO_FLUSH will be passed to deflate to indicate that we are still -in the middle of the uncompressed data. -

-If there is an error in reading from the input file, the process is aborted with -deflateEnd() being called to free the allocated zlib state before returning -the error. We wouldn't want a memory leak, now would we? deflateEnd() can be called -at any time after the state has been initialized. Once that's done, deflateInit() (or -deflateInit2()) would have to be called to start a new compression process. There is -no point here in checking the deflateEnd() return code. The deallocation can't fail. -


-        strm.avail_in = fread(in, 1, CHUNK, source);
-        if (ferror(source)) {
-            (void)deflateEnd(&strm);
-            return Z_ERRNO;
-        }
-        flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
-        strm.next_in = in;
-
-The inner do-loop passes our chunk of input data to deflate(), and then -keeps calling deflate() until it is done producing output. Once there is no more -new output, deflate() is guaranteed to have consumed all of the input, i.e., -avail_in will be zero. -

-        /* run deflate() on input until output buffer not full, finish
-           compression if all of source has been read in */
-        do {
-
-Output space is provided to deflate() by setting avail_out to the number -of available output bytes and next_out to a pointer to that space. -

-            strm.avail_out = CHUNK;
-            strm.next_out = out;
-
-Now we call the compression engine itself, deflate(). It takes as many of the -avail_in bytes at next_in as it can process, and writes as many as -avail_out bytes to next_out. Those counters and pointers are then -updated past the input data consumed and the output data written. It is the amount of -output space available that may limit how much input is consumed. -Hence the inner loop to make sure that -all of the input is consumed by providing more output space each time. Since avail_in -and next_in are updated by deflate(), we don't have to mess with those -between deflate() calls until it's all used up. -

-The parameters to deflate() are a pointer to the strm structure containing -the input and output information and the internal compression engine state, and a parameter -indicating whether and how to flush data to the output. Normally deflate will consume -several K bytes of input data before producing any output (except for the header), in order -to accumulate statistics on the data for optimum compression. It will then put out a burst of -compressed data, and proceed to consume more input before the next burst. Eventually, -deflate() -must be told to terminate the stream, complete the compression with provided input data, and -write out the trailer check value. deflate() will continue to compress normally as long -as the flush parameter is Z_NO_FLUSH. Once the Z_FINISH parameter is provided, -deflate() will begin to complete the compressed output stream. However depending on how -much output space is provided, deflate() may have to be called several times until it -has provided the complete compressed stream, even after it has consumed all of the input. The flush -parameter must continue to be Z_FINISH for those subsequent calls. -

-There are other values of the flush parameter that are used in more advanced applications. You can -force deflate() to produce a burst of output that encodes all of the input data provided -so far, even if it wouldn't have otherwise, for example to control data latency on a link with -compressed data. You can also ask that deflate() do that as well as erase any history up to -that point so that what follows can be decompressed independently, for example for random access -applications. Both requests will degrade compression by an amount depending on how often such -requests are made. -

-deflate() has a return value that can indicate errors, yet we do not check it here. Why -not? Well, it turns out that deflate() can do no wrong here. Let's go through -deflate()'s return values and dispense with them one by one. The possible values are -Z_OK, Z_STREAM_END, Z_STREAM_ERROR, or Z_BUF_ERROR. Z_OK -is, well, ok. Z_STREAM_END is also ok and will be returned for the last call of -deflate(). This is already guaranteed by calling deflate() with Z_FINISH -until it has no more output. Z_STREAM_ERROR is only possible if the stream is not -initialized properly, but we did initialize it properly. There is no harm in checking for -Z_STREAM_ERROR here, for example to check for the possibility that some -other part of the application inadvertently clobbered the memory containing the zlib state. -Z_BUF_ERROR will be explained further below, but -suffice it to say that this is simply an indication that deflate() could not consume -more input or produce more output. deflate() can be called again with more output space -or more available input, which it will be in this code. -


-            ret = deflate(&strm, flush);    /* no bad return value */
-            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
-
-Now we compute how much output deflate() provided on the last call, which is the -difference between how much space was provided before the call, and how much output space -is still available after the call. Then that data, if any, is written to the output file. -We can then reuse the output buffer for the next call of deflate(). Again if there -is a file i/o error, we call deflateEnd() before returning to avoid a memory leak. -

-            have = CHUNK - strm.avail_out;
-            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
-                (void)deflateEnd(&strm);
-                return Z_ERRNO;
-            }
-
-The inner do-loop is repeated until the last deflate() call fails to fill the -provided output buffer. Then we know that deflate() has done as much as it can with -the provided input, and that all of that input has been consumed. We can then fall out of this -loop and reuse the input buffer. -

-The way we tell that deflate() has no more output is by seeing that it did not fill -the output buffer, leaving avail_out greater than zero. However suppose that -deflate() has no more output, but just so happened to exactly fill the output buffer! -avail_out is zero, and we can't tell that deflate() has done all it can. -As far as we know, deflate() -has more output for us. So we call it again. But now deflate() produces no output -at all, and avail_out remains unchanged as CHUNK. That deflate() call -wasn't able to do anything, either consume input or produce output, and so it returns -Z_BUF_ERROR. (See, I told you I'd cover this later.) However this is not a problem at -all. Now we finally have the desired indication that deflate() is really done, -and so we drop out of the inner loop to provide more input to deflate(). -

-With flush set to Z_FINISH, this final set of deflate() calls will -complete the output stream. Once that is done, subsequent calls of deflate() would return -Z_STREAM_ERROR if the flush parameter is not Z_FINISH, and do no more processing -until the state is reinitialized. -

-Some applications of zlib have two loops that call deflate() -instead of the single inner loop we have here. The first loop would call -without flushing and feed all of the data to deflate(). The second loop would call -deflate() with no more -data and the Z_FINISH parameter to complete the process. As you can see from this -example, that can be avoided by simply keeping track of the current flush state. -


-        } while (strm.avail_out == 0);
-        assert(strm.avail_in == 0);     /* all input will be used */
-
-Now we check to see if we have already processed all of the input file. That information was -saved in the flush variable, so we see if that was set to Z_FINISH. If so, -then we're done and we fall out of the outer loop. We're guaranteed to get Z_STREAM_END -from the last deflate() call, since we ran it until the last chunk of input was -consumed and all of the output was generated. -

-        /* done when last data in file processed */
-    } while (flush != Z_FINISH);
-    assert(ret == Z_STREAM_END);        /* stream will be complete */
-
-The process is complete, but we still need to deallocate the state to avoid a memory leak -(or rather more like a memory hemorrhage if you didn't do this). Then -finally we can return with a happy return value. -

-    /* clean up and return */
-    (void)deflateEnd(&strm);
-    return Z_OK;
-}
-
-Now we do the same thing for decompression in the inf() routine. inf() -decompresses what is hopefully a valid zlib stream from the input file and writes the -uncompressed data to the output file. Much of the discussion above for def() -applies to inf() as well, so the discussion here will focus on the differences between -the two. -

-/* Decompress from file source to file dest until stream ends or EOF.
-   inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be
-   allocated for processing, Z_DATA_ERROR if the deflate data is
-   invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and
-   the version of the library linked do not match, or Z_ERRNO if there
-   is an error reading or writing the files. */
-int inf(FILE *source, FILE *dest)
-{
-
-The local variables have the same functionality as they do for def(). The -only difference is that there is no flush variable, since inflate() -can tell from the zlib stream itself when the stream is complete. -

-    int ret;
-    unsigned have;
-    z_stream strm;
-    unsigned char in[CHUNK];
-    unsigned char out[CHUNK];
-
-The initialization of the state is the same, except that there is no compression level, -of course, and two more elements of the structure are initialized. avail_in -and next_in must be initialized before calling inflateInit(). This -is because the application has the option to provide the start of the zlib stream in -order for inflateInit() to have access to information about the compression -method to aid in memory allocation. In the current implementation of zlib -(up through versions 1.2.x), the method-dependent memory allocations are deferred to the first call of -inflate() anyway. However those fields must be initialized since later versions -of zlib that provide more compression methods may take advantage of this interface. -In any case, no decompression is performed by inflateInit(), so the -avail_out and next_out fields do not need to be initialized before calling. -

-Here avail_in is set to zero and next_in is set to Z_NULL to -indicate that no input data is being provided. -


-    /* allocate inflate state */
-    strm.zalloc = Z_NULL;
-    strm.zfree = Z_NULL;
-    strm.opaque = Z_NULL;
-    strm.avail_in = 0;
-    strm.next_in = Z_NULL;
-    ret = inflateInit(&strm);
-    if (ret != Z_OK)
-        return ret;
-
-The outer do-loop decompresses input until inflate() indicates -that it has reached the end of the compressed data and has produced all of the uncompressed -output. This is in contrast to def() which processes all of the input file. -If end-of-file is reached before the compressed data self-terminates, then the compressed -data is incomplete and an error is returned. -

-    /* decompress until deflate stream ends or end of file */
-    do {
-
-We read input data and set the strm structure accordingly. If we've reached the -end of the input file, then we leave the outer loop and report an error, since the -compressed data is incomplete. Note that we may read more data than is eventually consumed -by inflate(), if the input file continues past the zlib stream. -For applications where zlib streams are embedded in other data, this routine would -need to be modified to return the unused data, or at least indicate how much of the input -data was not used, so the application would know where to pick up after the zlib stream. -

-        strm.avail_in = fread(in, 1, CHUNK, source);
-        if (ferror(source)) {
-            (void)inflateEnd(&strm);
-            return Z_ERRNO;
-        }
-        if (strm.avail_in == 0)
-            break;
-        strm.next_in = in;
-
-The inner do-loop has the same function it did in def(), which is to -keep calling inflate() until has generated all of the output it can with the -provided input. -

-        /* run inflate() on input until output buffer not full */
-        do {
-
-Just like in def(), the same output space is provided for each call of inflate(). -

-            strm.avail_out = CHUNK;
-            strm.next_out = out;
-
-Now we run the decompression engine itself. There is no need to adjust the flush parameter, since -the zlib format is self-terminating. The main difference here is that there are -return values that we need to pay attention to. Z_DATA_ERROR -indicates that inflate() detected an error in the zlib compressed data format, -which means that either the data is not a zlib stream to begin with, or that the data was -corrupted somewhere along the way since it was compressed. The other error to be processed is -Z_MEM_ERROR, which can occur since memory allocation is deferred until inflate() -needs it, unlike deflate(), whose memory is allocated at the start by deflateInit(). -

-Advanced applications may use -deflateSetDictionary() to prime deflate() with a set of likely data to improve the -first 32K or so of compression. This is noted in the zlib header, so inflate() -requests that that dictionary be provided before it can start to decompress. Without the dictionary, -correct decompression is not possible. For this routine, we have no idea what the dictionary is, -so the Z_NEED_DICT indication is converted to a Z_DATA_ERROR. -

-inflate() can also return Z_STREAM_ERROR, which should not be possible here, -but could be checked for as noted above for def(). Z_BUF_ERROR does not need to be -checked for here, for the same reasons noted for def(). Z_STREAM_END will be -checked for later. -


-            ret = inflate(&strm, Z_NO_FLUSH);
-            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
-            switch (ret) {
-            case Z_NEED_DICT:
-                ret = Z_DATA_ERROR;     /* and fall through */
-            case Z_DATA_ERROR:
-            case Z_MEM_ERROR:
-                (void)inflateEnd(&strm);
-                return ret;
-            }
-
-The output of inflate() is handled identically to that of deflate(). -

-            have = CHUNK - strm.avail_out;
-            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
-                (void)inflateEnd(&strm);
-                return Z_ERRNO;
-            }
-
-The inner do-loop ends when inflate() has no more output as indicated -by not filling the output buffer, just as for deflate(). In this case, we cannot -assert that strm.avail_in will be zero, since the deflate stream may end before the file -does. -

-        } while (strm.avail_out == 0);
-
-The outer do-loop ends when inflate() reports that it has reached the -end of the input zlib stream, has completed the decompression and integrity -check, and has provided all of the output. This is indicated by the inflate() -return value Z_STREAM_END. The inner loop is guaranteed to leave ret -equal to Z_STREAM_END if the last chunk of the input file read contained the end -of the zlib stream. So if the return value is not Z_STREAM_END, the -loop continues to read more input. -

-        /* done when inflate() says it's done */
-    } while (ret != Z_STREAM_END);
-
-At this point, decompression successfully completed, or we broke out of the loop due to no -more data being available from the input file. If the last inflate() return value -is not Z_STREAM_END, then the zlib stream was incomplete and a data error -is returned. Otherwise, we return with a happy return value. Of course, inflateEnd() -is called first to avoid a memory leak. -

-    /* clean up and return */
-    (void)inflateEnd(&strm);
-    return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
-}
-
-That ends the routines that directly use zlib. The following routines make this -a command-line program by running data through the above routines from stdin to -stdout, and handling any errors reported by def() or inf(). -

-zerr() is used to interpret the possible error codes from def() -and inf(), as detailed in their comments above, and print out an error message. -Note that these are only a subset of the possible return values from deflate() -and inflate(). -


-/* report a zlib or i/o error */
-void zerr(int ret)
-{
-    fputs("zpipe: ", stderr);
-    switch (ret) {
-    case Z_ERRNO:
-        if (ferror(stdin))
-            fputs("error reading stdin\n", stderr);
-        if (ferror(stdout))
-            fputs("error writing stdout\n", stderr);
-        break;
-    case Z_STREAM_ERROR:
-        fputs("invalid compression level\n", stderr);
-        break;
-    case Z_DATA_ERROR:
-        fputs("invalid or incomplete deflate data\n", stderr);
-        break;
-    case Z_MEM_ERROR:
-        fputs("out of memory\n", stderr);
-        break;
-    case Z_VERSION_ERROR:
-        fputs("zlib version mismatch!\n", stderr);
-    }
-}
-
-Here is the main() routine used to test def() and inf(). The -zpipe command is simply a compression pipe from stdin to stdout, if -no arguments are given, or it is a decompression pipe if zpipe -d is used. If any other -arguments are provided, no compression or decompression is performed. Instead a usage -message is displayed. Examples are zpipe < foo.txt > foo.txt.z to compress, and -zpipe -d < foo.txt.z > foo.txt to decompress. -

-/* compress or decompress from stdin to stdout */
-int main(int argc, char **argv)
-{
-    int ret;
-
-    /* avoid end-of-line conversions */
-    SET_BINARY_MODE(stdin);
-    SET_BINARY_MODE(stdout);
-
-    /* do compression if no arguments */
-    if (argc == 1) {
-        ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
-        if (ret != Z_OK)
-            zerr(ret);
-        return ret;
-    }
-
-    /* do decompression if -d specified */
-    else if (argc == 2 && strcmp(argv[1], "-d") == 0) {
-        ret = inf(stdin, stdout);
-        if (ret != Z_OK)
-            zerr(ret);
-        return ret;
-    }
-
-    /* otherwise, report usage */
-    else {
-        fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr);
-        return 1;
-    }
-}
-
-
-Copyright (c) 2004, 2005 by Mark Adler
Last modified 11 December 2005
- - diff -Nru boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/win32/zlib1.rc boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/win32/zlib1.rc --- boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/win32/zlib1.rc 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/win32/zlib1.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -#include -#include "../zlib.h" - -#ifdef GCC_WINDRES -VS_VERSION_INFO VERSIONINFO -#else -VS_VERSION_INFO VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE -#endif - FILEVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 - PRODUCTVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG - FILEFLAGS 1 -#else - FILEFLAGS 0 -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0 // not used -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - //language ID = U.S. English, char set = Windows, Multilingual - BEGIN - VALUE "FileDescription", "zlib data compression library\0" - VALUE "FileVersion", ZLIB_VERSION "\0" - VALUE "InternalName", "zlib1.dll\0" - VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" - VALUE "OriginalFilename", "zlib1.dll\0" - VALUE "ProductName", "zlib\0" - VALUE "ProductVersion", ZLIB_VERSION "\0" - VALUE "Comments", "For more information visit http://www.zlib.net/\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1252 - END -END Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/zlib.3.pdf and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/beast/test/extern/zlib-1.2.12/zlib.3.pdf differ diff -Nru boost1.81-1.81.0/libs/bind/index.html boost1.81-1.81.0/libs/bind/index.html --- boost1.81-1.81.0/libs/bind/index.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/bind/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ - - - - - -Automatic redirection failed, please go to -doc/html/bind.html or -doc/html/mem_fn.html. - - - diff -Nru boost1.81-1.81.0/libs/bind/mem_fn.html boost1.81-1.81.0/libs/bind/mem_fn.html --- boost1.81-1.81.0/libs/bind/mem_fn.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/bind/mem_fn.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ - - - -Boost.MemberFunction - - - - - -

- Automatic redirection failed, please go to - doc/html/mem_fn.html -

-

- © 2001, 2002 Peter Dimov and Multi Media Ltd.
- © 2003-2005 Peter Dimov -

- - diff -Nru boost1.81-1.81.0/libs/circular_buffer/doc/circular_buffer.qbk boost1.81-1.81.0/libs/circular_buffer/doc/circular_buffer.qbk --- boost1.81-1.81.0/libs/circular_buffer/doc/circular_buffer.qbk 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/circular_buffer/doc/circular_buffer.qbk 2022-12-24 13:24:08.861548000 +0000 @@ -596,6 +596,8 @@ [section:version_id Documentation Version Info] +Last edit to Quickbook file __FILENAME__ was at __TIME__ on __DATE__. + [tip This should appear on the pdf version (but may be redundant on a html version where the last edit date is on the first (home) page).] diff -Nru boost1.81-1.81.0/libs/compute/doc/autodoc.xml boost1.81-1.81.0/libs/compute/doc/autodoc.xml --- boost1.81-1.81.0/libs/compute/doc/autodoc.xml 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/compute/doc/autodoc.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,24664 +0,0 @@ - -Header Reference
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TInputIteratorfirst element in the input range InputIteratorlast element in the input range Tinitial value BinaryFunctionbinary reduction function command_queue &system::default_queue()command queue to perform the operationTInputIteratorInputIteratorTcommand_queue &system::default_queue()Returns the result of applying function to the elements in the range [first, last) and init.If no function is specified, plus will be used. - -In specific situations the call to accumulate() can be automatically optimized to a call to the more efficient reduce() algorithm. This occurs when the binary reduction function is recognized as associative (such as the plus<int> function).Note that because floating-point addition is not associative, calling accumulate() with plus<float> results in a less efficient serial reduction algorithm being executed. If a slight loss in precision is acceptable, the more efficient parallel reduce() algorithm should be used instead.For example: // with vec = boost::compute::vector<int> -accumulate(vec.begin(), vec.end(), 0, plus<int>()); // fast -reduce(vec.begin(), vec.end(), &result, plus<int>()); // fast - -// with vec = boost::compute::vector<float> -accumulate(vec.begin(), vec.end(), 0, plus<float>()); // slow -reduce(vec.begin(), vec.end(), &result, plus<float>()); // fast -Space complexity: \Omega(1) - Space complexity when optimized to reduce(): \Omega(n)See Also:reduce() - -the accumulated result value - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIteratorfirst element in the input range InputIteratorlast element in the input range OutputIteratorfirst element in the output range BinaryFunctionbinary difference function command_queue &system::default_queue()command queue to perform the operationOutputIteratorInputIteratorInputIteratorOutputIteratorcommand_queue &system::default_queue()Stores the difference of each pair of consecutive values in the range [first, last) to the range beginning at result. If op is not provided, minus<T> is used. - -Space complexity: \Omega(1) - Space complexity when result == first: \Omega(n)See Also:adjacent_find() - -OutputIterator to the end of the result range - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -InputIteratorInputIteratorfirst element in the range to search InputIteratorlast element in the range to search Comparebinary comparison function command_queue &system::default_queue()command queue to perform the operationInputIteratorInputIteratorInputIteratorcommand_queue &system::default_queue()Searches the range [first, last) for two identical adjacent elements and returns an iterator pointing to the first. - -Space complexity: \Omega(1)See Also:find(), adjacent_difference() - -InputIteratorm to the first element which compares equal to the following element. If none are equal, returns last. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIteratorInputIteratorUnaryPredicatecommand_queue &system::default_queue()Returns true if predicate returns true for all of the elements in the range [first, last).Space complexity: \Omega(1)See Also:any_of(), none_of() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIteratorInputIteratorUnaryPredicatecommand_queue &system::default_queue()Returns true if predicate returns true for any of the elements in the range [first, last).For example, to test if a vector contains any negative values: Space complexity: \Omega(1)See Also:all_of(), none_of() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIteratorInputIteratorconst T &command_queue &system::default_queue()Returns true if value is in the sorted range [first, last).Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIteratorfirst element in the range to copy InputIteratorlast element in the range to copy OutputIteratorfirst element in the result range command_queue &system::default_queue()command queue to perform the operationconst wait_list &wait_list()Copies the values in the range [first, last) to the range beginning at result.The generic copy() function can be used for a variety of data transfer tasks and provides a standard interface to the following OpenCL functions: -clEnqueueReadBuffer() - -clEnqueueWriteBuffer() - -clEnqueueCopyBuffer() - - -Unlike the aforementioned OpenCL functions, copy() will also work with non-contiguous data-structures (e.g. std::list<T>) as well as with "fancy" iterators (e.g. transform_iterator). - -For example, to copy an array of int values on the host to a vector on the device: // array on the host -int data[] = { 1, 2, 3, 4 }; - -// vector on the device -boost::compute::vector<int> vec(4, context); - -// copy values to the device vector -boost::compute::copy(data, data + 4, vec.begin(), queue); -The copy algorithm can also be used with standard containers such as std::vector<T>: std::vector<int> host_vector = ... -boost::compute::vector<int> device_vector = ... - -// copy from the host to the device -boost::compute::copy( - host_vector.begin(), host_vector.end(), device_vector.begin(), queue -); - -// copy from the device to the host -boost::compute::copy( - device_vector.begin(), device_vector.end(), host_vector.begin(), queue -); -Space complexity: \Omega(1)See Also:copy_n(), copy_if(), copy_async() - -OutputIterator to the end of the result range - -future< OutputIterator >InputIteratorInputIteratorOutputIteratorcommand_queue &system::default_queue()const wait_list &wait_list()Copies the values in the range [first, last) to the range beginning at result. The copy is performed asynchronously.See Also:copy() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIteratorInputIteratorOutputIteratorPredicatecommand_queue &system::default_queue()Copies each element in the range [first, last) for which predicate returns true to the range beginning at result.Space complexity: \Omega(2n) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIteratorSizeOutputIteratorcommand_queue &system::default_queue()const wait_list &wait_list()Copies count elements from first to result.For example, to copy four values from the host to the device: // values on the host and vector on the device -float values[4] = { 1.f, 2.f, 3.f, 4.f }; -boost::compute::vector<float> vec(4, context); - -// copy from the host to the device -boost::compute::copy_n(values, 4, vec.begin(), queue); -Space complexity: \Omega(1)See Also:copy() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -size_tInputIteratorInputIteratorconst T &command_queue &system::default_queue()Returns the number of occurrences of value in the range [first, last).Space complexity on CPUs: \Omega(1) - Space complexity on GPUs: \Omega(n)See Also:count_if() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -size_tInputIteratorInputIteratorPredicatecommand_queue &system::default_queue()Returns the number of elements in the range [first, last) for which predicate returns true.Space complexity on CPUs: \Omega(1) - Space complexity on GPUs: \Omega(n) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIterator1InputIterator1InputIterator2command_queue &system::default_queue()boolInputIterator1InputIterator1InputIterator2InputIterator2command_queue &system::default_queue()Returns true if the range [first1, last1) and the range beginning at first2 are equal.Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::pair< InputIterator, InputIterator >InputIteratorInputIteratorconst T &command_queue &system::default_queue()Returns a pair of iterators containing the range of values equal to value in the sorted range [first, last).Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIteratorfirst element in the range to scan InputIteratorlast element in the range to scan OutputIteratorfirst element in the result range Tvalue used to initialize the scan sequence BinaryOperatorassociative binary operator command_queue &system::default_queue()command queue to perform the operationOutputIteratorInputIteratorInputIteratorOutputIteratorTcommand_queue &system::default_queue()OutputIteratorInputIteratorInputIteratorOutputIteratorcommand_queue &system::default_queue()Performs an exclusive scan of the elements in the range [first, last) and stores the results in the range beginning at result.Each element in the output is assigned to the sum of all the previous values in the input. - -The default operation is to add the elements up. But different associative operation can be specified as binary_op instead (e.g., multiplication, maximum, minimum). Also value used to initialized the scan sequence can be specified. Space complexity on GPUs: \Omega(n) - Space complexity on GPUs when first == result: \Omega(2n) - Space complexity on CPUs: \Omega(1)See Also:inclusive_scan() - -OutputIterator to the end of the result range - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidBufferIteratorfirst element in the range to fill BufferIteratorlast element in the range to fill const T &value to copy to each element command_queue &system::default_queue()command queue to perform the operationFills the range [first, last) with value. -For example, to fill a vector on the device with sevens: // vector on the device -boost::compute::vector<int> vec(10, context); - -// fill vector with sevens -boost::compute::fill(vec.begin(), vec.end(), 7, queue); -Space complexity: \Omega(1)See Also:boost::compute::fill_n() - - -future< void >BufferIteratorBufferIteratorconst T &command_queue &system::default_queue() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidBufferIteratorSizeconst T &command_queue &system::default_queue()Fills the range [first, first + count) with value.Space complexity: \Omega(1)See Also:fill() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -InputIteratorInputIteratorInputIteratorconst T &command_queue &system::default_queue()Returns an iterator pointing to the first element in the range [first, last) that equals value.Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TextIteratorTextIteratorIterator pointing to start of text TextIteratorIterator pointing to end of text PatternIteratorIterator pointing to start of pattern PatternIteratorIterator pointing to end of pattern command_queue &system::default_queue()Queue on which to executeSubstring matching algorithm. Searches for the last match of the pattern [p_first, p_last) in text [t_first, t_last). - -Space complexity: \Omega(n) Iterator pointing to beginning of last occurence - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -InputIteratorInputIteratorInputIteratorUnaryPredicatecommand_queue &system::default_queue()Returns an iterator pointing to the first element in the range [first, last) for which predicate returns true.Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -InputIteratorInputIteratorInputIteratorUnaryPredicatecommand_queue &system::default_queue()Returns an iterator pointing to the first element in the range [first, last) for which predicate returns false.Space complexity: \Omega(1)See Also:find_if() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -UnaryFunctionInputIteratorInputIteratorUnaryFunctioncommand_queue &system::default_queue()Calls function on each element in the range [first, last).Space complexity: \Omega(1)See Also:transform() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -UnaryFunctionInputIteratorSizeUnaryFunctioncommand_queue &system::default_queue()Calls function on each element in the range [first, first + count).Space complexity: \Omega(1)See Also:for_each() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidMapIteratorMapIteratorInputIteratorOutputIteratorcommand_queue &system::default_queue()Copies the elements using the indices from the range [first, last) to the range beginning at result using the input values from the range beginning at input.Space complexity: \Omega(1)See Also:scatter() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidOutputIteratorOutputIteratorGeneratorcommand_queue &system::default_queue()Stores the result of generator for each element in the range [first, last).Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidOutputIteratorSizeGeneratorcommand_queue &system::default_queue()Stores the result of generator for each element in the range [first, first + count).Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIterator1Iterator pointing to start of first set InputIterator1Iterator pointing to end of first set InputIterator2Iterator pointing to start of second set InputIterator2Iterator pointing to end of second set command_queue &system::default_queue()Queue on which to executeIncludes algorithm. Finds if the sorted range [first1, last1) includes the sorted range [first2, last2). In other words, it checks if [first1, last1) is a superset of [first2, last2). - -Space complexity: \Omega(distance(first1, last1) + distance(first2, last2)) True, if [first1, last1) includes [first2, last2). False otherwise. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIteratorfirst element in the range to scan InputIteratorlast element in the range to scan OutputIteratorfirst element in the result range BinaryOperatorassociative binary operator command_queue &system::default_queue()command queue to perform the operationOutputIteratorInputIteratorInputIteratorOutputIteratorcommand_queue &system::default_queue()Performs an inclusive scan of the elements in the range [first, last) and stores the results in the range beginning at result.Each element in the output is assigned to the sum of the current value in the input with the sum of every previous value in the input. - -The default operation is to add the elements up. But different associative operation can be specified as binary_op instead (e.g., multiplication, maximum, minimum). Space complexity on GPUs: \Omega(n) - Space complexity on GPUs when first == result: \Omega(2n) - Space complexity on CPUs: \Omega(1)See Also:exclusive_scan() - -OutputIterator to the end of the result range - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TInputIterator1InputIterator1InputIterator2Tcommand_queue &system::default_queue()TInputIterator1InputIterator1InputIterator2TBinaryAccumulateFunctionBinaryTransformFunctioncommand_queue &system::default_queue()Returns the inner product of the elements in the range [first1, last1) with the elements in the range beginning at first2.Space complexity: \Omega(1) - Space complexity when binary operator is recognized as associative: \Omega(n) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidIteratorIteratorIteratorcommand_queue &system::default_queue()Merges the sorted values in the range [first, middle) with the sorted values in the range [middle, last) in-place.Space complexity: \Omega(n) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidBufferIteratorBufferIteratorconst T &command_queue &system::default_queue()Fills the range [first, last) with sequential values starting at value.For example, the following code: Will fill vec with the values (0, 1, 2, ...).Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIteratorInputIteratorUnaryPredicatecommand_queue &system::default_queue()Returns true if the values in the range [first, last) are partitioned according to predicate.Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIterator1Iterator pointing to start of first range InputIterator1Iterator pointing to end of first range InputIterator2Iterator pointing to start of second range InputIterator2Iterator pointing to end of second range command_queue &system::default_queue()Queue on which to executePermutation checking algorithm. Checks if the range [first1, last1) can be permuted into the range [first2, last2) - -Space complexity: \Omega(distance(first1, last1) + distance(first2, last2)) True, if it can be permuted. False, otherwise. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIteratorfirst element in the range to check InputIteratorlast element in the range to check Comparecomparison function (by default less) command_queue &system::default_queue()command queue to perform the operationboolInputIteratorInputIteratorcommand_queue &system::default_queue()Returns true if the values in the range [first, last) are in sorted order. - -Space complexity: \Omega(1)See Also:sort() - -true if the range [first, last) is sorted - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIterator1InputIterator1InputIterator2InputIterator2command_queue &system::default_queue()Checks if the first range [first1, last1) is lexicographically less than the second range [first2, last2).Space complexity: \Omega(max(distance(first1, last1), distance(first2, last2))) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -InputIteratorInputIteratorInputIteratorconst T &command_queue &system::default_queue()Returns an iterator pointing to the first element in the sorted range [first, last) that is not less than value.Space complexity: \Omega(1)See Also:upper_bound() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -InputIteratorInputIteratorfirst element in the input range InputIteratorlast element in the input range Comparecomparison function object which returns true if the first argument is less than (i.e. is ordered before) the second. command_queue &system::default_queue()command queue to perform the operationInputIteratorInputIteratorInputIteratorcommand_queue &system::default_queue()Returns an iterator pointing to the element in the range [first, last) with the maximum value. -For example, to find int2 value with maximum first component in given vector: // comparison function object -BOOST_COMPUTE_FUNCTION(bool, compare_first, (const int2_ &a, const int2_ &b), -{ - return a.x < b.x; -}); - -// create vector -boost::compute::vector<uint2_> data = ... - -boost::compute::vector<uint2_>::iterator max = - boost::compute::max_element(data.begin(), data.end(), compare_first, queue); -Space complexity on CPUs: \Omega(1) - Space complexity on GPUs: \Omega(N)See Also:min_element() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIterator1first element in the first range to merge InputIterator1last element in the first range to merge InputIterator2first element in the second range to merge InputIterator2last element in the second range to merge OutputIteratorfirst element in the result range Comparecomparison function (by default less) command_queue &system::default_queue()command queue to perform the operationOutputIteratorInputIterator1InputIterator1InputIterator2InputIterator2OutputIteratorcommand_queue &system::default_queue()Merges the sorted values in the range [first1, last1) with the sorted values in the range [first2, last2) and stores the result in the range beginning at result. Values are compared using the comp function. If no comparision function is given, less is used. - -Space complexity: \Omega(distance(first1, last1) + distance(first2, last2))See Also:inplace_merge() - -OutputIterator to the end of the result range - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -InputIteratorInputIteratorfirst element in the input range InputIteratorlast element in the input range Comparecomparison function object which returns true if the first argument is less than (i.e. is ordered before) the second. command_queue &system::default_queue()command queue to perform the operationInputIteratorInputIteratorInputIteratorcommand_queue &system::default_queue()Returns an iterator pointing to the element in range [first, last) with the minimum value. -For example, to find int2 value with minimum first component in given vector: // comparison function object -BOOST_COMPUTE_FUNCTION(bool, compare_first, (const int2_ &a, const int2_ &b), -{ - return a.x < b.x; -}); - -// create vector -boost::compute::vector<uint2_> data = ... - -boost::compute::vector<uint2_>::iterator min = - boost::compute::min_element(data.begin(), data.end(), compare_first, queue); -Space complexity on CPUs: \Omega(1) - Space complexity on GPUs: \Omega(N)See Also:max_element() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::pair< InputIterator, InputIterator >InputIteratorfirst element in the input range InputIteratorlast element in the input range Comparecomparison function object which returns true if the first argument is less than (i.e. is ordered before) the second. command_queue &system::default_queue()command queue to perform the operationstd::pair< InputIterator, InputIterator >InputIteratorInputIteratorcommand_queue &system::default_queue()Returns a pair of iterators with the first pointing to the minimum element and the second pointing to the maximum element in the range [first, last). -Space complexity on CPUs: \Omega(1) - Space complexity on GPUs: \Omega(N)See Also:max_element(), min_element() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::pair< InputIterator1, InputIterator2 >InputIterator1InputIterator1InputIterator2command_queue &system::default_queue()std::pair< InputIterator1, InputIterator2 >InputIterator1InputIterator1InputIterator2InputIterator2command_queue &system::default_queue()Returns a pair of iterators pointing to the first position where the range [first1, last1) and the range starting at first2 differ.Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIteratorIterator pointing to start of range InputIteratorIterator pointing to end of range command_queue &system::default_queue()Queue on which to executePermutation generating algorithm. Transforms the range [first, last) into the next permutation from the set of all permutations arranged in lexicographic order - -Space complexity: \Omega(1) Boolean value signifying if the last permutation was crossed and the range was reset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIteratorInputIteratorUnaryPredicatecommand_queue &system::default_queue()Returns true if predicate returns true for none of the elements in the range [first, last).Space complexity: \Omega(1)See Also:all_of(), any_of() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidIteratorIteratorIteratorComparecommand_queue &system::default_queue()voidIteratorIteratorIteratorcommand_queue &system::default_queue()Rearranges the elements in the range [first, last) such that the nth element would be in that position in a sorted sequence.Space complexity: \Omega(3n) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIteratorInputIteratorOutputIteratorcommand_queue &system::default_queue()Calculates the cumulative sum of the elements in the range [first, last) and writes the resulting values to the range beginning at result.Space complexity on GPUs: \Omega(n) - Space complexity on GPUs when first == result: \Omega(2n) - Space complexity on CPUs: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -IteratorIteratorIteratorUnaryPredicatecommand_queue &system::default_queue()Partitions the elements in the range [first, last) according to predicate. Order of the elements need not be preserved.Space complexity: \Omega(3n)See Also:is_partitioned() and stable_partition() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::pair< OutputIterator1, OutputIterator2 >InputIteratorInputIteratorOutputIterator1OutputIterator2UnaryPredicatecommand_queue &system::default_queue()Copies all of the elements in the range [first, last) for which predicate returns true to the range beginning at first_true and all of the elements for which predicate returns false to the range beginning at first_false.Space complexity: \Omega(2n)See Also:partition() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -InputIteratorInputIteratorIterator pointing to start of range InputIteratorIterator pointing to end of range UnaryPredicateUnary predicate to be applied on each element command_queue &system::default_queue()Queue on which to executePartition point algorithm. Finds the end of true values in the partitioned range [first, last) - -Space complexity: \Omega(1)See Also:partition() and stable_partition() - -Iterator pointing to end of true values - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolInputIteratorIterator pointing to start of range InputIteratorIterator pointing to end of range command_queue &system::default_queue()Queue on which to executePermutation generating algorithm. Transforms the range [first, last) into the previous permutation from the set of all permutations arranged in lexicographic order - -Space complexity: \Omega(1) Boolean value signifying if the first permutation was crossed and the range was reset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidIteratorIteratorcommand_queue &system::default_queue()Randomly shuffles the elements in the range [first, last).Space complexity: \Omega(2n)See Also:scatter() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidInputIteratorfirst element in the input range InputIteratorlast element in the input range OutputIteratoriterator pointing to the output BinaryFunctionbinary reduction function command_queue &system::default_queue()command queue to perform the operationvoidInputIteratorInputIteratorOutputIteratorcommand_queue &system::default_queue()Returns the result of applying function to the elements in the range [first, last).If no function is specified, plus will be used. -The reduce() algorithm assumes that the binary reduction function is associative. When used with non-associative functions the result may be non-deterministic and vary in precision. Notably this affects the plus<float>() function as floating-point addition is not associative and may produce slightly different results than a serial algorithm.This algorithm supports both host and device iterators for the result argument. This allows for values to be reduced and copied to the host all with a single function call.For example, to calculate the sum of the values in a device vector and copy the result to a value on the host: Note that while the the reduce() algorithm is conceptually identical to the accumulate() algorithm, its implementation is substantially more efficient on parallel hardware. For more information, see the documentation on the accumulate() algorithm.Space complexity on GPUs: \Omega(n) - Space complexity on CPUs: \Omega(1)See Also:accumulate() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::pair< OutputKeyIterator, OutputValueIterator >InputKeyIteratorthe first key InputKeyIteratorthe last key InputValueIteratorthe first input value OutputKeyIteratoriterator pointing to the key output OutputValueIteratoriterator pointing to the reduced value output BinaryFunctionbinary reduction function BinaryPredicatebinary predicate which returns true only if two keys are equal command_queue &system::default_queue()command queue to perform the operationstd::pair< OutputKeyIterator, OutputValueIterator >InputKeyIteratorInputKeyIteratorInputValueIteratorOutputKeyIteratorOutputValueIteratorBinaryFunctioncommand_queue &system::default_queue()std::pair< OutputKeyIterator, OutputValueIterator >InputKeyIteratorInputKeyIteratorInputValueIteratorOutputKeyIteratorOutputValueIteratorcommand_queue &system::default_queue()The reduce_by_key() algorithm performs reduction for each contiguous subsequence of values determinate by equivalent keys.Returns a pair of iterators at the end of the ranges [keys_result, keys_result_last) and [values_result, values_result_last).If no function is specified, plus will be used. If no predicate is specified, equal_to will be used. -The reduce_by_key() algorithm assumes that the binary reduction function is associative. When used with non-associative functions the result may be non-deterministic and vary in precision. Notably this affects the plus<float>() function as floating-point addition is not associative and may produce slightly different results than a serial algorithm.For example, to calculate the sum of the values for each key: Space complexity on GPUs: \Omega(2n) - Space complexity on CPUs: \Omega(1)See Also:reduce() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -IteratorIteratorIteratorconst T &command_queue &system::default_queue()Removes each element equal to value in the range [first, last).Space complexity: \Omega(3n)See Also:remove_if() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -IteratorIteratorIteratorPredicatecommand_queue &system::default_queue()Removes each element for which predicate returns true in the range [first, last).Space complexity: \Omega(3n)See Also:remove() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidIteratorIteratorconst T &const T &command_queue &system::default_queue()Replaces each instance of old_value in the range [first, last) with new_value.Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIteratorInputIteratorOutputIteratorconst T &const T &command_queue &system::default_queue()Copies the value in the range [first, last) to the range beginning at result while replacing each instance of old_value with new_value.Space complexity: \Omega(1)See Also:replace() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidIteratorIteratorcommand_queue &system::default_queue()Reverses the elements in the range [first, last).Space complexity: \Omega(1)See Also:reverse_copy() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIteratorInputIteratorOutputIteratorcommand_queue &system::default_queue()Copies the elements in the range [first, last) in reversed order to the range beginning at result.Space complexity: \Omega(1)See Also:reverse() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidInputIteratorInputIteratorInputIteratorcommand_queue &system::default_queue()Performs left rotation such that element at n_first comes to the beginning.Space complexity: \Omega(distance(first, last))See Also:rotate_copy() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidInputIteratorInputIteratorInputIteratorOutputIteratorcommand_queue &system::default_queue()Performs left rotation such that element at n_first comes to the beginning and the output is stored in range starting at result.Space complexity: \Omega(1)See Also:rotate() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidInputIteratorInputIteratorMapIteratorOutputIteratorcommand_queue &system::default_queue()Copies the elements from the range [first, last) to the range beginning at result using the output indices from the range beginning at map.Space complexity: \Omega(1)See Also:gather() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidInputIteratorInputIteratorMapIteratorStencilIteratorOutputIteratorPredicatecommand_queue &system::default_queue()Copies the elements from the range [first, last) to the range beginning at result using the output indices from the range beginning at map if stencil is resolved to true. By default the predicate is an identitySpace complexity: \Omega(1) -voidInputIteratorInputIteratorMapIteratorStencilIteratorOutputIteratorcommand_queue &system::default_queue() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -TextIteratorTextIteratorIterator pointing to start of text TextIteratorIterator pointing to end of text PatternIteratorIterator pointing to start of pattern PatternIteratorIterator pointing to end of pattern command_queue &system::default_queue()Queue on which to executeSubstring matching algorithm. Searches for the first match of the pattern [p_first, p_last) in text [t_first, t_last). - -Space complexity: \Omega(distance(t_first, t_last)) Iterator pointing to beginning of first occurrence - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -TextIteratorTextIteratorIterator pointing to start of text TextIteratorIterator pointing to end of text size_tNumber of times value repeats ValueTypeValue which repeats command_queue &system::default_queue()Queue on which to executeSubstring matching algorithm. Searches for the first occurrence of n consecutive occurrences of value in text [t_first, t_last). - -Space complexity: \Omega(distance(t_first, t_last)) Iterator pointing to beginning of first occurrence - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIterator1Iterator pointing to start of first set InputIterator1Iterator pointing to end of first set InputIterator2Iterator pointing to start of second set InputIterator2Iterator pointing to end of second set OutputIteratorIterator pointing to start of range in which the difference will be stored command_queue &system::default_queue()Queue on which to executeSet difference algorithm. Finds the difference of the sorted range [first2, last2) from the sorted range [first1, last1) and stores it in range starting at result - -Space complexity: \Omega(2(distance(first1, last1) + distance(first2, last2))) Iterator pointing to end of difference - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIterator1Iterator pointing to start of first set InputIterator1Iterator pointing to end of first set InputIterator2Iterator pointing to start of second set InputIterator2Iterator pointing to end of second set OutputIteratorIterator pointing to start of range in which the intersection will be stored command_queue &system::default_queue()Queue on which to executeSet intersection algorithm. Finds the intersection of the sorted range [first1, last1) with the sorted range [first2, last2) and stores it in range starting at result - -Space complexity: \Omega(2(distance(first1, last1) + distance(first2, last2))) Iterator pointing to end of intersection - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIterator1Iterator pointing to start of first set InputIterator1Iterator pointing to end of first set InputIterator2Iterator pointing to start of second set InputIterator2Iterator pointing to end of second set OutputIteratorIterator pointing to start of range in which the symmetric difference will be stored command_queue &system::default_queue()Queue on which to executeSet symmetric difference algorithm. Finds the symmetric difference of the sorted range [first2, last2) from the sorted range [first1, last1) and stores it in range starting at result - -Space complexity: \Omega(2(distance(first1, last1) + distance(first2, last2))) Iterator pointing to end of symmetric difference - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - -OutputIteratorInputIterator1Iterator pointing to start of first set InputIterator1Iterator pointing to end of first set InputIterator2Iterator pointing to start of second set InputIterator2Iterator pointing to end of second set OutputIteratorIterator pointing to start of range in which the union will be stored command_queue &system::default_queue()Queue on which to executeSet union algorithm. Finds the union of the sorted range [first1, last1) with the sorted range [first2, last2) and stores it in range starting at result - -Space complexity: \Omega(2(distance(first1, last1) + distance(first2, last2))) Iterator pointing to end of union - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - -voidIteratorfirst element in the range to sort Iteratorlast element in the range to sort Comparecomparison function (by default less) command_queue &system::default_queue()command queue to perform the operationvoidIteratorIteratorcommand_queue &system::default_queue()Sorts the values in the range [first, last) according to compare. -For example, to sort a vector on the device: // create vector on the device with data -float data[] = { 2.f, 4.f, 1.f, 3.f }; -boost::compute::vector<float> vec(data, data + 4, queue); - -// sort the vector on the device -boost::compute::sort(vec.begin(), vec.end(), queue); -The sort() algorithm can also be directly used with host iterators. This example will automatically transfer the data to the device, sort it, and then transfer the data back to the host: std::vector<int> data = { 9, 3, 2, 5, 1, 4, 6, 7 }; - -boost::compute::sort(data.begin(), data.end(), queue); -Space complexity: \Omega(n)See Also:is_sorted() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - -voidKeyIteratorKeyIteratorValueIteratorComparecommand_queue &system::default_queue()voidKeyIteratorKeyIteratorValueIteratorcommand_queue &system::default_queue()Performs a key-value sort using the keys in the range [keys_first, keys_last) on the values in the range [values_first, values_first + (keys_last - keys_first)) using compare.If no compare function is specified, less is used.Space complexity: \Omega(2n)See Also:sort() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - -IteratorIteratorIterator pointing to start of range IteratorIterator pointing to end of range UnaryPredicateUnary predicate to be applied on each element command_queue &system::default_queue()Queue on which to executePartitioning algorithm. Partitions the elements in the range [first, last) according to predicate. The order of the elements is preserved. - -Space complexity: \Omega(3n)See Also:is_partitioned() and partition() - -Iterator pointing to end of true values - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - -voidIteratorIteratorComparecommand_queue &system::default_queue()voidIteratorIteratorcommand_queue &system::default_queue()Sorts the values in the range [first, last) according to compare. The relative order of identical values is preserved.Space complexity: \Omega(n)See Also:sort(), is_sorted() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - -voidKeyIteratorKeyIteratorValueIteratorComparecommand_queue &system::default_queue()voidKeyIteratorKeyIteratorValueIteratorcommand_queue &system::default_queue()Performs a key-value stable sort using the keys in the range [keys_first, keys_last) on the values in the range [values_first, values_first + (keys_last - keys_first)) using compare.If no compare function is specified, less is used.Space complexity: \Omega(2n)See Also:sort() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - -Iterator2Iterator1Iterator1Iterator2command_queue &system::default_queue()Swaps the elements in the range [first1, last1) with the elements in the range beginning at first2.Space complexity: \Omega(distance(first1, last1)) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - -OutputIteratorInputIteratorInputIteratorOutputIteratorUnaryOperatorcommand_queue &system::default_queue()OutputIteratorInputIterator1InputIterator1InputIterator2OutputIteratorBinaryOperatorcommand_queue &system::default_queue()Transforms the elements in the range [first, last) using operator op and stores the results in the range beginning at result.For example, to calculate the absolute value for each element in a vector: Space complexity: \Omega(1)See Also:copy() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - -OutputIteratorInputIteratorInputIteratorOutputIteratorUnaryFunctionPredicatecommand_queue &system::default_queue()Copies each element in the range [first, last) for which predicate returns true to the range beginning at result.Space complexity: O(2n) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - -voidInputIteratorInputIteratorOutputIteratorUnaryTransformFunctionBinaryReduceFunctioncommand_queue &system::default_queue()voidInputIterator1InputIterator1InputIterator2OutputIteratorBinaryTransformFunctionBinaryReduceFunctioncommand_queue &system::default_queue()Transforms each value in the range [first, last) with the unary transform_function and then reduces each transformed value with reduce_function.For example, to calculate the sum of the absolute values of a vector of integers: Space complexity on GPUs: \Omega(n) - Space complexity on CPUs: \Omega(1)See Also:reduce(), inner_product() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -InputIteratorInputIteratorfirst element in the input range InputIteratorlast element in the input range BinaryPredicatebinary operator used to check for uniqueness command_queue &system::default_queue()command queue to perform the operationInputIteratorInputIteratorInputIteratorcommand_queue &system::default_queue()Removes all consecutive duplicate elements (determined by op) from the range [first, last). If op is not provided, the equality operator is used. - -Space complexity: \Omega(4n)See Also:unique_copy() - -InputIterator to the new logical end of the range - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -OutputIteratorInputIteratorfirst element in the input range InputIteratorlast element in the input range OutputIteratorfirst element in the result range BinaryPredicatebinary operator used to check for uniqueness command_queue &system::default_queue()command queue to perform the operationOutputIteratorInputIteratorInputIteratorOutputIteratorcommand_queue &system::default_queue()Makes a copy of the range [first, last) and removes all consecutive duplicate elements (determined by op) from the copy. If op is not provided, the equality operator is used. - -Space complexity: \Omega(4n)See Also:unique() - -OutputIterator to the end of the result range - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -InputIteratorInputIteratorInputIteratorconst T &command_queue &system::default_queue()Returns an iterator pointing to the first element in the sorted range [first, last) that is not less than or equal to value.Space complexity: \Omega(1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -The buffer_allocator class allocates memory with buffer objects. See Also:buffer - -T -unspecified -unspecified -std::size_t -std::ptrdiff_t - -pointersize_type -voidpointersize_type -size_type -context - -const context & -const buffer_allocator< T > & -buffer_allocator< T > &const buffer_allocator< T > & -buffer_allocator< T > && -buffer_allocator< T > &buffer_allocator< T > && - - -voidcl_mem_flags - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::compute::buffer_allocator< T > - -const context & -const pinned_allocator< T > & -pinned_allocator< T > &const pinned_allocator< T > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Holds the result of an asynchronous computation. See Also:event, wait_list - - -TReturns the result of the computation. This will block until the result is ready. -boolReturns true if the future is valid. -voidBlocks until the computation is complete. -eventReturns the underlying event object. -future &FunctionInvokes a generic callback function once the future is ready.The function specified by callback must be invokable with zero arguments.See the documentation for clSetEventCallback() for more information. This method is only available if the OpenCL version is 1.1 or later. - - - - -const T &const event & -const future< T > & -future &const future< T > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidEvents &&...Blocks until all events have completed. Events can either be event objects or future<T> objects.See Also:event, wait_list - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -noncopyableA guard object for synchronizing an operation on the device. The wait_guard class stores a waitable object representing an operation on a compute device (e.g. event, future<T>) and calls its wait() method when the guard object goes out of scope.This is useful for ensuring that an OpenCL operation completes before leaving the current scope and cleaning up any resources.For example: // enqueue a compute kernel for execution -event e = queue.enqueue_nd_range_kernel(...); - -// call e.wait() upon exiting the current scope -wait_guard<event> guard(e); -wait_list, wait_for_all() - -const Waitable &Creates a new wait_guard object for waitable. -Destroys the wait_guard object. The default implementation will call wait() on the stored waitable object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -A fixed-size container. The array container is very similar to the vector container except its size is fixed at compile-time rather than being dynamically resizable at run-time.For example, to create a fixed-size array with eight values on the device: boost::compute::array<int, 8> values(context); -The Boost.Compute array class provides a STL-like API and is modeled after the std::array class from the C++ standard library.See Also:vector<T> - -= N -T -std::size_t -ptrdiff_t -unspecified -unspecified -T * -const T * -buffer_iterator< T > -buffer_iterator< T > -std::reverse_iterator< iterator > -std::reverse_iterator< const_iterator > - -iterator -const_iterator -const_iterator -iterator -const_iterator -const_iterator -reverse_iterator -const_reverse_iterator -const_reverse_iterator -reverse_iterator -const_reverse_iterator -const_reverse_iterator -size_type -bool -size_type -referencesize_type -const_referencesize_type -referencesize_type -const_referencesize_type -reference -const_reference -reference -const_reference -voidconst value_type &const command_queue & -voidarray< T, N > &const command_queue & -voidconst value_type & -voidarray< T, N > & -const buffer & - -const context &system::default_context() -const array< T, N > & -const boost::array< T, N > &const context &system::default_context() -const array< T, N > &const command_queue & -array< T, N > &const array< T, N > & -array< T, N > &const boost::array< T, N > & - - -command_queue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -A template for a dynamically-sized character sequence. The basic_string class provides a generic template for a dynamically- sized character sequence. This is most commonly used through the string typedef (for basic_string<char>).For example, to create a string on the device with its contents copied from a C-string on the host: boost::compute::string str("hello, world!"); -See Also:vector<T> - -Traits -Traits::char_type -size_t -::boost::compute::vector< CharT >::reference -::boost::compute::vector< CharT >::const_reference -::boost::compute::vector< CharT >::iterator -::boost::compute::vector< CharT >::const_iterator -::boost::compute::vector< CharT >::reverse_iterator -::boost::compute::vector< CharT >::const_reverse_iterator -const size_type - -referencesize_type -const_referencesize_type -referencesize_type -const_referencesize_type -reference -const_reference -reference -const_reference -iterator -const_iterator -const_iterator -iterator -const_iterator -const_iterator -reverse_iterator -const_reverse_iterator -const_reverse_iterator -reverse_iterator -const_reverse_iterator -const_reverse_iterator -bool -size_type -size_type -size_type -voidsize_type -size_type -void -void -voidbasic_string< CharT, Traits > & -basic_string< CharT, Traits >size_type0size_typenpos -size_typeCharTsize_type0Finds the first character ch. -size_typebasic_string &size_type0Finds the first substring equal to str. -size_typeconst char *size_type0Finds the first substring equal to the character string pointed to by s. The length of the string is determined by the first null character.For example, the following code will return 5 as position. - - -size_typeCharT -const basic_string &size_typesize_typenpos -const char *size_type -const char * -InputIteratorInputIterator -const basic_string< CharT, Traits > & -basic_string< CharT, Traits > &const basic_string< CharT, Traits > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::ostream &std::ostream &boost::compute::basic_string< CharT, Traits >const & - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -The dynamic_bitset class contains a resizable bit array. For example, to create a dynamic-bitset with space for 1000 bits on the device: boost::compute::dynamic_bitset<> bits(1000, queue); -The Boost.Compute dynamic_bitset class provides a STL-like API and is modeled after the boost::dynamic_bitset class from Boost.See Also:vector<T> - -Block -Alloc -vector< Block, Alloc > -container_type::size_type - -size_typebits_per_blocksizeof(block_type) *CHAR_BIT -size_typenposstatic_cast< size_type >(-1) -size_typeReturns the size of the dynamic bitset. -size_typeReturns the number of blocks to store the bits in the dynamic bitset. -size_typeReturns the maximum possible size for the dynamic bitset. -boolReturns true if the dynamic bitset is empty (i.e. size() == 0). -size_typecommand_queue &Returns the number of set bits (i.e. '1') in the bitset. -voidsize_typecommand_queue &Resizes the bitset to contain num_bits. If the new size is greater than the current size the new bits are set to zero. -voidsize_typecommand_queue &Sets the bit at position n to true. -voidsize_typeboolcommand_queue &Sets the bit at position n to value. -boolsize_typecommand_queue &Returns true if the bit at position n is set (i.e. '1'). -voidsize_typecommand_queue &Flips the value of the bit at position n. -boolcommand_queue &Returns true if any bit in the bitset is set (i.e. '1'). -boolcommand_queue &Returns true if all of the bits in the bitset are set to zero. -voidcommand_queue &Sets all of the bits in the bitset to zero. -voidsize_typecommand_queue &Sets the bit at position n to zero. -voidEmpties the bitset (e.g. resize(0)). -allocator_typeReturns the allocator used to allocate storage for the bitset. - -size_typecommand_queue &Creates a new dynamic bitset with storage for size bits. Initializes all bits to zero. -const dynamic_bitset &Creates a new dynamic bitset as a copy of other. -dynamic_bitset &const dynamic_bitset &Copies the data from other to *this. -Destroys the dynamic bitset. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Key -T -::boost::compute::vector< std::pair< Key, T > > -vector_type::value_type -vector_type::size_type -vector_type::difference_type -vector_type::reference -vector_type::const_reference -vector_type::pointer -vector_type::const_pointer -vector_type::iterator -vector_type::const_iterator -vector_type::reverse_iterator -vector_type::const_reverse_iterator - -iterator -const_iterator -const_iterator -iterator -const_iterator -const_iterator -reverse_iterator -const_reverse_iterator -const_reverse_iterator -reverse_iterator -const_reverse_iterator -const_reverse_iterator -size_type -size_type -bool -size_type -voidsize_typecommand_queue & -voidsize_type -void -void -std::pair< iterator, bool >const value_type &command_queue & -std::pair< iterator, bool >const value_type & -iteratorconst const_iterator &command_queue & -iteratorconst const_iterator & -iteratorconst const_iterator &const const_iterator &command_queue & -iteratorconst const_iterator &const const_iterator & -size_typeconst key_type &command_queue & -iteratorconst key_type &command_queue & -iteratorconst key_type & -const_iteratorconst key_type &command_queue & -const_iteratorconst key_type & -size_typeconst key_type &command_queue & -size_typeconst key_type & -iteratorconst key_type &command_queue & -iteratorconst key_type & -const_iteratorconst key_type &command_queue & -const_iteratorconst key_type & -iteratorconst key_type &command_queue & -iteratorconst key_type & -const_iteratorconst key_type &command_queue & -const_iteratorconst key_type & -const mapped_typeconst key_type & -unspecifiedconst key_type & - -const context &system::default_context() -const flat_map< Key, T > & -flat_map< Key, T > &const flat_map< Key, T > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -T -vector< T >::value_type -vector< T >::size_type -vector< T >::difference_type -vector< T >::reference -vector< T >::const_reference -vector< T >::pointer -vector< T >::const_pointer -vector< T >::iterator -vector< T >::const_iterator -vector< T >::reverse_iterator -vector< T >::const_reverse_iterator - -iterator -const_iterator -const_iterator -iterator -const_iterator -const_iterator -reverse_iterator -const_reverse_iterator -const_reverse_iterator -reverse_iterator -const_reverse_iterator -const_reverse_iterator -size_type -size_type -bool -size_type -voidsize_typecommand_queue & -voidsize_type -void -void -std::pair< iterator, bool >const value_type &command_queue & -std::pair< iterator, bool >const value_type & -iteratorconst const_iterator &command_queue & -iteratorconst const_iterator & -iteratorconst const_iterator &const const_iterator &command_queue & -iteratorconst const_iterator &const const_iterator & -size_typeconst key_type &command_queue & -size_typeconst key_type & -iteratorconst key_type &command_queue & -iteratorconst key_type & -const_iteratorconst key_type &command_queue & -const_iteratorconst key_type & -size_typeconst key_type &command_queue & -size_typeconst key_type & -iteratorconst key_type &command_queue & -iteratorconst key_type & -const_iteratorconst key_type &command_queue & -const_iteratorconst key_type & -iteratorconst key_type &command_queue & -iteratorconst key_type & -const_iteratorconst key_type &command_queue & -const_iteratorconst key_type & - -const context &system::default_context() -const flat_set< T > & -flat_set< T > &const flat_set< T > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -A mapped view of host memory. The mapped_view class simplifies mapping host-memory to a compute device. This allows for host-allocated memory to be used with the Boost.Compute algorithms.The following example shows how to map a simple C-array containing data on the host to the device and run the reduce() algorithm to calculate the sum: See Also:buffer - -T -size_t -ptrdiff_t -buffer_iterator< T > -buffer_iterator< T > - -iteratorReturns an iterator to the first element in the mapped_view. -const_iteratorReturns a const_iterator to the first element in the mapped_view. -const_iteratorReturns a const_iterator to the first element in the mapped_view. -iteratorReturns an iterator to one past the last element in the mapped_view. -const_iteratorReturns a const_iterator to one past the last element in the mapped_view. -const_iteratorReturns a const_iterator to one past the last element in the mapped_view. -size_typeReturns the number of elements in the mapped_view. -T *Returns the host data pointer. -const T *Returns the host data pointer. -voidsize_typeResizes the mapped_view to size elements. -boolReturns true if the mapped_view is empty. -const buffer &Returns the mapped buffer. -voidcl_map_flagscommand_queue &Maps the buffer into the host address space.See the documentation for clEnqueueMapBuffer() for more information. -voidcommand_queue &Maps the buffer into the host address space for reading and writing.Equivalent to: map(CL_MAP_READ | CL_MAP_WRITE, queue); - -voidcommand_queue &Unmaps the buffer from the host address space.See the documentation for clEnqueueUnmapMemObject() for more information. - -Creates a null mapped_view object. -T *size_typeconst context &system::default_context()Creates a mapped_view for host_ptr with n elements. After constructing a mapped_view the data is available for use by a compute device. Use the unmap() method to make the updated data available to the host. -const T *size_typeconst context &system::default_context()Creates a read-only mapped_view for host_ptr with n elements. After constructing a mapped_view the data is available for use by a compute device. Use the unmap() method to make the updated data available to the host. -const mapped_view< T > &Creates a copy of other. -mapped_view< T > &const mapped_view< T > &Copies the mapped buffer from other. -Destroys the mapped_view object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -vector< T > -container_type::size_type -container_type::value_type - -bool -size_type -value_type -voidconst T & -void - - -const stack< T > & -stack< T > &const stack< T > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -basic_string< char_ > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -valarray< T > &const T & -valarray< T > &const T & -valarray< T > &const T & -valarray< T > -valarray< T > -valarray< T > -valarray< char >In OpenCL there cannot be memory buffer with bool type, for this reason return type is valarray<char> instead of valarray<bool>. 1 means true, 0 means false. -valarray< T > &const T & -valarray< T > &const T & -valarray< T > &const T & -valarray< T > &const T & -valarray< T > &const T & -valarray< T > &const T & -valarray< T > &const T & -valarray< T > &const valarray< T > & -valarray< T > &const valarray< T > & -valarray< T > &const valarray< T > & -valarray< T > &const valarray< T > & -valarray< T > &const valarray< T > & -valarray< T > &const valarray< T > & -valarray< T > &const valarray< T > & -valarray< T > &const valarray< T > & -valarray< T > &const valarray< T > & -valarray< T > &const valarray< T > & -size_t -voidsize_tTT() -unspecifiedsize_t -unspecifiedsize_t -T() -T() -T -valarray< T >UnaryFunction -const buffer & - -const context &system::default_context() -size_tconst context &system::default_context() -const T &size_tconst context &system::default_context() -const T *size_tconst context &system::default_context() -const valarray< T > & -const std::valarray< T > &const context &system::default_context() -valarray< T > &const valarray< T > & -valarray< T > &const std::valarray< T > & - - -buffer_iterator< T > -buffer_iterator< T > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -A resizable array of values. The vector<T> class stores a dynamic array of values. Internally, the data is stored in an OpenCL buffer object.The vector class is the prefered container for storing and accessing data on a compute device. In most cases it should be used instead of directly dealing with buffer objects. If the undelying buffer is needed, it can be accessed with the get_buffer() method.The internal storage is allocated in a specific OpenCL context which is passed as an argument to the constructor when the vector is created.For example, to create a vector on the device containing space for ten int values: boost::compute::vector<int> vec(10, context); -Allocation and data transfer can also be performed in a single step: // values on the host -int data[] = { 1, 2, 3, 4 }; - -// create a vector of size four and copy the values from data -boost::compute::vector<int> vec(data, data + 4, queue); -The Boost.Compute vector class provides a STL-like API and is modeled after the std::vector class from the C++ standard library. It can be used with any of the STL-like algorithms provided by Boost.Compute including copy(), transform(), and sort() (among many others).For example: // a vector on a compute device -boost::compute::vector<float> vec = ... - -// copy data to the vector from a host std:vector -boost::compute::copy(host_vec.begin(), host_vec.end(), vec.begin(), queue); - -// copy data from the vector to a host std::vector -boost::compute::copy(vec.begin(), vec.end(), host_vec.begin(), queue); - -// sort the values in the vector -boost::compute::sort(vec.begin(), vec.end(), queue); - -// calculate the sum of the values in the vector (also see reduce()) -float sum = boost::compute::accumulate(vec.begin(), vec.end(), 0, queue); - -// reverse the values in the vector -boost::compute::reverse(vec.begin(), vec.end(), queue); - -// fill the vector with ones -boost::compute::fill(vec.begin(), vec.end(), 1, queue); -See Also:array<T, N>, buffer - -T -Alloc -allocator_type::size_type -allocator_type::difference_type -unspecified -unspecified -allocator_type::pointer -allocator_type::const_pointer -buffer_iterator< T > -buffer_iterator< T > -std::reverse_iterator< iterator > -std::reverse_iterator< const_iterator > - -iterator -const_iterator -const_iterator -iterator -const_iterator -const_iterator -reverse_iterator -const_reverse_iterator -const_reverse_iterator -reverse_iterator -const_reverse_iterator -const_reverse_iterator -size_typeReturns the number of elements in the vector. -size_type -voidsize_typecommand_queue &Resizes the vector to size. -voidsize_typeThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -boolReturns true if the vector is empty. -size_typeReturns the capacity of the vector. -voidsize_typecommand_queue & -voidsize_type -voidcommand_queue & -void -referencesize_type -const_referencesize_type -referencesize_type -const_referencesize_type -reference -const_reference -reference -const_reference -voidInputIteratorInputIteratorcommand_queue & -voidInputIteratorInputIterator -voidsize_typeconst T &command_queue & -voidsize_typeconst T & -voidconst T &command_queue &Inserts value at the end of the vector (resizing if neccessary).Note that calling push_back() to insert data values one at a time is inefficient as there is a non-trivial overhead in performing a data transfer to the device. It is usually better to store a set of values on the host (for example, in a std::vector) and then transfer them in bulk using the insert() method or the copy() algorithm. -voidconst T &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidcommand_queue & -void -iteratoriteratorconst T &command_queue & -iteratoriteratorconst T & -voiditeratorsize_typeconst T &command_queue & -voiditeratorsize_typeconst T & -voiditeratorInputIteratorInputIteratorcommand_queue &Inserts the values in the range [first, last) into the vector at position using queue. -voiditeratorInputIteratorInputIteratorThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -iteratoriteratorcommand_queue & -iteratoriterator -iteratoriteratoriteratorcommand_queue & -iteratoriteratoriterator -voidvector &Swaps the contents of *this with other. -voidRemoves all elements from the vector. -allocator_type -const buffer &Returns the underlying buffer. - -const context &system::default_context()Creates an empty vector in context. -size_typeconst context &system::default_context()Creates a vector with space for count elements in context.Note that unlike std::vector's constructor, this will not initialize the values in the container. Either call the vector constructor which takes a value to initialize with or use the fill() algorithm to set the initial values.For example: // create a vector on the device with space for ten ints -boost::compute::vector<int> vec(10, context); - -size_typeconst T &command_queue &system::default_queue()Creates a vector with space for count elements and sets each equal to value.For example: // creates a vector with four values set to nine (e.g. [9, 9, 9, 9]). -boost::compute::vector<int> vec(4, 9, queue); - -InputIteratorInputIteratorcommand_queue &system::default_queue()Creates a vector with space for the values in the range [first, last) and copies them into the vector with queue.For example: // values on the host -int data[] = { 1, 2, 3, 4 }; - -// create a vector of size four and copy the values from data -boost::compute::vector<int> vec(data, data + 4, queue); - -const vector &command_queue &system::default_queue()Creates a new vector and copies the values from other. -const vector< T, OtherAlloc > &command_queue &system::default_queue()Creates a new vector and copies the values from other. -const std::vector< T, OtherAlloc > &command_queue &system::default_queue()Creates a new vector and copies the values from vector. -std::initializer_list< T >command_queue &system::default_queue() -vector &const vector & -vector &const vector< T, OtherAlloc > & -vector &const std::vector< T, OtherAlloc > & -vector &&Move-constructs a new vector from other. -vector &vector &&Move-assigns the data from other to *this. -Destroys the vector object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -exceptionA run-time OpenCL context error. The context_error exception is thrown when the OpenCL context encounters an error condition. Boost.Compute is notified of these error conditions by registering an error handler when creating context objects (via the pfn_notify argument to the clCreateContext() function).This exception is different than the opencl_error exception which is thrown as a result of error caused when calling a single OpenCL API function.See Also:opencl_error - - -const char *Returns a string with a description of the error. -const context *Returns a pointer to the context object which generated the error notification. -const void *Returns a pointer to the private info memory block. -size_tReturns the size of the private info memory block. - -const context *const char *const void *size_tCreates a new context error exception object. -Destroys the context error object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -exceptionException thrown when no OpenCL device is found. This exception is thrown when no valid OpenCL device can be found.See Also:opencl_error - - -const char *Returns a string containing a human-readable error message. - -Creates a new no_device_found exception object. -Destroys the no_device_found exception object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -exceptionA run-time OpenCL error. The opencl_error class represents an error returned from an OpenCL function.See Also:context_error - - -cl_intReturns the numeric error code. -std::stringReturns a string description of the error. -const char *Returns a C-string description of the error. - -cl_intCreates a new opencl_error exception object for error. -Destroys the opencl_error object. - -std::stringcl_intStatic function which converts the numeric OpenCL error code error to a human-readable string.For example: std::cout << opencl_error::to_string(CL_INVALID_KERNEL_ARGS) << std::endl; -Will print "Invalid Kernel Arguments".If the error code is unknown (e.g. not a valid OpenCL error), a string containing "Unknown OpenCL Error" along with the error number will be returned. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::compute::opencl_errorA failure when building OpenCL program. Instances of this class are thrown when OpenCL program build fails. Extends opencl_error by saving a program build log so it can be used for testing, debugging, or logging purposes.See Also:opencl_error - - -std::stringRetrieve the log of a failed program build. - -cl_intconst std::string &Creates a new program_build_failure exception object for error and build_log. -Destroys the program_build_failure object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -exceptionException thrown when attempting to use an unsupported OpenCL extension. This exception is thrown when the user attempts to use an OpenCL extension which is not supported on the platform and/or device.An example of this is attempting to use CL-GL sharing on a non-GPU device.See Also:opencl_error - - -std::stringReturns the name of the unsupported extension. -const char *Returns a string containing a human-readable error message containing the name of the unsupported exception. - -const char *Creates a new unsupported extension error exception object indicating that extension is not supported by the OpenCL platform or device. -Destroys the unsupported extension error object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -The as function converts its argument to type T (similar to reinterpret_cast<T>).See Also:convert<T> - -T - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -function< T(T *, T)> - - -function< T(T *, T)> - - -function< T(T *, T, T)> - - -function< T(T *)> - - -function< T(T *)> - - -function< T(T *, T)> - - -function< T(T *, T)> - - -function< T(T *, T)> - - -function< T(T *, T)> - - -function< T(T *, T)> - - -function< T(T *, T)> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -false_typeMeta-function returning true if T is a placeholder type. -placeholder< 0 > const -placeholder< 1 > const - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -unspecifiedFArgs...Returns a function wrapper which invokes f with args when called.For example, to generate a unary function object which returns true when its argument is less than 7: using boost::compute::less; -using boost::compute::placeholders::_1; - -auto less_than_seven = boost::compute::bind(less<int>(), _1, 7); - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -The convert function converts its argument to type T (similar to static_cast<T>).See Also:as<T> - -T - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Returns the named field from a value.The template-type T specifies the field's value type. Note that the value type must match the actual type of the field otherwise runtime compilation or logic errors may occur.For example, to access the second field in a std::pair<int, float> object: field<float>("second"); -This can also be used with vector types to access individual components as well as perform swizzle operations.For example, to access the first and third components of an int vector type (e.g. int4): field<int2_>("xz"); -See Also:get<N> - -Result type. T - - -const std::string &Creates a new field functor with field. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Returns the N'th element of an aggregate type (e.g. scalarN, pair, tuple, etc.).See Also:field<T> - - -unspecifiedconst Arg & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -The hash function returns a hash value for the input value.The return type is ulong_ (the OpenCL unsigned long type). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Identity function which simply returns its input.For example, to directly copy values using the transform() algorithm: transform(input.begin(), input.end(), output.begin(), identity<int>(), queue); -See Also:as<T>, convert<T> - -Identity function result type. T - - -Creates a new identity function. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::compute::binary_function< void, void, int >The binnary_negate function adaptor negates a binary function.See Also:not2() - - - -Predicate -boost::compute::unary_function< T, int >The logical_not function negates its argument and returns it.See Also:not1(), not2() - - - -boost::compute::unary_function< void, int >The unary_negate function adaptor negates a unary function.See Also:not1() - - - -Predicate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -unary_negate< Predicate >const Predicate &the unary function to wrapReturns a unary_negate adaptor around predicate. - -a unary_negate wrapper around predicate - -binary_negate< Predicate >const Predicate &the binary function to wrapReturns a binary_negate adaptor around predicate. - -a binary_negate wrapper around predicate - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -function< T(T)>Returns the number of non-zero bits in x.See the documentation for popcount() for more information. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::compute::image_objectAn OpenCL 1D image object. This method is only available if the OpenCL version is 1.2 or later. - -See Also:image_format, image2d - - -extents< 1 >Returns the size (width) of the image. -extents< 1 >Returns the origin of the image (0). -Tcl_image_infoReturns information about the image.See the documentation for clGetImageInfo() for more information. -unspecifiedThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -image1dcommand_queue &Creates a new image with a copy of the data in *this. Uses queue to perform the copy operation. - -Creates a null image1d object. -const context &size_tconst image_format &cl_mem_flagsread_writevoid *0Creates a new image1d object.See the documentation for clCreateImage() for more information. -const image1d &Creates a new image1d as a copy of other. -image1d &const image1d &Copies the image1d from other. -image1d &&Move-constructs a new image object from other. -image1d &image1d &&Move-assigns the image from other to *this. -Destroys the image1d object. - -std::vector< image_format >const context &cl_mem_flagsread_writeReturns the supported image formats for the context.See the documentation for clGetSupportedImageFormats() for more information. -boolconst image_format &const context &cl_mem_flagsread_writeReturns true if format is a supported 1D image format for context. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::compute::image_objectAn OpenCL 2D image object. For example, to create a 640x480 8-bit RGBA image: See Also:image_format, image3d - - -extents< 2 >Returns the size (width, height) of the image. -extents< 2 >Returns the origin of the image (0, 0). -Tcl_image_infoReturns information about the image.See the documentation for clGetImageInfo() for more information. -unspecifiedThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -image2dcommand_queue &Creates a new image with a copy of the data in *this. Uses queue to perform the copy operation. - -Creates a null image2d object. -const context &size_tsize_tconst image_format &cl_mem_flagsread_writevoid *0size_t0Creates a new image2d object.See the documentation for clCreateImage() for more information. -const image2d &Creates a new image2d as a copy of other. -image2d &const image2d &Copies the image2d from other. -image2d &&Move-constructs a new image object from other. -image2d &image2d &&Move-assigns the image from other to *this. -Destroys the image2d object. - -std::vector< image_format >const context &cl_mem_flagsread_writeReturns the supported image formats for the context.See the documentation for clGetSupportedImageFormats() for more information. -boolconst image_format &const context &cl_mem_flagsread_writeReturns true if format is a supported 2D image format for context. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::compute::image_objectAn OpenCL 3D image object. See Also:image_format, image2d - - -extents< 3 >Returns the size (width, height, depth) of the image. -extents< 3 >Returns the origin of the image (0, 0, 0). -Tcl_image_infoReturns information about the image.See the documentation for clGetImageInfo() for more information. -unspecifiedThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -image3dcommand_queue &Creates a new image with a copy of the data in *this. Uses queue to perform the copy operation. - -Creates a null image3d object. -const context &size_tsize_tsize_tconst image_format &cl_mem_flagsread_writevoid *0size_t0size_t0Creates a new image3d object.See the documentation for clCreateImage() for more information. -const image3d &Creates a new image3d as a copy of other. -image3d &const image3d &Copies the image3d from other. -image3d &&Move-constructs a new image object from other. -image3d &image3d &&Move-assigns the image from other to *this. -Destroys the image3d object. - -std::vector< image_format >const context &cl_mem_flagsread_writeReturns the supported 3D image formats for the context.See the documentation for clGetSupportedImageFormats() for more information. -boolconst image_format &const context &cl_mem_flagsread_writeReturns true if format is a supported 3D image format for context. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -A OpenCL image format. For example, to create a format for a 8-bit RGBA image: boost::compute::image_format rgba8(CL_RGBA, CL_UNSIGNED_INT8); -After being constructed, image_format objects are usually passed to the constructor of the various image classes (e.g. image2d, image3d) to create an image object on a compute device.Image formats supported by a context can be queried with the static get_supported_formats() in each image class. For example: std::vector<image_format> formats = image2d::get_supported_formats(ctx); -See Also:image2d - -= CL_R= CL_A= CL_INTENSITY= CL_LUMINANCE= CL_RG= CL_RA= CL_RGB= CL_RGBA= CL_ARGB= CL_BGRA -= CL_SNORM_INT8= CL_SNORM_INT16= CL_UNORM_INT8= CL_UNORM_INT16= CL_UNORM_SHORT_565= CL_UNORM_SHORT_555= CL_UNORM_INT_101010= CL_SIGNED_INT8= CL_SIGNED_INT16= CL_SIGNED_INT32= CL_UNSIGNED_INT8= CL_UNSIGNED_INT16= CL_UNSIGNED_INT32= CL_HALF_FLOAT= CL_FLOAT - -const cl_image_format *Returns a pointer to the cl_image_format object. -boolconst image_format &Returns true if *this is the same as other. -boolconst image_format &Returns true if *this is not the same as other. - -cl_channel_ordercl_channel_typeCreates a new image format object with order and type. -const cl_image_format &Creates a new image format object from format. -const image_format &Creates a new image format object as a copy of other. -image_format &const image_format &Copies the format from other to *this. -Destroys the image format object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -memory_objectBase-class for image objects. The image_object class is the base-class for image objects on compute devices.See Also:image1d, image2d, image3d - - -Tcl_mem_infoReturns information about the image object.See the documentation for clGetImageInfo() for more information. -image_formatReturns the format for the image. -size_tReturns the width of the image. -size_tReturns the height of the image.For 1D images, this function will return 1. -size_tReturns the depth of the image.For 1D and 2D images, this function will return 1. - - -cl_membooltrue -const image_object & -image_object &const image_object & -image_object && -Destroys the image object. - -std::vector< image_format >const context &cl_mem_object_typecl_mem_flagsread_writeReturns the supported image formats for the type in context.See the documentation for clGetSupportedImageFormats() for more information. -boolconst image_format &const context &cl_mem_object_typecl_mem_flagsread_writeReturns true if format is a supported image format for type in context with flags. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -An OpenCL image sampler object. See Also:image2d, image_format - -= CL_ADDRESS_NONE= CL_ADDRESS_CLAMP_TO_EDGE= CL_ADDRESS_CLAMP= CL_ADDRESS_REPEAT -= CL_FILTER_NEAREST= CL_FILTER_LINEAR - -cl_sampler &Returns the underlying cl_sampler object. -contextReturns the context for the image sampler object. -Tcl_sampler_infoReturns information about the sampler.See the documentation for clGetSamplerInfo() for more information. -unspecifiedThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -boolconst image_sampler &Returns true if the sampler is the same at other. -boolconst image_sampler &Returns true if the sampler is different from other. -cl_sampler - - -const context &boolcl_addressing_modecl_filter_mode -cl_samplerbooltrue -const image_sampler &Creates a new image sampler object as a copy of other. -image_sampler &const image_sampler &Copies the image sampler object from other to *this. -image_sampler && -image_sampler &image_sampler && -Destroys the image sampler object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -eventconst uint_const cl_mem *command_queue &const wait_list &wait_list()Enqueues a command to acquire the specified OpenGL memory objects.See the documentation for clEnqueueAcquireGLObjects() for more information. -eventconst uint_const cl_mem *command_queue &const wait_list &wait_list()Enqueues a command to release the specified OpenGL memory objects.See the documentation for clEnqueueReleaseGLObjects() for more information. -eventconst opengl_buffer &command_queue &const wait_list &wait_list()Enqueues a command to acquire the specified OpenGL buffer.See the documentation for clEnqueueAcquireGLObjects() for more information. -eventconst opengl_buffer &command_queue &const wait_list &wait_list()Enqueues a command to release the specified OpenGL buffer.See the documentation for clEnqueueReleaseGLObjects() for more information. - - - - - - - - - - - - - - - - - -
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -contextCreates a shared OpenCL/OpenGL context for the currently active OpenGL context.Once created, the shared context can be used to create OpenCL memory objects which can interact with OpenGL memory objects (e.g. VBOs). -unsupported_extension_error if no CL-GL sharing capable devices are found. - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - -bufferA OpenCL buffer for accessing an OpenGL memory object. -GLuintReturns the OpenGL memory object ID.See the documentation for clGetGLObjectInfo() for more information. -cl_gl_object_typeReturns the OpenGL memory object type.See the documentation for clGetGLObjectInfo() for more information. - -Creates a null OpenGL buffer object. -cl_membooltrueCreates a new OpenGL buffer object for mem. -const context &GLuintcl_mem_flagsread_writeCreates a new OpenGL buffer object in context for bufobj with flags.See the documentation for clCreateFromGLBuffer() for more information. -const opengl_buffer &Creates a new OpenGL buffer object as a copy of other. -opengl_buffer &const opengl_buffer &Copies the OpenGL buffer object from other. -Destroys the OpenGL buffer object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::compute::image_objectA OpenCL buffer for accessing an OpenGL renderbuffer object. -extents< 2 >Returns the size (width, height) of the renderbuffer. -extents< 2 >Returns the origin of the renderbuffer (0, 0). -GLuintReturns the OpenGL memory object ID.See the documentation for clGetGLObjectInfo() for more information. -cl_gl_object_typeReturns the OpenGL memory object type.See the documentation for clGetGLObjectInfo() for more information. - -Creates a null OpenGL renderbuffer object. -cl_membooltrueCreates a new OpenGL renderbuffer object for mem. -const context &GLuintcl_mem_flagsread_writeCreates a new OpenGL renderbuffer object in context for renderbuffer with flags.See the documentation for clCreateFromGLRenderbuffer() for more information. -const opengl_renderbuffer &Creates a new OpenGL renderbuffer object as a copy of other. -opengl_renderbuffer &const opengl_renderbuffer &Copies the OpenGL renderbuffer object from other. -Destroys the OpenGL buffer object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::compute::image_objectA OpenCL image2d for accessing an OpenGL texture object. -extents< 2 >Returns the size (width, height) of the texture. -extents< 2 >Returns the origin of the texture (0, 0). -Tcl_gl_texture_infoReturns information about the texture.See the documentation for clGetGLTextureInfo() for more information. - -Creates a null OpenGL texture object. -cl_membooltrueCreates a new OpenGL texture object for mem. -const context &GLenumGLintGLuintcl_mem_flagsread_writeCreates a new OpenGL texture object in context for texture with flags.See the documentation for clCreateFromGLTexture() for more information. -const opengl_texture &Creates a new OpenGL texture object as a copy of other. -opengl_texture &const opengl_texture &Copies the OpenGL texture object from other. -Destroys the texture object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -An iterator for values in a buffer. The buffer_iterator class iterates over values in a memory buffer on a compute device. It is the most commonly used iterator in Boost.Compute and is used by the vector<T> and array<T, N> container classes.Buffer iterators store a reference to a memory buffer along with an index into that memory buffer.The buffer_iterator class allows for arbitrary OpenCL memory objects (including those created outside of Boost.Compute) to be used with the Boost.Compute algorithms (such as transform() and sort()). For example, to reverse the contents of an OpenCL memory buffer containing a set of integers: See Also:buffer, make_buffer_iterator() - -unspecified -super_type::reference -super_type::difference_type - -const buffer & -size_t -Tcommand_queue & -voidconst T &command_queue & - - -const buffer &size_t -const buffer_iterator< T > & -buffer_iterator< T > &const buffer_iterator< T > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -buffer_iterator< T >const buffer &the buffer object size_t0the index in the bufferCreates a new buffer_iterator for buffer at index. - -a buffer_iterator for buffer at index - - - - - - - -
-
- - -An iterator for a buffer in the constant memory space. The constant_buffer_iterator class provides an iterator for values in a buffer in the constant memory space.For iterating over values in the global memory space (the most common case), use the buffer_iterator class.See Also:buffer_iterator - -unspecified -super_type::reference -super_type::difference_type - -const buffer & -size_t -Tcommand_queue & -voidconst T &command_queue & -unspecifiedconst Expr & - - -const buffer &size_t -const constant_buffer_iterator< T > & -constant_buffer_iterator< T > &const constant_buffer_iterator< T > & - - -reference -boolconst constant_buffer_iterator< T > & -void -void -voiddifference_type -difference_typeconst constant_buffer_iterator< T > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -constant_buffer_iterator< T >const buffer &the buffer object size_t0the index in the bufferCreates a new constant_buffer_iterator for buffer at index. - -a constant_buffer_iterator for buffer at index - - - - - - - - -
-
- - -An iterator with a constant value. The constant_iterator class provides an iterator which returns a constant value when dereferenced.For example, this could be used to implement the fill() algorithm in terms of the copy() algorithm by copying from a range of constant iterators: See Also:make_constant_iterator() - -unspecified -super_type::reference -super_type::difference_type - -size_t - -const T &size_t0 -const constant_iterator< T > & -constant_iterator< T > &const constant_iterator< T > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -constant_iterator< T >const T &the constant value size_t0the iterators indexReturns a new constant_iterator with value at index. - -a constant_iterator with value - - - - - - - - - -
-
- - -The counting_iterator class implements a counting iterator. A counting iterator returns an internal value (initialized with init) which is incremented each time the iterator is incremented.For example, this could be used to implement the iota() algorithm in terms of the copy() algorithm by copying from a range of counting iterators: See Also:make_counting_iterator() - -unspecified -super_type::reference -super_type::difference_type - -size_t -unspecifiedconst Expr & - -const T & -const counting_iterator< T > & -counting_iterator< T > &const counting_iterator< T > & - - -reference -boolconst counting_iterator< T > & -void -void -voiddifference_type -difference_typeconst counting_iterator< T > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -counting_iterator< T >const T &the initial valueReturns a new counting_iterator starting at init. - -For example, to create a counting iterator which returns unsigned integers and increments from one: auto iter = make_counting_iterator<uint_>(1); - a counting_iterator with init. - - - - - - - - - - -
-
- - -typeAn iterator which discards all values written to it. See Also:make_discard_iterator(), constant_iterator - -unspecified -super_type::reference -super_type::difference_type - - -size_t0 -const discard_iterator & -discard_iterator &const discard_iterator & - - - -discard_iteratortrue_typeinternal_ (is_device_iterator specialization for discard_iterator) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -discard_iteratorsize_t0the index of the iteratorReturns a new discard_iterator with index. - -a discard_iterator at index - - - - - - - - - - - -
-
- - -Iterator which returns the result of a function when dereferenced. For example: See Also:make_function_input_iterator() - -unspecified -super_type::reference -super_type::difference_type -Function - -size_t -unspecifiedconst Expr & - -const Function &size_t0 -const function_input_iterator< Function > & -function_input_iterator< Function > &const function_input_iterator< Function > & - - -reference -boolconst function_input_iterator< Function > & -void -void -voiddifference_type -difference_typeconst function_input_iterator< Function > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -function_input_iterator< Function >const Function &function to execute when dereferenced size_t0index of the iteratorReturns a function_input_iterator with function. - -a function_input_iterator with function - - - - - - - - - - - - -
-
- - -The permutation_iterator class provides a permuation iterator. A permutation iterator iterates over a value range and an index range. When dereferenced, it returns the value from the value range using the current index from the index range.For example, to reverse a range using the copy() algorithm and a permutation sequence: See Also:make_permutation_iterator() - -unspecified -super_type::value_type -super_type::reference -super_type::base_type -super_type::difference_type -IndexIterator - -size_t -const buffer & -unspecifiedconst IndexExpr & - -ElementIteratorIndexIterator -const permutation_iterator< ElementIterator, IndexIterator > & -permutation_iterator< ElementIterator, IndexIterator > &const permutation_iterator< ElementIterator, IndexIterator > & - - -reference - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -permutation_iterator< ElementIterator, IndexIterator >ElementIteratorthe element range iterator IndexIteratorthe index range iteratorReturns a permutation_iterator for e using indices from i. - -a permutation_iterator for e using i - - - - - - - - - - - - - -
-
- - -An iterator adaptor with adjustable iteration step. The strided iterator adaptor skips over multiple elements each time it is incremented or decremented.See Also:buffer_iterator, make_strided_iterator(), make_strided_iterator_end() - -unspecified -super_type::value_type -super_type::reference -super_type::base_type -super_type::difference_type - -size_t -const buffer & -unspecifiedconst IndexExpression & - -Iteratordifference_type -const strided_iterator< Iterator > & -strided_iterator< Iterator > &const strided_iterator< Iterator > & - - -reference -boolconst strided_iterator< Iterator > & -void -void -voidtypename super_type::difference_type -difference_typeconst strided_iterator< Iterator > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -strided_iterator< Iterator >Iteratorthe underlying iterator typename std::iterator_traits< Iterator >::difference_typethe iteration step for strided_iteratorReturns a strided_iterator for iterator with stride. - -For example, to create an iterator which iterates over every other element in a vector<int>: auto strided_iterator = make_strided_iterator(vec.begin(), 2); - a strided_iterator for iterator with stride. - -strided_iterator< Iterator >Iteratorthe iterator referring to the first element accessible through strided_iterator for first with stride Iteratorthe iterator referring to the last element that may be accessible through strided_iterator for first with stride typename std::iterator_traits< Iterator >::difference_typethe iteration stepReturns a strided_iterator which refers to element that would follow the last element accessible through strided_iterator for first iterator with stride.Parameter stride must be greater than zero. - -It can be helpful when iterating over strided_iterator: // vec.size() may not be divisible by 3 -auto strided_iterator_begin = make_strided_iterator(vec.begin(), 3); -auto strided_iterator_end = make_strided_iterator_end(vec.begin(), vec.end(), 3); - -// copy every 3rd element to result -boost::compute::copy( - strided_iterator_begin, - strided_iterator_end, - result.begin(), - queue -); - a strided_iterator referring to element that would follow the last element accessible through strided_iterator for first iterator with stride. - - - - - - - - - - - - - - -
-
- - -A transform iterator adaptor. The transform_iterator adaptor applies a unary function to each element produced from the underlying iterator when dereferenced.For example, to copy from an input range to an output range while taking the absolute value of each element: See Also:buffer_iterator, make_transform_iterator() - -unspecified -super_type::value_type -super_type::reference -super_type::base_type -super_type::difference_type -UnaryFunction - -size_t -const buffer & -unspecifiedconst IndexExpression & - -InputIteratorUnaryFunction -const transform_iterator< InputIterator, UnaryFunction > & -transform_iterator< InputIterator, UnaryFunction > &const transform_iterator< InputIterator, UnaryFunction > & - - -reference - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -transform_iterator< InputIterator, UnaryFunction >InputIteratorthe underlying iterator UnaryFunctionthe unary transform functionReturns a transform_iterator for iterator with transform. - -For example, to create an iterator which returns the square-root of each value in a vector<int>: auto sqrt_iterator = make_transform_iterator(vec.begin(), sqrt<int>()); - a transform_iterator for iterator with transform - - - - - - - - - - - - - - - - -
-
- - -A zip iterator adaptor. The zip_iterator class combines values from multiple input iterators. When dereferenced it returns a tuple containing each value at the current position in each input range.See Also:make_zip_iterator() - -unspecified -super_type::value_type -super_type::reference -super_type::difference_type -IteratorTuple - -const IteratorTuple & -unspecifiedconst IndexExpression & - -IteratorTuple -const zip_iterator< IteratorTuple > & -zip_iterator< IteratorTuple > &const zip_iterator< IteratorTuple > & - - -reference -boolconst zip_iterator< IteratorTuple > & -void -void -voiddifference_type -difference_typeconst zip_iterator< IteratorTuple > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -zip_iterator< IteratorTuple >IteratorTuplea tuple of input iterators to zip togetherCreates a zip_iterator for iterators. - -For example, to zip together iterators from three vectors (a, b, and c): auto zipped = boost::compute::make_zip_iterator( - boost::make_tuple(a.begin(), b.begin(), c.begin()) -); - a zip_iterator for iterators - - - - - - - - - - - - - - - - - -
-
- - -Represents a local memory buffer on the device. The local_buffer class represents a block of local memory on a compute device.This class is most commonly used to set local memory arguments for compute kernels: // set argument to a local buffer with storage for 32 float's -kernel.set_arg(0, local_buffer<float>(32)); -See Also:buffer, kernel - - -size_tReturns the number of elements in the local buffer. - -const size_tCreates a local buffer object for size elements. -const local_buffer &Creates a local buffer object as a copy of other. -local_buffer &const local_buffer &Copies other to *this. -Destroys the local memory object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -T -std::ptrdiff_t -T * -T & -std::random_access_iterator_tag - -void * -svm_ptr< T >difference_type -difference_typesvm_ptr< T > -const context & -boolconst svm_ptr< T > & -boolconst svm_ptr< T > & - - -void *const context & -const svm_ptr< T > & -svm_ptr< T > &const svm_ptr< T > & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Produces random boolean values according to the following discrete probability function with parameter p : P(true/p) = p and P(false/p) = (1 - p) The following example shows how to setup a bernoulli distribution to produce random boolean values with parameter p = 0.25 -RealTypeReturns the value of the parameter p. -voidOutputIteratorOutputIteratorGenerator &command_queue &Generates bernoulli distributed booleans and stores them in the range [first, last). - -RealType0.5fCreates a new bernoulli distribution. -Destroys the bernoulli_distribution object. - -boost::is_floating_point< RealType >::value"Template argument must be a floating point type" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -mt19937 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Produces random integers on the interval [0, n), where probability of each integer is given by the weight of the ith integer divided by the sum of all weights. The following example shows how to setup a discrete distribution to produce 0 and 1 with equal probabilityIntType - -::std::vector< double >Returns the probabilities. -result_type minReturns the minimum potentially generated value. -result_type maxReturns the maximum potentially generated value. -voidOutputIteratorOutputIteratorGenerator &command_queue &Generates uniformly distributed integers and stores them to the range [first, last). - -Creates a new discrete distribution with a single weight p = { 1 }. This distribution produces only zeroes. -InputIteratorInputIteratorCreates a new discrete distribution with weights given by the range [first, last). -Destroys the discrete_distribution object. - -boost::is_integral< IntType >::value"Template argument must be integral" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -'Quick and Dirty' linear congruential engine Quick and dirty linear congruential engine to generate low quality random numbers very quickly. For uses in which good quality of random numbers is required(Monte-Carlo Simulations), use other engines like Mersenne Twister instead. T -const T -const T -const size_t - -voidresult_typeseed value for the random-number generator command_queue &command queue to perform the operationSeeds the random number generator with value. -If no seed value is provided, default_seed is used. -voidcommand_queue &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidOutputIteratorOutputIteratorcommand_queue &Generates random numbers and stores them to the range [first, last). -voidOutputIteratorOutputIteratorFunctioncommand_queue &Generates random numbers, transforms them with op, and then stores them to the range [first, last). -voidsize_tcommand_queue &Generates z random numbers and discards them. - -command_queue &result_typedefault_seedCreates a new linear_congruential_engine and seeds it with value. -const linear_congruential_engine< T > &Creates a new linear_congruential_engine object as a copy of other. -linear_congruential_engine< T > &const linear_congruential_engine< T > &Copies other to *this. -Destroys the linear_congruential_engine object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Mersenne twister pseudorandom number generator. T -const T -const T -const T - -voidresult_typeseed value for the random-number generator command_queue &command queue to perform the operationSeeds the random number generator with value. -If no seed value is provided, default_seed is used. -voidcommand_queue &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidOutputIteratorOutputIteratorcommand_queue &Generates random numbers and stores them to the range [first, last). -voidOutputIteratorOutputIteratorFunctioncommand_queue &Generates random numbers, transforms them with op, and then stores them to the range [first, last). -voidsize_tcommand_queue &Generates z random numbers and discards them. - -command_queue &result_typedefault_seedCreates a new mersenne_twister_engine and seeds it with value. -const mersenne_twister_engine< T > &Creates a new mersenne_twister_engine object as a copy of other. -mersenne_twister_engine< T > &const mersenne_twister_engine< T > &Copies other to *this. -Destroys the mersenne_twister_engine object. - - -mersenne_twister_engine< uint_ > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Produces random, normally-distributed floating-point numbers. The following example shows how to setup a normal distribution to produce random float values centered at 5: See Also:default_random_engine, uniform_real_distribution - -RealType - -result_typeReturns the mean value of the distribution. -result_typeReturns the standard-deviation of the distribution. -result_type minReturns the minimum value of the distribution. -result_type maxReturns the maximum value of the distribution. -voidOutputIteratorOutputIteratorGenerator &command_queue &Generates normally-distributed floating-point numbers and stores them to the range [first, last). - -RealType0.fRealType1.fCreates a new normal distribution producing numbers with the given mean and stddev. -Destroys the normal distribution object. - -boost::is_floating_point< RealType >::value"Template argument must be a floating point type" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Threefry pseudorandom number generator. T -const ulong_ - -voidulong_seed value for the random-number generator command_queue &command queue to perform the operationSeeds the random number generator with value. -If no seed value is provided, default_seed is used. -voidcommand_queue &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidOutputIteratorOutputIteratorcommand_queue &Generates random numbers and stores them to the range [first, last). -voidOutputIteratorOutputIteratorFunctioncommand_queue &Generates random numbers, transforms them with op, and then stores them to the range [first, last). -voidsize_tcommand_queue &Generates z random numbers and discards them. - -command_queue &ulong_default_seedCreates a new threefry_engine and seeds it with value. -const threefry_engine< T > &Creates a new threefry_engine object as a copy of other. -threefry_engine< T > &const threefry_engine< T > &Copies other to *this. -Destroys the threefry_engine object. - -void - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Produces uniformily distributed random integers. The following example shows how to setup a uniform int distribution to produce random integers 0 and 1.IntType - -result_typeReturns the minimum value of the distribution. -result_typeReturns the maximum value of the distribution. -voidOutputIteratorOutputIteratorGenerator &command_queue &Generates uniformily distributed integers and stores them to the range [first, last). - -IntType0IntType(std::numeric_limits< IntType >::max)()Creates a new uniform distribution producing numbers in the range [a, b]. -Destroys the uniform_int_distribution object. - -boost::is_integral< IntType >::value"Template argument must be integral" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Produces uniformly distributed random floating-point numbers. The following example shows how to setup a uniform real distribution to produce random float values between 1 and 100. See Also:default_random_engine, normal_distribution - -RealType - -result_typeReturns the minimum value of the distribution. -result_typeReturns the maximum value of the distribution. -voidOutputIteratorOutputIteratorGenerator &command_queue &Generates uniformly distributed floating-point numbers and stores them to the range [first, last). - -RealType0.fRealType1.fCreates a new uniform distribution producing numbers in the range [a, b). Requires a < b -Destroys the uniform_real_distribution object. - -boost::is_floating_point< RealType >::value"Template argument must be a floating point type" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
- - -false_typeMeta-function returning true if Iterator is a device-iterator.By default, this function returns false. Device iterator types (such as buffer_iterator) should specialize this trait and return true.For example: is_device_iterator<buffer_iterator<int>>::value == true -is_device_iterator<std::vector<int>::iterator>::value == false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -false_typeMeta-function returning true if T is a fundamental (i.e. built-in) type.For example, is_fundamental<float>::value == true -is_fundamental<std::pair<int, float>>::value == false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::mpl::bool_< vector_size< T >::value !=1 >Meta-function returning true if T is a vector type.For example, is_vector_type<int>::value == false -is_vector_type<float4_>::value == true -See Also:make_vector_type, vector_size - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Meta-function which returns a vector type for Scalar with Size.For example, make_vector_type<int, 2>::type == int2_ -make_vector_type<float, 4>::type == float4_ -See Also:is_vector_type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Returns the result of Function when called with Args.For example, // int + int = int -result_of<plus(int, int)>::type == int - ::boost::tr1_result_of< Signature >::type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Meta-function returning the scalar type for a vector type.For example, scalar_type<float4_>::type == float - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::stringReturns the OpenCL type definition for T. -See Also:type_name<T>() - -a string containing the type definition for T - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const char *Returns the OpenCL type name for the type T as a string. -For example: type_name<float>() == "float" -type_name<float4_>() == "float4" -See Also:type_definition<T>() - -a string containing the type name for T - - - - - - -Registers the OpenCL type for the C++ type to name.For example, the following will allow Eigen's Vector2f type to be used with Boost.Compute algorithms and containers as the built-in float2 type. BOOST_COMPUTE_TYPE_NAME(Eigen::Vector2f, float2) -This macro should be invoked in the global namespace.See Also:type_name() - - -
-
- - -Meta-function returning the size (number of components) of a vector type T. For scalar types this function returns 1.For example, vector_size<float>::value == 1 -vector_size<float4_>::value == 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -extents< sizeof...(Args)>Args...The variadic dim() function provides a concise syntax for creating extents objects.For example, extents<2> region = dim(640, 480); // region == (640, 480) -See Also:extents<N> - - - - -
-
- - -The extents class contains an array of n-dimensional extents.See Also:dim() - -size_t -boost::array< size_t, N > -array_type::iterator -array_type::const_iterator -const size_type - -size_typeReturns the size (i.e. dimensionality) of the extents array. -size_typeReturns the linear size of the extents. This is equivalent to the product of each extent in each dimension. -size_t *Returns a pointer to the extents data array.This is useful for passing the extents data to OpenCL APIs which expect an array of size_t. -const size_t *This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -iterator -const_iterator -const_iterator -iterator -const_iterator -const_iterator -size_t &size_tReturns a reference to the extent at index. -const size_t &size_tThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -boolconst extents &Returns true if the extents in *this are the same as other. -boolconst extents &Returns true if the extents in *this are not the same as other. - -Creates an extents object with each component set to zero.For example: extents<3> exts(); // (0, 0, 0) - -size_tCreates an extents object with each component set to value.For example: extents<3> exts(1); // (1, 1, 1) - -std::initializer_list< size_t >Creates an extents object with values. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -result_of< Function(Args...)>::typeconst Function &command_queue &const Args &...Invokes function with args on queue.For example, to invoke the builtin abs() function: int result = invoke(abs<int>(), queue, -10); // returns 10 - - - - - - - -
-
- - -noncopyableThe program_cache class stores program objects in a LRU cache.This class can be used to help mitigate the overhead of OpenCL's run-time kernel compilation model. Commonly used programs can be stored persistently in the cache and only compiled once on their first use.Program objects are stored and retreived based on a user-defined cache key along with the options used to build the program (if any).For example, to insert a program into the cache: cache.insert("foo", foo_program); -And to retreive the program later: boost::optional<program> p = cache.get("foo"); -if(p){ - // program found in cache -} -See Also:program - - -size_tReturns the number of program objects currently stored in the cache. -size_tReturns the total capacity of the cache. -voidClears the program cache. -boost::optional< program >const std::string &Returns the program object with key. Returns a null optional if no program with key exists in the cache. -boost::optional< program >const std::string &const std::string &Returns the program object with key and options. Returns a null optional if no program with key and options exists in the cache. -voidconst std::string &const program &Inserts program into the cache with key. -voidconst std::string &const std::string &const program &Inserts program into the cache with key and options. -programconst std::string &const std::string &const std::string &const context &Loads the program with key from the cache if it exists. Otherwise builds a new program with source and options, stores it in the cache, and returns it.This is a convenience function to simplify the common pattern of attempting to load a program from the cache and, if not present, building the program from source and storing it in the cache.Equivalent to: boost::optional<program> p = get(key, options); -if(!p){ - p = program::create_with_source(source, context); - p->build(options); - insert(key, options, *p); -} -return *p; - - -size_tCreates a new program cache with space for capacity number of program objects. -Destroys the program cache. - -boost::shared_ptr< program_cache >const context &Returns the global program cache for context.This global cache is used internally by Boost.Compute to store compiled program objects used by its algorithms. All Boost.Compute programs are stored with a cache key beginning with "__boost". User programs should avoid using the same prefix in order to prevent collisions. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Stringizes OpenCL source code.For example, to create a simple kernel which squares each input value: const char source[] = BOOST_COMPUTE_STRINGIZE_SOURCE( - __kernel void square(const float *input, float *output) - { - const uint i = get_global_id(0); - const float x = input[i]; - output[i] = x * x; - } -); - -// create and build square program -program square_program = program::build_with_source(source, context); - -// create square kernel -kernel square_kernel(square_program, "square"); - -
-
- - -Stores a list of events. The wait_list class stores a set of event objects and can be used to specify dependencies for OpenCL operations or to wait on the host until all of the events have completed.This class also provides convenience functions for interacting with OpenCL APIs which typically accept event dependencies as a cl_event* pointer and a cl_uint size. For example: wait_list events = ...; - -clEnqueueNDRangeKernel(..., events.get_event_ptr(), events.size(), ...); -See Also:event, future<T> - -std::vector< event >::iterator -std::vector< event >::const_iterator - -boolReturns true if the wait-list is empty. -uint_Returns the number of events in the wait-list. -voidRemoves all of the events from the wait-list. -const cl_event *Returns a cl_event pointer to the first event in the wait-list. Returns 0 if the wait-list is empty.This can be used to pass the wait-list to OpenCL functions which expect a cl_event pointer to refer to a list of events. -voidsize_tReserves a minimum length of storage for the wait list object. -voidconst event &Inserts event into the wait-list. -voidconst future< T > &Inserts the event from future into the wait-list. -voidBlocks until all of the events in the wait-list have completed.Does nothing if the wait-list is empty. -const event &size_tReturns a reference to the event at specified location pos. -event &size_tReturns a reference to the event at specified location pos. -iteratorReturns an iterator to the first element of the wait-list. -const_iteratorReturns an iterator to the first element of the wait-list. -const_iteratorReturns an iterator to the first element of the wait-list. -iteratorReturns an iterator to the element following the last element of the wait-list. -const_iteratorReturns an iterator to the element following the last element of the wait-list. -const_iteratorReturns an iterator to the element following the last element of the wait-list. - -Creates an empty wait-list. -const event &Creates a wait-list containing event. -const wait_list &Creates a new wait-list as a copy of other. -std::initializer_list< event >Creates a wait-list from events. -wait_list &const wait_list &Copies the events in the wait-list from other. -wait_list &&Move-constructs a new wait list object from other. -wait_list &wait_list &&Move-assigns the wait list from other to *this. -Destroys the wait-list. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/contract/doc/reference.xml boost1.81-1.81.0/libs/contract/doc/reference.xml --- boost1.81-1.81.0/libs/contract/doc/reference.xml 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/contract/doc/reference.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,2573 +0,0 @@ - -Reference
-Include all header files required by this library at once (for convenience). All header files boost/contract/*.hpp are independent from one another and can be included one-by-one to reduce the amount of code to compile from this library in user code (but this was measured to not make an appreciable difference in compile-time so boost/contract.hpp can be included directly in most cases). Instead the headers boost/contract/core/*.hpp are not independent from other library headers and they are automatically included by the boost/contract/*.hpp headers (so the boost/contract/core/*.hpp headers are usually not directly included by programmers).All files under the boost/contract/detail/ directory, names within the boost::contract::detail namespace, names prefixed by boost_contract_detail... and BOOST_CONTRACT_DETAIL... (in any namesapce, including user's code) are reserved for internal use of this library and should never be used directly by programmers.See Also: Getting Started - -
-
-Assert contract conditions. Boolean contract condition to check. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and BOOST_CONTRACT_ASSERT((cond)) will always work.) Preferred way to assert contract conditions. Any exception thrown from within a contract (preconditions, postconditions, exception guarantees, old value copies at body, class invariants, etc.) is interpreted by this library as a contract failure. Therefore, users can program contract assertions manually throwing an exception when an asserted condition is checked to be false (this library will then call the appropriate contract failure handler boost::contract::precondition_failure, etc.). However, it is preferred to use this macro because it expands to code that throws boost::contract::assertion_failure with the correct assertion file name (using __FILE__), line number (using __LINE__), and asserted condition code so to produce informative error messages (C++11 __func__ is not used here because in most cases it will simply expand to the internal compiler name of the lambda function used to program the contract conditions adding no specificity to the error message). BOOST_CONTRACT_ASSERT, BOOST_CONTRACT_ASSERT_AUDIT, and BOOST_CONTRACT_ASSERT_AXIOM are the three assertion levels predefined by this library.See Also: Preconditions, Postconditions, Exceptions Guarantees, Class Invariants, No Macros - - - -Boolean contract condition to check. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and BOOST_CONTRACT_ASSERT_AUDIT((cond)) will always work.) Preferred way to assert contract conditions that are computationally expensive, at least compared to the computational cost of executing the function body. The asserted condition will always be compiled and validated syntactically, but it will not be checked at run-time unless BOOST_CONTRACT_AUDITS is defined (undefined by default). This macro is defined by code equivalent to:#ifdef BOOST_CONTRACT_AUDITS - #define BOOST_CONTRACT_ASSERT_AUDIT(cond) \ - BOOST_CONTRACT_ASSERT(cond) -#else - #define BOOST_CONTRACT_ASSERT_AUDIT(cond) \ - BOOST_CONTRACT_ASSERT(true || cond) -#endif - BOOST_CONTRACT_ASSERT, BOOST_CONTRACT_ASSERT_AUDIT, and BOOST_CONTRACT_ASSERT_AXIOM are the three assertion levels predefined by this library. If there is a need, programmers are free to implement their own assertion levels defining macros similar to the one above.See Also: Assertion Levels, No Macros - - - -Boolean contract condition to check. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and BOOST_CONTRACT_ASSERT_AXIOM((cond)) will always work.) Preferred way to document in the code contract conditions that are computationally prohibitive, at least compared to the computational cost of executing the function body. The asserted condition will always be compiled and validated syntactically, but it will never be checked at run-time. This macro is defined by code equivalent to:#define BOOST_CONTRACT_ASSERT_AXIOM(cond) \ - BOOST_CONTRACT_ASSERT(true || cond) - BOOST_CONTRACT_ASSERT, BOOST_CONTRACT_ASSERT_AUDIT, and BOOST_CONTRACT_ASSERT_AXIOM are the three assertion levels predefined by this library. If there is a need, programmers are free to implement their own assertion levels defining macros similar to the one above.See Also: Assertion Levels, No Macros - - - -
-
-Specify inheritance form base classes (for subcontracting). Comma separated list of base classes. Each base must explicitly specify its access specifier public, protected, or private, and also virtual when present (this not always required in C++ instead). There is a limit of about 20 maximum bases that can be listed (because of similar limits in Boost.MPL internally used by this library). This is a variadic macro parameter, on compilers that do not support variadic macros, the typedef for base classes can be programmed manually without using this macro (see No Macros). Used to program the typedef that lists the bases of a derived class. In order to support subcontracting, a derived class that specifies contracts for one or more overriding public functions must declare a typedef named base_types (or BOOST_CONTRACT_BASES_TYPEDEF) using this macro:class u - #define BASES public b, protected virtual w1, private w2 - : BASES -{ - friend class boost::contract:access; - - typedef BOOST_CONTRACT_BASE_TYPES(BASES) base_types; - #undef BASES - - ... -}; -This typedef must be public unless boost::contract::access is used.See Also: Base Classes - - - -
-
-Statically disable compilation and execution of functor calls. These facilities allow to emulate C++17 if constexpr statements when used together with functor templates (and C++14 generic lambdas). Therefore, they are not useful on C++17 compilers where if constexpr can be directly used instead. - - - -Select compilation and execution of functor template calls using a static boolean predicate (not needed on C++17 compilers, use if constexpr instead). This class template has no members because it is never used directly, it is only used via its specializations. Usually this class template is instantiated only via the return value of boost::contract::call_if and boost::contract::call_if_c.See Also: - Assertion Requirements - - -falseTheninternal_typeTemplate specialization to handle static predicates that are false (not needed on C++17 compilers, use if constexpr instead). This template specialization handles all else-branch functor template calls (whether they return void or not). Usually this class template is instantiated only via the return value of boost::contract::call_if and boost::contract::call_if_c.See Also: - Assertion Requirements - - - -result_of< Else()>::typeElseElse-branch nullary functor template. The functor template call f() is actually compiled and executed for this template specialization (because the if-statement static predicate is false). The return type of f() must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object.Specify the else-branch functor template. The result_of<Else()>::type expression needs be evaluated only when the static predicate is already checked to be false (because Else() is required to compile only in that case). Thus, this result-of expression is evaluated lazily and only in instantiations of this template specialization. - - - -A copy of the value returned by the call to the else-branch functor template f(). - -call_if_statement< ElseIfPred, ElseIfThen >ElseIfThenElse-if-branch nullary functor template. The functor template call f() is actually compiled and executed if and only if ElseIfPred is true (because the if-statement static predicate is already false for this template specialization). The return type of f() must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object.Specify an else-if-branch functor template (using a static boolean predicate). - - -A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, this will be the return value of the one functor template call being compiled and executed. - -call_if_statement< ElseIfPred::value, ElseIfThen >ElseIfThenElse-if-branch nullary functor template. The functor template call f() is actually compiled and executed if and only if ElseIfPred::value is true (because the if-statement static predicate is already false for this template specialization). The return type of f() must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object.Specify an else-if-branch functor template (using a nullary boolen meta-function). - - -A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, this will be the return value of the one functor template call being compiled and executed. - - -Then const &Then-branch nullary functor template. The functor template call f() is never compiled or executed for this template specialization (because the if-statement static predicate is false). The return type of f() must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object. Construct this object with the then-branch functor template. - -trueTheninternal_typeboost::contract::call_if_statement< true, Then, result_of< Then()>::type >Template specialization to dispatch between then-branch functor template calls that return void and the ones that return non-void (not needed on C++17 compilers, use if constexpr instead). The base class is a call-if statement so the else and else-if statements can be specified if needed. Usually this class template is instantiated only via the return value of boost::contract::call_if and boost::contract::call_if_c.The result_of<Then()>::type expression needs be evaluated only when the static predicate is already checked to be true (because Then() is required to compile only in that case). Thus, this template specialization introduces an extra level of indirection necessary for proper lazy evaluation of this result-of expression. - -See Also: - Assertion Requirements - - - - -ThenThen-branch nullary functor template. The functor template call f() is compiled and called for this template specialization (because the if-statement static predicate is true). The return type of f() must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object. Construct this object with the then-branch functor template. - -trueThenThenResultTemplate specialization to handle static predicates that are true for then-branch functor template calls that do not return void (not needed on C++17 compilers, use if constexpr instead). Usually this class template is instantiated only via the return value of boost::contract::call_if and boost::contract::call_if_c.See Also: - Assertion Requirements - - - -ThenResultThis implicit type conversion returns a copy of the value returned by the call to the then-branch functor template. -ThenResultElse const &Else-branch nullary functor template. The functor template call f() is never compiled or executed for this template specialization (because the if-statement static predicate is true). The return type of f() must be the same as (or implicitly convertible to) the ThenResult type.Specify the else-branch functor template. - -A copy of the value returned by the call to the then-branch functor template (because the else-branch functor template call is not executed). - -call_if_statement< true, Then, ThenResult >ElseIfThen const &Else-if-branch nullary functor template. The functor template call f() is never compiled or executed for this template specialization (because the if-statement static predicate is true). The return type of f() must be the same as (or implicitly convertible to) the ThenResult type.Specify an else-if-branch functor template (using a static boolean predicate). - - -A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, it will be the return value of the then-branch functor template call for this template specialization (because the if-statement static predicate is true). - -call_if_statement< true, Then, ThenResult >ElseIfThen const &Else-if-branch nullary functor template. The functor template call f() is never compiled or executed for this template specialization (because the if-statement static predicate is true). The return type of f() must be the same as (or implicitly convertible to) the ThenResult type.Specify an else-if-branch functor template (using a nullary boolean meta-function). - - -A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, it will be the return value of the then-branch functor template call for this template specialization (because the if-statement static predicate is true). - - -ThenThen-branch nullary functor template. The functor template call f() is actually compiled and executed for this template specialization (because the if-statement static predicate is true). The return type of f() must be the same as (or implicitly convertible to) the ThenResult type. Construct this object with the then-branch functor template. - -trueThenvoidTemplate specialization to handle static predicates that are true for then-branch functor template calls that return void (not needed on C++17 compilers, use if constexpr instead). Usually this class template is instantiated only via the return value of boost::contract::call_if and boost::contract::call_if_c.See Also: - Assertion Requirements - - - -voidElse const &Else-branch nullary functor template. The functor template call f() is never compiled or executed for this template specialization (because the if-statement static predicate is true). The return type of f() must be void for this template specialization (because the then-branch functor template calls return void). Specify the else-branch functor template. - -call_if_statement< true, Then, void >ElseIfThen const &Else-if-branch nullary functor template. The functor template call f() is never compiled or executed for this template specialization (because the if-statement static predicate is true). The return type of f() must be void for this template specialization (because the then-branch functor template calls return void).Specify an else-if-branch functor template (using a static boolean predicate). - - -A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, it will return void for this template specialization (because the then-branch functor template calls return void). - -call_if_statement< true, Then, void >ElseIfThen const &Else-if-branch nullary functor template. The functor template call f() is never compiled or executed for this template specialization (because the if-statement static predicate is true). The return type of f() must be void for this template specialization (because the then-branch functor template calls return void).Specify an else-if-branch functor template (using a nullary boolean meta-function). - - -A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, it will return void for this template specialization (because the then-branch functor template calls return void). - - -ThenThen-branch nullary functor template. The functor template call f() is actually compiled and executed for this template specialization (because the if-statement static predicate is true). The return type of f() must be void for this template specialization (because the then-branch functor template calls return void). Construct this object with the then-branch functor template. - -call_if_statement< Pred, Then >ThenThen-branch nullary functor template. The functor template call f() is compiled and executed if and only if Pred is true. The return type of other functor template calls specified for this call-if statement (else-branch, else-if-branches, etc.) must be the same as (or implicitly convertible to) the return type of then-branch functor call f().Select compilation and execution of functor template calls using a static boolean predicate (not needed on C++17 compilers, use if constexpr instead). Create a call-if object with the specified then-branch functor template:boost::contract::call_if_c<Pred1>( - then_functor_template1 -).template else_if_c<Pred2>( // Optional. - then_functor_template2 -) // Optionally, other `else_if_c` or -... // `else_if`. -.else_( // Optional for `void` functors, - else_functor_template // but required for non `void`. -) -Optional functor templates for else-if-branches and the else-branch can be specified as needed (the else-branch function template is required if f returns non-void).See Also: - Assertion Requirements - - - - -A call-if statement so else and else-if statements can be specified if needed. Eventually, this will be the return value of the one functor template call being compiled and executed (which could also be void). - -call_if_statement< Pred::value, Then >ThenThen-branch nullary functor template. The functor template call f() is compiled and executed if and only if Pred::value is true. The return type of other functor template calls specified for this call-if statement (else-branch, else-if-branches, etc.) must be the same as (or implicitly convertible to) the return type of then-branch functor template call f().Select compilation and execution of functor template calls using a nullary boolean meta-function (not needed on C++17 compilers, use if constexpr instead). This is equivalent to boost::contract::call_if_c<Pred::value>(f). Create a call-if object with the specified then-branch functor template:boost::contract::call_if<Pred1>( - then_functor_template1 -).template else_if<Pred2>( // Optional. - then_functor_template2 -) // Optionally, other `else_if` or -... // `else_if_c`. -.else_( // Optional for `void` functors, - else_functor_template // but required for non `void`. -) -Optional functor templates for else-if-branches and the else-branch can be specified as needed (the else-branch functor template is required if f returns non-void).See Also: - Assertion Requirements - - - - -A call-if statement so else and else-if statements can be specified if needed. Eventually, this will be the return value of the one functor template call being compiled and executed (which could also be void). - -boolThenNullary boolean functor template. The functor template call f() is compiled and executed if and only if Pred is true.booltrueBoolean value to return when Pred is false (instead of compiling and executing the functor template call f()).Select compilation and execution of a boolean functor template condition using a static boolean predicate (not needed on C++17 compilers, use if constexpr instead). Compile and execute the nullary boolean functor template call f() if and only if the specified static boolean predicate Pred is true, otherwise trivially return else_ (true by default) at run-time.A call to boost::contract::condition_if_c<Pred>(f, else_) is logically equivalent to boost::contract::call_if_c<Pred>(f, [] { return else_; }) (but its internal implementation is optimized and it does not actually use call_if_c).See Also: - Assertion Requirements - - - - - -Boolean value returned by f() if the static predicate Pred is true. Otherwise, trivially return else_. - -boolThenNullary boolean functor template. The functor template call f() is compiled and executed if and only if Pred::value is true. booltrueBoolean value to return when Pred::value is false (instead of compiling and executing the functor template call f()).Select compilation and execution of a boolean functor template condition using a nullary boolean meta-function (not needed on C++17 compilers, use if constexpr instead). This is equivalent to boost::contract::condition_if_c<Pred::value>(f, else_). Compile and execute the nullary boolean functor template call f() if and only if the specified nullary boolean meta-function Pred::value is true, otherwise trivially return else_ (true by default) at run-time.See Also: - Assertion Requirements - - - - -Boolean value returned by f() if the static predicate Pred::value is true. Otherwise, trivially return else_. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-RAII object that checks contracts. - -RAII object that checks the contracts. In general, when this object is constructed it checks class invariants at entry, preconditions, and makes old value copies at body. When it is destructed, it checks class invariants at exist, postconditions, and exception guarantees. This object enforces the following (see Contract Programming Overview): -Postconditions are checked only if the body does not throw an exception. - -Exceptions guarantees are checked only if the body throws an exception. - -Constructor entry never checks class invariants. - -Destructor exit checks class invariants only if the body throws an exception (even if destructors should usually not be programmed to throw exceptions in C++ and they are implicitly declared noexcept since C++11). - -Static invariants are always checked at entry and exit (and regardless of the body throwing exceptions or not). - - -When used this way, this object is constructed and initialized to the return value of one of the contract functions boost::contract::function, boost::contract::constructor, boost::contract::destructor, or boost::contract::public_function. In addition to that, this object can be constructed from a nullary functor when it is used to program implementation checks.See Also: Tutorial, Implementation Checks - - - -F const &Nullary functor that asserts implementation checks. f() will be called as soon as this object is constructed at the point it is declared within the implementation code (see - Implementation Checks). Construct this object for implementation checks. This can be used to program checks within implementation code (body, etc.). This constructor is not declared explicit so initializations can use assignment syntax =.Throws: This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see - Throw on Failure). - -check const &Copied-from object. Construct this object copying it from the specified one. This object will check the contract, the copied-from object will not (i.e., contract check ownership is transferred from the copied object to the new object being created by this constructor). - -specify_precondition_old_postcondition_except< VirtualResult > const &Contract to be checked (usually the return value of boost::contract::function or boost::contract::public_function).Construct this object to check the specified contract. This checks class invariants at entry (if those were specified for the given contract). This constructor is not declared explicit so initializations can use assignment syntax =.Throws: This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see - Throw on Failure). - - -specify_old_postcondition_except< VirtualResult > const &Contract to be checked (usually the return value of boost::contract::function, boost::contract::constructor, boost::contract::destructor, or boost::contract::public_function).Construct this object to check the specified contract. This checks class invariants at entry and preconditions (if any of those were specified for the given contract). This constructor is not declared explicit so initializations can use assignment syntax =.Throws: This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see - Throw on Failure). - - -specify_postcondition_except< VirtualResult > const &Contract to be checked (usually the return value of boost::contract::function, boost::contract::constructor, boost::contract::destructor, or boost::contract::public_function).Construct this object to check the specified contract. This checks class invariants at entry and preconditions then it makes old value copies at body (if any of those were specified for the given contract). This constructor is not declared explicit so initializations can use assignment syntax =.Throws: This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating te program (see - Throw on Failure). - - -specify_except const &Contract to be checked (usually the return value of boost::contract::function, boost::contract::constructor, boost::contract::destructor, or boost::contract::public_function).Construct this object to check the specified contract. This checks class invariants at entry and preconditions then it makes old value copies at body, plus the destructor of this object will also check postconditions in this case (if any of those were specified for the given contract). This constructor is not declared explicit so initializations can use assignment syntax =.Throws: This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see - Throw on Failure). - - -specify_nothing const &Contract to be checked (usually the return value of boost::contract::function, boost::contract::constructor, boost::contract::destructor, or boost::contract::public_function).Construct this object to check the specified contract. This checks class invariants at entry and preconditions then it makes old value copies at body, plus the destructor of this object will also check postconditions and exception guarantees in this case (if any of those were specified for the given contract). This constructor is not declared explicit so initializations can use assignment syntax =.Throws: This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see - Throw on Failure). - - -Destruct this object. This checks class invariants at exit and either postconditions when the enclosing function body did not throw an exception, or exception guarantees when the function body threw an exception (if class invariants, postconditions, and exception guarantees respectively were specified for the enclosing class and the contract parameter given when constructing this object).Throws: This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see - Throw on Failure). (This is declared noexcept(false) since C++11.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Program contracts for constructors. - - - - - -specify_old_postcondition_exceptClass *The object this from the scope of the enclosing constructor declaring the contract. (Constructors check all class invariants, including static and volatile invariants, see - Class Invariants and - Volatile Public Functions).Program contracts for constructors. This is used to specify postconditions, exception guarantees, old value copies at body, and check class invariants for constructors (see boost::contract::constructor_precondition to specify preconditions for constructors):class u { - friend class boost::contract:access; - - void invariant() const { // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - } - -public: - u(...) { - boost::contract::old_ptr<old_type> old_var; - boost::contract::check c = boost::contract::constructor(this) - // No `.precondition` (use `constructor_precondition` instead). - .old([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(old_expr); - ... - }) - .postcondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .except([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; - - ... // Constructor body. - } - - ... -}; -For optimization, this can be omitted for constructors that do not have postconditions and exception guarantees, within classes that have no invariants.See Also: Constructors - - - - -The result of this function must be assigned to a variable of type boost::contract::check declared explicitly (i.e., without using C++11 auto declarations) and locally just before the code of the constructor body (otherwise this library will generate a run-time error, see BOOST_CONTRACT_ON_MISSING_CHECK_DECL). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Allow to declare invariants, base types, etc all as private members. - -Declare this class as friend to program invariants and base types as private members. Declare this class a friend of the user-defined class specifying the contracts and then invariant functions and the base types typedef can be declared as non-public members:class u - #define BASES public b, private w - : BASES -{ - friend class boost::contract::access; - - typedef BOOST_CONTRACT_BASE_TYPES(BASES) base_types; // Private. - #undef BASES - - void invariant() const { ... } // Private (same for static and volatile). - -public: - ... -}; -In real code, programmers will likely chose to declare this class as friend so to fully control public interfaces of their user-defined classes (this is not extensively done in the examples of this documentation only for brevity). This class is not intended to be directly used by programmers a part from being declared as friend (and that is why this class does not have any public member and it is not copyable).Not declaring this class friend of user-defined classes will cause compiler errors on some compilers (e.g., MSVC) because the private members needed to check the contracts will not be accessible. On other compilers (e.g., GCC and CLang), the private access will instead fail SFINAE and no compiler error will be reported while invariants and subcontracting will be silently skipped at run-time. Therefore, programmers must make sure to either declare this class as friend or to always declare invariant functions and base types typedef as public members. - -See Also: Access Specifiers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Macros for implementation checks. Boolean condition to check within implementation code (function body, etc.). (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and BOOST_CONTRACT_CHECK((cond)) will always work.) Preferred way to assert implementation check conditions. It is preferred to use this macro instead of programming implementation checks in a nullary functor passed to boost::contract::check constructor because this macro will completely remove implementation checks from the code when BOOST_CONTRACT_NO_CHECKS is defined:void f() { - ... - BOOST_CONTRACT_CHECK(cond); - ... -} - BOOST_CONTRACT_CHECK, BOOST_CONTRACT_CHECK_AUDIT, and BOOST_CONTRACT_CHECK_AXIOM are the three assertion levels predefined by this library for implementation checks.See Also: Implementation Checks - - - -Boolean condition to check within implementation code (function body, etc.). (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and BOOST_CONTRACT_CHECK_AUDIT((cond)) will always work.) Preferred way to assert implementation check conditions that are computationally expensive, at least compared to the computational cost of executing the function body. The specified condition will always be compiled and validated syntactically, but it will not be checked at run-time unless BOOST_CONTRACT_AUDITS is defined (undefined by default). This macro is defined by code equivalent to:#ifdef BOOST_CONTRACT_AUDITS - #define BOOST_CONTRACT_CHECK_AUDIT(cond) \ - BOOST_CONTRACT_CHECK(cond) -#else - #define BOOST_CONTRACT_CHECK_AUDIT(cond) \ - BOOST_CONTRACT_CHECK(true || cond) -#endif - BOOST_CONTRACT_CHECK, BOOST_CONTRACT_CHECK_AUDIT, and BOOST_CONTRACT_CHECK_AXIOM are the three assertion levels predefined by this library for implementation checks. If there is a need, programmers are free to implement their own assertion levels defining macros similar to the one above.See Also: Assertion Levels - - - -Boolean condition to check within implementation code (function body, etc.). (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and BOOST_CONTRACT_CHECK_AXIOM((cond)) will always work.) Preferred way to document in the code implementation check conditions that are computationally prohibitive, at least compared to the computational cost of executing the function body. The specified condition will always be compiled and validated syntactically, but it will never be checked at run-time. This macro is defined by code equivalent to:#define BOOST_CONTRACT_CHECK_AXIOM(cond) \ - BOOST_CONTRACT_CHECK(true || cond) - BOOST_CONTRACT_CHECK, BOOST_CONTRACT_CHECK_AUDIT, and BOOST_CONTRACT_CHECK_AXIOM are the three assertion levels predefined by this library for implementation checks. If there is a need, programmers are free to implement their own assertion levels defining macros similar to the one above.See Also: Assertion Levels - - - -
-
-Configure this library compile-time and run-time behaviours. Define this macro to compile this library as a shared library (recommended). If this macro is defined, this library is compiled so it can be linked as a shared library (a.k.a., Dynamically Linked Library or DLL) to user code. This library will automatically define this macro when Boost libraries are built as shared libraries (e.g., defining BOOST_ALL_DYN_LINK or using bjam link=shared ...).In general this library will correctly check contracts at run-time only when compiled as a shared library, unless user code checks contracts in a single program unit (e.g., a single program with only statically linked libraries). Therefore, it is recommended to build and use this library as a shared library by defining this macro (or equivalently by building all Boost libraries as shared libraries). - -See Also: Getting Started - - -Define this macro to compile this library as a static library (not recommended). If this macro is defined, this library is compiled so it can be linked statically to user code. This library will automatically define this macro when Boost libraries are built as static libraries.This library is not guaranteed to always work correctly at run-time when this macro is defined (define BOOST_CONTRACT_DYN_LINK or BOOST_ALL_DYN_LINK instead). However, this macro can be defined and this library can be safely used as a static library for user code that checks contracts in a single program unit (e.g., a single program with only statically linked libraries). - -See Also: Getting Started - - -Automatically defined by this library when it is being used as a header-only library (not recommended). This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users do not define BOOST_CONTRACT_DYN_LINK (or BOOST_ALL_DYN_LINK) and BOOST_CONTRACT_STATIC_LINK. When used as a header-only library, this library code does not have to be compiled separately from user code, this library headers are simply included and compiled as part of the user program.This library is not guaranteed to always work correctly at run-time when this macro is defined (define BOOST_CONTRACT_DYN_LINK or BOOST_ALL_DYN_LINK instead). However, this macro can be defined and this library can be safely used as a header-only library for user code that checks contracts in a single program unit (e.g., a single program with only statically linked libraries). - -See Also: Getting Started - - -Define this macro to not lock internal library data for thread safety (undefined by default). Defining this macro will make the library implementation code not thread safe so this macro should not be defined unless the library is being used by single-threaded applications only. This library will automatically define this macro when Boost libraries are built without threads (e.g., defining BOOST_DISABLE_THREADS).When this macro is left undefined this library needs to internally use some sort of global lock (to ensure contract checking is globally disabled when other contracts are being checked and also to safely access failure handler functors). That could introduce an undesired amount of synchronization in some multi-threaded applications. - -See Also: Assertions - - -Maximum number of arguments for public function overrides on compilers that do not support variadic templates (default to 10). On compilers that do not support C++11 variadic templates, this macro is defined to the maximum number of arguments that public function overrides can have and pass to boost::contract::public_function (users can redefine this macro to a different value). On compilers that support variadic templates, this macro has no effect.Regardless of the value of this macro and of compiler support for variadic templates, there might be an intrinsic limit of about 18 arguments for public function overrides (because of similar limits in Boost.MPL and Boost.FunctionTypes internally used by this library). - -See Also: No Macros - - -Define the name of the base type typedef (base_types by default). This macro expands to the name of the typedef that lists the base classes for subcontracting via BOOST_CONTRACT_BASE_TYPES:class u - #define BASES public b, private w - : BASES -{ - friend class boost::contract:access; - - typedef BOOST_CONTRACT_BASE_TYPES(BASES) BOOST_CONTRACT_TYPEDEF; - #undef BASES - - ... -}; -When used this way, users can redefine this macro if the typedef must have a name different from base_types (because of name clashes in user code, etc.).See Also: Base Classes - - -Define the name of the class invariant member function (invariant by default). This macro expands to the name of the const and const volatile member functions that check class invariants and volatile class invariants respectively:class u { - friend class boost::contract::access; - - void BOOST_CONTRACT_INVARIANT_FUNC() const { - BOOST_CONTRACT_ASSERT(...); - ... - } - - void BOOST_CONTRACT_INVARIANT_FUNC() const volatile { - BOOST_CONTRACT_ASSERT(...); - ... - } - - ... -}; -When used this way, users can redefine this macro if the invariant functions must have a name different from invariant (because of name clashes in user code, etc.).C++ does not allow to overload member functions based on the static classifier, so this macro must always be defined to be different than the function name defined for BOOST_CONTRACT_STATIC_INVARIANT_FUNC. - -See Also: Class Invariants, - Volatile Public Functions - - -Define the name of the static invariant member function (static_invariant by default). This macro expands to the name of the static member function that checks static class invariants:class u { - friend class boost::contract::access; - - static void BOOST_CONTRACT_STATIC_INVARIANT_FUNC() { - BOOST_CONTRACT_ASSERT(...); - ... - } - - ... -}; -When used this way, users can redefine this macro if the static invariant function must have a name different from static_invariant (because of name clashes in user code, etc.).C++ does not allow to overload member functions based on the static classifier, so this macro must always be defined to be different than the function name defined for BOOST_CONTRACT_INVARIANT_FUNC. - -See Also: Class Invariants - - -Disable some compile-time errors generated by this library (undefined by default). Defining this macro disables a number of static checks and related compile-time errors generated by this library, for example: -The static invariant member function named as BOOST_CONTRACT_STATIC_INVARIANT_FUNC must be declared static. - -Non-static invariant member functions named as BOOST_CONTRACT_INVARIANT_FUNC must be declared either const, const volatile, or volatile const. - -Derived classes that program contracts for one or more public function overrides via boost::contract::public_function must also define the BOOST_CONTRACT_BASE_TYPES typedef. - - -In general, it is not recommended to define this macro because these compile-time checks can guard against misuses of this library.See Also: Class Invariants, Base Classes - - -Code block to execute if contracts are not assigned to a boost::contract::check variable (undefined and executes BOOST_ASSERT(false) by default). In general, there is a logic error in the program when contracts are not explicitly assigned to a local variable of type boost::contract::check and without using C++11 auto declarations (because that is a misuse of this library). Therefore, by default (i.e., when this macro is not defined) this library calls BOOST_ASSERT(false) in those cases. If this macro is defined, this library will execute the code expanded by this macro instead of calling BOOST_ASSERT(false) (if programmers prefer to throw an exception, etc.).This macro can also be defined to be any block of code (and use empty curly brackets {} to generate no error, not recommended), for example (on GCC): gcc -DBOOST_CONTRACT_ON_MISSING_CHECK_DECL='{ throw std::logic_error("missing contract check declaration"); }' ... -See Also: Tutorial - - -Define this macro to not disable other assertions while checking preconditions (undefined by default). Not disabling other assertions while checking preconditions can lead to infinite recursion in user code so by default this macro is not defined.However, the [N1962] proposal does not disable assertions while checking preconditions because arguments can reach the function body unchecked if assertions are disabled while checking preconditions (e.g., when these same functions bodies are called to check the preconditions in question). This macro can be defined to obtain the behaviour specified in [N1962] (at the risk of infinite recursion).See Also: - Feature Summary - - -Define this macro to not disable any assertion while checking other assertions (undefined by default). Not disabling assertions while checking other assertions can lead to infinite recursion in user code so by default this macro is not defined. (Defining this macro automatically implies that other assertion checking is disabled while checking preconditions as if BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION was also defined.)See Also: - Feature Summary - - -Define this macro to evaluate and check audit assertions at run-time (undefined by default). Audit assertions and implementation checks programmed via BOOST_CONTRACT_ASSERT_AUDIT and BOOST_CONTRACT_CHECK_AUDIT are always compiled and validated syntactically. However, they are not evaluated and checked at run-time unless this macro is defined (because these conditions can be computationally expensive, at least compared to the computational cost of executing the function body).See Also: Assertion Levels - - -If defined, this library disables implementation checks (undefined by default). If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with implementation checks. In addition, users can manually program #ifndef statements in their code using this macro to completely disable compilation of implementation checks or use BOOST_CONTRACT_CHECK (recommended).See Also: - Implementation Checks, - Disable Contract Checking, - Disable Contract Compilation - - -If defined, this library does not check preconditions (undefined by default). If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking preconditions. In addition, users can manually program #ifndef statements in their code using this macro to completely disable compilation of preconditions or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).See Also: Preconditions, - Disable Contract Checking, - Disable Contract Compilation - - -If defined, this library does not check postconditions (undefined by default). If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking postconditions. In addition, users can manually program #ifndef statements in their code using this macro to completely disable compilation of postconditions or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).It is necessary to disable both postconditions and exception guarantees defining BOOST_CONTRACT_NO_POSTCONDITIONS and BOOST_CONTRACT_NO_EXCEPTS in order to disable old value copies (see BOOST_CONTRACT_NO_OLDS).See Also: Postconditions, - Disable Contract Checking, - Disable Contract Compilation - - -If defined, this library does not check exception guarantees (undefined by default). If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking exception guarantees. In addition, users can manually program #ifndef statements in their code using this macro to completely disable compilation of exception guarantees or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).It is necessary to disable both postconditions and exception guarantees defining BOOST_CONTRACT_NO_POSTCONDITIONS and BOOST_CONTRACT_NO_EXCEPTS in order to disable old value copies (see BOOST_CONTRACT_NO_OLDS).See Also: Exception Guarantees, - Disable Contract Checking, - Disable Contract Compilation - - -If defined, this library does not check class invariants at entry (undefined by default). If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking class invariants at entry. In addition, users can manually program #ifndef statements in their code using this macro to completely disable compilation of entry class invariants or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).This macro is automatically defined when BOOST_CONTRACT_NO_INVARIANTS is defined.See Also: Class Invariants, - Disable Contract Checking, - Disable Contract Compilation - - -If defined, this library does not check class invariants at exit (undefined by default). If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking class invariants at exit. In addition, users can manually program #ifndef statements in their code using this macro to completely disable compilation of exit class invariants or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).This macro is automatically defined when BOOST_CONTRACT_NO_INVARIANTS is defined.See Also: Class Invariants, - Disable Contract Checking, - Disable Contract Compilation - - -If defined, this library does not check class invariants (undefined by default). If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking class invariants. In addition, users can manually program #ifndef statements in their code using this macro to completely disable compilation of class invariants or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).Defining this macro is equivalent to defining both BOOST_CONTRACT_NO_ENTRY_INVARIANTS and BOOST_CONTRACT_NO_EXIT_INVARIANTS.See Also: Class Invariants, - Disable Contract Checking, - Disable Contract Compilation - - -Automatically defined by this library when old value copies are not to be performed. This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define both BOOST_CONTRACT_NO_POSTCONDITIONS and BOOST_CONTRACT_NO_EXCEPTS. Users can manually program #ifndef statements in their code using this macro to completely disable compilation of old value copies or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).See Also: Old Values, - Old Values Copied at Body, - Disable Contract Compilation - - -Automatically defined by this library when contracts are not checked for constructors. This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all BOOST_CONTRACT_NO_INVARIANTS, BOOST_CONTRACT_NO_POSTCONDITIONS, and BOOST_CONTRACT_NO_EXCEPTS. Users can manually program #ifndef statements in their code using this macro to completely disable compilation of contracts for constructors or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).Constructor preconditions are checked separately by boost::contract::constructor_precondition so they are disabled by BOOST_CONTRACT_NO_PRECONDITIONS instead. - -See Also: Constructors, - Disable Contract Compilation - - -Automatically defined by this library when contracts are not checked for destructors. This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all BOOST_CONTRACT_NO_INVARIANTS, BOOST_CONTRACT_NO_POSTCONDITIONS, and BOOST_CONTRACT_NO_EXCEPTS. Users can manually program #ifndef statements in their code using this macro to completely disable compilation of contracts for destructors or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).See Also: Destructors, - Disable Contract Compilation - - -Automatically defined by this library when contracts are not checked for public functions. This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all BOOST_CONTRACT_NO_INVARIANTS, BOOST_CONTRACT_NO_PRECONDITIONS, BOOST_CONTRACT_NO_POSTCONDITIONS, and BOOST_CONTRACT_NO_EXCEPTS. Users can manually program #ifndef statements in their code using this macro to completely disable compilation of contracts for public functions or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).See Also: Public Functions, - Disable Contract Compilation - - -Automatically defined by this library when contracts are not checked for non-member, private, or protected functions. This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all BOOST_CONTRACT_NO_PRECONDITIONS, BOOST_CONTRACT_NO_POSTCONDITIONS, and BOOST_CONTRACT_NO_EXCEPTS. Users can manually program #ifndef statements in their code using this macro to completely disable compilation of contracts for non-member, private and protected functions, or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).This macro is also used when contracts are not checked for private or protected functions, lambda functions, code blocks, loops, etc.See Also: Non-Member Functions, - Private and Protected Functions, - Lambdas, Loops, Code Blocks, - Disable Contract Compilation - - -Automatically defined by this library when contracts are not checked for preconditions, postconditions, exceptions guarantees, and class invariants (excluding implementation checks). This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all BOOST_CONTRACT_NO_PRECONDITIONS, BOOST_CONTRACT_NO_POSTCONDITIONS, BOOST_CONTRACT_NO_EXCEPTS, and BOOST_CONTRACT_NO_INVARIANTS. Users can manually program #ifndef statements in their code using this macro to completely disable compilation of contracts within specifications (so excluding implementation checks which are contracts within implementations instead), or use the macros defined in boost/contract_macro.hpp (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).See Also: - Disable Contract Compilation - - -Automatically defined by this library when contracts are not checked at all (neither for specifications nor for implementations). This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all BOOST_CONTRACT_NO_INVARIANTS, BOOST_CONTRACT_NO_PRECONDITIONS, BOOST_CONTRACT_NO_POSTCONDITIONS, BOOST_CONTRACT_NO_EXCEPTS, and BOOST_CONTRACT_NO_CHECKS. For example, users can manually program #ifndef statements in their code using this macro to avoid including the boost/contract.hpp header all together:#include <boost/contract/core/config.hpp> -#ifndef BOOST_CONTRACT_NO_ALL - #include <boost/contract.hpp> -#endif -Or, use the boost/contract_macro.hpp header and related macros instead (because the boost/contract_macro.hpp header is already optimized to not include other headers from this library when contracts are not checked, but recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).See Also: - Disable Contract Compilation - - -
-
-Program preconditions for constructors. - -Program preconditions for constructors. This class must be the very first base of the class declaring the constructor for which preconditions are programmed (that way constructor arguments can be checked by preconditions even before they are used to initialize other base classes):class u - #define BASES private boost::contract::constructor_precondition<u>, \ - public b - : BASES -{ - friend class boost::contract::access; - - typedef BOOST_CONTRACT_BASE_TYPES(BASES) base_types; - #undef BASES - -public: - explicit u(unsigned x) : - boost::contract::constructor_precondition<u>([&] { - BOOST_CONTRACT_ASSERT(x != 0); - ... - }), - b(1.0 / float(x)) - { - ... - } - - ... -}; -User-defined classes should inherit privately from this class (to not alter the public interface of user-defined classes). In addition, this class should never be declared as a virtual base (because virtual bases are initialized only once across the entire inheritance hierarchy preventing preconditions of other base classes from being checked).This class cannot be used this way in a union because unions cannot have base classes in C++. Instead, this class is used in a union to declare a local object within the constructor definition just before boost::contract::constructor is used (see Unions).See Also: Constructors - - - - -Construct this object without specifying constructor preconditions. This is implicitly called for those constructors of the contracted class that do not specify preconditions.The implementation of this library is optimized so that calling this default constructor should amount to negligible compile-time and run-time overheads (likely to be optimized away completely by most compilers). - - -F const &Nullary functor called by this library to check constructor preconditions f(). Assertions within this functor call are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract failure (and will result in this library calling boost::contract::precondition_failure). This functor should capture variables by (constant) value, or better by (constant) reference to avoid extra copies. Construct this object specifying constructor preconditions. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Handle contract assertion failures. - -std::exceptionboost::contract::exceptionException typically used to report a contract assertion failure. This exception is thrown by code expanded by BOOST_CONTRACT_ASSERT (but it can also be thrown by user code programmed manually without that macro). This exception is typically used to report contract assertion failures because it contains detailed information about the file name, line number, and source code of the asserted condition (so it can be used by this library to provide detailed error messages when handling contract assertion failures).However, any other exception can be used to report a contract assertion failure (including user-defined exceptions). This library will call the appropriate contract failure handler function ( boost::contract::precondition_failure, etc.) when this or any other exception is thrown while checking contracts (by default, these failure handler functions print an error message to std::cerr and terminate the program, but they can be customized to take any other action).See Also: Throw on Failure, No Macros - - -char const *String describing the failed assertion. Throws: This is declared noexcept (or throw() before C++11). -A string formatted similarly to the following: assertion "`code()`" failed: file "`file()`", line `line()` (where `` indicate execution quotes). File, line, and code will be omitted from this string if they were not specified when constructing this object. - -char const *Name of the file containing the assertion. -File name as specified at construction (or "" if no file was specified). - -unsigned longNumber of the line containing the assertion. -Line number as specified at construction (or 0 if no line number was specified). - -char const *Text listing the source code of the assertion condition. -Assertion condition source code as specified at construction (or "" if no source code text was specified). - - -char const *""Name of the file containing the assertion (usually set using __FILE__). unsigned long0Number of the line containing the assertion (usually set using __LINE__). char const *""Text listing the source code of the assertion condition. Construct this object with file name, line number, and source code text of an assertion condition (all optional). This constructor can also be used to specify no information (default constructor), or to specify only file name and line number but not source code text (because of the parameter default values). - -char const *Text listing the source code of the assertion condition. Construct this object only with the source code text of the assertion condition. - -Destruct this object. Throws: This is declared noexcept (or throw() before C++11). -std::bad_castboost::contract::exceptionException thrown when inconsistent return values are passed to overridden virtual public functions. This exception is thrown when programmers pass to this library return value parameters for public function overrides in derived classes that are not consistent with the return type parameter passed for the virtual public function being overridden from the base classes. This allows this library to give more descriptive error messages in such cases of misuse.This exception is internally thrown by this library and programmers should not need to throw it from user code.See Also: - Public Function Overrides - - -char const *Description for this error (containing both from- and to- type names). Throws: This is declared noexcept (or throw() before C++11). - -char const *Name of the from-type (source of the cast). char const *Name of the to-type (destination of the cast). Construct this object with the name of the from- and to- result types. - -Destruct this object. Throws: This is declared noexcept (or throw() before C++11). -Public base class for all exceptions directly thrown by this library. This class does not inherit from std::exception because exceptions deriving from this class will do that (inheriting from std::exception, std::bad_cast, etc.).See Also: boost::contract::assertion_failure, boost::contract::bad_virtual_result_cast, etc. - - - -Destruct this object. Throws: This is declared noexcept (or throw() before C++11). -Assertion failed when checking contracts for constructors. Assertion failed when checking contracts for destructors . Assertion failed when checking contracts for functions (members or not, public or not). Indicate the kind of operation where the contract assertion failed. This is passed as a parameter to the assertion failure handler functions. For example, it might be necessary to know in which operation an assertion failed to make sure exceptions are never thrown from destructors, not even when contract failure handlers are programmed by users to throw exceptions instead of terminating the program.See Also: Throw on Failure - - -Type of assertion failure handler functions (with from parameter). Assertion failure handler functions specified by this type must be functors returning void and taking a single parameter of type boost::contract::from. For example, this is used to specify contract failure handlers for class invariants, preconditions, postconditions, and exception guarantees.See Also: Throw on Failure - -boost::function< void(from)> -Type of assertion failure handler functions (without from parameter). Assertion failure handler functions specified by this type must be nullary functors returning void. For example, this is used to specify contract failure handlers for implementation checks.See Also: Throw on Failure - -boost::function< void()> - - - - - - - - - - - - - - - - - - -failure_handler const &failure_handler const &New failure handler functor to set.Set failure handler for implementation checks. Set a new failure handler and returns it.Throws: This is declared noexcept (or throw() before C++11). - -See Also: Throw on Failure, Implementation Checks - -Same failure handler functor f passed as parameter (e.g., for concatenating function calls). - -failure_handlerReturn failure handler currently set for implementation checks. This is often called only internally by this library.Throws: This is declared noexcept (or throw() before C++11). -See Also: Throw on Failure, Implementation Checks - -A copy of the failure handler currently set. - -voidCall failure handler for implementation checks. This is often called only internally by this library.Throws: This can throw in case programmers specify a failure handler that throws exceptions on implementation check failures (not the default).See Also: Throw on Failure, Implementation Checks - - -from_failure_handler const &from_failure_handler const &New failure handler functor to set.Set failure handler for preconditions. Set a new failure handler and returns it.Throws: This is declared noexcept (or throw() before C++11). - -See Also: Throw on Failure, Preconditions - -Same failure handler functor f passed as parameter (e.g., for concatenating function calls). - -from_failure_handlerReturn failure handler currently set for preconditions. This is often called only internally by this library.Throws: This is declared noexcept (or throw() before C++11). -See Also: Throw on Failure, Preconditions - -A copy of the failure handler currently set. - -voidfromOperation that failed the contract assertion (when this function is called by this library, this parameter will never be from_destructor because destructors do not have preconditions).Call failure handler for preconditions. This is often called only internally by this library.Throws: This can throw in case programmers specify a failure handler that throws exceptions on contract assertion failures (not the default). -See Also: Throw on Failure, Preconditions - - -from_failure_handler const &from_failure_handler const &New failure handler functor to set.Set failure handler for postconditions. Set a new failure handler and returns it.Throws: This is declared noexcept (or throw() before C++11). - -See Also: Throw on Failure, Postconditions - -Same failure handler functor f passed as parameter (e.g., for concatenating function calls). - -from_failure_handlerReturn failure handler currently set for postconditions. This is often called only internally by this library.Throws: This is declared noexcept (or throw() before C++11). -See Also: Throw on Failure, Postconditions - -A copy of the failure handler currently set. - -voidfromOperation that failed the contract assertion (e.g., this might be useful to program failure handler functors that never throw from destructors, not even when they are programmed by users to throw exceptions instead of terminating the program).Call failure handler for postconditions. This is often called only internally by this library.Throws: This can throw in case programmers specify a failure handler that throws exceptions on contract assertion failures (not the default). -See Also: Throw on Failure, Postconditions - - -from_failure_handler const &from_failure_handler const &New failure handler functor to set.Set failure handler for exception guarantees. Set a new failure handler and returns it.Throws: This is declared noexcept (or throw() before C++11). - -See Also: Throw on Failure, Exception Guarantees - -Same failure handler functor f passed as parameter (e.g., for concatenating function calls). - -from_failure_handlerReturn failure handler currently set for exception guarantees. This is often called only internally by this library.Throws: This is declared noexcept (or throw() before C++11). -See Also: Throw on Failure, Exception Guarantees - -A copy of the failure handler currently set. - -voidfromOperation that failed the contract assertion.Call failure handler for exception guarantees. This is often called only internally by this library.Throws: This can throw in case programmers specify a failure handler that throws exceptions on contract assertion failures (not the default), however:When this failure handler is called there is already an active exception (the one that caused the exception guarantees to be checked in the first place). Therefore, programming this failure handler to throw yet another exception will force C++ to automatically terminate the program. - - -See Also: Throw on Failure, Exception Guarantees - - -from_failure_handler const &from_failure_handler const &New failure handler functor to set.Set failure handler for old values copied at body. Set a new failure handler and returns it.Throws: This is declared noexcept (or throw() before C++11). - -See Also: Throw on Failure, Old Values Copied at Body - -Same failure handler functor f passed as parameter (e.g., for concatenating function calls). - -from_failure_handlerReturn failure handler currently set for old values copied at body. This is often called only internally by this library.Throws: This is declared noexcept (or throw() before C++11). -See Also: Throw on Failure, Old Values Copied at Body - -A copy of the failure handler currently set. - -voidfromOperation that failed the old value copy (e.g., this might be useful to program failure handler functors that never throw from destructors, not even when they are programmed by users to throw exceptions instead of terminating the program).Call failure handler for old values copied at body. This is often called only internally by this library.Throws: This can throw in case programmers specify a failure handler that throws exceptions on contract assertion failures (not the default). -See Also: Throw on Failure, Old Values Copied at Body - - -from_failure_handler const &from_failure_handler const &New failure handler functor to set.Set failure handler for class invariants at entry. Set a new failure handler and returns it.Throws: This is declared noexcept (or throw() before C++11). - -See Also: Throw on Failure, Class Invariants, - Volatile Public Functions - -Same failure handler functor f passed as parameter (e.g., for concatenating function calls). - -from_failure_handlerReturn failure handler currently set for class invariants at entry. This is often called only internally by this library.Throws: This is declared noexcept (or throw() before C++11). -See Also: Throw on Failure, Class Invariants, - Volatile Public Functions - -A copy of the failure handler currently set. - -voidfromOperation that failed the contract assertion (e.g., this might be useful to program failure handler functors that never throw from destructors, not even when they are programmed by users to throw exceptions instead of terminating the program).Call failure handler for class invariants at entry. This is often called only internally by this library.Throws: This can throw in case programmers specify a failure handler that throws exceptions on contract assertion failures (not the default). -See Also: Throw on Failure, Class Invariants, - Volatile Public Functions - - -from_failure_handler const &from_failure_handler const &New failure handler functor to set.Set failure handler for class invariants at exit. Set a new failure handler and returns it.Throws: This is declared noexcept (or throw() before C++11). - -See Also: Throw on Failure, Class Invariants, - Volatile Public Functions - -Same failure handler functor f passed as parameter (e.g., for concatenating function calls). - -from_failure_handlerReturn failure handler currently set for class invariants at exit. This is often called only internally by this library.Throws: This is declared noexcept (or throw() before C++11). -See Also: Throw on Failure, Class Invariants, - Volatile Public Functions - -A copy of the failure handler currently set. - -voidfromOperation that failed the contract assertion (e.g., this might be useful to program failure handler functors that never throw from destructors, not even when they are programmed by users to throw exceptions instead of terminating the program).Call failure handler for class invariants at exit. This is often called only internally by this library.Throws: This can throw in case programmers specify a failure handler that throws exceptions on contract assertion failures (not the default). -See Also: Throw on Failure, Class Invariants, - Volatile Public Functions - - -from_failure_handler const &from_failure_handler const &New failure handler functor to set for both entry and exit invariants.Set failure handler for class invariants (at both entry and exit). This is provided for convenience and it is equivalent to call both boost::contract::set_entry_invariant_failure and boost::contract::set_exit_invariant_failure with the same functor parameter f.Throws: This is declared noexcept (or throw() before C++11). - -See Also: Throw on Failure, Class Invariants, - Volatile Public Functions - -Same failure handler functor f passed as parameter (e.g., for concatenating function calls). - - - -
-
-Specify preconditions, old values copied at body, postconditions, and exception guarantees. Preconditions, old values copied at body, postconditions, and exception guarantees are all optionals but, when they are specified, they need to be specified in that order. - -Allow to specify exception guarantees. Allow to specify the functor this library will call to check exception guarantees. This object is internally constructed by the library when users specify contracts calling boost::contract::function and similar functions (that is why this class does not have a public constructor).See Also: Exception Guarantees - - -specify_nothingF const &Nullary functor called by this library to check exception guarantees f(). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::except_failure). This functor should capture variables by (constant) references (to access the values they will have at function exit).Allow to specify exception guarantees. - -After exception guarantees have been specified, the object returned by this function does not allow to specify any additional contract. - - -Destruct this object. Throws: This is declared noexcept(false) since C++11 to allow users to program failure handlers that throw exceptions on contract assertion failures (not the default, see - Throw on Failure). -Used to prevent setting other contract conditions after exception guarantees. This class has no member function so it is used to prevent specifying additional functors to check any other contract. This object is internally constructed by the library when users specify contracts calling boost::contract::function and similar functions (that is why this class does not have a public constructor).See Also: Tutorial - - - -Destruct this object. Throws: This is declared noexcept(false) since C++11 to allow users to program failure handlers that throw exceptions on contract assertion failures (not the default, see - Throw on Failure). -Allow to specify old values copied at body, postconditions, and exception guarantees. Allow to specify functors this library will call to copy old values at body, check postconditions, and check exception guarantees. This object is internally constructed by the library when users specify contracts calling boost::contract::function and similar functions (that is why this class does not have a public constructor).See Also: Old Values Copied at Body, Postconditions, Exception Guarantees - - - -specify_postcondition_except< VirtualResult >F const &Nullary functor called by this library f() to assign old value copies just before the body is executed but after entry invariants (when they apply) and preconditions are checked. Old value pointers within this functor call are usually assigned using BOOST_CONTRACT_OLDOF. Any exception thrown by a call to this functor will result in this library calling boost::contract::old_failure (because old values could not be copied to check postconditions and exception guarantees). This functor should capture old value pointers by references so they can be assigned (all other variables needed to evaluate old value expressions can be captured by (constant) value, or better by (constant) reference to avoid extra copies).Allow to specify old values copied at body. It should often be sufficient to initialize old value pointers as soon as they are declared, without using this function (see Old Values Copied at Body). - -After old values copied at body have been specified, the object returned by this function allows to optionally specify postconditions and exception guarantees. - -specify_exceptF const &Functor called by this library to check postconditions f() or f(result). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::postcondition_failure). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor must be a nullary functor f() if VirtualResult is void, otherwise it must be a unary functor f(result) accepting the return value result as a parameter of type VirtualResult const& (to avoid extra copies of the return value, or of type VirtualResult or VirtualResult const if extra copies of the return value are irrelevant).Allow to specify postconditions. - -After postconditions have been specified, the object returned by this function allows to optionally specify exception guarantees. - -specify_nothingF const &Nullary functor called by this library to check exception guarantees f(). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::except_failure). This functor should capture variables by (constant) references (to access the values they will have at function exit).Allow to specify exception guarantees. - -After exception guarantees have been specified, the object returned by this function does not allow to specify any additional contract. - - -Destruct this object. Throws: This is declared noexcept(false) since C++11 to allow users to program failure handlers that throw exceptions on contract assertion failures (not the default, see - Throw on Failure). -Allow to specify postconditions or exception guarantees. Allow to specify functors this library will call to check postconditions or exception guarantees. This object is internally constructed by the library when users specify contracts calling boost::contract::function and similar functions (that is why this class does not have a public constructor).See Also: Postconditions, Exception Guarantees - - - -specify_exceptF const &Functor called by this library to check postconditions f() or f(result). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::postcondition_failure). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor must be a nullary functor f() if VirtualResult is void, otherwise it must be a unary functor f(result) accepting the return value result as a parameter of type VirtualResult const& (to avoid extra copies of the return value, or of type VirtualResult or VirtualResult const if extra copies of the return value are irrelevant).Allow to specify postconditions. - -After postconditions have been specified, the object returned by this function allows to optionally specify exception guarantees. - -specify_nothingF const &Nullary functor called by this library to check exception guarantees f(). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::except_failure). This functor should capture variables by (constant) references (to access the values they will have at function exit).Allow to specify exception guarantees. - -After exception guarantees have been specified, the object returned by this function does not allow to specify any additional contract. - - -Destruct this object. Throws: This is declared noexcept(false) since C++11 to allow users to program failure handlers that throw exceptions on contract assertion failures (not the default, see - Throw on Failure). -Allow to specify preconditions, old values copied at body, postconditions, and exception guarantees. Allow to specify functors this library will call to check preconditions, copy old values at body, check postconditions, and check exception guarantees. This object is internally constructed by the library when users specify contracts calling boost::contract::function and similar functions (that is why this class does not have a public constructor).See Also: Preconditions, Old Values Copied at Body, Postconditions, Exception Guarantees - - - -specify_old_postcondition_except< VirtualResult >F const &Nullary functor called by this library to check preconditions f(). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::precondition_failure). This functor should capture variables by (constant) value, or better by (constant) reference (to avoid extra copies).Allow to specify preconditions. - -After preconditions have been specified, the object returned by this function allows to optionally specify old values copied at body, postconditions, and exception guarantees. - -specify_postcondition_except< VirtualResult >F const &Nullary functor called by this library f() to assign old value copies just before the body is executed but after entry invariants (when they apply) and preconditions are checked. Old value pointers within this functor call are usually assigned using BOOST_CONTRACT_OLDOF. Any exception thrown by a call to this functor will result in this library calling boost::contract::old_failure (because old values could not be copied to check postconditions and exception guarantees). This functor should capture old value pointers by references so they can be assigned (all other variables needed to evaluate old value expressions can be captured by (constant) value, or better by (constant) reference to avoid extra copies).Allow to specify old values copied at body. It should often be sufficient to initialize old value pointers as soon as they are declared, without using this function (see Old Values Copied at Body). - -After old values copied at body have been specified, the object returned by this functions allows to optionally specify postconditions and exception guarantees. - -specify_exceptF const &Functor called by this library to check postconditions f() or f(result). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::postcondition_failure). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor must be a nullary functor f() if VirtualResult is void, otherwise it must be a unary functor f(result) accepting the return value result as a parameter of type VirtualResult const& (to avoid extra copies of the return value, or of type VirtualResult or VirtualResult const if extra copies of the return value are irrelevant).Allow to specify postconditions. - -After postconditions have been specified, the object returned by this function allows to optionally specify exception guarantees. - -specify_nothingF const &Nullary functor called by this library to check exception guarantees f(). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::except_failure). This functor should capture variables by (constant) references (to access the values they will have at function exit).Allow to specify exception guarantees. - -After exception guarantees have been specified, the object returned by this function does not allow to specify any additional contract. - - -Destruct this object. Throws: This is declared noexcept(false) since C++11 to allow users to program failure handlers that throw exceptions on contract assertion failures (not the default, see - Throw on Failure). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Handle virtual public functions with contracts (for subcontracting). - -Type of extra function parameter to handle contracts for virtual public functions (for subcontracting). Virtual public functions (and therefore also public function overrides) declaring contracts using this library must specify an extra function parameter at the very end of their parameter list. This parameter must be a pointer to this class and it must have default value 0 or nullptr (this extra parameter is often named v in this documentation, but any name can be used):class u { -public: - virtual void f(int x, boost::contract::virtual_* v = 0) { // Declare `v`. - ... // Contract declaration (which will use `v`) and function body. - } - - ... -}; -In practice this extra parameter does not alter the calling interface of the enclosing function declaring the contract because it is always the very last parameter and it has a default value (so it can always be omitted when users call the function). This extra parameter must be passed to boost::contract::public_function, BOOST_CONTRACT_OLDOF, and all other operations of this library that accept a pointer to boost::contract::virtual_. A part from that, this class is not intended to be directly used by programmers (and that is why this class does not have any public member and it is not copyable).See Also: Virtual Public Functions, - Public Function Overrides - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Program contracts for destructors. - - - - - - -specify_old_postcondition_exceptClass *The object this from the scope of the enclosing destructor declaring the contract. (Destructors check all class invariants, including static and volatile invariants, see - Class Invariants and - Volatile Public Functions).Program contracts for destructors. This is used to specify postconditions, exception guarantees, old value copies at body, and check class invariants for destructors (destructors cannot have preconditions, see Destructor Calls):class u { - friend class boost::contract::access; - - void invariant() const { // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - } - -public: - ~u() { - boost::contract::old_ptr<old_type> old_var; - boost::contract::check c = boost::contract::destructor(this) - // No `.precondition` (destructors have no preconditions). - .old([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(old_expr); - ... - }) - .postcondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .except([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; - - ... // Destructor body. - } - - ... -}; -For optimization, this can be omitted for destructors that do not have postconditions and exception guarantees, within classes that have no invariants.See Also: Destructors - - - - -The result of this function must be assigned to a variable of type boost::contract::check declared explicitly (i.e., without using C++11 auto declarations) and locally just before the code of the destructor body (otherwise this library will generate a run-time error, see BOOST_CONTRACT_ON_MISSING_CHECK_DECL). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Program contracts for (non-public) functions. - - - - - - - -specify_precondition_old_postcondition_exceptProgram contracts for non-member, private and protected functions. This is used to specify preconditions, postconditions, exception guarantees, and old value copies at body for non-member, private and protected functions (these functions never check class invariants, see Function Calls):void f(...) { - boost::contract::old_ptr<old_type> old_var; - boost::contract::check c = boost::contract::function() - .precondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .old([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(old_expr); - ... - }) - .postcondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .except([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; - - ... // Function body. -} -This can be used also to program contracts in implementation code for lambda functions, loops, and arbitrary blocks of code. For optimization, this can be omitted for code that does not have preconditions, postconditions, and exception guarantees.See Also: Non-Member Functions, - Private and Protected Functions, - Lambdas, Loops, Code Blocks - - -The result of this function must be assigned to a variable of type boost::contract::check declared explicitly (i.e., without using C++11 auto declarations) and locally just before the code of the function body (otherwise this library will generate a run-time error, see BOOST_CONTRACT_ON_MISSING_CHECK_DECL). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Handle old values. - -boost::is_copy_constructible< T >Trait to check if an old value type can be copied or not. By default, this unary boolean meta-function is equivalent to boost::is_copy_constructible<T> but programmers can chose to specialize it for user-defined types (in general some kind of specialization is also needed on compilers that do not support C++11, see boost::is_copy_constructible):class u; // Some user-defined type for which old values shall not be copied. - -namespace boost { namespace contract { - template<> // Specialization to not copy old values of type `u`. - struct is_old_value_copyable<u> : boost::false_type {}; -} } // namespace -A given old value type T is copied only if boost::contract::is_old_value_copyable<T>::value is true. A copyable old value type V is always copied using boost::contract::old_value_copy<V>. A non-copyable old value type W generates a compile-time error when boost::contract::old_ptr<W> is dereferenced, but instead leaves boost::contract::old_ptr_if_copyable<W> always null (without generating compile-time errors).See Also: - Old Value Requirements - -Convert old value copies into old value pointers. This class is usually only implicitly used by this library and it does not explicitly appear in user code (that is why this class does not have public constructors, etc.). -old_ptr_if_copyable< T >Convert this object to an actual old value pointer for which the old value type T might or not be copyable. For example, this is implicitly called when assigning or initializing old value pointers of type boost::contract::old_ptr_if_copyable. - -old_ptr< T >Convert this object to an actual old value pointer for which the old value type T must be copyable. For example, this is implicitly called when assigning or initializing old value pointers of type boost::contract::old_ptr. - - -Old value pointer that requires the pointed old value type to be copyable. This pointer can be set to point an actual old value copy using either BOOST_CONTRACT_OLDOF or boost::contract::make_old (that is why this class does not have public non-default constructors):class u { -public: - virtual void f(..., boost::contract::virtual_* v = 0) { - boost::contract::old_ptr<old_type> old_var = // For copyable `old_type`. - BOOST_CONTRACT_OLDOF(v, old_expr); - ... - } - - ... -}; -See Also: Old Values - - -Pointed old value type. T - -T const &Dereference this old value pointer. This will generate a run-time error if this pointer is null and a compile-time error if the pointed type T is not copyable (i.e., if boost::contract::is_old_value_copyable<T>::value is false). -The pointed old value. Contract assertions should not change the state of the program so this member function is const and it returns the old value as a reference to a constant object (see - Constant Correctness). - -T const *Structure-dereference this old value pointer. This will generate a compile-time error if the pointed type T is not copyable (i.e., if boost::contract::is_old_value_copyable<T>::value is false). -A pointer to the old value (null if this old value pointer is null). Contract assertions should not change the state of the program so this member function is const and it returns the old value as a pointer to a constant object (see - Constant Correctness). - -boolQuery if this old value pointer is null or not (safe-bool operator). (This is implemented using safe-bool emulation on compilers that do not support C++11 explicit type conversion operators.) -True if this pointer is not null, false otherwise. - - -Construct this old value pointer as null. -Old value pointer that does not require the pointed old value type to be copyable. This pointer can be set to point to an actual old value copy using either BOOST_CONTRACT_OLDOF or boost::contract::make_old:template<typename T> // Type `T` might or not be copyable. -class u { -public: - virtual void f(..., boost::contract::virtual_* v = 0) { - boost::contract::old_ptr_if_copyable<T> old_var = - BOOST_CONTRACT_OLDOF(v, old_expr); - ... - if(old_var) ... // Always null for non-copyable types. - ... - } - - ... -}; -See Also: - Old Value Requirements - - -Pointed old value type. T - -T const &Dereference this old value pointer. This will generate a run-time error if this pointer is null, but no compile-time error is generated if the pointed type T is not copyable (i.e., if boost::contract::is_old_value_copyable<T>::value is false). -The pointed old value. Contract assertions should not change the state of the program so this member function is const and it returns the old value as a reference to a constant object (see - Constant Correctness). - -T const *Structure-dereference this old value pointer. This will return null but will not generate a compile-time error if the pointed type T is not copyable (i.e., if boost::contract::is_old_value_copyable<T>::value is false). -A pointer to the old value (null if this old value pointer is null). Contract assertions should not change the state of the program so this member function is const and it returns the old value as a pointer to a constant object (see - Constant Correctness). - -boolQuery if this old value pointer is null or not (safe-bool operator). (This is implemented using safe-bool emulation on compilers that do not support C++11 explicit type conversion operators.) -True if this pointer is not null, false otherwise. - - -Construct this old value pointer as null. -old_ptr< T > const &Old value pointer that requires the old value type to be copyable. Construct this old value pointer from an old value pointer that requires the old value type to be copyable. Ownership of the pointed value object is transferred to this pointer. This constructor is implicitly called by this library when assigning an object of this type using BOOST_CONTRACT_OLDOF (this constructor is usually not explicitly called by user code). - -Convert user-specified expressions to old values. This class is usually only implicitly used by this library and it does not explicitly appear in user code.On older compilers that cannot correctly deduce the boost::contract::is_old_value_copyable trait used in the declaration of this class, programmers can manually specialize that trait to make sure that only old value types that are copyable are actually copied.See Also: - Old Value Requirements - - - -T const &Old value to be copied.typename boost::enable_if< boost::contract::is_old_value_copyable< T > >::type *0Construct this object from the specified old value when the old value type is copy constructible. The specified old value old is copied (one time only) using boost::contract::old_value_copy, in which case the related old value pointer will not be null (but no copy is made if postconditions and exception guarantees are not being checked, see BOOST_CONTRACT_NO_OLDS). - - -T const &Old value (that will not be copied in this case).typename boost::disable_if< boost::contract::is_old_value_copyable< T > >::type *0Construct this object from the specified old value when the old value type is not copyable. The specified old value old cannot be copied in this case so it is not copied and the related old value pointer will always be null (thus calls to this constructor have no effect and they will likely be optimized away by most compilers). - - -Trait to copy an old value. By default, the implementation of this trait uses T's copy constructor to make one single copy of the specified value. However, programmers can specialize this trait to copy old values using user-specific operations different from T's copy constructor. The default implementation of this trait is equivalent to:template<typename T> -class old_value_copy { -public: - explicit old_value_copy(T const& old) : - old_(old) // One single copy of value using T's copy constructor. - {} - - T const& old() const { return old_; } - -private: - T const old_; // The old value copy. -}; -This library will instantiate and use this trait only on old value types T that are copyable (i.e., for which boost::contract::is_old_value_copyable<T>::value is true).See Also: - Old Value Requirements - - -T const &Return a (constant) reference to the old value that was copied. Contract assertions should not change the state of the program so the old value copy is returned as const (see -Constant Correctness). - -T const &The old value to copy. Construct this object by making one single copy of the specified old value. This is the only operation within this library that actually copies old values. This ensures this library makes one and only one copy of an old value (if they actually need to be copied, see BOOST_CONTRACT_NO_OLDS). - - - - - - - - -old_valueReturn a "null" old value. The related old value pointer will also be null. This function is usually only called by the code expanded by BOOST_CONTRACT_OLDOF.See Also: No Macros - - -Null old value. - -old_pointerold_value const &Old value which is usually implicitly constructed from the user old value expression to be copied (use the ternary operator ?: to completely avoid to evaluate the old value expression when boost::contract::copy_old() is false).Make an old value pointer (but not for virtual public functions and public functions overrides). The related old value pointer will not be null if the specified old value was actually copied. This function is usually only called by code expanded by BOOST_CONTRACT_OLDOF(old_expr) as in:boost::contract::make_old(boost::contract::copy_old() ? old_expr : - boost::contract::null_old()) -See Also: No Macros - - - -Old value pointer (usually implicitly converted to either boost::contract::old_ptr or boost::contract::old_ptr_if_copyable in user code). - -old_pointervirtual_ *The trailing parameter of type boost::contract::virtual_* and default value 0 from the enclosing virtual or overriding public function declaring the contract. old_value const &Old value which is usually implicitly constructed from the user old value expression to be copied (use the ternary operator ?: to completely avoid to evaluate the old value expression when boost::contract::copy_old(v) is false).Make an old value pointer (for virtual public functions and public functions overrides). The related old value pointer will not be null if the specified old value was actually copied. This function is usually only called by code expanded by BOOST_CONTRACT_OLDOF(v, old_expr) as in:boost::contract::make_old(v, boost::contract::copy_old(v) ? old_expr : - boost::contract::null_old()) -See Also: No Macros - - - -Old value pointer (usually implicitly converted to either boost::contract::old_ptr or boost::contract::old_ptr_if_copyable in user code). - -boolQuery if old values need to be copied (but not for virtual public functions and public function overrides). For example, this function always returns false when both postconditions and exception guarantees are not being checked (see BOOST_CONTRACT_NO_OLDS). This function is usually only called by the code expanded by BOOST_CONTRACT_OLDOF.See Also: No Macros - - -True if old values need to be copied, false otherwise. - -boolvirtual_ *The trailing parameter of type boost::contract::virtual_* and default value 0 from the enclosing virtual or overriding public function declaring the contract.Query if old values need to be copied (for virtual public functions and public function overrides). For example, this function always returns false when both postconditions and exception guarantees are not being checked (see BOOST_CONTRACT_NO_OLDS). In addition, this function returns false when overridden functions are being called subsequent times by this library to support subcontracting. This function is usually only called by the code expanded by BOOST_CONTRACT_OLDOF.See Also: No Macros - - - -True if old values need to be copied, false otherwise. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Macro typically used to copy an old value expression and assign it to an old value pointer. The expression expanded by this macro should be assigned to an old value pointer of type boost::contract::old_ptr or boost::contract::old_ptr_if_copyable. This is an overloaded variadic macro and it can be used in the following different ways.1. From within virtual public functions and public functions overrides:BOOST_CONTRACT_OLDOF(v, old_expr) -2. From all other operations:BOOST_CONTRACT_OLDOF(old_expr) -Where: -v is the extra parameter of type boost::contract::virtual_* and default value 0 from the enclosing virtual public function or public function overrides declaring the contract. - -old_expr is the expression to be evaluated and copied into the old value pointer. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and BOOST_CONTRACT_OLDOF(v, (old_expr)) will always work.) - - -On compilers that do not support variadic macros, programmers can manually copy old value expressions without using this macro (see No Macros).See Also: Old Values - - -
-
-Handle public function overrides (for subcontracting). Name of the override type trait this macro will declare. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) Function name of the public function override. This macro is called just once even if the function name is overloaded (the same override type trait is used for all overloaded functions with the same name, see - Function Overloads). (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) Declare an override type trait with an arbitrary name. Declare the override type trait named type_name to pass as an explicit template parameter to boost::contract::public_function for public function overrides.See Also: Named Overrides - - - -Function name of the public function override. This macro is called just once even if the function name is overloaded (the same override type trait is used for all overloaded functions with the same name, see Function Overloads). (This is not a variadic macro parameter but it should never contain any comma because it is an identifier.) Declare an override type trait named override_func_name. Declare the override type trait named override_func_name to pass as an explicit template parameter to boost::contract::public_function for public function overrides. Use BOOST_CONTRACT_NAMED_OVERRIDE to generate an override type trait with a name different than override_func_name (usually not needed).See Also: - Public Function Overrides - - - -A comma separated list of one or more function names of public function overrides. (Each function name should never contain commas because it is an identifier.) Declare multiple override type traits at once naming them override_... (for convenience). This variadic macro is provided for convenience as BOOST_CONTRACT_OVERRIDES(f_1, f_2, ..., f_n) expands to code equivalent to:BOOST_CONTRACT_OVERRIDE(f_1) -BOOST_CONTRACT_OVERRIDE(f_2) -... -BOOST_CONTRACT_OVERRIDE(f_n) -On compilers that do not support variadic macros, the override type traits can be equivalently programmed one-by-one calling BOOST_CONTRACT_OVERRIDE for each function name as shown above.See Also: - Public Function Overrides - - - -
-
-Program contracts for public functions (including subcontracting). The different overloads handle public functions that are static, virtual void, virtual non-void, overriding void, and overriding non-void. - - - - - - - - - - - - - -specify_precondition_old_postcondition_exceptProgram contracts for static public functions. This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check static class invariants for static public functions:class u { - friend class boost::contract::access; - - static void static_invariant() { // Optional (as for non-static). - BOOST_CONTRACT_ASSERT(...); - ... - } - -public: - static void f(...) { - boost::contract::old_ptr<old_type> old_var; - boost::contract::check c = boost::contract::public_function<u>() - .precondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .old([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(old_expr); - ... - }) - .postcondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .except([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; - - ... // Function body. - } - - ... -}; -For optimization, this can be omitted for static public functions that do not have preconditions, postconditions and exception guarantees, within classes that have no static invariants.See Also: Static Public Functions - - - -The result of this function must be assigned to a variable of type boost::contract::check declared explicitly (i.e., without using C++11 auto declarations) and locally just before the code of the static public function body (otherwise this library will generate a run-time error, see BOOST_CONTRACT_ON_MISSING_CHECK_DECL). - -specify_precondition_old_postcondition_exceptClass *The object this from the scope of the enclosing public function declaring the contract. This object might be mutable, const, volatile, or const volatile depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see - Volatile Public Functions).Program contracts for public functions that are not static, not virtual, and do not not override. This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public functions that are not static, not virtual, and do not override:class u { - friend class boost::contract::access; - - void invariant() const { // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - } - -public: - void f(...) { - boost::contract::old_ptr<old_type> old_var; - boost::contract::check c = boost::contract::public_function(this) - .precondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .old([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(old_expr); - ... - }) - .postcondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .except([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; - - ... // Function body. - } - - ... -}; -For optimization, this can be omitted for public functions that do not have preconditions, postconditions and exception guarantees, within classes that have no invariants.See Also: Public Functions - - - - -The result of this function must be assigned to a variable of type boost::contract::check declared explicitly (i.e., without using C++11 auto declarations) and locally just before the code of the public function body (otherwise this library will generate a run-time error, see BOOST_CONTRACT_ON_MISSING_CHECK_DECL). - -specify_precondition_old_postcondition_exceptvirtual_ *The trailing parameter of type boost::contract::virtual_* and default value 0 from the enclosing virtual public function. Class *The object this from the scope of the enclosing virtual public function declaring the contract. This object might be mutable, const, volatile, or const volatile depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see - Volatile Public Functions).Program contracts for void virtual public functions that do not override. This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public functions that are virtual, do not override, and return void: class u { - friend class boost::contract::access; - - void invariant() const { // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - } - -public: - void f(..., boost::contract::virtual_* v = 0) { - boost::contract::old_ptr<old_type> old_var; - boost::contract::check c = boost::contract::public_function(v, this) - .precondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .old([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(v, old_expr); - ... - }) - .postcondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .except([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; - - ... // Function body. - } - - ... -}; -A virtual public function should always call boost::contract::public_function otherwise this library will not be able to correctly use it for subcontracting.See Also: Virtual Public Functions - - - - -The result of this function must be assigned to a variable of type boost::contract::check declared explicitly (i.e., without using C++11 auto declarations) and locally just before the code of the public function body (otherwise this library will generate a run-time error, see BOOST_CONTRACT_ON_MISSING_CHECK_DECL). - -specify_precondition_old_postcondition_except< VirtualResult >virtual_ *The trailing parameter of type boost::contract::virtual_* and default value 0 from the enclosing virtual public function. VirtualResult &A reference to the return value of the enclosing virtual public function declaring the contract. This is usually a local variable declared by the enclosing virtual public function just before the contract, but programmers must set it to the actual value being returned by the function at each return statement. Class *The object this from the scope of the enclosing virtual public function declaring the contract. This object might be mutable, const, volatile, or const volatile depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see - Volatile Public Functions).Program contracts for non-void virtual public functions that do not override. This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public functions that are virtual, do not override, and do not return void: class u { - friend class boost::contract::access; - - void invariant() const { // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - } - -public: - t f(..., boost::contract::virtual_* v = 0) { - t result; - boost::contract::old_ptr<old_type> old_var; - boost::contract::check c = boost::contract::public_function( - v, result, this) - .precondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .old([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(v, old_expr); - ... - }) - .postcondition([&] (t const& result) { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .except([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; - - ... // Function body (use `return result = return_expr`). - } - - ... -}; -A virtual public function should always call boost::contract::public_function otherwise this library will not be able to correctly use it for subcontracting.See Also: Virtual Public Functions - - - - -The result of this function must be assigned to a variable of type boost::contract::check declared explicitly (i.e., without using C++11 auto declarations) and locally just before the code of the public function body (otherwise this library will generate a run-time error, see BOOST_CONTRACT_ON_MISSING_CHECK_DECL). - -specify_precondition_old_postcondition_exceptvirtual_ *The trailing parameter of type boost::contract::virtual_* and default value 0 from the enclosing public function override. FA pointer to the enclosing public function override declaring the contract (but see - Function Overloads). Class *The object this from the scope of the enclosing public function override declaring the contract. This object might be mutable, const, volatile, or const volatile depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see - Volatile Public Functions). Args &...All arguments passed to the enclosing public function override declaring the contract (by reference and in the order they appear in the enclosing function declaration), but excluding the trailing argument v.Program contracts for void public functions overrides (virtual or not). This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public function overrides (virtual or not) that return void: class u - #define BASES private boost::contract::constructor_precondition<u>, \ - public b, private w - : BASES -{ - friend class boost::contract::access; - - typedef BOOST_CONTRACT_BASE_TYPES(BASES) base_types; - #undef BASES - - void invariant() const { // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - } - - BOOST_CONTRACT_OVERRIDES(f) - -public: - // Override from `b::f`. - void f(t_1 a_1, ..., t_n a_n, boost::contract::virtual_* v = 0) { - boost::contract::old_ptr<old_type> old_var; - boost::contract::check c = boost::contract::public_function< - override_f>(v, &u::f, this, a_1, ..., a_n) - .precondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .old([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(v, old_expr); - ... - }) - .postcondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .except([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; - - ... // Function body. - } - - ... -}; -A public function override should always call boost::contract::public_function otherwise this library will not be able to correctly use it for subcontracting.See Also: - Public Function Overrides - - - - -The result of this function must be assigned to a variable of type boost::contract::check declared explicitly (i.e., without using C++11 auto declarations) and locally just before the code of the public function body (otherwise this library will generate a run-time error, see BOOST_CONTRACT_ON_MISSING_CHECK_DECL). - -specify_precondition_old_postcondition_except< VirtualResult >virtual_ *The trailing parameter of type boost::contract::virtual_* and default value 0 from the enclosing public function override. VirtualResult &A reference to the return value of the enclosing public function override declaring the contract. This is usually a local variable declared by the enclosing public function override just before the contract, but programmers must set it to the actual value being returned by the function at each return statement. FA pointer to the enclosing public function override declaring the contract (but see - Function Overloads). Class *The object this from the scope of the enclosing public function override declaring the contract. This object might be mutable, const, volatile, or const volatile depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see - Volatile Public Functions). Args &...All arguments passed to the enclosing public function override declaring the contract (by reference and in the order they appear in the enclosing function declaration), but excluding the trailing argument v.Program contracts for non-void public functions overrides (virtual or not). This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public function overrides (virtual or not) that do not return void: class u - #define BASES private boost::contract::constructor_precondition<u>, \ - public b, private w - : BASES -{ - friend class boost::contract::access; - - typedef BOOST_CONTRACT_BASE_TYPES(BASES) base_types; - #undef BASES - - void invariant() const { // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - } - - BOOST_CONTRACT_OVERRIDES(f) - -public: - // Override from `b::f`. - t f(t_1 a_1, ..., t_n a_n, boost::contract::virtual_* v = 0) { - t result; - boost::contract::old_ptr<old_type> old_var; - boost::contract::check c = boost::contract::public_function< - override_f>(v, result, &u::f, this, a_1, ..., a_n) - .precondition([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .old([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(v, old_expr); - ... - }) - .postcondition([&] (t const& result) { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - .except([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; - - ... // Function body (use `return result = return_expr`). - } - - ... -}; -A public function override should always call boost::contract::public_function otherwise this library will not be able to correctly use it for subcontracting.See Also: - Public Function Overrides - - - - -The result of this function must be assigned to a variable of type boost::contract::check declared explicitly (i.e., without using C++11 auto declarations) and locally just before the code of the public function body (otherwise this library will generate a run-time error, see BOOST_CONTRACT_ON_MISSING_CHECK_DECL). - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Allow to disable contracts to completely remove their compile-time and run-time overhead. This header automatically includes all header files boost/contract/*.hpp necessary to use its macros.Almost all the macros defined in this header file are variadic macros. On compilers that do not support variadic macros, programmers can manually code #ifndef BOOST_CONTRACT_NO_... statements instead (see -Disable Contract Compilation). Program preconditions that can be completely disabled at compile-time. BOOST_CONTRACT_PRECONDITION(f) expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_PRECONDITIONS is defined):#ifndef BOOST_CONTRACT_NO_PRECONDITIONS - .precondition(f) -#endif -Where: -f is the nullay functor called by this library to check preconditions f(). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::precondition_failure). This functor should capture variables by (constant) value, or better by (constant) reference (to avoid extra copies). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - - -See Also: - Disable Contract Compilation, Preconditions - - -Program postconditions that can be completely disabled at compile-time. BOOST_CONTRACT_POSTCONDITION(f) expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_POSTCONDITIONS is defined):#ifndef BOOST_CONTRACT_NO_POSTCONDITIONS - .postcondition(f) -#endif -Where: -f is the functor called by this library to check postconditions f() or f(result). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::postcondition_failure). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor takes the return value (preferably by const&) result as its one single parameter f(result) but only for virtual public functions and public functions overrides, otherwise it takes no parameter f(). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - - -See Also: - Disable Contract Compilation, Postconditions - - -Program exception guarantees that can be completely disabled at compile-time. BOOST_CONTRACT_EXCEPT(f) expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_EXCEPTS is defined):#ifndef BOOST_CONTRACT_NO_EXCEPTS - .except(f) -#endif -Where: -f is the nullary functor called by this library to check exception guarantees f(). Assertions within this functor are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling boost::contract::except_failure). This functor should capture variables by (constant) references (to access the values they will have at function exit). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - - -See Also: - Disable Contract Compilation, Exception Guarantees - - -Program old value copies at body that can be completely disabled at compile-time. BOOST_CONTRACT_OLD(f) expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_OLDS is defined):#ifndef BOOST_CONTRACT_NO_OLDS - .old(f) -#endif -Where: -f is the nullary functor called by this library f() to assign old value copies just before the body is execute but after entry invariants (when they apply) and preconditions are checked. Old value pointers within this functor call are usually assigned using BOOST_CONTRACT_OLDOF. Any exception thrown by a call to this functor will result in this library calling boost::contract::old_failure (because old values could not be copied to check postconditions and exception guarantees). This functor should capture old value pointers by references so they can be assigned (all other variables needed to evaluate old value expressions can be captured by (constant) value, or better by (constant) reference to avoid extra copies). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - - -See Also: - Disable Contract Compilation, - Old Values Copied at Body - - -Program old values that can be completely disabled at compile-time for old value types that are required to be copyable. This is used to program old value copies for copyable types:class u { -public: - void f(...) { - BOOST_CONTRACT_OLD_PTR(old_type_a)(old_var_a); // Null... - BOOST_CONTRACT_OLD_PTR(old_type_b)(old_var_b, old_expr_b); // Set. - BOOST_CONTRACT_PUBLIC_FUNCTION(this) - ... - BOOST_CONTRACT_OLD([&] { - old_var_a = BOOST_CONTRACT_OLDOF(old_expr_a); // ...set. - ... - }) - ... - ; - - ... // Function body. - } - - virtual void g(..., boost::contract::virtual_* v = 0) { - BOOST_CONTRACT_OLD_PTR(old_type_a)(old_var_a); // No `v` - BOOST_CONTRACT_OLD_PTR(old_type_b)(v, old_var_b, old_expr_b); // `v` - BOOST_CONTRACT_PUBLIC_FUNCTION(v, this) - ... - BOOST_CONTRACT_OLD([&] { - old_var_a = BOOST_CONTRACT_OLDOF(v, old_expr_a); // `v` - ... - }) - ... - ; - - ... // Function body. - } - - ... -}; -This is an overloaded variadic macro and it can be used in the following different ways (note that no code is generated when BOOST_CONTRACT_NO_OLDS is defined).1. BOOST_CONTRACT_OLD_PTR(old_type)(old_var) expands to code equivalent to the following (this leaves the old value pointer null):#ifndef BOOST_CONTRACT_NO_OLDS - // This declaration does not need to use `v`. - boost::contract::old_ptr<old_type> old_var -#endif -2. BOOST_CONTRACT_OLD_PTR(old_type)(old_var, old_expr) expands to code equivalent to the following (this initializes the pointer to the old value copy, but not to be used for virtual public functions and public function overrides):#ifndef BOOST_CONTRACT_NO_OLDS - boost::contract::old_ptr<old_type> old_var = - BOOST_CONTRACT_OLDOF(old_expr) -#endif -3. BOOST_CONTRACT_OLD_PTR(old_type)(v, old_var, old_expr) expands to code equivalent to the following (this initializes the pointer to the old value copy for virtual public functions and public function overrides):#ifndef BOOST_CONTRACT_NO_OLDS - boost::contract::old_ptr<old_type> old_var = - BOOST_CONTRACT_OLDOF(v, old_expr) -#endif -Where: -old_type is the type of the pointed old value. This type must be copyable (i.e., boost::contract::is_old_value_copyable<old_type>::value is true), otherwise this pointer will always be null and this library will generate a compile-time error when the pointer is dereferenced (see BOOST_CONTRACT_OLD_PTR_IF_COPYABLE). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) (Rationale: Template parameters like this one are specified to this library macro interface using their own set of parenthesis SOME_MACRO(template_params)(other_params).) - -v is the extra training parameter of type boost::contract::virtual_* and default value 0 from the enclosing virtual public function or public function override declaring the contract. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) - -old_var is the name of the old value pointer variable. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) - -old_expr is the expression to be evaluated and copied in the old value pointer. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and BOOST_CONTRACT_OLD_PTR(old_type)(v, old_var, (old_expr)) will always work.) - - -See Also: - Disable Contract Compilation, Old Values - - -Program old values that can be completely disabled at compile-time for old value types that are not required to be copyable. This is used to program old value copies for types that might or might not be copyable:template<typename T> // Type `T` might or not be copyable. -class u { -public: - void f(...) { - BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(old_type_a)(old_var_a); - BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(old_type_b)(old_var_b, - old_expr_b); - BOOST_CONTRACT_PUBLIC_FUNCTION(this) - ... - BOOST_CONTRACT_OLD([&] { - old_var_a = BOOST_CONTRACT_OLDOF(old_expr_a); - ... - }) - ... // In postconditions or exception guarantees: - if(old_var_a) ... // Always null for non-copyable types. - if(old_var_b) ... // Always null for non-copyable types. - ... - ; - - ... // Function body. - } - - virtual void g(..., boost::contract::virtual_* v = 0) { - BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(old_type_a)(old_var_a); - BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(old_type_b)(v, old_var_b, - old_expr_b); - BOOST_CONTRACT_PUBLIC_FUNCTION(v, this) - ... - BOOST_CONTRACT_OLD([&] { - old_var_a = BOOST_CONTRACT_OLDOF(v, old_expr_a); - ... - }) - ... // In postconditions or exception guarantees: - if(old_var_a) ... // Always null for non-copyable types. - if(old_var_b) ... // Always null for non-copyable types. - ... - ; - - ... // Function body. - } - - ... -}; -This is an overloaded variadic macro and it can be used in the following different ways (note that no code is generated when BOOST_CONTRACT_NO_OLDS is defined).1. BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(old_type)(old_var) expands to code equivalent to the following (this leaves the old value pointer null):#ifndef BOOST_CONTRACT_NO_OLDS - // This declaration does not need to use `v`. - boost::contract::old_ptr_if_copyable<old_type> old_var -#endif -2. BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(old_type)(old_var, old_expr) expands to code equivalent to the following (this initializes the pointer to the old value copy, but not to be used for virtual public functions and public function overrides):#ifndef BOOST_CONTRACT_NO_OLDS - boost::contract::old_ptr_if_copyable<old_type> old_var = - BOOST_CONTRACT_OLDOF(old_expr) -#endif -3. BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(old_type)(v, old_var, old_expr) expands to code equivalent to the following (this initializes the pointer to the old value copy for virtual public functions and public function overrides):#ifndef BOOST_CONTRACT_NO_OLDS - boost::contract::old_ptr_if_copyable<old_type> old_var = - BOOST_CONTRACT_OLDOF(v, old_expr) -#endif -Where: -old_type is the type of the pointed old value. If this type is not copyable (i.e., boost::contract::is_old_value_copyable<old_type>::value is false), this pointer will always be null, but this library will not generate a compile-time error when this pointer is dereferenced (see BOOST_CONTRACT_OLD_PTR). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - -v is the extra trailing parameter of type boost::contract::virtual_* and default value 0 from the enclosing virtual public function or public function override declaring the contract. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) - -old_var is the name of the old value pointer variable. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) - -old_expr is the expression to be evaluated and copied in the old value pointer. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(old_type)(v, old_var, (old_expr)) will always work.) - - -See Also: - Disable Contract Compilation, - Old Value Requirements - - -Program (constant) class invariants that can be completely disabled at compile-time. BOOST_CONTRACT_INVARIANT({ ... }) expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_INVARIANTS is defined):#ifndef BOOST_CONTRACT_NO_INVARIANTS - void BOOST_CONTRACT_INVARIANT_FUNC() const { - ... - } -#endif -Where: -{ ... } is the definition of the function that checks class invariants for public functions that are not static and not volatile (see BOOST_CONTRACT_STATIC_INVARIANT and BOOST_CONTRACT_INVARIANT_VOLATILE). The curly parenthesis are mandatory (rationale: this is so the syntax of this macro resembles mote the syntax of the lambda functions usually used to specify preconditions, etc.). Assertions within this function are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this function indicates a contract assertion failure (and will result in this library calling either boost::contract::entry_invariant_failure or boost::contract::exit_invariant_failure). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - - -See Also: - Disable Contract Compilation, Class Invariants - - -Program volatile class invariants that can be completely disabled at compile-time. BOOST_CONTRACT_INVARIANT_VOLATILE({ ... }) expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_INVARIANTS is defined):#ifndef BOOST_CONTRACT_NO_INVARIANTS - void BOOST_CONTRACT_INVARIANT_FUNC() const volatile { - ... - } -#endif -Where: -{ ... } is the definition of the function that checks class invariants for volatile public functions (see BOOST_CONTRACT_INVARIANT and BOOST_CONTRACT_STATIC_INVARIANT). The curly parenthesis are mandatory. Assertions within this function are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this function indicates a contract assertion failure (and will result in this library calling either boost::contract::entry_invariant_failure or boost::contract::exit_invariant_failure). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - - -See Also: - Disable Contract Compilation, - Volatile Public Functions - - -Program static class invariants that can be completely disabled at compile-time. BOOST_CONTRACT_STATIC_INVARIANT({ ... }) expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_INVARIANTS is defined):#ifndef BOOST_CONTRACT_NO_INVARIANTS - static void BOOST_CONTRACT_STATIC_INVARIANT_FUNC() { - ... - } -#endif -Where: -{ ... } is the definition of the function that checks class invariants for static public functions (see BOOST_CONTRACT_INVARIANT and BOOST_CONTRACT_INVARIANT_VOLATILE). The curly parenthesis are mandatory. Assertions within this function are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this function indicates a contract assertion failure (and will result in this library calling either boost::contract::entry_invariant_failure or boost::contract::exit_invariant_failure). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - - -See Also: - Disable Contract Compilation, Class Invariants - - -Program contracts that can be completely disabled at compile-time for constructors. This is used together with BOOST_CONTRACT_POSTCONDITION, BOOST_CONTRACT_EXCEPT, and BOOST_CONTRACT_OLD to specify postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for constructors (see BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION to specify preconditions for constructors):class u { - friend class boost::contract::access; - - BOOST_CONTRACT_INVARIANT({ // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - }) - -public: - u(...) { - BOOST_CONTRACT_OLD_PTR(old_type)(old_var); - BOOST_CONTRACT_CONSTRUCTOR(this) - // No `PRECONDITION` (use `CONSTRUCTOR_PRECONDITION` if needed). - BOOST_CONTRACT_OLD([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(old_epxr); - ... - }) - BOOST_CONTRACT_POSTCONDITION([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - BOOST_CONTRACT_EXCEPT([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; // Trailing `;` is required. - - ... // Constructor body. - } - - ... -}; -For optimization, this can be omitted for constructors that do not have postconditions and exception guarantees, within classes that have no invariants.BOOST_CONTRACT_CONSTRUCTOR(obj) expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_CONSTRUCTORS is defined):#ifndef BOOST_CONTRACT_NO_CONSTRUCTORS - boost::contract::check internal_var = - boost::contract::constructor(obj) -#endif -Where: -obj is the object this from the scope of the enclosing constructor declaring the contract. Constructors check all class invariants, including static and volatile invariants (see BOOST_CONTRACT_INVARIANT, BOOST_CONTRACT_STATIC_INVARIANT, and BOOST_CONTRACT_INVARIANT_VOLATILE). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - -internal_var is a variable name internally generated by this library (this name is unique but only on different line numbers so this macro cannot be expanded multiple times on the same line). - - -See Also: - Disable Contract Compilation, Constructors - - -Program preconditions that can be disabled at compile-time for constructors. This is used together with BOOST_CONTRACT_CONSTRUCTOR to specify contracts for constructors. Constructors that do not have preconditions do not use this macro. When at least one of the class constructors uses this macro, boost::contract::constructor_precondition must be the first and private base of the class declaring the constructor for which preconditions are programmed:class u - #define BASES private boost::contract::constructor_precondition<u>, \ - public b - : BASES -{ - friend class boost::contract::access; - - typedef BOOST_CONTRACT_BASE_TYPES(BASES) base_types; - #undef BASES - - ... - -public: - explicit u(unsigned x) : - BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION(u)([&] { - BOOST_CONTRACT_ASSERT(x != 0); - }), - b(1 / x) - { - ... - } - - ... -}; -BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION(class_type)(f) expands to code equivalent to the following (note that when BOOST_CONTRACT_NO_PRECONDITIONS is defined, this macro trivially expands to a default constructor call that is internally implemented to do nothing so this should have minimal to no overhead):// Guarded only by NO_PRECONDITIONS (and not also by NO_CONSTRUCTORS) -// because for constructor's preconditions (not for postconditions, etc.). -#ifndef BOOST_CONTRACT_NO_PRECONDITIONS - boost::contract::constructor_precondition<class_type>(f) -#else // No-op call (likely optimized away, minimal to no overhead). - boost::contract::constructor_precondition<class_type>() -#endif -Where: -class_type is the type of the class containing the constructor for which preconditions are being programmed. (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - -f is the nullary functor called by this library to check constructor preconditions f(). Assertions within this functor call are usually programmed using BOOST_CONTRACT_ASSERT, but any exception thrown by a call to this functor indicates a contract failure (and will result in this library calling boost::contract::precondition_failure). This functor should capture variables by (constant) value, or better by (constant) reference to avoid extra copies. (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - - -See Also: - Disable Contract Compilation, Constructors - - -Program contracts that can be completely disabled at compile-time for destructors. This is used together with BOOST_CONTRACT_POSTCONDITION, BOOST_CONTRACT_EXCEPT, and BOOST_CONTRACT_OLD to specify postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for destructors (destructors cannot have preconditions, see Destructor Calls):class u { - friend class boost::contract::access; - - BOOST_CONTRACT_INVARIANT({ // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - }) - -public: - ~u() { - BOOST_CONTRACT_OLD_PTR(old_type)(old_var); - BOOST_CONTRACT_DESTRUCTOR(this) - // No `PRECONDITION` (destructors have no preconditions). - BOOST_CONTRACT_OLD([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(old_expr); - ... - }) - BOOST_CONTRACT_POSTCONDITION([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - BOOST_CONTRACT_EXCEPT([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; // Trailing `;` is required. - - ... // Destructor body. - } - - ... -}; -For optimization, this can be omitted for destructors that do not have postconditions and exception guarantees, within classes that have no invariants.BOOST_CONTRACT_DESTRUCTOR(obj) expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_DESTRUCTORS is defined):#ifndef BOOST_CONTRACT_NO_DESTRUCTORS - boost::contract::check internal_var = - boost::contract::destructor(obj) -#endif -Where: -obj is the object this from the scope of the enclosing destructor declaring the contract. Destructors check all class invariants, including static and volatile invariants (see - Class Invariants and - Volatile Public Functions). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - -internal_var is a variable name internally generated by this library (this name is unique but only on different line numbers so this macro cannot be expanded multiple times on the same line). - - -See Also: - Disable Contract Compilation, Destructors - - -Program contracts that can be completely disabled at compile-time for (non-public) functions. This is used together with BOOST_CONTRACT_PRECONDITION, BOOST_CONTRACT_POSTCONDITION, BOOST_CONTRACT_EXCEPT, and BOOST_CONTRACT_OLD to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for (non-public) functions:void f(...) { - BOOST_CONTRACT_OLD_PTR(old_type)(old_var); - BOOST_CONTRACT_FUNCTION() - BOOST_CONTRACT_PRECONDITION([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - BOOST_CONTRACT_OLD([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(old_expr); - ... - }) - BOOST_CONTRACT_POSTCONDITION([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - BOOST_CONTRACT_EXCEPT([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; // Trailing `;` is required. - - ... // Function body. -} -This can be used to program contracts for non-member functions but also for private and protected functions, lambda functions, loops, arbitrary blocks of code, etc. For optimization, this can be omitted for code that does not have preconditions, postconditions, and exception guarantees.BOOST_CONTRACT_FUNCTION() expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_FUNCTIONS is defined):#ifndef BOOST_CONTRACT_NO_FUNCTIONS - boost::contract::check internal_var = - boost::contract::function() -#endif -Where: -internal_var is a variable name internally generated by this library (this name is unique but only on different line numbers so this macro cannot be expanded multiple times on the same line). - - -See Also: - Disable Contract Compilation, Non-Member Functions, - Private and Protected Functions, - Lambdas, Loops, Code Blocks - - -Program contracts that can be completely disabled at compile-time for static public functions. This is used together with BOOST_CONTRACT_PRECONDITION, BOOST_CONTRACT_POSTCONDITION, BOOST_CONTRACT_EXCEPT, and BOOST_CONTRACT_OLD to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for static public functions:class u { - friend class boost::contract::access; - - BOOST_CONTRACT_STATIC_INVARIANT({ // Optional (as for non-static). - BOOST_CONTRACT_ASSERT(...); - ... - }) - -public: - static void f(...) { - BOOST_CONTRACT_OLD_PTR(old_type)(old_var); - BOOST_CONTRACT_PUBLIC_FUNCTION(u) - BOOST_CONTRACT_PRECONDITION([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - BOOST_CONTRACT_OLD([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(old_expr); - ... - }) - BOOST_CONTRACT_POSTCONDITION([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - BOOST_CONTRACT_EXCEPT([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; // Trailing `;` is required. - - ... // Function body. - } - - ... -}; -For optimization, this can be omitted for static public functions that do not have preconditions, postconditions and exception guarantees, within classes that have no static invariants.BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION(class_type) expands to code equivalent to the following (note that no code is generated when BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS is defined):#ifndef BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS - boost::contract::check internal_var = - boost::contract::public_function<class_type>() -#endif -Where: -class_type is the type of the class containing the static public function declaring the contract. (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) - -internal_var is a variable name internally generated by this library (this name is unique but only on different line numbers so this macro cannot be expanded multiple times on the same line). - - -See Also: - Disable Contract Compilation, Static Public Functions - - -Program contracts that can be completely disabled at compile-time for non-static public functions that do not override. This is used together with BOOST_CONTRACT_PRECONDITION, BOOST_CONTRACT_POSTCONDITION, BOOST_CONTRACT_EXCEPT, and BOOST_CONTRACT_OLD to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for non-static public functions (virtual or not, void or not) that do not override:class u { - friend class boost::contract::access; - - BOOST_CONTRACT_INVARIANT({ // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - }) - -public: - // Non-virtual (same if void). - t f(...) { - t result; - BOOST_CONTRACT_OLD_PTR(old_type)(old_var); - BOOST_CONTRACT_PUBLIC_FUNCTION(this) - BOOST_CONTRACT_PRECONDITION([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - BOOST_CONTRACT_OLD([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(old_expr); - ... - }) - BOOST_CONTRACT_POSTCONDITION([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - BOOST_CONTRACT_EXCEPT([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; // Trailing `;` is required. - - ... // Function body (use `return result = return_expr`). - } - - // Virtual and void. - virtual void g(..., boost::contract::virtual_* v = 0) { - BOOST_CONTRACT_OLD_PTR(old_type)(old_var); - BOOST_CONTRACT_PUBLIC_FUNCTION(v, this) - ... - BOOST_CONTRACT_OLD([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(v, old_expr); - ... - }) - ... - ; // Trailing `;` is required. - - ... // Function body. - } - - // Virtual and non-void. - virtual t h(..., boost::contract::virtual_* v = 0) { - t result; - BOOST_CONTRACT_OLD_PTR(old_type)(old_var); - BOOST_CONTRACT_PUBLIC_FUNCTION(v, result, this) - ... - BOOST_CONTRACT_OLD([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(v, old_expr); - ... - }) - BOOST_CONTRACT_POSTCONDITION([&] (t const& result) { // Optional - BOOST_CONTRACT_ASSERT(...); - ... - }) - ... - ; // Trailing `;` is required. - - ... // Function body (use `return result = return_expr`). - } - - ... -}; -For optimization, this can be omitted for non-virtual public functions that do not have preconditions, postconditions and exception guarantees, within classes that have no invariants. Virtual public functions should always use BOOST_CONTRACT_PUBLIC_FUNCTION otherwise this library will not be able to correctly use them for subcontracting.This is an overloaded variadic macro and it can be used in the following different ways (note that no code is generated when BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS is defined).1. BOOST_CONTRACT_PUBLIC_FUNCTION(obj) expands to code equivalent to the following (for non-virtual public functions that are not static and do not override, returning void or not):#ifndef BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS - boost::contract::check internal_var = - boost::contract::public_function(obj) -#endif -2. BOOST_CONTRACT_PUBLIC_FUNCTION(v, obj) expands to code equivalent to the following (for virtual public functions that do not override, returning void):#ifndef BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS - boost::contract::check internal_var = - boost::contract::public_function(v, obj) -#endif -3. BOOST_CONTRACT_PUBLIC_FUNCTION(v, r, obj) expands to code equivalent to the following (for virtual public functions that do not override, not returning void):#ifndef BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS - boost::contract::check internal_var = - boost::contract::public_function(v, r, obj) -#endif -Where (these are all variadic macro parameters so they can contain commas not protected by round parenthesis): -v is the extra parameter of type boost::contract::virtual_* and default value 0 from the enclosing virtual public function declaring the contract. - -r is a reference to the return value of the enclosing virtual public function declaring the contract. This is usually a local variable declared by the enclosing virtual public function just before the contract, but programmers must set it to the actual value being returned by the function at each return statement. - -obj is the object this from the scope of the enclosing public function declaring the contract. This object might be mutable, const, volatile, or const volatile depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see - Volatile Public Functions). - -internal_var is a variable name internally generated by this library (this name is unique but only on different line numbers so this macro cannot be expanded multiple times on the same line). - - -See Also: - Disable Contract Compilation, Public Functions, - Virtual Public Functions - - -Program contracts that can be completely disabled at compile-time for public function overrides. This is used together with BOOST_CONTRACT_PRECONDITION, BOOST_CONTRACT_POSTCONDITION, BOOST_CONTRACT_EXCEPT, and BOOST_CONTRACT_OLD to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for public function overrides (virtual or not):class u - #define BASES private boost::contract::constructor_precondition<u>, \ - public b, private w - : BASES -{ - friend class boost::contract::access; - - typedef BOOST_CONTRACT_BASE_TYPES(BASES) base_types; - #undef BASES - - BOOST_CONTRACT_INVARIANT({ // Optional (as for static and volatile). - BOOST_CONTRACT_ASSERT(...); - ... - }) - - BOOST_CONTRACT_OVERRIDES(f, g) - -public: - // Override from `b::f`, and void. - void f(t_1 a_1, ..., t_n a_n, boost::contract::virtual_* v = 0) { - BOOST_CONTRACT_OLD_PTR(old_type)(old_var); - BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE(override_f)( - v, &u::f, this, a_1, ..., a_n) - BOOST_CONTRACT_PRECONDITION([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - BOOST_CONTRACT_OLD([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(v, old_expr); - ... - }) - BOOST_CONTRACT_POSTCONDITION([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - BOOST_CONTRACT_EXCEPT([&] { // Optional. - BOOST_CONTRACT_ASSERT(...); - ... - }) - ; // Trailing `;` is required. - - ... // Function body. - } - - // Override from `b::g`, and void. - t g(t_1 a_1, ..., t_n a_n, boost::contract::virtual_* v = 0) { - t result; - BOOST_CONTRACT_OLD_PTR(old_type)(old_var); - BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE(override_g)( - v, result, &u::g, this, a_1, ..., a_n) - ... - BOOST_CONTRACT_OLD([&] { // Optional. - old_var = BOOST_CONTRACT_OLDOF(v, old_expr); - ... - }) - BOOST_CONTRACT_POSTCONDITION([&] (t const& result) { // Optional - BOOST_CONTRACT_ASSERT(...); - ... - }) - ... - ; // Trailing `;` is required. - - ... // Function body (use `return result = return_expr`). - } - - ... -}; -Public function overrides should always use BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE otherwise this library will not be able to correctly use it for subcontracting.This is an overloaded variadic macro and it can be used in the following different ways (note that no code is generated when BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS is defined).1. BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE(override_type)(v, f, obj, ...) expands to code equivalent to the following (for public function overrides that return void):#ifndef BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS - boost::contract::check internal_var = boost::contract:: - public_function<override_type>(v, f, obj, ...) -#endif -2. BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE(override_type)(v, r, f, obj, ...) expands to code equivalent to the following (for public function overrides that do not return void):#ifndef BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS - boost::contract::check internal_var = boost::contract:: - public_function<override_type>(v, r, f, obj, ...) -#endif -Where (these are all variadic macro parameters so they can contain commas not protected by round parenthesis): -override_type is the type override_function-name declared using the BOOST_CONTRACT_OVERRIDE or related macros. - -v is the extra parameter of type boost::contract::virtual_* and default value 0 from the enclosing virtual public function declaring the contract. - -r is a reference to the return value of the enclosing virtual public function declaring the contract. This is usually a local variable declared by the enclosing virtual public function just before the contract, but programmers must set it to the actual value being returned by the function at each return statement. - -f is a pointer to the enclosing public function override declaring the contract. - -obj is the object this from the scope of the enclosing public function declaring the contract. This object might be mutable, const, volatile, or const volatile depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see - Volatile Public Functions). - -... is a variadic macro parameter listing all the arguments passed to the enclosing public function override declaring the contract (by reference and in the order they appear in the enclosing function declaration), but excluding the trailing argument v. - -internal_var is a variable name internally generated by this library (this name is unique but only on different line numbers so this macro cannot be expanded multiple times on the same line). - - -See Also: - Disable Contract Compilation, - Public Function Overrides - - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/core/doc/ref_reference.xml boost1.81-1.81.0/libs/core/doc/ref_reference.xml --- boost1.81-1.81.0/libs/core/doc/ref_reference.xml 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/core/doc/ref_reference.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ - -
- -Determine if a type T is an instantiation of reference_wrapper. The value static constant will be true if the type T is a specialization of reference_wrapper. -boolvaluefalse - -Contains a reference to an object of type T. reference_wrapper is primarily used to "feed" references to function templates (algorithms) that take their parameter by value. It provides an implicit conversion to T&, which usually allows the function templates to work on references unmodified. Type T. T - -T & -Does not throw. - -The stored reference. - -T & -Does not throw. - -The stored reference. - -T * -Does not throw. - -A pointer to the object referenced by the stored reference. - - -T &Constructs a reference_wrapper object that stores a reference to t.Does not throw. - - -T &&Construction from a temporary object is disabled. - - -reference_wrapper< Y >unspecifiedunspecifiedConstructs a reference_wrapper object that stores the reference stored in the compatible reference_wrapper r.Only enabled when Y* is convertible to T*. - -Does not throw. - - -Find the type in a reference_wrapper. The typedef type is T::type if T is a reference_wrapper, T otherwise. T -reference_wrapper< T > constT & -Does not throw. - -reference_wrapper<T>(t) - -reference_wrapper< T const > constT const & -Does not throw. - -reference_wrapper<T const>(t) - -voidT const &&Construction from a temporary object is disabled. - - -voidT const &&Construction from a temporary object is disabled. - - -unwrap_reference< T >::type &T & -Does not throw. - -unwrap_reference<T>::type&(t) - - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/core/swap.html boost1.81-1.81.0/libs/core/swap.html --- boost1.81-1.81.0/libs/core/swap.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/core/swap.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ - - - -Boost.Core - - - - - -

- Automatic redirection failed, please go to - doc/html/core/swap.html -

-

- © 2014 Peter Dimov
- © 2014 Glen Fernandes
- © 2014 Andrey Semashev -

- - diff -Nru boost1.81-1.81.0/libs/crc/crc.html boost1.81-1.81.0/libs/crc/crc.html --- boost1.81-1.81.0/libs/crc/crc.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/crc/crc.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,632 +0,0 @@ - - - - -Boost CRC Library Documentation - - - - -

boost.png (6897 bytes)Header <boost/crc.hpp>

- -

The header <boost/crc.hpp> supplies two -class templates in namespace boost. These templates define -objects that can compute the CRC, or cyclic redundancy code -(or check), of a given stream of data. The header also supplies -function templates to compute a CRC in one step.

- -

Contents

- -
    -
  1. Contents
  2. -
  3. Header Synopsis
  4. -
  5. Rationale
  6. -
  7. Background -
  8. -
  9. Theoretical CRC Computer
  10. -
  11. Optimized CRC Computer
  12. -
  13. Computer Usage
  14. -
  15. CRC Function
  16. -
  17. Augmented-CRC Function
  18. -
  19. Pre-Defined CRC Samples
  20. -
  21. References
  22. -
  23. Credits -
  24. -
- -

Header Synopsis

- -
#include <boost/integer.hpp>  // for boost::uint_t
-#include <cstddef>            // for std::size_t
-
-namespace boost
-{
-
-template < std::size_t Bits >
-    class crc_basic;
-
-template < std::size_t Bits, impl_def TruncPoly = 0u,
-           impl_def InitRem = 0u,
-           impl_def FinalXor = 0u, bool ReflectIn = false,
-           bool ReflectRem = false >
-    class crc_optimal;
-
-template < std::size_t Bits, impl_def TruncPoly,
-           impl_def InitRem, impl_def FinalXor,
-           bool ReflectIn, bool ReflectRem >
-    typename uint_t<Bits>::fast  crc( void const *buffer,
-     std::size_t byte_count );
-
-template < std::size_t Bits, impl_def TruncPoly >
-    typename uint_t<Bits>::fast  augmented_crc( void const *buffer,
-     std::size_t byte_count,
-     typename uint_t<Bits>::fast initial_remainder = 0u );
-
-typedef crc_optimal<16, 0x8005, 0, 0, true, true>         crc_16_type;
-typedef crc_optimal<16, 0x1021, 0xFFFF, 0, false, false>  crc_ccitt_type;
-typedef crc_optimal<16, 0x8408, 0, 0, true, true>         crc_xmodem_type;
-
-typedef crc_optimal<32, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, true, true>
-  crc_32_type;
-
-}
-
- -

The implementation-defined type impl_def stands for the -quickest-to-manipulate built-in unsigned integral type that can -represent at least Bits bits.

- -

Rationale

- -

A common error detection technique, especially with electronic -communications, is an appended checksum. The transmitter sends its data -bits, followed by the bits of the checksum. The checksum is based on -operations done on the data bit stream. The receiver applies the same -operations on the bits it gets, and then gets the checksum. If the -computed checksum doesn't match the received checksum, then an error -ocurred in the transmission. There is the slight chance that the error -is only in the checksum, and an actually-correct data stream is -rejected. There is also the chance of an error occurring that does not -change the checksum, making that error invisible. CRC is a common -checksum type, used for error detection for hardware interfaces and -encoding formats.

- -

Background

- -

CRCs work by computing the remainder of a modulo-2 polynominal -division. The message is treated as the (binary) coefficents of a long -polynominal for the dividend, with the earlier bits of the message fed -first as the polynominal's highest coefficents. A particular CRC -algorithm has another polynominal associated with it to be used as the -divisor. The quotient is ignored. The remainder of the division -considered the checksum. However, the division uses modulo-2 rules (no -carries) for the coefficents.

- -

See A -Painless Guide to CRC Error Detection Algorithms for complete -information. A clearer guide is at the CRC -Implementation Code in C web page.

- -

CRC Parameters

- -
-
Truncated polynominal -
The divisor polynominal has a degree one bit larger than the - checksum (remainder) size. That highest bit is always one, so - it is ignored when describing a particular CRC type. Excluding - this bit makes the divisor fit in the same data type as the - checksum. - -
Initial remainder -
The interim CRC remainder changes as each bit is processed. - Usually, the interim remainder starts at zero, but some CRCs use - a different initial value to avoid "blind spots." A - blind spot is when a common sequence of message bits does not - change certain interim remainder values. - -
Final XOR value -
A CRC remainder can be combined with a defined value, via - a bitwise exclusive-or operation, before being returned to the - user. The value is usually zero, meaning the interim remainder - is returned unchanged. The other common value is an all-ones - value, meaning that the bitwise complement of the interim - remainder is returned. - -
Reflected input -
A message's bits are usually fed a byte at a time, with the - highest bits of the byte treated as the higher bits of the - dividend polynominal. Some CRCs reflect the bits (about the - byte's center, so the first and last bits are switched, - etc.) before feeding. - -
Reflected (remainder) output -
Some CRCs return the reflection of the interim remainder (taking - place before the final XOR value stage). -
- -

Theoretical CRC Computer

- -
template < std::size_t Bits >
-class boost::crc_basic
-{
-public:
-    // Type
-    typedef implementation_defined  value_type;
-
-    // Constant reflecting template parameter
-    static  std::size_t const  bit_count = Bits;
-
-    // Constructor
-    explicit  crc_basic( value_type truncated_polynominal,
-               value_type initial_remainder = 0, value_type final_xor_value = 0,
-               bool reflect_input = false, bool reflect_remainder = false );
-
-    // Internal Operations
-    value_type  get_truncated_polynominal() const;
-    value_type  get_initial_remainder() const;
-    value_type  get_final_xor_value() const;
-    bool        get_reflect_input() const;
-    bool        get_reflect_remainder() const;
-
-    value_type  get_interim_remainder() const;
-    void        reset( value_type new_rem );
-    void        reset();
-
-    // External Operations
-    void  process_bit( bool bit );
-    void  process_bits( unsigned char bits, std::size_t bit_count );
-    void  process_byte( unsigned char byte );
-    void  process_block( void const *bytes_begin, void const *bytes_end );
-    void  process_bytes( void const *buffer, std::size_t byte_count );
-
-    value_type  checksum() const;
-
-};
-
- -

The value_type is the smallest built-in type that can -hold the specified (by Bits) number of bits. This should -be boost::uint_t<Bits>::least, see the documentation for integer type -selection for details.

- -

This implementation is slow since it computes its CRC the same way as -in theory, bit by bit. No optimizations are performed. It wastes space -since most of the CRC parameters are specified at run-time as -constructor parameters.

- -

Optimized CRC Computer

- -
template < std::size_t Bits, impl_def TruncPoly,
-           impl_def InitRem, impl_def FinalXor,
-           bool ReflectIn, bool ReflectRem >
-class boost::crc_optimal
-{
-public:
-    // Type
-    typedef implementation_defined  value_type;
-
-    // Constants reflecting template parameters
-    static  std::size_t const  bit_count = Bits;
-    static  value_type const   truncated_polynominal = TruncPoly;
-    static  value_type const   initial_remainder = InitRem;
-    static  value_type const   final_xor_value = FinalXor;
-    static  bool const         reflect_input = ReflectIn;
-    static  bool const         reflect_remainder = ReflectRem;
-
-    // Constructor
-    explicit  crc_optimal( value_type init_rem = InitRem );
-
-    // Internal Operations
-    value_type  get_truncated_polynominal() const;
-    value_type  get_initial_remainder() const;
-    value_type  get_final_xor_value() const;
-    bool        get_reflect_input() const;
-    bool        get_reflect_remainder() const;
-
-    value_type  get_interim_remainder() const;
-    void        reset( value_type new_rem = InitRem );
-
-    // External Operations
-    void  process_byte( unsigned char byte );
-    void  process_block( void const *bytes_begin, void const *bytes_end );
-    void  process_bytes( void const *buffer, std::size_t byte_count );
-
-    value_type  checksum() const;
-
-    // Operators
-    void        operator ()( unsigned char byte );
-    value_type  operator ()() const;
-
-};
-
- -

The value_type is the quickest-to-manipulate built-in -type that can hold at least the specified (by Bits) number -of bits. This should be boost::uint_t<Bits>::fast. -See the integer type selection -documentation for details. The TruncPoly, -InitRem, and FinalXor template parameters also -are of this type.

- -

This implementation is fast since it uses as many optimizations as -practical. All of the CRC parameters are specified at compile-time as -template parameters. No individual bits are considered; only whole -bytes are passed. A table of interim CRC values versus byte values is -pre-computed when the first object using a particular bit size, -truncated polynominal, and input reflection state is processed.

- -

Computer Usage

- -

The two class templates have different policies on where the CRC's -parameters go. Both class templates use the number of bits in the CRC -as the first template parameter. The theoretical computer class -template has the bit count as its only template parameter, all the other -CRC parameters are entered through the constructor. The optimized -computer class template obtains all its CRC parameters as template -parameters, and instantiated objects are usually -default-constructed.

- -

The CRC parameters can be inspected at run-time with the following -member functions: get_truncated_polynominal, -get_initial_remainder, get_final_xor_value, -get_reflect_input, and get_reflect_remainder. -The fast computer also provides compile-time constants for its CRC -parameters.

- -

The get_interim_remainder member function returns the -internal state of the CRC remainder. It represents the unreflected -remainder of the last division. Saving an interim remainder allows the -freezing of CRC processing, as long as the other CRC parameters and the -current position of the bit stream are saved. Restarting a frozen -stream involves constructing a new computer with the most of the old -computer's parameters. The only change is to use the frozen remainder -as the new computer's initial remainder. Then the interrupted bit -stream can be fed as if nothing happened. The fast CRC computer has a -special constructor that takes one argument, an interim remainder, for -this purpose (overriding the initial remainder CRC parameter).

- -

The reset member functions reset the internal state of -the CRC remainder to the given value. If no value is given, then the -internal remainder is set to the initial remainder value when the object -was created. The remainder must be unreflected. When a CRC calculation -is finished, calling reset lets the object be reused for a -new session.

- -

After any construction, both CRC computers work the same way. -Feeding new data to a computer is in a seperate operation(s) from -extracting the current CRC value from the computer. The following table -lists the feeding and extracting operations.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Regular CRC Operations
OperationDescription
void process_bit( bool bit );Feeds the single bit to the computer, updating - the interim CRC. It is only defined for the slow CRC - computer.
void process_bits( unsigned char bits, std::size_t - bit_count );Acts as applying process_bit to the lowest - bit_count bits given in bits, most - significant relevant bit first. The results are undefined - if bit_count exceeds the number of bits per byte. - It is only defined for the slow CRC computer.
void process_byte( unsigned char byte );Acts as applying process_bit to the all the - bits in byte. If reflection is not desired, the - bits are fed from the most to least significant. The bits - are fed in the opposite order if reflection is desired.
void process_block( void const *bytes_begin, void - const *bytes_end );Acts as applying process_byte to each byte in - the given memory block. This memory block starts at - bytes_begin and finishes before - bytes_end. The bytes are processed in that - order.
void process_bytes( void const *buffer, std::size_t - byte_count );Acts as applying process_byte to each byte in - the given memory block. This memory block starts at - buffer and lasts for byte_count bytes. - The bytes are processed in ascending order.
value_type checksum() const;Returns the CRC checksum of the data passed in so far, - possibly after applying the remainder-reflection and - exclusive-or operations.
void operator ()( unsigned char byte );Calls process_byte. This member function lets - its object act as a (stateful) function object. It is only - defined for the fast CRC computer.
value_type operator ()() const;Calls checksum. This member function lets - its object act as a generator function object. It is only - defined for the fast CRC computer.
- -

You can use them like this:

- -
#include <boost/crc.hpp>      // for boost::crc_basic, boost::crc_optimal
-#include <boost/cstdint.hpp>  // for boost::uint16_t
-
-#include <algorithm>  // for std::for_each
-#include <cassert>    // for assert
-#include <cstddef>    // for std::size_t
-#include <iostream>   // for std::cout
-#include <ostream>    // for std::endl
-
-
-// Main function
-int
-main ()
-{
-    // This is "123456789" in ASCII
-    unsigned char const  data[] = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
-     0x38, 0x39 };
-    std::size_t const    data_len = sizeof( data ) / sizeof( data[0] );
-
-    // The expected CRC for the given data
-    boost::uint16_t const  expected = 0x29B1;
-
-    // Simulate CRC-CCITT
-    boost::crc_basic<16>  crc_ccitt1( 0x1021, 0xFFFF, 0, false, false );
-    crc_ccitt1.process_bytes( data, data_len );
-    assert( crc_ccitt1.checksum() == expected );
-
-    // Repeat with the optimal version (assuming a 16-bit type exists)
-    boost::crc_optimal<16, 0x1021, 0xFFFF, 0, false, false>  crc_ccitt2;
-    crc_ccitt2 = std::for_each( data, data + data_len, crc_ccitt2 );
-    assert( crc_ccitt2() == expected );
-
-    std::cout << "All tests passed." << std::endl;
-    return 0;
-}
-
- -

CRC Function

- -
template < std::size_t Bits, impl_def TruncPoly,
- impl_def InitRem, impl_def FinalXor,
- bool ReflectIn, bool ReflectRem >
-typename boost::uint_t<Bits>::fast
-boost::crc( void const *buffer, std::size_t byte_count );
-
- -

The boost::crc function template computes the CRC of a -given data block. The data block starts at the address given by -buffer and lasts for byte_count bytes. The CRC -parameters are passed through template arguments, identical to the -optimized CRC computer (see above). In fact, -such a computer is used to implement this function.

- -

Augmented-CRC Function

- -
template < std::size_t Bits, impl_def TruncPoly >
-typename boost::uint_t<Bits>::fast
-boost::augmented_crc( void const *buffer, std::size_t byte_count,
- typename boost::uint_t<Bits>::fast initial_remainder = 0u );
-
- -

All the other CRC-computing function or class templates work assuming -that the division steps start immediately on the first message bits. -The boost::augmented_crc function template has a -different division order. Instead of combining (via bitwise -exclusive-or) the current message bit with the highest bit of a separate -remainder, these templates shift a new message bit into the low bit of a -remainder register as the highest bit is shifted out. The new method -means that the bits in the inital remainder value are processed before -any of the actual message bits are processed. To compensate, the real -CRC can only be extracted after feeding enough zero bits (the same count -as the register size) after the message bits.

- -

The template parameters of the function template are -the CRC's bit size (Bits) and the truncated polynominal -(TruncPoly). The function parameters are the starting address of -the data block to be worked on (buffer), the number of bytes in that -data block (byte_count), and the incoming value of the remainder -(initial_remainder). That last parameter defaults to zero if it is -ommitted.

- -

This function template is useful if the bytes of the CRC directly -follow the message's bytes. First, set the bytes of where the CRC will -go to zero. Then use augmented_crc over the augmented -message, i.e. the message bytes and the appended CRC bytes. Then -assign the result to the CRC. To later check a received message, either -use augmented_crc (with the same parameters as -transmission, of course) on the received unaugmented message -and check if the result equals the CRC, or use -augmented_crc on the received augmented message -and check if the result equals zero. Note that the CRC has to be stored -with the more-significant bytes first (big-endian).

- -

Interruptions in the CRC data can be handled by feeding the result of -augmented_crc of the previous data block as the -initial_remainder when calling augmented_crc on -the next data block. Remember that the actual CRC can only be -determined after feeding the augmented bytes. Since this method uses -modulo-2 polynominal division at its most raw, neither final XOR values -nor reflection can be used.

- -

Note that for the same CRC system, the initial remainder for -augmented message method will be different than for the unaugmented -message method. The main exception is zero; if the augmented-CRC -algorithm uses a zero initial remainder, the equivalent unaugmented-CRC -algorithm will also use a zero initial remainder. Given an initial -remainder for a augmented-CRC algorithm, the result from processing just -zero-valued CRC bytes without any message bytes is the equivalent inital -remainder for the unaugmented-CRC algorithm. An example follows:

- -
#include <boost/crc.hpp>      // for boost::crc_basic, boost::augmented_crc
-#include <boost/cstdint.hpp>  // for boost::uint16_t
-
-#include <cassert>    // for assert
-#include <iostream>   // for std::cout
-#include <ostream>    // for std::endl
-
-
-// Main function
-int
-main ()
-{
-    using boost::uint16_t;
-    using boost::augmented_crc;
-
-    uint16_t        data[6] = { 2, 4, 31, 67, 98, 0 };
-    uint16_t const  init_rem = 0x123;
-
-    uint16_t  crc1 = augmented_crc<16, 0x8005>( data, sizeof(data), init_rem );
-
-    uint16_t const  zero = 0;
-    uint16_t const  new_init_rem = augmented_crc<16, 0x8005>( &zero, sizeof(zero) );
-
-    boost::crc_basic<16>  crc2( 0x8005, new_init_rem );
-    crc2.process_block( data, &data[5] );  // don't include CRC
-    assert( crc2.checksum() == crc1 );
-
-    std::cout << "All tests passed." << std::endl;
-    return 0;
-}
-
- -

Pre-Defined CRC Samples

- -

Four sample CRC types are given, representing several common CRC -algorithms. For example, computations from boost::crc_32_type -can be used for implementing the PKZip standard. Note that, in general, this -library is concerned with CRC implementation, and not with determining -"good" sets of CRC parameters.

- - - - - - - - - - - - - - - - - - - - - - - -
Common CRCs
AlgorithmExample Protocols
crc_16_typeBISYNCH, ARC
crc_ccitt_typedesignated by CCITT (Comité Consultatif International - Télégraphique et Téléphonique)
crc_xmodem_typeXMODEM
crc_32_typePKZip, AUTODIN II, Ethernet, FDDI
- -
- -

References

- - - -

Credits

- -

Contributors

- -
-
Michael Barr (mbarr@netrino.com) -
Wrote CRC - Implementation Code in C, a less-confusing guide to implementing CRC - algorithms. (Originally published as "Slow and Steady - Never Lost the Race" in the January 2000 issue of Embedded Systems - Programming, pages 37–46. The web version used to be - known as Easier - Said Than Done.) - -
Daryle Walker -
Started the library and contributed the theoretical and optimal - CRC computation class templates and the CRC computing function - template. Contributed crc_test.cpp and crc_example.cpp. - -
Ross N. Williams -
Wrote A - Painless Guide to CRC Error Detection Algorithms, a - definitive source of CRC information. -
- -

Acknowledgements

- -

For giving advice on compiler/C++ compliance, implementation, -interface, algorithms, and bug reports:

- -
    -
  • Darin Adler
  • -
  • Beman Dawes
  • -
  • Doug Gregor
  • -
  • John Maddock
  • -
  • Joe Mariadassou
  • -
  • Jens Maurer
  • -
  • Vladimir Prus
  • -
  • Joel Young
  • -
- -

History

- -
-
18 Dec 2011, Daryle Walker -
Folded the two versions of boost::augmented_crc together. - -
15 Jun 2003, Daryle Walker -
Added example program. - -
14 May 2001, Daryle Walker -
Initial version. -
- -
- -

Revised: 18 December 2011

- -

Copyright 2001, 2003, 2011 Daryle Walker. Use, modification, and distribution -are subject to the Boost Software License, Version 1.0. (See accompanying -file LICENSE_1_0.txt or a copy at -<http://www.boost.org/LICENSE_1_0.txt>.)

- - - diff -Nru boost1.81-1.81.0/libs/date_time/xmldoc/date_time_autodoc.xml boost1.81-1.81.0/libs/date_time/xmldoc/date_time_autodoc.xml --- boost1.81-1.81.0/libs/date_time/xmldoc/date_time_autodoc.xml 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/date_time/xmldoc/date_time_autodoc.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,4340 +0,0 @@ - -Date Time Reference
- - -Functor to iterate a fixed number of days. date_type::duration_type - -duration_typeconst date_type & -duration_typeconst date_type & - -int -Provides calculation to find next nth month given a date. This adjustment function provides the logic for 'month-based' advancement on a ymd based calendar. The policy it uses to handle the non existant end of month days is to back up to the last day of the month. Also, if the starting date is the last day of a month, this functor will attempt to adjust to the end of the month. date_type::duration_type -date_type::calendar_type -cal_type::ymd_type -cal_type::day_type - -duration_typeconst date_type & -duration_typeconst date_type &Returns a negative duration_type. - -int -Functor to iterate a over weeks. date_type::duration_type -date_type::calendar_type - -duration_typeconst date_type & -duration_typeconst date_type & - -int -Functor to iterate by a year adjusting for leap years. date_type::duration_type - -duration_typeconst date_type & -duration_typeconst date_type & - -int - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Time adjustment calculations based on machine - -Adjust to / from utc using the C API. Warning!!! This class assumes that timezone settings of the machine are correct. This can be a very dangerous assumption. time_type::time_duration_type -time_type::date_type -date_type::duration_type - -time_typeconst time_type &Convert a utc time to local time. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Provide workarounds related to the ctime header - - - -Provides a uniform interface to some 'ctime' functions. Provides a uniform interface to some ctime functions and their '_r' counterparts. The '_r' functions require a pointer to a user created std::tm struct whereas the regular functions use a staticly created struct and return a pointer to that. These wrapper functions require the user to create a std::tm struct and send in a pointer to it. This struct may be used to store the resulting time. The returned pointer may or may not point to this struct, however, it will point to the result of the corresponding function. All functions do proper checking of the C function results and throw exceptions on error. Therefore the functions will never return NULL. -std::tm *const std::time_t *std::tm *requires a pointer to a user created std::tm struct -std::tm *const std::time_t *std::tm *requires a pointer to a user created std::tm struct -std::tm *const std::time_t *std::tm *requires a pointer to a user created std::tm struct -std::tm *const std::time_t *std::tm *requires a pointer to a user created std::tm struct - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
- - -A template to specify a constrained basic value type. This template provides a quick way to generate an integer type with a constrained range. The type provides for the ability to specify the min, max, and and error handling policy.value policies A class that provides the range limits via the min and max functions as well as a function on_error that determines how errors are handled. A common strategy would be to assert or throw and exception. The on_error is passed both the current value and the new value that is in error. value_policies::value_type - -BOOST_CXX14_CONSTEXPRCoerce into the representation type. - -value_type -BOOST_CXX14_CONSTEXPR constrained_value &value_type - -BOOST_CONSTEXPR value_type maxReturn the max allowed value (traits method) -BOOST_CONSTEXPR value_type minReturn the min allowed value (traits method) - - -BOOST_CXX14_CONSTEXPR voidvalue_type - -Template to shortcut the constrained_value policy creation process. exception_type -std::out_of_range - -rep_type - -BOOST_CONSTEXPR rep_type min -BOOST_CONSTEXPR rep_type max -voidrep_typerep_typeviolation_enum - -Represent a min or max violation type. - - -
-
- - -boost::less_than_comparable< T, boost::equality_comparable< T > >Representation of timepoint at the one day level resolution. The date template represents an interface shell for a date class that is based on a year-month-day system such as the gregorian or ISO 8601 systems. It provides basic operations to enable calculation and comparisons.TheoryThis date representation fundamentally departs from the C tm struct approach. The goal for this type is to provide efficient date operations (add, subtract) and storage (minimize space to represent) in a concrete class. Thus, the date uses a count internally to represent a particular date. The calendar parameter defines the policies for converting the the year-month-day and internal counted form here. Applications that need to perform heavy formatting of the same date repeatedly will perform better by using the year-month-day representation.Internally the date uses a day number to represent the date. This is a monotonic time representation. This representation allows for fast comparison as well as simplifying the creation of writing numeric operations. Essentially, the internal day number is like adjusted julian day. The adjustment is determined by the Epoch date which is represented as day 1 of the calendar. Day 0 is reserved for negative infinity so that any actual date is automatically greater than negative infinity. When a date is constructed from a date or formatted for output, the appropriate conversions are applied to create the year, month, day representations. T -calendar -calendar::date_traits_type -duration_type_ -calendar::year_type -calendar::month_type -calendar::day_type -calendar::ymd_type -calendar::date_rep_type -calendar::date_int_type -calendar::day_of_week_type - -BOOST_CXX14_CONSTEXPR year_type -BOOST_CXX14_CONSTEXPR month_type -BOOST_CXX14_CONSTEXPR day_type -BOOST_CXX14_CONSTEXPR day_of_week_type -BOOST_CXX14_CONSTEXPR ymd_type -BOOST_CONSTEXPR boolconst date_type & -BOOST_CONSTEXPR boolconst date_type & -BOOST_CONSTEXPR boolcheck to see if date is a special value -BOOST_CONSTEXPR boolcheck to see if date is not a value -BOOST_CONSTEXPR boolcheck to see if date is one of the infinity values -BOOST_CONSTEXPR boolcheck to see if date is greater than all possible dates -BOOST_CONSTEXPR boolcheck to see if date is greater than all possible dates -BOOST_CXX14_CONSTEXPR special_valuesreturn as a special value or a not_special if a normal date -BOOST_CXX14_CONSTEXPR duration_typeconst date_type & -BOOST_CXX14_CONSTEXPR date_typeconst duration_type & -BOOST_CXX14_CONSTEXPR date_typeconst duration_type & -BOOST_CONSTEXPR date_rep_type -BOOST_CXX14_CONSTEXPR date_typeconst duration_type & -BOOST_CXX14_CONSTEXPR date_typeconst duration_type & - -year_typemonth_typeday_type -const ymd_type & - - -date_int_typeThis is a private constructor which allows for the creation of new dates. It is not exposed to users since that would require class users to understand the inner workings of the date class. -date_rep_type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -A clock providing day level services based on C time_t capabilities. This clock uses Posix interfaces as its implementation and hence uses the timezone settings of the operating system. Incorrect user settings will result in incorrect results for the calls to local_day. date_type::ymd_type - -date_typeGet the local day as a date type. -date_type::ymd_typeGet the local day as a ymd_type. -date_type::ymd_typeGet the current day in universal date as a ymd_type. -date_typeGet the UTC day as a date type. - - -::std::tm *std::tm & -::std::tm *std::tm & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -An enumeration of weekday names. -=1Simple enum to allow for nice programming with Jan, Feb, etc. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::less_than_comparable1< date_duration< duration_rep_traits >, boost::equality_comparable1< date_duration< duration_rep_traits >, boost::addable1< date_duration< duration_rep_traits >, boost::subtractable1< date_duration< duration_rep_traits >, boost::dividable2< date_duration< duration_rep_traits >, int > > > > >Duration type with date level resolution. duration_rep_traits::int_type -duration_rep_traits::impl_type - -BOOST_CXX14_CONSTEXPR duration_repreturns days_ as it's instantiated type - used for streaming -BOOST_CXX14_CONSTEXPR special_values -BOOST_CXX14_CONSTEXPR bool -BOOST_CXX14_CONSTEXPR duration_rep_typereturns days as value, not object. -BOOST_CXX14_CONSTEXPR boolconst date_duration &Equality. -BOOST_CXX14_CONSTEXPR boolconst date_duration &Less. -BOOST_CXX14_CONSTEXPR date_duration &const date_duration &Subtract another duration – result is signed. -BOOST_CXX14_CONSTEXPR date_duration &const date_duration &Add a duration – result is signed. -BOOST_CXX14_CONSTEXPR date_durationunary- Allows for dd = -date_duration(2); -> dd == -2 -BOOST_CXX14_CONSTEXPR date_duration &intDivision operations on a duration with an integer. -BOOST_CXX14_CONSTEXPR boolreturn sign information - -duration_repConstruct from a day count. -special_valuesconstruct from special_values - only works when instantiated with duration_traits_adapted - -BOOST_CXX14_CONSTEXPR date_durationReturns the smallest duration – used by to calculate 'end'. - -Struct for instantiating date_duration WITH special values functionality. Allows for transparent implementation of either date_duration<long> or date_duration<int_adapter<long> > long -boost::date_time::int_adapter< long > - -BOOST_CXX14_CONSTEXPR int_typeimpl_type - -Struct for instantiating date_duration with NO special values functionality. Allows for transparent implementation of either date_duration<long> or date_duration<int_adapter<long> > long -long - -BOOST_CXX14_CONSTEXPR int_typeimpl_type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -additional duration type that represents a logical month A logical month enables things like: "date(2002,Mar,2) + months(2) -> -2002-May2". If the date is a last day-of-the-month, the result will also be a last-day-of-the-month. -int_rep -BOOST_CXX14_CONSTEXPR duration_typeconst date_type &returns a negative duration -BOOST_CXX14_CONSTEXPR duration_typeconst date_type & -BOOST_CONSTEXPR boolconst months_type & -BOOST_CONSTEXPR boolconst months_type & -BOOST_CXX14_CONSTEXPR months_typeconst months_type & -BOOST_CXX14_CONSTEXPR months_type &const months_type & -BOOST_CXX14_CONSTEXPR months_typeconst months_type & -BOOST_CXX14_CONSTEXPR months_type &const months_type & -BOOST_CXX14_CONSTEXPR months_typeconst int_type -BOOST_CXX14_CONSTEXPR months_type &const int_type -BOOST_CXX14_CONSTEXPR months_typeconst int_type -BOOST_CXX14_CONSTEXPR months_type &const int_type -BOOST_CXX14_CONSTEXPR months_typeconst years_type & -BOOST_CXX14_CONSTEXPR months_type &const years_type & -BOOST_CXX14_CONSTEXPR months_typeconst years_type & -BOOST_CXX14_CONSTEXPR months_type &const years_type & - -int_rep -special_values -boost::date_time::date_duration< duration_config >Additional duration type that represents a number of n*7 days. - -typename duration_config::impl_type -special_values -additional duration type that represents a logical year A logical year enables things like: "date(2002,Mar,2) + years(2) -> -2004-Mar-2". If the date is a last day-of-the-month, the result will also be a last-day-of-the-month (ie date(2001-Feb-28) + years(3) -> 2004-Feb-29). -BOOST_CXX14_CONSTEXPR int_rep -BOOST_CXX14_CONSTEXPR duration_typeconst date_type &returns a negative duration -BOOST_CXX14_CONSTEXPR duration_typeconst date_type & -BOOST_CXX14_CONSTEXPR boolconst years_type & -boolconst years_type & -BOOST_CXX14_CONSTEXPR years_typeconst years_type & -BOOST_CXX14_CONSTEXPR years_type &const years_type & -BOOST_CXX14_CONSTEXPR years_typeconst years_type & -BOOST_CXX14_CONSTEXPR years_type &const years_type & -BOOST_CXX14_CONSTEXPR years_typeconst int_type -BOOST_CXX14_CONSTEXPR years_type &const int_type -BOOST_CXX14_CONSTEXPR years_typeconst int_type -BOOST_CXX14_CONSTEXPR years_type &const int_type -BOOST_CXX14_CONSTEXPR months_typeconst months_type & -BOOST_CXX14_CONSTEXPR months_typeconst months_type & - -int_rep -special_values -class BOOST_SYMBOL_VISIBLE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -facetClass that provides format based I/O facet for date types.This class allows the formatting of dates by using format string. Format strings are: -A => long_weekday_format - Full name Ex: Tuesday -a => short_weekday_format - Three letter abbreviation Ex: Tue -B => long_month_format - Full name Ex: October -b => short_month_format - Three letter abbreviation Ex: Oct -x => standard_format_specifier - defined by the locale -Y-b-d => default_date_format - YYYY-Mon-dd - -Default month format == b Default weekday format == a date_type::duration_type -date_type::day_of_week_type -date_type::day_type -date_type::month_type -boost::date_time::period< date_type, duration_type > -std::basic_string< CharT > -CharT -boost::date_time::period_formatter< CharT > -boost::date_time::special_values_formatter< CharT > -std::vector< std::basic_string< CharT > > -date_generator_formatter< date_type, CharT > -partial_date< date_type > -nth_kday_of_month< date_type > -first_kday_of_month< date_type > -last_kday_of_month< date_type > -first_kday_after< date_type > -first_kday_before< date_type > -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -std::locale::id - -std::locale::id &void -voidconst char_type *const -void -void -voidconst char_type *const -voidconst char_type *const -voidperiod_formatter_type -voidconst special_values_formatter_type & -voidconst input_collection_type & -voidconst input_collection_type & -voidconst input_collection_type & -voidconst input_collection_type & -voidconst input_collection_type &typename date_gen_formatter_type::phrase_elementsdate_gen_formatter_type::first -OutItrTOutItrTstd::ios_base &char_typeconst date_type & -OutItrTOutItrTstd::ios_base &char_typeconst duration_type & -OutItrTOutItrTstd::ios_base &char_typeconst month_type & -OutItrTOutItrTstd::ios_base &char_typeconst day_type &puts the day of month -OutItrTOutItrTstd::ios_base &char_typeconst day_of_week_type & -OutItrTOutItrTstd::ios_base &char_typeconst period_type & -OutItrTOutItrTstd::ios_base &char_typeconst partial_date_type & -OutItrTOutItrTstd::ios_base &char_typeconst nth_kday_type & -OutItrTOutItrTstd::ios_base &char_typeconst first_kday_type & -OutItrTOutItrTstd::ios_base &char_typeconst last_kday_type & -OutItrTOutItrTstd::ios_base &char_typeconst kday_before_type & -OutItrTOutItrTstd::ios_base &char_typeconst kday_after_type & - -::size_t0 -const char_type *const input_collection_type &::size_t0 -const char_type *period_formatter_typeperiod_formatter_type()special_values_formatter_typespecial_values_formatter_type()date_gen_formatter_typedate_gen_formatter_type()::size_t0 - -OutItrTOutItrTstd::ios_base &char_typeconst boost::date_time::special_values -OutItrTOutItrTstd::ios_base &char_typeconst tm &string_type - -facetInput facet. date_type::duration_type -date_type::day_of_week_type -date_type::day_type -date_type::month_type -date_type::year_type -boost::date_time::period< date_type, duration_type > -std::basic_string< CharT > -CharT -boost::date_time::period_parser< date_type, CharT > -boost::date_time::special_values_parser< date_type, CharT > -std::vector< std::basic_string< CharT > > -format_date_parser< date_type, CharT > -date_generator_parser< date_type, CharT > -partial_date< date_type > -nth_kday_of_month< date_type > -first_kday_of_month< date_type > -last_kday_of_month< date_type > -first_kday_after< date_type > -first_kday_before< date_type > -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -std::locale::id - -voidconst char_type *const -void -void -voidconst char_type *const -voidconst char_type *const -voidconst char_type *const -voidperiod_parser_type -voidconst input_collection_type & -voidconst input_collection_type & -voidconst input_collection_type & -voidconst input_collection_type & -voidconst input_collection_type & -voidconst string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type & -voidspecial_values_parser_type -InItrTInItrT &InItrT &std::ios_base &date_type & -InItrTInItrT &InItrT &std::ios_base &month_type & -InItrTInItrT &InItrT &std::ios_base &day_of_week_type & -InItrTInItrT &InItrT &std::ios_base &day_type &Expects 1 or 2 digit day range: 1-31. -InItrTInItrT &InItrT &std::ios_base &year_type & -InItrTInItrT &InItrT &std::ios_base &duration_type & -InItrTInItrT &InItrT &std::ios_base &period_type & -InItrTInItrT &InItrT &std::ios_base &nth_kday_type & -InItrTInItrT &InItrT &std::ios_base &partial_date_type & -InItrTInItrT &InItrT &std::ios_base &first_kday_type & -InItrTInItrT &InItrT &std::ios_base &last_kday_type & -InItrTInItrT &InItrT &std::ios_base &kday_before_type & -InItrTInItrT &InItrT &std::ios_base &kday_after_type & - -::size_t0 -const string_type &::size_t0 -const string_type &const format_date_parser_type &const special_values_parser_type &const period_parser_type &const date_gen_parser_type &::size_t0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Class to provide simple basic formatting rules. -const charT *String used printed is date is invalid. -const charT *String used to for positive infinity value. -const charT *String used to for positive infinity value. -month_format_specDescribe month format. -ymd_order_spec -boolThis format uses '-' to separate date elements. -charTChar to sep? -charTchar between year-month -charTChar to separate month-day. -charTchar between date-hours -charTchar between hour and minute -charTchar for second - -wchar_tSpecialization of formmating rules for wchar_t. -const wchar_t *String used printed is date is invalid. -const wchar_t *String used to for positive infinity value. -const wchar_t *String used to for positive infinity value. -month_format_specDescribe month format. -ymd_order_spec -boolThis format uses '-' to separate date elements. -wchar_tChar to sep? -wchar_tchar between year-month -wchar_tChar to separate month-day. -wchar_tchar between date-hours -wchar_tchar between hour and minute -wchar_tchar for second - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Convert a date to string using format policies. -std::stringdate_typeConvert to a date to standard string using format policies. -string_typedate_typeConvert to a date to standard string using format policies. - -Formats a month as as string into an ostream. -std::ostream &const month_type &std::ostream &Formats a month as as string into an ostream. This function demands that month_type provide functions for converting to short and long strings if that capability is used. -ostream_type &const month_type &ostream_type &Formats a month as as string into an ostream. This function demands that month_type provide functions for converting to short and long strings if that capability is used. - -Convert ymd to a standard string formatting policies. -std::stringymd_typeConvert ymd to a standard string formatting policies. This is standard code for handling date formatting with year-month-day based date information. This function uses the format_type to control whether the string will contain separator characters, and if so what the character will be. In addtion, it can format the month as either an integer or a string as controled by the formatting policy -std::basic_string< charT >ymd_typeConvert ymd to a standard string formatting policies. This is standard code for handling date formatting with year-month-day based date information. This function uses the format_type to control whether the string will contain separator characters, and if so what the character will be. In addtion, it can format the month as either an integer or a string as controled by the formatting policy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Convert a date to string using format policies. std::basic_ostream< charT > -date_type::ymd_type - -voidconst date_type &ostream_type &const facet_type &Put date into an ostream. -voidconst date_type &ostream_type &Put date into an ostream. - -Formats a month as as string into an ostream. facet_type::month_type -std::basic_ostream< charT > - -voidconst month_type &ostream_type &const facet_type &Formats a month as as string into an output iterator. - -Formats a weekday. facet_type::month_type -std::basic_ostream< charT > - -voidconst weekday_type &ostream_type &const facet_type &boolFormats a month as as string into an output iterator. - -Convert ymd to a standard string formatting policies. ymd_type::month_type -ostream_month_formatter< facet_type, charT > -std::basic_ostream< charT > -std::basic_string< charT > - -voidymd_typeostream_type &const facet_type &Convert ymd to a standard string formatting policies. This is standard code for handling date formatting with year-month-day based date information. This function uses the format_type to control whether the string will contain separator characters, and if so what the character will be. In addtion, it can format the month as either an integer or a string as controled by the formatting policy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Formats date_generators for output. Formatting of date_generators follows specific orders for the various types of date_generators. -partial_date => "dd Month" -nth_day_of_the_week_in_month => "nth weekday of month" -first_day_of_the_week_in_month => "first weekday of month" -last_day_of_the_week_in_month => "last weekday of month" -first_day_of_the_week_after => "weekday after" -first_day_of_the_week_before => "weekday before" While the order of the elements in these phrases cannot be changed, the elements themselves can be. Weekday and Month get their formats and names from the date_facet. The remaining elements are stored in the date_generator_formatter and can be customized upon construction or via a member function. The default elements are those shown in the examples above. - -=0 -partial_date< date_type > -nth_kday_of_month< date_type > -first_kday_of_month< date_type > -last_kday_of_month< date_type > -first_kday_after< date_type > -first_kday_before< date_type > -CharT -std::basic_string< char_type > -std::vector< string_type > -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type - -voidconst collection_type &phrase_elementsfirstReplace the set of phrase elements with those contained in new_strings. The order of the strings in the given collection is important. They must follow: -first, second, third, fourth, fifth, last, before, after, of. - -It is not necessary to send in a complete set if only a few elements are to be replaced as long as the correct beg_pos is used.Ex: To keep the default first through fifth elements, but replace the rest with a collection of: -"final", "prior", "following", "in". The beg_pos of date_generator_formatter::last would be used. - - -OutItrTOutItrTstd::ios_base &CharTconst partial_date_type &const facet_type &Put a partial_date => "dd Month". -OutItrTOutItrTstd::ios_base &CharTconst nth_kday_type &const facet_type &Put an nth_day_of_the_week_in_month => "nth weekday of month". -OutItrTOutItrTstd::ios_base &CharTconst first_kday_type &const facet_type &Put a first_day_of_the_week_in_month => "first weekday of month". -OutItrTOutItrTstd::ios_base &CharTconst last_kday_type &const facet_type &Put a last_day_of_the_week_in_month => "last weekday of month". -OutItrTOutItrTstd::ios_base &CharTconst kday_before_type &const facet_type &Put a first_day_of_the_week_before => "weekday before". -OutItrTOutItrTstd::ios_base &CharTconst kday_after_type &const facet_type &Put a first_day_of_the_week_after => "weekday after". - -Default format elements used. -const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &Constructor that allows for a custom set of phrase elements. - -OutItrTOutItrTconst string_type &helper function to put the various member string into stream - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Class for date_generator parsing. The elements of a date_generator "phrase" are parsed from the input stream in a particular order. All elements are required and the order in which they appear cannot change, however, the elements themselves can be changed. The default elements and their order are as follows: -partial_date => "dd Month" -nth_day_of_the_week_in_month => "nth weekday of month" -first_day_of_the_week_in_month => "first weekday of month" -last_day_of_the_week_in_month => "last weekday of month" -first_day_of_the_week_after => "weekday after" -first_day_of_the_week_before => "weekday before" - -Weekday and Month names and formats are handled via the date_input_facet. =0 -std::basic_string< charT > -std::istreambuf_iterator< charT > -date_type::month_type -date_type::day_of_week_type -date_type::day_type -string_parse_tree< charT > -parse_tree_type::parse_match_result_type -std::vector< std::basic_string< charT > > -partial_date< date_type > -nth_kday_of_month< date_type > -first_kday_of_month< date_type > -last_kday_of_month< date_type > -first_kday_after< date_type > -first_kday_before< date_type > -charT -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type - -voidconst string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &Replace strings that determine nth week for generator. -voidconst collection_type & -partial_date_typestream_itr_type &stream_itr_type &std::ios_base &const facet_type &returns partial_date parsed from stream -nth_kday_typestream_itr_type &stream_itr_type &std::ios_base &const facet_type &returns nth_kday_of_week parsed from stream -first_kday_typestream_itr_type &stream_itr_type &std::ios_base &const facet_type &returns first_kday_of_week parsed from stream -last_kday_typestream_itr_type &stream_itr_type &std::ios_base &const facet_type &returns last_kday_of_week parsed from stream -kday_before_typestream_itr_type &stream_itr_type &std::ios_base &const facet_type &returns first_kday_of_week parsed from stream -kday_after_typestream_itr_type &stream_itr_type &std::ios_base &const facet_type &returns first_kday_of_week parsed from stream - -Creates a date_generator_parser with the default set of "element_strings". -const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &const string_type &Creates a date_generator_parser using a user defined set of element strings. - -voidstream_itr_type &stream_itr_type &typename date_generator_parser::phrase_elementsExtracts phrase element from input. Throws ios_base::failure on error. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Definition and implementation of date algorithm templates - -Calculate something like "First Sunday after Jan 1,2002. Date generator that takes a date and finds kday after typedef boost::date_time::first_kday_after<date> firstkdayafter; -firstkdayafter fkaf(Monday); -fkaf.get_date(date(2002,Feb,1)); - date_type::calendar_type -calendar_type::day_of_week_type -date_type::duration_type - -date_typedate_typeReturn next kday given. -day_of_week_type - -day_of_week_type -Calculate something like "First Sunday before Jan 1,2002. Date generator that takes a date and finds kday after typedef boost::date_time::first_kday_before<date> firstkdaybefore; -firstkdaybefore fkbf(Monday); -fkbf.get_date(date(2002,Feb,1)); - date_type::calendar_type -calendar_type::day_of_week_type -date_type::duration_type - -date_typedate_typeReturn next kday given. -day_of_week_type - -day_of_week_type -boost::date_time::year_based_generator< date_type >Useful generator functor for finding holidays and daylight savings. Similar to nth_kday_of_month, but requires less paramters date_type::calendar_type -calendar_type::day_of_week_type -calendar_type::month_type -calendar_type::year_type -date_type::duration_type - -date_typeyear_typeReturn a concrete date when provided with a year specific year. -month_type -day_of_week_type -std::stringReturns string suitable for use in POSIX time zone string. Returns a string formatted as "M4.1.0" ==> 1st Sunday in April. - -day_of_week_typeThe day of week, eg: Sunday, Monday, etc month_typeThe month of the year, eg: Jan, Feb, Mar, etc Specify the first 'Sunday' in 'April' spec. - -boost::date_time::year_based_generator< date_type >Calculate something like Last Sunday of January. Useful generator functor for finding holidays and daylight savings Get the last day of the month and then calculate the difference to the last previous day. -date_type::calendar_type -calendar_type::day_of_week_type -calendar_type::month_type -calendar_type::year_type -date_type::duration_type - -date_typeyear_typeReturn a concrete date when provided with a year specific year. -month_type -day_of_week_type -std::stringReturns string suitable for use in POSIX time zone string. Returns a string formatted as "M4.5.0" ==> last Sunday in April. - -day_of_week_typeThe day of week, eg: Sunday, Monday, etc month_typeThe month of the year, eg: Jan, Feb, Mar, etc Specify the date spec like last 'Sunday' in 'April' spec. - -boost::date_time::year_based_generator< date_type >Useful generator functor for finding holidays. Based on the idea in Cal. Calc. for finding holidays that are the 'first Monday of September'. When instantiated with 'fifth' kday of month, the result will be the last kday of month which can be the fourth or fifth depending on the structure of the month.The algorithm here basically guesses for the first day of the month. Then finds the first day of the correct type. That is, if the first of the month is a Tuesday and it needs Wednesday then we simply increment by a day and then we can add the length of a week until we get to the 'nth kday'. There are probably more efficient algorithms based on using a mod 7, but this one works reasonably well for basic applications. =1 -date_type::calendar_type -calendar_type::day_of_week_type -calendar_type::month_type -calendar_type::year_type -date_type::duration_type - -date_typeyear_typeReturn a concrete date when provided with a year specific year. -month_type -week_num -day_of_week_type -const char * -std::stringReturns string suitable for use in POSIX time zone string. Returns a string formatted as "M4.3.0" ==> 3rd Sunday in April. - -week_numday_of_week_typemonth_type -boost::date_time::year_based_generator< date_type >Generates a date by applying the year to the given month and day. Example usage: partial_date pd(1, Jan); -partial_date pd2(70); -date d = pd.get_date(2002); //2002-Jan-01 -date d2 = pd2.get_date(2002); //2002-Mar-10 - date_type::calendar_type -calendar_type::day_type -calendar_type::month_type -calendar_type::year_type -date_type::duration_type -duration_type::duration_rep - -date_typeyear_typeReturn a concrete date when provided with a year specific year. Will throw an 'invalid_argument' exception if a partial_date object, instantiated with Feb-29, has get_date called with a non-leap year. Example: partial_date pd(29, Feb); -pd.get_date(2003); // throws invalid_argument exception -pg.get_date(2000); // returns 2000-2-29 - -date_typeyear_type -boolconst partial_date & -boolconst partial_date & -month_type -day_type -std::stringReturns string suitable for use in POSIX time zone string. Returns string formatted with up to 3 digits: Jan-01 == "0" Feb-29 == "58" Dec-31 == "365" - -day_typemonth_type -duration_repPartial date created from number of days into year. Range 1-366. Allowable values range from 1 to 366. 1=Jan1, 366=Dec31. If argument exceeds range, partial_date will be created with closest in-range value. 60 will always be Feb29, if get_date() is called with a non-leap year an exception will be thrown -Base class for all generators that take a year and produce a date. This class is a base class for polymorphic function objects that take a year and produce a concrete date. -date_type::calendar_type -calendar_type::year_type - -date_typeyear_type -std::stringReturns a string for use in a POSIX time_zone string. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const char *intReturns nth arg as string. 1 -> "first", 2 -> "second", max is 5. -date_type::duration_typeconst date_type &const weekday_type &Calculates the number of days until the next weekday. Calculates the number of days until the next weekday. If the date given falls on a Sunday and the given weekday is Tuesday the result will be 2 days -date_type::duration_typeconst date_type &const weekday_type &Calculates the number of days since the previous weekday. Calculates the number of days since the previous weekday If the date given falls on a Sunday and the given weekday is Tuesday the result will be 5 days. The answer will be a positive number because Tuesday is 5 days before Sunday, not -5 days before. -date_typeconst date_type &const weekday_type &Generates a date object representing the date of the following weekday from the given date. Generates a date object representing the date of the following weekday from the given date. If the date given is 2004-May-9 (a Sunday) and the given weekday is Tuesday then the resulting date will be 2004-May-11. -date_typeconst date_type &const weekday_type &Generates a date object representing the date of the previous weekday from the given date. Generates a date object representing the date of the previous weekday from the given date. If the date given is 2004-May-9 (a Sunday) and the given weekday is Tuesday then the resulting date will be 2004-May-4. - - -
-
- - -boost::date_time::date_itr_base< date_type >Overrides the base date iterator providing hook for functors. date_type::duration_type - - -date_typeint1 - -duration_typeconst date_type & -duration_typeconst date_type & - -Base date iterator type. This class provides the skeleton for the creation of iterators. New and interesting interators can be created by plugging in a new function that derives the next value from the current state. generation of various types of -based information.Template Parametersdate_typeThe date_type is a concrete date_type. The date_type must define a duration_type and a calendar_type. date_type::duration_type -date_type -std::input_iterator_tag - -date_itr_base & -date_itr_base & -duration_typeconst date_type & -duration_typeconst date_type & -const date_type & -const date_type * -boolconst date_type & -boolconst date_type & -boolconst date_type & -boolconst date_type & -boolconst date_type & -boolconst date_type & - -date_type - -An iterator over dates with varying resolution (day, week, month, year, etc) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::date_time::date_names_put< Config, charT, OutputIterator >A date name output facet that takes an array of char* to define strings. OutputIterator -Config::month_enum -Config::weekday_enum -Config::special_value_enum - -const charT *const * -const charT *const * -const charT *const * -const charT *const * -const charT *const * - -const charT *constconst charT *constconst charT *constconst charT *constconst charT *constcharT'-'ymd_order_specymd_order_isomonth_format_specmonth_as_short_string - -voiditer_type &month_enumGeneric facet that takes array of chars. -voiditer_type &month_enumLong month names. -voiditer_type &special_value_enumSpecial values names. -voiditer_type &weekday_enum -voiditer_type &weekday_enum -voiditer_type &char between year-month -voiditer_type &Char to separate month-day. -ymd_order_specSet the date ordering. -month_format_specSet the date ordering. - -facetOutput facet base class for gregorian dates. This class is a base class for date facets used to localize the names of months and the names of days in the week.Requirements of Config -define an enumeration month_enum that enumerates the months. The enumeration should be '1' based eg: Jan==1 -define as_short_string and as_long_string - -(see langer & kreft p334). OutputIterator -Config::month_type -Config::month_enum -Config::weekday_enum -Config::special_value_enum -std::basic_string< charT > -charT -const char_type -const char_type -std::locale::idGenerate storage location for a std::locale::id. - -std::locale::id &void -voiditer_type &special_value_enum -voiditer_type &month_enum -voiditer_type &month_enum -voiditer_type &weekday_enum -voiditer_type &weekday_enum -bool -voiditer_type & -voiditer_type &char between year-month -voiditer_type &Char to separate month-day. -ymd_order_specDetermines the order to put the date elements. -month_format_specDetermines if month is displayed as integer, short or long string. - - - -voiditer_type &month_enumDefault facet implementation uses month_type defaults. -voiditer_type &month_enumDefault facet implementation uses month_type defaults. -voiditer_type &special_value_enumDefault facet implementation for special value types. -voiditer_type &weekday_enum -voiditer_type &weekday_enum -bool -voiditer_type & -voiditer_type &char between year-month -voiditer_type &Char to separate month-day. -ymd_order_specDefault for date order. -month_format_specDefault month format. -voiditer_type &const charT *const -voiditer_type &const string_type & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - -std::stringstd::stringA function to replace the std::transform( , , ,tolower) construct. This function simply takes a string, and changes all the characters in that string to lowercase (according to the default system locale). In the event that a compiler does not support locales, the old C style tolower() is used. -unsigned shortstd::string const &Helper function for parse_date. -date_typeconst std::string &intymd_order_isoGeneric function to parse a delimited date (eg: 2002-02-10) Accepted formats are: "2003-02-10" or " 2003-Feb-10" or "2003-Feburary-10" The order in which the Month, Day, & Year appear in the argument string can be accomodated by passing in the appropriate ymd_order_spec -date_typeconst std::string &Generic function to parse undelimited date (eg: 20020201) -date_typeiterator_type &iterator_type const &charHelper function for 'date gregorian::from_stream()'. Creates a string from the iterators that reference the begining & end of a char[] or string. All elements are used in output string -date_typeiterator_type &iterator_type const &std::string const &Helper function for 'date gregorian::from_stream()'. Returns the first string found in the stream referenced by the begining & end iterators -date_typeiterator_type &iterator_type const &wchar_tHelper function for 'date gregorian::from_stream()'. Creates a string from the iterators that reference the begining & end of a wstring. All elements are used in output string -date_typeiterator_type &iterator_type const &std::wstring const &Helper function for 'date gregorian::from_stream()'. Creates a string from the first wstring found in the stream referenced by the begining & end iterators -period< date_type, typename date_type::duration_type >const std::basic_string< charT > &function called by wrapper functions: date_period_from_(w)string() - - - - - - - -
-
-Contains template class to provide static dst rule calculations - -Compile-time configurable daylight savings time calculation engine. date_type::year_type -date_type::calendar_type -dst_calculator< date_type, time_duration_type > - -time_is_dst_resultconst date_type &const time_duration_type &Calculates if the given local time is dst or not. Determines if the time is really in DST or not. Also checks for invalid and ambiguous. - -booldate_type -time_duration_typeThe time of day for the dst transition (eg: typically 01:00:00 or 02:00:00) -date_typeyear_type -date_typeyear_type - -Dynamic class used to caluclate dst transition information. time_duration_type_ -date_type_ - -time_is_dst_resultconst time_duration_type &Time offset in the day for the local time unsigned intLocal day offset for start of dst longNumber of minutes to adjust clock forward Check the local time offset when on dst start day. On this dst transition, the time label between the transition boundary and the boudary + the offset are invalid times. If before the boundary then still not in dst. - - -time_is_dst_resultconst time_duration_type &Time offset in the day for the local time unsigned intLocal time of day for end of dst longCheck the local time offset when on the last day of dst. This is the calculation for the DST end day. On that day times prior to the conversion time - dst_length (1 am in US) are still in dst. Times between the above and the switch time are ambiguous. Times after the start_offset are not in dst. - - -time_is_dst_resultconst date_type &The day to check for dst const time_duration_type &Time offset within the day to check const date_type &Starting day of dst for the given locality const time_duration_type &Time offset within day for dst boundary const date_type &Ending day of dst for the given locality const time_duration_type &Time offset within day given in dst for dst boundary const time_duration_type &Calculates if the given local time is dst or not. Determines if the time is really in DST or not. Also checks for invalid and ambiguous. - - -time_is_dst_resultconst date_type &The day to check for dst const time_duration_type &Time offset within the day to check const date_type &Starting day of dst for the given locality unsigned intOffset within day for dst boundary (eg 120 for US which is 02:00:00) const date_type &Ending day of dst for the given locality unsigned intOffset within day given in dst for dst boundary (eg 120 for US which is 02:00:00) longLength of dst adjusment (eg: 60 for US) Calculates if the given local time is dst or not. Determines if the time is really in DST or not. Also checks for invalid and ambiguous. - - - -Used for local time adjustments in places that don't use dst. time_duration_type_ -date_type_ - -time_is_dst_resultconst date_type &const time_duration_type &Calculates if the given local time is dst or not. - -time_is_dst_resultconst date_type &const time_duration_type &Calculates if the given utc time is in dst. -booldate_type -time_duration_type - -Depricated: Class to calculate dst boundaries for US time zones. time_duration_type_ -date_type_ -date_type::year_type -date_type::calendar_type -date_time::last_kday_of_month< date_type > -date_time::first_kday_of_month< date_type > -date_time::nth_kday_of_month< date_type > -dst_calculator< date_type, time_duration_type > - -time_is_dst_resultconst date_type &const time_duration_type &Calculates if the given local time is dst or not. Determines if the time is really in DST or not. Also checks for invalid and ambiguous. - -booldate_type -date_typeyear_type -date_typeyear_type -time_duration_type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::date_time::dst_day_calc_rule< spec::date_type >Canonical form for a class that provides day rule calculation. This class is used to generate specific sets of dst rules -spec::date_type -date_type::year_type -spec::start_rule -spec::end_rule - -date_typeyear_type -std::string -date_typeyear_type -std::string - -start_ruleend_rule -Defines base interface for calculating start and end date of daylight savings. date_type::year_type - -date_typeyear_type -std::string -date_typeyear_type -std::string - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Function(s) for converting between a FILETIME structure and a time object. This file is only available on systems that have BOOST_HAS_FTIME defined. - - - - - - - - - - - - - - - - - - - -TimeTconst FileTimeT &Create a time object from an initialized FILETIME struct. Create a time object from an initialized FILETIME struct. A FILETIME struct holds 100-nanosecond units (0.0000001). When built with microsecond resolution the file_time's sub second value will be truncated. Nanosecond resolution has no truncation.The function is templated on the FILETIME type, so that it can be used with both native FILETIME and the ad-hoc boost::detail::winapi::FILETIME_ type. - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - -shortconst charT *const *const charT *const *shortconst std::basic_string< charT > &Find index of a string in either of 2 arrays. find_match searches both arrays for a match to 's'. Both arrays must contain 'size' elements. The index of the match is returned. If no match is found, 'size' is returned. Ex. "Jan" returns 0, "Dec" returns 11, "Tue" returns 2. 'size' can be sent in with: (greg_month::max)() (which 12), (greg_weekday::max)() + 1 (which is 7) or date_time::NumSpecialValues - - - - - - - - - - - - - - - - - -
-
- - - - -Class with generic date parsing using a format string. The following is the set of recognized format specifiers -a - Short weekday name -A - Long weekday name -b - Abbreviated month name -B - Full month name -d - Day of the month as decimal 01 to 31 -j - Day of year as decimal from 001 to 366 -m - Month name as a decimal 01 to 12 -U - Week number 00 to 53 with first Sunday as the first day of week 1? -w - Weekday as decimal number 0 to 6 where Sunday == 0 -W - Week number 00 to 53 where Monday is first day of week 1 -x - facet default date representation -y - Year without the century - eg: 04 for 2004 -Y - Year with century - -The weekday specifiers (a and A) do not add to the date construction, but they provide a way to skip over the weekday names for formats that provide them.todo – Another interesting feature that this approach could provide is an option to fill in any missing fields with the current values from the clock. So if you have m-d the parser would detect the missing year value and fill it in using the clock.todo – What to do with the x. x in the classic facet is just bad... std::basic_string< charT > -std::basic_istringstream< charT > -std::istreambuf_iterator< charT > -string_type::const_iterator -date_type::year_type -date_type::month_type -date_type::day_type -date_type::duration_type -date_type::day_of_week_type -date_type::day_of_year_type -string_parse_tree< charT > -parse_tree_type::parse_match_result_type -std::vector< std::basic_string< charT > > - -string_type -voidstring_type -voidconst input_collection_type & -voidconst input_collection_type & -voidconst input_collection_type & -voidconst input_collection_type & -date_typeconst string_type &const string_type &const special_values_parser< date_type, charT > & -date_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &const special_values_parser< date_type, charT > & -date_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &string_typeconst special_values_parser< date_type, charT > &Of all the objects that the format_date_parser can parse, only a date can be a special value. Therefore, only parse_date checks for special_values. -month_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &string_typeThrows bad_month if unable to parse. -month_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &string_typematch_results &Throws bad_month if unable to parse. -day_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &Expects 1 or 2 digits 1-31. Throws bad_day_of_month if unable to parse. -day_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &Expects 2 digits 01-31. Throws bad_day_of_month if unable to parse. -day_of_week_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &string_type -day_of_week_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &string_typematch_results & -year_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &string_typethrows bad_year if unable to parse -year_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &string_typematch_results &throws bad_year if unable to parse - -const string_type &const input_collection_type &const input_collection_type &const input_collection_type &const input_collection_type & -const string_type &const std::locale & -const format_date_parser< date_type, charT > & - - - - - - - - - - - - - - -int_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &parse_match_result< charT > &unsigned intconst charT &Helper function for parsing fixed length strings into integers. Will consume 'length' number of characters from stream. Consumed character are transfered to parse_match_result struct. Returns '-1' if no number can be parsed or incorrect number of digits in stream. -int_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &parse_match_result< charT > &unsigned intHelper function for parsing fixed length strings into integers. Will consume 'length' number of characters from stream. Consumed character are transfered to parse_match_result struct. Returns '-1' if no number can be parsed or incorrect number of digits in stream. -int_typestd::istreambuf_iterator< charT > &const std::istreambuf_iterator< charT > &unsigned intHelper function for parsing varied length strings into integers. Will consume 'max_length' characters from stream only if those characters are digits. Returns '-1' if no number can be parsed. Will not parse a number preceeded by a '+' or '-'. - - - - - - - - - - - - - - - - - - -
-
- - -An implementation of the Gregorian calendar. This is a parameterized implementation of a proleptic Gregorian Calendar that can be used in the creation of date systems or just to perform calculations. All the methods of this class are static functions, so the intent is to never create instances of this class. -define a type a date split into components ymd_type_ -define a type for representing months ymd_type::month_type -define a type for representing days ymd_type::day_type -Type to hold a stand alone year value (eg: 2002) ymd_type::year_type -Define the integer type to use for internal calculations. date_int_type_ - -BOOST_CXX14_CONSTEXPR unsigned shortconst ymd_type & -BOOST_CXX14_CONSTEXPR intconst ymd_type & -BOOST_CXX14_CONSTEXPR date_int_typeconst ymd_type & -BOOST_CXX14_CONSTEXPR date_int_typeconst ymd_type & -BOOST_CXX14_CONSTEXPR date_int_typeconst ymd_type & -BOOST_CXX14_CONSTEXPR ymd_typedate_int_type -BOOST_CXX14_CONSTEXPR ymd_typedate_int_type -BOOST_CXX14_CONSTEXPR ymd_typedate_int_type -BOOST_CXX14_CONSTEXPR boolyear_type -BOOST_CXX14_CONSTEXPR unsigned shortyear_typemonth_type -BOOST_CXX14_CONSTEXPR ymd_type -BOOST_CXX14_CONSTEXPR unsigned short - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Adapter to create integer types with +-infinity, and not a value. This class is used internally in counted date/time representations. It adds the floating point like features of infinities and not a number. It also provides mathmatical operations with consideration to special values following these rules: +infinity - infinity == Not A Number (NAN) - infinity * non-zero == infinity - infinity * zero == NAN -+infinity * -integer == -infinity - infinity / infinity == NAN - infinity * infinity == infinity - int_type_ - -BOOST_CONSTEXPR bool -BOOST_CONSTEXPR bool -BOOST_CONSTEXPR bool -BOOST_CONSTEXPR bool -BOOST_CONSTEXPR bool -BOOST_CONSTEXPR boolconst int_adapter & -BOOST_CXX14_CONSTEXPR boolconst int & -BOOST_CONSTEXPR boolconst int_adapter & -BOOST_CXX14_CONSTEXPR boolconst int & -BOOST_CONSTEXPR boolconst int_adapter & -BOOST_CXX14_CONSTEXPR boolconst int & -BOOST_CONSTEXPR boolconst int_adapter & -BOOST_CONSTEXPR int_type -BOOST_CONSTEXPR special_valuesReturns either special value type or is_not_special. -BOOST_CXX14_CONSTEXPR int_adapterconst int_adapter< rhs_type > &Operator allows for adding dissimilar int_adapter types. The return type will match that of the the calling object's type -BOOST_CXX14_CONSTEXPR int_adapterconst int_type -BOOST_CXX14_CONSTEXPR int_adapterconst int_adapter< rhs_type > &Operator allows for subtracting dissimilar int_adapter types. The return type will match that of the the calling object's type -BOOST_CXX14_CONSTEXPR int_adapterconst int_type -BOOST_CXX14_CONSTEXPR int_adapterconst int_adapter & -BOOST_CXX14_CONSTEXPR int_adapterconst intProvided for cases when automatic conversion from 'int' to 'int_adapter' causes incorrect results. -BOOST_CXX14_CONSTEXPR int_adapterconst int_adapter & -BOOST_CXX14_CONSTEXPR int_adapterconst intProvided for cases when automatic conversion from 'int' to 'int_adapter' causes incorrect results. -BOOST_CXX14_CONSTEXPR int_adapterconst int_adapter & -BOOST_CXX14_CONSTEXPR int_adapterconst intProvided for cases when automatic conversion from 'int' to 'int_adapter' causes incorrect results. - -int_type - -BOOST_CONSTEXPR bool -BOOST_CONSTEXPR int_adapter -BOOST_CONSTEXPR int_adapter -BOOST_CONSTEXPR int_adapter -BOOST_CONSTEXPR int_adapter max -BOOST_CONSTEXPR int_adapter min -BOOST_CXX14_CONSTEXPR int_adapterspecial_values -BOOST_CONSTEXPR boolint_type -BOOST_CXX14_CONSTEXPR boolint_type -BOOST_CXX14_CONSTEXPR boolint_type -BOOST_CXX14_CONSTEXPR boolint_type -BOOST_CXX14_CONSTEXPR special_valuesint_typeReturns either special value type or is_not_special. -BOOST_CONSTEXPR int_type - - -BOOST_CXX14_CONSTEXPR intconst int_adapter &returns -1, 0, 1, or 2 if 'this' is <, ==, >, or 'nan comparison' rhs -BOOST_CXX14_CONSTEXPR int_adapterconst int_adapter &Assumes at least 'this' or 'rhs' is a special value. -BOOST_CXX14_CONSTEXPR int_adapterconst int &Assumes 'this' is a special value. - - - - - - - - - - - - - - -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const int_adapter< int_type > &Expected output is either a numeric representation or a special values representation. - Ex. "12", "+infinity", "not-a-number", etc. - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::date_time::iso_format_base< charT >Extended format uses seperators YYYY-MM-DD. -boolExtended format needs char separators. - -boost::date_time::iso_format_base< charT >Format description for ISO 8601 normal YYYYMMDD. -boolThe ios standard format doesn't use char separators. - -Class to provide common ISO 8601 formatting spec. -month_format_specDescribe month format – its an integer in ISO 8601 format. -const charT *String used printed is date is invalid. -const charT *String used to for positive infinity value. -const charT *String used to for positive infinity value. -charTISO 8601 char for a year – used in durations. -charTISO 8601 char for a month. -charTISO 8601 char for a day. -charTchar for minute -charTchar for minute -charTchar for second -charTISO 8601 char for a period. -charTUsed in time in mixed strings to set start of time. -charTUsed in mixed strings to identify start of a week number. -charTSeparators for periods. -charTSeparator for hh:mm:ss. -charTPreferred Separator for hh:mm:ss,decimal_fraction. -boolcharT -boolcharT -boolcharT -charT - -wchar_tClass to provide common ISO 8601 formatting spec. -month_format_specDescribe month format – its an integer in ISO 8601 format. -const wchar_t *String used printed is date is invalid. -const wchar_t *String used to for positive infinity value. -const wchar_t *String used to for positive infinity value. -wchar_tISO 8601 char for a year – used in durations. -wchar_tISO 8601 char for a month. -wchar_tISO 8601 char for a day. -wchar_tchar for minute -wchar_tchar for minute -wchar_tchar for second -wchar_tISO 8601 char for a period. -wchar_tUsed in time in mixed strings to set start of time. -wchar_tUsed in mixed strings to identify start of a week number. -wchar_tSeparators for periods. -wchar_tSeparator for hh:mm:ss. -wchar_tPreferred Separator for hh:mm:ss,decimal_fraction. -boolwchar_t -boolwchar_t -boolwchar_t -wchar_t - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Time adjustment calculations for local times - -dst_rulesAllow sliding utc adjustment with fixed dst rules. time_type::time_duration_type -time_type::date_type - -time_duration_typeboolPresumes local time. - -time_duration_type -Template that simplifies the creation of local time calculator. Use this template to create the timezone to utc convertors as required.This class will also work for other regions that don't use dst and have a utc offset which is an integral number of hours.Template Parameters -time_type – Time class to use -utc_offset – Number hours local time is adjust from utc -use_dst – true (default) if region uses dst, false otherwise For example: //eastern timezone is utc-5 -typedef date_time::local_adjustor<ptime, -5, us_dst> us_eastern; -typedef date_time::local_adjustor<ptime, -6, us_dst> us_central; -typedef date_time::local_adjustor<ptime, -7, us_dst> us_mountain; -typedef date_time::local_adjustor<ptime, -8, us_dst> us_pacific; -typedef date_time::local_adjustor<ptime, -7, no_dst> us_arizona; - time_type::time_duration_type -time_type::date_type -static_local_time_adjustor< time_type, dst_rule, utc_adjustment< time_duration_type, utc_offset > > - -time_typeconst time_type &Convert a utc time to local time. -time_typeconst time_type &date_time::dst_flagsdate_time::calculateConvert a local time to utc. - -dst_rulesutc_offset_rulesEmbed the rules for local time adjustments at compile time. time_type::time_duration_type -time_type::date_type - -time_duration_typeconst time_type &UTC time to calculate offset to local time This adjustment depends on the following observations about the workings of the DST boundary offset. Since UTC time labels are monotonically increasing we can determine if a given local time is in DST or not and therefore adjust the offset appropriately.Calculates the offset from a utc time to local based on dst and utc offset. -The logic is as follows. Starting with UTC time use the offset to create a label for an non-dst adjusted local time. Then call dst_rules::local_is_dst with the non adjust local time. The results of this function will either unabiguously decide that the initial local time is in dst or return an illegal or ambiguous result. An illegal result only occurs at the end of dst (where labels are skipped) and indicates that dst has ended. An ambiguous result means that we need to recheck by making a dst adjustment and then rechecking. If the dst offset is added to the utc time and the recheck proves non-ambiguous then we are past the boundary. If it is still ambiguous then we are ahead of the boundary and dst is still in effect.TODO – check if all dst offsets are positive. If not then the algorithm needs to check for this and reverse the illegal/ambiguous logic. -time_duration_typeconst time_type &date_time::dst_flagsdate_time::calculateGet the offset to UTC given a local time. - -Provides a base offset adjustment from utc. -time_duration_type -time_duration_type - - - - - - - - - - - - - -void - - - - - - - - - - - - - - - - - - - - - - -
-
- - -date_type::day_of_week_type -date_type::month_type -date_type::year_type -date_time::last_kday_of_month< date_type > -date_time::last_kday_of_month< date_type > - -day_of_week_typeyear_type -month_typeyear_type -day_of_week_typeyear_type -month_typeyear_type -int -int -int -date_typeyear_type -date_typeyear_type - -Rules for daylight savings start in the EU (Last Sun in Mar) These amount to the following: -Start of dst day is last Sunday in March -End day of dst is last Sunday in Oct -Going forward switch time is 2:00 am (offset 120 minutes) -Going back switch time is 3:00 am (off set 180 minutes) -Shift duration is one hour (60 minutes) - -date_type::day_of_week_type -date_type::month_type -date_type::year_type -date_time::last_kday_of_month< date_type > -date_time::last_kday_of_month< date_type > - -day_of_week_typeyear_type -month_typeyear_type -day_of_week_typeyear_type -month_typeyear_type -int -int -int -date_typeyear_type -date_typeyear_type - -boost::date_time::eu_dst_trait< date_type >Alternative dst traits for some parts of the United Kingdom. -int -int -int - -Specification for daylight savings start rules in US. This class is used to configure dst_calc_engine template typically as follows: using namespace boost::gregorian; -using namespace boost::posix_time; -typedef us_dst_trait<date> us_dst_traits; -typedef boost::date_time::dst_calc_engine<date, time_duration, - us_dst_traits> - us_dst_calc; -//calculate the 2002 transition day of USA April 7 2002 -date dst_start = us_dst_calc::local_dst_start_day(2002); - -//calculate the 2002 transition day of USA Oct 27 2002 -date dst_end = us_dst_calc::local_dst_end_day(2002); - -//check if a local time is in dst or not -- posible answers -//are yes, no, invalid time label, ambiguous -ptime t(...some time...); -if (us_dst::local_is_dst(t.date(), t.time_of_day()) - == boost::date_time::is_not_in_dst) -{ - -} - This generates a type suitable for the calculation of dst transitions for the United States. Of course other templates can be used for other locales. date_type::day_of_week_type -date_type::month_type -date_type::year_type -date_time::nth_kday_of_month< date_type > -date_time::first_kday_of_month< date_type > -date_time::first_kday_of_month< date_type > -date_time::last_kday_of_month< date_type > - -day_of_week_typeyear_type -month_typeyear_type -day_of_week_typeyear_type -month_typeyear_type -date_typeyear_type -date_typeyear_type -int -int -int - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-This file contains a high resolution time clock implementation. - -A clock providing microsecond level resolution. A high precision clock that measures the local time at a resolution up to microseconds and adjusts to the resolution of the time system. For example, for the a library configuration with nano second resolution, the last 3 places of the fractional seconds will always be 000 since there are 1000 nano-seconds in a micro second. time_type::date_type -time_type::time_duration_type -time_duration_type::rep_type - -time_typeshared_ptr< time_zone_type >return a local time object for the given zone, based on computer clock -time_typeReturns the local time based on computer clock settings. -time_typeReturns the UTC time based on computer settings. - - -time_typetime_converter -boost::uint64_tboost::winapi::FILETIME_ const &The function converts file_time into number of microseconds elapsed since 1970-Jan-01Only dates after 1970-Jan-01 are supported. Dates before will be wrapped. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Enum for distinguishing parsing and formatting options. -Enum for distinguishing the order of Month, Day, & Year. Enum for distinguishing the order in which Month, Day, & Year will appear in a date string - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-This file contain the implementation of the period abstraction. This is basically the same idea as a range. Although this class is intended for use in the time library, it is pretty close to general enough for other numeric uses. - -boost::less_than_comparable< period< point_rep, duration_rep >, boost::equality_comparable< period< point_rep, duration_rep > > >Provides generalized period type useful in date-time systems. This template uses a class to represent a time point within the period and another class to represent a duration. As a result, this class is not appropriate for use when the number and duration representation are the same (eg: in the regular number domain).A period can be specified by providing either the begining point and a duration or the begining point and the end point( end is NOT part of the period but 1 unit past it. A period will be "invalid" if either end_point <= begin_point or the given duration is <= 0. Any valid period will return false for is_null().Zero length periods are also considered invalid. Zero length periods are periods where the begining and end points are the same, or, the given duration is zero. For a zero length period, the last point will be one unit less than the begining point.In the case that the begin and last are the same, the period has a length of one unit.The best way to handle periods is usually to provide a begining point and a duration. So, day1 + 7 days is a week period which includes all of the first day and 6 more days (eg: Sun to Sat). point_rep -duration_rep - -BOOST_CXX14_CONSTEXPR point_repReturn the first element in the period. -BOOST_CXX14_CONSTEXPR point_repReturn one past the last element. -BOOST_CXX14_CONSTEXPR point_repReturn the last item in the period. -BOOST_CXX14_CONSTEXPR duration_repReturn the length of the period. -BOOST_CXX14_CONSTEXPR boolTrue if period is ill formed (length is zero or less) -BOOST_CXX14_CONSTEXPR boolconst period &Equality operator. -BOOST_CXX14_CONSTEXPR boolconst period &Strict as defined by rhs.last <= lhs.last. -BOOST_CXX14_CONSTEXPR voidconst duration_rep &Shift the start and end by the specified amount. -BOOST_CXX14_CONSTEXPR voidconst duration_rep &Expands the size of the period by the duration on both ends.So before expand [-------] -^ ^ ^ ^ ^ ^ ^ -1 2 3 4 5 6 7 - After expand(2) [----------------------] -^ ^ ^ ^ ^ ^ ^ -1 2 3 4 5 6 7 - -BOOST_CXX14_CONSTEXPR boolconst point_rep &True if the point is inside the period, zero length periods contain no points. -BOOST_CXX14_CONSTEXPR boolconst period &True if this period fully contains (or equals) the other period. -BOOST_CXX14_CONSTEXPR boolconst period &True if the periods overlap in any way. -BOOST_CXX14_CONSTEXPR boolconst period &True if periods are next to each other without a gap. -BOOST_CXX14_CONSTEXPR boolconst point_rep &True if all of the period is prior to the passed point or end <= t. -BOOST_CXX14_CONSTEXPR boolconst point_rep &True if all of the period is prior or t < start. -BOOST_CXX14_CONSTEXPR periodconst period &Returns the period of intersection or invalid range no intersection. -BOOST_CXX14_CONSTEXPR periodconst period &Returns the union of intersecting periods – or null period. -BOOST_CXX14_CONSTEXPR periodconst period &Combine two periods with earliest start and latest end. Combines two periods and any gap between them such that start = min(p1.start, p2.start) end = max(p1.end , p2.end) [---p1---) - [---p2---) -result: - [-----------p3----------) - - -point_reppoint_repcreate a period from begin to last eg: [begin,end) If end <= begin then the period will be invalid -point_repduration_repcreate a period as [begin, begin+len) If len is <= 0 then the period will be invalid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Not a facet, but a class used to specify and control period formats. Provides settings for the following: -period_separator – default '/' -period_open_start_delimeter – default '[' -period_open_range_end_delimeter – default ')' -period_closed_range_end_delimeter – default ']' -display_as_open_range, display_as_closed_range – default closed_range - -Thus the default formatting for a period is as follows: [period.start()/period.last()] - So for a typical date_period this would be [2004-Jan-04/2004-Feb-01] - where the date formatting is controlled by the date facet -std::basic_string< CharT > -CharT -std::basic_string< char_type >::const_iterator -std::vector< std::basic_string< CharT > > -const char_type -const char_type -const char_type -const char_type - -OutItrTOutItrT &Puts the characters between period elements into stream – default is /. -OutItrTOutItrT &Puts the period start characters into stream – default is [. -OutItrTOutItrT &Puts the period end characters into stream as controled by open/closed range setting. -range_display_options -voidrange_display_optionsReset the range_option control. -voidconst string_type &const string_type &const string_type &const string_type &Change the delimiter strings. -OutItrTOutItrTstd::ios_base &char_typeconst period_type &const facet_type &Generic code to output a period – no matter the period type. This generic code will output any period using a facet to to output the 'elements'. For example, in the case of a date_period the elements will be instances of a date which will be formatted according the to setup in the passed facet parameter.The steps for formatting a period are always the same: -put the start delimiter -put start element -put the separator -put either last or end element depending on range settings -put end delimeter depending on range settings - -Thus for a typical date period the result might look like this: [March 01, 2004/June 07, 2004] <-- closed range -[March 01, 2004/June 08, 2004) <-- open range - - -range_display_optionsAS_CLOSED_RANGEconst char_type *constdefault_period_separatorconst char_type *constdefault_period_start_delimeterconst char_type *constdefault_period_open_range_end_delimeterconst char_type *constdefault_period_closed_range_end_delimeterConstructor that sets up period formatter options – default should suffice most cases. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Not a facet, but a class used to specify and control period parsing. Provides settings for the following: -period_separator – default '/' -period_open_start_delimeter – default '[' -period_open_range_end_delimeter – default ')' -period_closed_range_end_delimeter – default ']' -display_as_open_range, display_as_closed_range – default closed_range - -For a typical date_period, the contents of the input stream would be [2004-Jan-04/2004-Feb-01] - where the date format is controlled by the date facet -std::basic_string< CharT > -CharT -std::istreambuf_iterator< CharT > -string_parse_tree< CharT > -parse_tree_type::parse_match_result_type -std::vector< std::basic_string< CharT > > -const char_type -const char_type -const char_type -const char_type - -period_range_option -voidperiod_range_option -collection_type -voidconst string_type &const string_type &const string_type &const string_type & -period_typestream_itr_type &stream_itr_type &std::ios_base &const period_type &const duration_type &const facet_type &Generic code to parse a period – no matter the period type. This generic code will parse any period using a facet to to get the 'elements'. For example, in the case of a date_period the elements will be instances of a date which will be parsed according the to setup in the passed facet parameter.The steps for parsing a period are always the same: -consume the start delimiter -get start element -consume the separator -get either last or end element depending on range settings -consume the end delimeter depending on range settings - -Thus for a typical date period the contents of the input stream might look like this: [March 01, 2004/June 07, 2004] <-- closed range -[March 01, 2004/June 08, 2004) <-- open range - - -period_range_optionAS_CLOSED_RANGEconst char_type *constdefault_period_separatorconst char_type *constdefault_period_start_delimeterconst char_type *constdefault_period_open_range_end_delimeterconst char_type *constdefault_period_closed_range_end_delimeterConstructor that sets up period parser options. - -voidstream_itr_type &stream_itr_type &const string_type &throws ios_base::failure if delimiter and parsed data do not match - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Class that provides generic formmatting ostream formatting for special values. This class provides for the formmating of special values to an output stream. In particular, it produces strings for the values of negative and positive infinity as well as not_a_date_time.While not a facet, this class is used by the date and time facets for formatting special value types. std::basic_string< CharT > -CharT -std::vector< string_type > -const char_typeStorage for the strings used to indicate special values. - -OutItrTOutItrTconst boost::date_time::special_values & - -Construct special values formatter using default strings. Default strings are not-a-date-time -infinity +infinity -const char_type *const *const char_type *const *Construct special values formatter from array of strings. This constructor will take pair of iterators from an array of strings that represent the special values and copy them for use in formatting special values. const char* const special_value_names[]={"nadt","-inf","+inf" }; - -special_value_formatter svf(&special_value_names[0], &special_value_names[3]); - -typename collection_type::iteratortypename collection_type::iterator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Class for special_value parsing. TODO: add doc-comments for which elements can be changed Parses input stream for strings representing special_values. Special values parsed are: -not_a_date_time -neg_infin -pod_infin -min_date_time -max_date_time - -std::basic_string< charT > -std::basic_stringstream< charT > -std::istreambuf_iterator< charT > -date_type::duration_type -string_parse_tree< charT > -parse_tree_type::parse_match_result_type -std::vector< std::basic_string< charT > > -charT -const char_type -const char_type -const char_type -const char_type -const char_type - -voidconst string_type &const string_type &const string_type &const string_type &const string_type &Replace special value strings. -boolstream_itr_type &the start iterator stream_itr_type &the end iterator match_results &the match result: mr.current_match is set to the corresponding special_value or -1 Given an input iterator, attempt to match it to a known special value - -whether something matched - - -Creates a special_values_parser with the default set of "sv_strings". -const string_type &const string_type &const string_type &const string_type &const string_type &Creates a special_values_parser using a user defined set of element strings. -typename collection_type::iteratortypename collection_type::iterator - -boolconst string_type &the string to check The parser is expensive to create, and not thread-safe so it cannot be static therefore given a string, determine if it is likely to be a special value. A negative response is a definite no, whereas a positive is only likely and match() should be called and return value checked. - -false if it is definitely not a special value - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - -std::basic_string< OutputT >const std::basic_string< InputT > &Converts a string from one value_type to another. Converts a wstring to a string (or a string to wstring). If both template parameters are of same type, a copy of the input string is returned. - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -= -1 -std::basic_string< charT > -string_type -unsigned short -short - -string_type -charT -boolReturns true if more characters were parsed than was necessary. Should be used in conjunction with last_char() to get the remaining character. - - -Recursive data structure to allow efficient parsing of various strings. This class provides a quick lookup by building what amounts to a tree data structure. It also features a match function which can can handle nasty input interators by caching values as it recurses the tree so that it can backtrack as needed. std::multimap< charT, string_parse_tree< charT > > -std::multimap< charT, string_parse_tree > -ptree_coll::value_type -ptree_coll::iterator -ptree_coll::const_iterator -std::basic_string< charT > -std::vector< std::basic_string< charT > > -parse_match_result< charT > -ptree_coll -short - -voidconst string_type &unsigned short -shortstd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &parse_match_result_type &unsigned int &Recursive function that finds a matching string in the tree. Must check match_results::has_remaining() after match() is called. This is required so the user can determine if stream iterator is already pointing to the expected character or not (match() might advance sitr to next char in stream).A parse_match_result that has been returned from a failed match attempt can be sent in to the match function of a different string_parse_tree to attempt a match there. Use the iterators for the partially consumed stream, the parse_match_result object, and '0' for the level parameter. -parse_match_result_typestd::istreambuf_iterator< charT > &std::istreambuf_iterator< charT > &Must check match_results::has_remaining() after match() is called. This is required so the user can determine if stream iterator is already pointing to the expected character or not (match() might advance sitr to next char in stream). -voidstd::ostream &int & -voidstd::ostream & -voidstd::ostream &charT - -collection_typeunsigned int0Parameter "starting_point" designates where the numbering begins. A starting_point of zero will start the numbering at zero (Sun=0, Mon=1, ...) were a starting_point of one starts the numbering at one (Jan=1, Feb=2, ...). The default is zero, negative vaules are not allowed -shortparse_match_result_type::PARSE_ERROR - - - - - - - - - - -std::basic_ostream< charT > &std::basic_ostream< charT > &parse_match_result< charT > & - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - -std::vector< std::basic_string< charT > >const std::locale &The locale to use when gathering the strings booltrueTrue(default) to gather short strings, false for long strings. This function gathers up all the month strings from a std::locale. Using the time_put facet, this function creates a collection of all the month strings from a locale. This is handy when building custom date parsers or formatters that need to be localized. - -A vector of strings containing the strings in order. eg: Jan, Feb, Mar, etc. - -std::vector< std::basic_string< charT > >const std::locale &The locale to use when gathering the strings booltrueTrue(default) to gather short strings, false for long strings. This function gathers up all the weekday strings from a std::locale. Using the time_put facet, this function creates a collection of all the weekday strings from a locale starting with the string for 'Sunday'. This is handy when building custom date parsers or formatters that need to be localized. - -A vector of strings containing the weekdays in order. eg: Sun, Mon, Tue, Wed, Thu, Fri, Sat - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-This file contains the interface for the time associated classes. - -boost::less_than_comparable< T, boost::equality_comparable< T > >Representation of a precise moment in time, including the date. This class is a skeleton for the interface of a temporal type with a resolution that is higher than a day. It is intended that this class be the base class and that the actual time class be derived using the BN pattern. In this way, the derived class can make decisions such as 'should there be a default constructor' and what should it set its value to, should there be optional constructors say allowing only an time_durations that generate a time from a clock,etc. So, in fact multiple time types can be created for a time_system with different construction policies, and all of them can perform basic operations by only writing a copy constructor. Finally, compiler errors are also shorter.The real behavior of the time class is provided by the time_system template parameter. This class must provide all the logic for addition, subtraction, as well as define all the interface types. void -T -time_system::time_rep_type -time_system::date_type -time_system::date_duration_type -time_system::time_duration_type - -BOOST_CXX14_CONSTEXPR date_type -BOOST_CXX14_CONSTEXPR time_duration_type -std::stringboolfalseOptional bool parameter will return time zone as an offset (ie "+07:00"). Empty string is returned for classes that do not use a time_zone -std::stringboolfalseOptional bool parameter will return time zone as an offset (ie "+07:00"). Empty string is returned for classes that do not use a time_zone -std::stringAn empty string is returned for classes that do not use a time_zone. -BOOST_CXX14_CONSTEXPR boolcheck to see if date is not a value -BOOST_CXX14_CONSTEXPR boolcheck to see if date is one of the infinity values -BOOST_CXX14_CONSTEXPR boolcheck to see if date is greater than all possible dates -BOOST_CXX14_CONSTEXPR boolcheck to see if date is greater than all possible dates -BOOST_CXX14_CONSTEXPR boolcheck to see if time is a special value -BOOST_CXX14_CONSTEXPR boolconst time_type &Equality operator – others generated by boost::equality_comparable. -BOOST_CXX14_CONSTEXPR boolconst time_type &Equality operator – others generated by boost::less_than_comparable. -BOOST_CXX14_CONSTEXPR time_duration_typeconst time_type &difference between two times -BOOST_CXX14_CONSTEXPR time_typeconst date_duration_type &add date durations -BOOST_CXX14_CONSTEXPR time_typeconst date_duration_type & -BOOST_CXX14_CONSTEXPR time_typeconst date_duration_type &subtract date durations -BOOST_CXX14_CONSTEXPR time_typeconst date_duration_type & -BOOST_CXX14_CONSTEXPR time_typeconst time_duration_type &add time durations -BOOST_CXX14_CONSTEXPR time_typeconst time_duration_type & -BOOST_CXX14_CONSTEXPR time_typeconst time_duration_type &subtract time durations -BOOST_CXX14_CONSTEXPR time_typeconst time_duration_type & - -const date_type &const time_duration_type &dst_flagsnot_dst -special_values -const time_rep_type & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-This file contains the interface for clock devices. - -A clock providing time level services based on C time_t capabilities. This clock provides resolution to the 1 second level time_type::date_type -time_type::time_duration_type - -time_type -time_typeGet the current day in universal date as a ymd_type. -time_typeboost::shared_ptr< time_zone_type > - - -time_type::std::tm * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-This file contains nice definitions for handling the resoluion of various time reprsentations. - -= hundrethDefines some nice types for handling time level resolutions. -Flags for daylight savings or summer time. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -base_durationTemplate for instantiating derived adjusting durations. base_duration::impl_type -base_duration::traits_type - -(traits_type::ticks_per_second >=frac_of_second ? traits_type::ticks_per_second % frac_of_second :frac_of_second % traits_type::ticks_per_second)=0\ "The base duration resolution must be a multiple of the subsecond duration resolution" -boost::int64_tadjustment_ratio(traits_type::ticks_per_second >=frac_of_second ? traits_type::ticks_per_second/frac_of_second :frac_of_second/traits_type::ticks_per_second) - - - -T const &typename boost::enable_if< boost::is_integral< T >, void >::type *BOOST_DATE_TIME_NULLPTR -boost::less_than_comparable< T, boost::equality_comparable< T > >Represents some amount of elapsed time measure to a given resolution. This class represents a standard set of capabilities for all counted time durations. Time duration implementations should derive from this class passing their type as the first template parameter. This design allows the subclass duration types to provide custom construction policies or other custom features not provided here. -void -T -rep_type -rep_type::day_type -rep_type::hour_type -rep_type::min_type -rep_type::sec_type -rep_type::fractional_seconds_type -rep_type::tick_type -rep_type::impl_type - -BOOST_CXX14_CONSTEXPR hour_typeReturns number of hours in the duration. -BOOST_CXX14_CONSTEXPR min_typeReturns normalized number of minutes. -BOOST_CXX14_CONSTEXPR sec_typeReturns normalized number of seconds (0..60) -BOOST_CXX14_CONSTEXPR sec_typeReturns total number of seconds truncating any fractional seconds. -BOOST_CXX14_CONSTEXPR tick_typeReturns total number of milliseconds truncating any fractional seconds. -BOOST_CXX14_CONSTEXPR tick_typeReturns total number of nanoseconds truncating any sub millisecond values. -BOOST_CXX14_CONSTEXPR tick_typeReturns total number of microseconds truncating any sub microsecond values. -BOOST_CXX14_CONSTEXPR fractional_seconds_typeReturns count of fractional seconds at given resolution. -BOOST_CXX14_CONSTEXPR duration_type -BOOST_CXX14_CONSTEXPR duration_type -BOOST_CONSTEXPR bool -BOOST_CONSTEXPR bool -BOOST_CONSTEXPR bool -BOOST_CONSTEXPR boolconst time_duration & -BOOST_CONSTEXPR boolconst time_duration & -BOOST_CONSTEXPR duration_typeunary- Allows for time_duration td = -td1 -BOOST_CONSTEXPR duration_typeconst duration_type & -BOOST_CONSTEXPR duration_typeconst duration_type & -BOOST_CONSTEXPR duration_typeint -BOOST_CXX14_CONSTEXPR duration_typeconst duration_type & -BOOST_CXX14_CONSTEXPR duration_typeconst duration_type & -BOOST_CXX14_CONSTEXPR duration_typeintDivision operations on a duration with an integer. -BOOST_CXX14_CONSTEXPR duration_typeintMultiplication operations an a duration with an integer. -BOOST_CXX14_CONSTEXPR duration_typeint -BOOST_CXX14_CONSTEXPR tick_type -BOOST_CXX14_CONSTEXPR boolIs ticks_ a special value? -BOOST_CXX14_CONSTEXPR boolIs duration pos-infinity. -BOOST_CXX14_CONSTEXPR boolIs duration neg-infinity. -BOOST_CXX14_CONSTEXPR boolIs duration not-a-date-time. -BOOST_CONSTEXPR impl_typeUsed for special_values output. - - -hour_typemin_typesec_type0fractional_seconds_type0 -special_valuesConstruct from special_values. - -BOOST_CXX14_CONSTEXPR duration_typeReturns smallest representable duration. -BOOST_CXX14_CONSTEXPR tick_typeReturn the number of ticks in a second. -BOOST_CXX14_CONSTEXPR time_resolutionsProvide the resolution of this duration type. -BOOST_CXX14_CONSTEXPR unsigned shortReturns number of possible digits in fractional seconds. - - - -impl_type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::date_time::date_facet< time_type::date_type, CharT, OutItrT >Facet used for format-based output of time types This class provides for the use of format strings to output times. In addition to the flags for formatting date elements, the following are the allowed format flags: -x X => default format - enables addition of more flags to default (ie. "%x %X %z") -f => fractional seconds ".123456" -F => fractional seconds or none: like frac sec but empty if frac sec == 0 -s => seconds w/ fractional sec "02.123" (this is the same as "%S%f) - - %S => seconds "02" - - %z => abbreviated time zone "EDT" - - %Z => full time zone name "Eastern Daylight Time" - -time_type::date_type -time_type::time_duration_type -boost::date_time::period< time_type, time_duration_type > -boost::date_time::date_facet< typename time_type::date_type, CharT, OutItrT > -base_type::string_type -base_type::char_type -base_type::period_formatter_type -base_type::special_values_formatter_type -base_type::date_gen_formatter_type -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -std::locale::id - -std::locale::id &void -voidconst char_type *constChanges format for time_duration. -void -void -OutItrTOutItrTstd::ios_base &char_typeconst time_type & -OutItrTOutItrTstd::ios_base &char_typeconst time_duration_type &put function for time_duration -OutItrTOutItrTstd::ios_base &char_typeconst period_type & - -::size_t0sets default formats for ptime, local_date_time, and time_duration -const char_type *period_formatter_typeperiod_formatter_type()const special_values_formatter_type &special_values_formatter_type()date_gen_formatter_typedate_gen_formatter_type()::size_t0Construct the facet with an explicitly specified format. - -string_typeconst time_duration_type &bool -string_typeconst time_duration_type &int2 -string_typeIntTint2 - -CharT -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -const char_type -boost::date_time::date_input_facet< time_type::date_type, CharT, InItrT >Facet for format-based input. time_type::date_type -time_type::time_duration_type -time_duration_type::fractional_seconds_type -boost::date_time::period< time_type, time_duration_type > -boost::date_time::date_input_facet< typename time_type::date_type, CharT, InItrT > -base_type::duration_type -base_type::year_type -base_type::month_type -base_type::day_type -base_type::string_type -string_type::const_iterator -base_type::char_type -base_type::format_date_parser_type -base_type::period_parser_type -base_type::special_values_parser_type -base_type::date_gen_parser_type -base_type::special_values_parser_type::match_results -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -const char_type * -std::locale::id - -voidconst char_type *constSet the format for time_duration. -void -void -InItrTInItrT &InItrT &std::ios_base &period_type & -InItrTInItrT &InItrT &std::ios_base &time_duration_type & -InItrTInItrT &InItrT &std::ios_base &time_type &Parses a time object from the input stream. -InItrTInItrT &InItrT &std::ios_base &time_type &string_type &Expects a time_zone in the input stream. - -const string_type &::size_t0Constructor that takes a format string for a ptime. -const string_type &const format_date_parser_type &const special_values_parser_type &const period_parser_type &const date_gen_parser_type &::size_t0 -::size_t0sets default formats for ptime, local_date_time, and time_duration - -InItrTInItrT &InItrT &std::ios_base &time_type &string_type &bool -InItrTInItrT &InItrT &temporal_type &char_type'\0'Helper function to check for special_value. First character may have been consumed during original parse attempt. Parameter 'c' should be a copy of that character. Throws ios_base::failure if parse fails. -voidInItrT &InItrT &fracional_seconds_type &Helper function for parsing a fractional second type from the stream. - - -int_typeint_typeconst unsigned shortHelper function to adjust trailing zeros when parsing fractional digits. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Put a time type into a stream using appropriate facets. std::basic_ostream< charT > -time_duration_type::fractional_seconds_type - -voidconst time_duration_type &ostream_type &Put time into an ostream. - -Put a time type into a stream using appropriate facets. std::basic_ostream< charT > -time_type::date_type -time_type::time_duration_type -ostream_time_duration_formatter< time_duration_type, charT > - -voidconst time_type &ostream_type &Put time into an ostream. - -Put a time period into a stream using appropriate facets. std::basic_ostream< charT > -time_period_type::point_type -ostream_time_formatter< time_type, charT > - -voidconst time_period_type &ostream_type &Put time into an ostream. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Simple time iterator skeleton class. time_type::time_duration_type - -time_itr & -time_itr & -const time_type & -const time_type * -boolconst time_type & -boolconst time_type & -boolconst time_type & -boolconst time_type & -boolconst time_type & -boolconst time_type & - -time_typetime_duration_type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -int_typeint_typeint_typecomputes exponential math like 2^8 => 256, only works with positive integers -time_durationconst std::basic_string< char_type > &Creates a time_duration object from a delimited string. Expected format for string is "[-]h[h][:mm][:ss][.fff]". If the number of fractional digits provided is greater than the precision of the time duration type then the extra digits are truncated.A negative duration will be created if the first character in string is a '-', all other '-' will be treated as delimiters. Accepted delimiters are "-:,.". -time_durationconst std::string &Creates a time_duration object from a delimited string. Expected format for string is "[-]h[h][:mm][:ss][.fff]". If the number of fractional digits provided is greater than the precision of the time duration type then the extra digits are truncated.A negative duration will be created if the first character in string is a '-', all other '-' will be treated as delimiters. Accepted delimiters are "-:,.". -boolconst std::string &charstd::string &std::string &Utility function to split appart string. -time_typeconst std::string &char -time_durationconst std::string &Parse time duration part of an ISO 8601 time of form: [-]hhmmss.fff... -time_typeconst std::string &charParse time string of form YYYYMMDDThhmmss where T is delimeter between date and time. - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -frac_sec_type::int_type -frac_sec_type::int_type -frac_sec_type::impl_type -var_type -var_type -var_type -var_type - -BOOST_CXX14_CONSTEXPR fractional_seconds_typeimpl_type -BOOST_CXX14_CONSTEXPR bool -BOOST_CXX14_CONSTEXPR time_resolutions -BOOST_CXX14_CONSTEXPR unsigned short -BOOST_CXX14_CONSTEXPR fractional_seconds_type -BOOST_CXX14_CONSTEXPR tick_typehour_typemin_typesec_typefractional_seconds_typeAny negative argument results in a negative tick_count. - - -boost::int64_tticks_per_secondresolution_adjust -fractional_seconds_typeticks_per_secondresolution_adjust - -traits struct for time_resolution_traits implementation type boost::int32_t -boost::date_time::int_adapter< boost::int32_t > - -BOOST_CXX14_CONSTEXPR int_typeimpl_type -BOOST_CXX14_CONSTEXPR boolUsed to determine if implemented type is int_adapter or int. - -traits struct for time_resolution_traits implementation type boost::int64_t -boost::date_time::int_adapter< boost::int64_t > - -BOOST_CXX14_CONSTEXPR int_typeimpl_type -BOOST_CXX14_CONSTEXPR boolUsed to determine if implemented type is int_adapter or int. - -traits struct for time_resolution_traits implementation type boost::int32_t -boost::int32_t - -BOOST_CXX14_CONSTEXPR int_typeimpl_type -BOOST_CXX14_CONSTEXPR boolUsed to determine if implemented type is int_adapter or int. - -traits struct for time_resolution_traits implementation type boost::int64_t -boost::int64_t - -BOOST_CXX14_CONSTEXPR int_typeimpl_type -BOOST_CXX14_CONSTEXPR boolUsed to determine if implemented type is int_adapter or int. - -time_resolution_traits< time_resolution_traits_adapted32_impl, milli, 1000, 3 > -time_resolution_traits< time_resolution_traits_adapted64_impl, micro, 1000000, 6 > -time_resolution_traits< time_resolution_traits_adapted64_impl, nano, 1000000000, 9 > -BOOST_CXX14_CONSTEXPR TTSimple function to calculate absolute value of a numeric type. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Time representation that uses a single integer count. config::int_type -config::date_type -config::impl_type -date_type::duration_type -date_type::calendar_type -date_type::ymd_type -config::time_duration_type -config::resolution_traits - -BOOST_CXX14_CONSTEXPR date_type -BOOST_CXX14_CONSTEXPR unsigned long -BOOST_CXX14_CONSTEXPR int_type -BOOST_CXX14_CONSTEXPR int_type -BOOST_CXX14_CONSTEXPR bool -BOOST_CXX14_CONSTEXPR bool -BOOST_CXX14_CONSTEXPR bool -BOOST_CXX14_CONSTEXPR bool -BOOST_CXX14_CONSTEXPR impl_type - -const date_type &const time_duration_type & -int_type -impl_type - -BOOST_CXX14_CONSTEXPR int_type - -An unadjusted time system implementation. time_rep -time_rep_type::impl_type -time_rep_type::time_duration_type -time_duration_type::fractional_seconds_type -time_rep_type::date_type -time_rep_type::date_duration_type - -BOOST_CXX14_CONSTEXPR voidconst T & -BOOST_CXX14_CONSTEXPR time_rep_typeconst date_type &const time_duration_type &date_time::dst_flagsnot_dst -BOOST_CXX14_CONSTEXPR time_rep_typespecial_values -BOOST_CXX14_CONSTEXPR date_typeconst time_rep_type & -BOOST_CXX14_CONSTEXPR time_duration_typeconst time_rep_type & -std::stringconst time_rep_type & -BOOST_CXX14_CONSTEXPR boolconst time_rep_type &const time_rep_type & -BOOST_CXX14_CONSTEXPR boolconst time_rep_type &const time_rep_type & -BOOST_CXX14_CONSTEXPR time_rep_typeconst time_rep_type &const date_duration_type & -BOOST_CXX14_CONSTEXPR time_rep_typeconst time_rep_type &const date_duration_type & -BOOST_CXX14_CONSTEXPR time_rep_typeconst time_rep_type &const time_duration_type & -BOOST_CXX14_CONSTEXPR time_rep_typeconst time_rep_type &time_duration_type -BOOST_CXX14_CONSTEXPR time_duration_typeconst time_rep_type &const time_rep_type & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -An unadjusted time system implementation. config::time_rep_type -config::date_type -config::time_duration_type -config::date_duration_type -config::int_type -config::resolution_traits -date_time::wrapping_int< int_type, INT64_C(86400) *ticks_per_second > -date_time::wrapping_int< split_timedate_system::int_type, split_timedate_system::ticks_per_day > -date_time::wrapping_int< int_type, ticks_per_day > - -int_typeticks_per_dayINT64_C(86400) *config::tick_per_second - - -BOOST_CXX14_CONSTEXPR time_rep_typespecial_values -BOOST_CXX14_CONSTEXPR time_rep_typeconst date_type &const time_duration_type &date_time::dst_flagsnot_dst -BOOST_CONSTEXPR date_typeconst time_rep_type & -BOOST_CONSTEXPR time_duration_typeconst time_rep_type & -std::stringconst time_rep_type & -BOOST_CONSTEXPR boolconst time_rep_type &const time_rep_type & -BOOST_CXX14_CONSTEXPR boolconst time_rep_type &const time_rep_type & -BOOST_CXX14_CONSTEXPR time_rep_typeconst time_rep_type &const date_duration_type & -BOOST_CXX14_CONSTEXPR time_rep_typeconst time_rep_type &const date_duration_type & -BOOST_CXX14_CONSTEXPR time_rep_typeconst time_rep_type &const time_duration_type & -BOOST_CXX14_CONSTEXPR time_rep_typeconst time_rep_type &time_duration_type -BOOST_CXX14_CONSTEXPR time_duration_typeconst time_rep_type &const time_rep_type & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Structure which holds the time offsets associated with daylight savings time. -time_duration_typeAmount DST adjusts the clock eg: plus one hour. -time_duration_typeTime past midnight on start transition day that dst starts. -time_duration_typeTime past midnight on end transition day that dst ends. - - -const time_duration_type &const time_duration_type &const time_duration_type & -Interface class for dynamic time zones. This class represents the base interface for all timezone representations. Subclasses may provide different systems for identifying a particular zone. For example some may provide a geographical based zone construction while others may specify the offset from GMT. Another possible implementation would be to convert from POSIX timezone strings. Regardless of the construction technique, this is the interface that these time zone types must provide.Note that this class is intended to be used as a shared resource (hence the derivation from boost::counted_base. CharT -std::basic_string< CharT > -std::basic_ostringstream< CharT > -time_type::date_type::year_type -time_type::time_duration_type - -string_typeString for the timezone when in daylight savings (eg: EDT) -string_typeString for the zone when not in daylight savings (eg: EST) -string_typeString for the timezone when in daylight savings (eg: Eastern Daylight Time) -string_typeString for the zone when not in daylight savings (eg: Eastern Standard Time) -boolTrue if zone uses daylight savings adjustments otherwise false. -time_typeyear_typeLocal time that DST starts – undefined if has_dst is false. -time_typeyear_typeLocal time that DST ends – undefined if has_dst is false. -time_duration_typeBase offset from UTC for zone (eg: -07:30:00) -time_duration_typeAdjustment forward or back made while DST is in effect. -string_typeReturns a POSIX time_zone string for this object. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -CharT -const char_type -const char_type -const char_type -Base type that holds various string names for timezone output. Class that holds various types of strings used for timezones. For example, for the western United States there is the full name: Pacific Standard Time and the abbreviated name: PST. During daylight savings there are additional names: Pacific Daylight Time and PDT. -std::basic_string< CharT > - -string_type -string_type -string_type -string_type - - -const string_type &const string_type &const string_type &const string_type & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -out_of_rangeException thrown when tz database locates incorrect field structure in data file. - -const std::string & -logic_errorException thrown when tz database cannot locate requested data file. - - -const std::string & -Creates a database of time_zones from csv datafile. The csv file containing the zone_specs used by the tz_db_base is intended to be customized by the library user. When customizing this file (or creating your own) the file must follow a specific format.This first line is expected to contain column headings and is therefore not processed by the tz_db_base.Each record (line) must have eleven fields. Some of those fields can be empty. Every field (even empty ones) must be enclosed in double-quotes. Ex: "America/Phoenix" <- string enclosed in quotes -"" <- empty field -Some fields represent a length of time. The format of these fields must be: "{+|-}hh:mm[:ss]" <- length-of-time format - Where the plus or minus is mandatory and the seconds are optional.Since some time zones do not use daylight savings it is not always necessary for every field in a zone_spec to contain a value. All zone_specs must have at least ID and GMT offset. Zones that use daylight savings must have all fields filled except: STD ABBR, STD NAME, DST NAME. You should take note that DST ABBR is mandatory for zones that use daylight savings (see field descriptions for further details).******* Fields and their description/details *********ID: Contains the identifying string for the zone_spec. Any string will do as long as it's unique. No two ID's can be the same.STD ABBR: STD NAME: DST ABBR: DST NAME: These four are all the names and abbreviations used by the time zone being described. While any string will do in these fields, care should be taken. These fields hold the strings that will be used in the output of many of the local_time classes. Ex: time_zone nyc = tz_db.time_zone_from_region("America/New_York"); -local_time ny_time(date(2004, Aug, 30), IS_DST, nyc); -cout << ny_time.to_long_string() << endl; -// 2004-Aug-30 00:00:00 Eastern Daylight Time -cout << ny_time.to_short_string() << endl; -// 2004-Aug-30 00:00:00 EDT -NOTE: The exact format/function names may vary - see local_time documentation for further details.GMT offset: This is the number of hours added to utc to get the local time before any daylight savings adjustments are made. Some examples are: America/New_York offset -5 hours, & Africa/Cairo offset +2 hours. The format must follow the length-of-time format described above.DST adjustment: The amount of time added to gmt_offset when daylight savings is in effect. The format must follow the length-of-time format described above.DST Start Date rule: This is a specially formatted string that describes the day of year in which the transition take place. It holds three fields of it's own, separated by semicolons. The first field indicates the "nth" weekday of the month. The possible values are: 1 (first), 2 (second), 3 (third), 4 (fourth), 5 (fifth), and -1 (last). The second field indicates the day-of-week from 0-6 (Sun=0). The third field indicates the month from 1-12 (Jan=1).Examples are: "-1;5;9"="Last Friday of September", "2;1;3"="Second Monday of March"Start time: Start time is the number of hours past midnight, on the day of the start transition, the transition takes place. More simply put, the time of day the transition is made (in 24 hours format). The format must follow the length-of-time format described above with the exception that it must always be positive.DST End date rule: See DST Start date rule. The difference here is this is the day daylight savings ends (transition to STD).End time: Same as Start time. char -time_zone_type::base_type -time_zone_type::time_duration_type -time_zone_names_base< char_type > -boost::date_time::dst_adjustment_offsets< time_duration_type > -std::basic_string< char_type > - -voidstd::istream &Process csv data file, may throw exceptions. May throw bad_field_count exceptions -voidconst std::string &Process csv data file, may throw exceptions. May throw data_not_accessible, or bad_field_count exceptions -boolconst string_type &boost::shared_ptr< time_zone_base_type >returns true if record successfully added to map Takes a region name in the form of "America/Phoenix", and a time_zone object for that region. The id string must be a unique name that does not already exist in the database. -boost::shared_ptr< time_zone_base_type >const string_type &Returns a time_zone object built from the specs for the given region. Returns a time_zone object built from the specs for the given region. If region does not exist a local_time::record_not_found exception will be thrown -std::vector< std::string >Returns a vector of strings holding the time zone regions in the database. - -Constructs an empty database. - -rule_type *const string_type &const string_type &parses rule specs for transition day rules -week_numinthelper function for parse_rules() -voidint &int &int &string_typesplits the [start|end]_date_rule string into 3 ints -boolstring_type &Take a line from the csv, turn it into a time_zone_type. Take a line from the csv, turn it into a time_zone_type, and add it to the map. Zone_specs in csv file are expected to have eleven fields that describe the time zone. Returns true if zone_spec successfully added to database - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -A wrapping integer used to support time durations (WARNING: only instantiate with a signed type) In composite date and time types this type is used to wrap at the day boundary. Ex: A wrapping_int<short, 10> will roll over after nine, and roll under below zero. This gives a range of [0,9]NOTE: it is strongly recommended that wrapping_int2 be used instead of wrapping_int as wrapping_int is to be depricated at some point soon.Also Note that warnings will occur if instantiated with an unsigned type. Only a signed type should be used! int_type_ - -BOOST_CONSTEXPR int_type - - -BOOST_CONSTEXPR int_typeExplicit converion method. -BOOST_CONSTEXPR -BOOST_CXX14_CONSTEXPR IntTIntTAdd, return number of wraps performed. The sign of the returned value will indicate which direction the wraps went. Ex: add a negative number and wrapping under could occur, this would be indicated by a negative return value. If wrapping over took place, a positive value would be returned -BOOST_CXX14_CONSTEXPR IntTIntTSubtract will return '+d' if wrapping under took place ('d' is the number of wraps) The sign of the returned value will indicate which direction the wraps went (positive indicates wrap under, negative indicates wrap over). Ex: subtract a negative number and wrapping over could occur, this would be indicated by a negative return value. If wrapping under took place, a positive value would be returned. - -int_typeAdd, return true if wrapped. - -BOOST_CXX14_CONSTEXPR IntTIntT - -A wrapping integer used to wrap around at the top (WARNING: only instantiate with a signed type) Bad name, quick impl to fix a bug – fix later!! This allows the wrap to restart at a value other than 0. int_type_ - -BOOST_CONSTEXPR int_type -BOOST_CONSTEXPR int_type - - -BOOST_CONSTEXPR int_typeExplicit converion method. -BOOST_CONSTEXPR -BOOST_CXX14_CONSTEXPR IntTIntTAdd, return number of wraps performed. The sign of the returned value will indicate which direction the wraps went. Ex: add a negative number and wrapping under could occur, this would be indicated by a negative return value. If wrapping over took place, a positive value would be returned -BOOST_CXX14_CONSTEXPR IntTIntTSubtract will return '-d' if wrapping under took place ('d' is the number of wraps) The sign of the returned value will indicate which direction the wraps went. Ex: subtract a negative number and wrapping over could occur, this would be indicated by a positive return value. If wrapping under took place, a negative value would be returned - -int_typeIf initializing value is out of range of [wrap_min, wrap_max], value will be initialized to closest of min or max - -BOOST_CXX14_CONSTEXPR IntTIntT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Allow rapid creation of ymd triples of different types. YearType -MonthType -DayType -YearType -MonthType -DayType - - -YearTypeMonthTypeDayTypeA basic constructor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/date_time/xmldoc/date_time_docs_howto.html boost1.81-1.81.0/libs/date_time/xmldoc/date_time_docs_howto.html --- boost1.81-1.81.0/libs/date_time/xmldoc/date_time_docs_howto.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/date_time/xmldoc/date_time_docs_howto.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ - - - - - Date Time Documentation Howto - - - - -

Date Time Documentation Howto

-

Instructions for:

-
    -
  1. Building Exclusive Date Time HTML Documentation
  2. -
  3. Building Exclusive Date Time PDF
  4. -
  5. Generating Date Time Doxygen Reference
  6. -
  7. Making further changes to the date_time_fo_stylesheet
  8. -
-
-

Building Exclusive Date Time HTML Documentation

-

No modifications are necessary to build an exclusive set of date time html documentation. Simply run bjam:
-

bjam --v2 date_time_doc

- The resulting html can be found in xmldoc/html. NOTE: the stylesheet may not be present. It can be copied from the $BOOST_ROOT/doc/html directory.

-
-

Building Exclusive Date Time PDF

-

Prerequisite: bjam must be able to build documentation for 'fo' output (necessary aditions must have been added to user-config.jam).

- -

Necessary modifications to build the date time pdf are: -

    -
  1. Add the new stylesheet to boostbook.jam.
    -
    -rule docbook-to-fo ( target : source : properties * )
    -{
    -  #local native-path = [ path.native $(.boostbook-xsl-dir) ] ;
    -  #local stylesheet = $(native-path:B=fo:S=.xsl) ;
    -  local boost-root =  [ modules.peek : BOOST_ROOT ];
    -  local stylesheet = "$(boost-root)/libs/date_time/xmldoc/date_time_fo_stylesheet.xsl" ;
    -  xslt $(target) : $(source) $(stylesheet) : $(properties) ;
    -}
  2. -
  3. Build exclusive_date_time.fo. -
    bjam --v2 date_time_doc fo
  4. -
  5. Build the pdf.
    fop ../../../bin.v2/libs/date_time/.../exclusive_date_time.fo date_time.pdf
  6. -
-

-

BUILD ERRORS: During the fo->pdf step, an error stating that an id already exists may appear. This error appears to be introduced during the xml->fo step. There are two possible workarounds for this (depending on where the duplicated id apears). If the duplicate id appears in the reference section, find the offending id and change it manually (ex: "id2534038" -> "id2534039"). If the id appears in the documentation generated from the xml, change one of the anchor names in one of the xml files. Note: This does not mean there is an error in the xml. The anchor and link that is known to have an effect is date_input_facet_intro (change the 'd' to a 'f', or back, should do the trick).

-
-

Generating Date Time Doxygen Reference

-

Each doxygen reference file must be built, copied, and modified seperately. The steps to build all four *.boostbook reference files are: -

    -
  1. Generate the *.boostbook files.
  2. -
  3. Copy the *.boostbook files to the xmldoc directory.
  4. -
  5. Fix the section tags and add copyright statement.
  6. -
-
-bjam --v2 date_time_autodoc  \
-          gregorian_autodoc  \
-          posix_time_autodoc \
-          local_time_autodoc
-cp ../../../bin.v2/libs/.../*.boostbook .
-./ref_tag_fix.pl
-

-
-

Making further changes to the date_time_fo_stylesheet

-

The stylesheet currently sets the left, right, and bottom margins. It also reduces the font-size for table cells that have the <screen> tags in them. The font-size reduction is accomplished by breaking the entire string (between the <screen> tags) into segments delimited by '\n'. Each of these segment's lengths are checked and the longest segment is used in calculating the amount of font-size reduction.

-

There are two variables used in adjusting the font-size: char-per-cell & min-reduction. These hold the number of characters that can fit into a cell and the minimum percentage of reduction allowed (expressed as an integer).

-

Determining the number of characters that will fit into a cell is not the most gracefull of operations. Simply put, the minimum reduction must be set to 100 (no reduction allowed) and the pdf must be built. From there the number of characters that will fit must be manually counted.

-
-
-
-

Subject to the Boost Software License, Version 1.0. http://www.boost.org/LICENSE_1_0.txt

- - diff -Nru boost1.81-1.81.0/libs/date_time/xmldoc/gregorian_autodoc.xml boost1.81-1.81.0/libs/date_time/xmldoc/gregorian_autodoc.xml --- boost1.81-1.81.0/libs/date_time/xmldoc/gregorian_autodoc.xml 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/date_time/xmldoc/gregorian_autodoc.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,1937 +0,0 @@ - -Gregorian Reference
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::tmconst date &Converts a date to a tm struct. Throws out_of_range exception if date is a special value. -dateconst std::tm &Converts a tm structure into a date dropping the any time values. - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::basic_string< charT >const date & -std::basic_string< charT >const date_period & -std::basic_string< charT >const date_period & -std::basic_string< charT >const date & -std::basic_string< charT >const date & -std::basic_string< charT >const date & -std::wstringconst date_period &Convert date period to simple string. Example: [2002-Jan-01/2002-Jan-02]. -std::wstringconst date &To YYYY-mmm-DD string where mmm 3 char month name. Example: 2002-Jan-01. -std::wstringconst date_period &Date period to iso standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231. -std::wstringconst date &Convert to iso extended format string CCYY-MM-DD. Example 2002-12-31. -std::wstringconst date &Convert to iso standard string YYYYMMDD. Example: 20021231. -std::wstringconst date & - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::stringconst date &To YYYY-mmm-DD string where mmm 3 char month name. Example: 2002-Jan-01. -std::stringconst date_period &Convert date period to simple string. Example: [2002-Jan-01/2002-Jan-02]. -std::stringconst date_period &Date period to ISO 8601 standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231. -std::stringconst date &Convert to ISO 8601 extended format string CCYY-MM-DD. Example 2002-12-31. -std::stringconst date & - - - - - - - - - - - - - - - - -
-
- - -date_time::gregorian_calendar_base< greg_year_month_day, fancy_date_rep::int_type >Gregorian calendar for this implementation, hard work in the base. Type to hold a weekday (eg: Sunday, Monday,...) greg_weekday -Counter type from 1 to 366 for gregorian dates. greg_day_of_year_rep -Internal date representation that handles infinity, not a date. fancy_date_rep -Date rep implements the traits stuff as well. fancy_date_rep -An internal date representation that includes infinities, not a date. date_time::int_adapter< uint32_t > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -date_time::date< date, gregorian_calendar, date_duration >A date type based on gregorian_calendar. This class is the primary interface for programming with greogorian dates. The is a lightweight type that can be freely passed by value. All comparison operators are supported. gregorian_calendar::year_type -gregorian_calendar::month_type -gregorian_calendar::day_type -gregorian_calendar::day_of_year_type -gregorian_calendar::ymd_type -gregorian_calendar::date_rep_type -gregorian_calendar::date_int_type -date_duration - -BOOST_CXX14_CONSTEXPR date_int_typeReturn the Julian Day number for the date. -BOOST_CXX14_CONSTEXPR day_of_year_typeReturn the day of year 1..365 or 1..366 (for leap year) -BOOST_CXX14_CONSTEXPR date_int_typeReturn the Modified Julian Day number for the date. -BOOST_CXX14_CONSTEXPR intReturn the ISO 8601 week number 1..53. -BOOST_CXX14_CONSTEXPR date_int_typeReturn the day number from the calendar. -BOOST_CXX14_CONSTEXPR dateReturn the last day of the current month. - -Default constructor constructs with not_a_date_time. -year_typemonth_typeday_typeMain constructor with year, month, day. -const ymd_type &Constructor from a ymd_type structure. -const date_int_type &Needed copy constructor. -date_rep_typeNeeded copy constructor. -special_valuesConstructor for infinities, not a date, max and min date. - -BOOST_CXX14_CONSTEXPR date_rep_typespecial_values - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BOOST_CXX14_CONSTEXPR boolconst date &const date & - - - - - - - - - - - - - - - - - - - - - -
-
- - -out_of_rangeException type for gregorian day of month (1..31) - - -const std::string &Allow other classes to throw with unique string for bad day like Feb 29. -greg_day_repRepresent a day of the month (range 1 - 31) This small class allows for simple conversion an integer value into a day of the month for a standard gregorian calendar. The type is automatically range checked so values outside of the range 1-31 will cause a bad_day_of_month exception -BOOST_CXX14_CONSTEXPR value_type -BOOST_CXX14_CONSTEXPR - -value_type -Policy class that declares error handling and day of month ranges. CV::simple_exception_policy< unsigned short, 1, 31, bad_day_of_month > -Generated represetation for gregorian day of month. CV::constrained_value< greg_day_policies > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -out_of_rangeException type for day of year (1..366) - - -A day of the year range (1..366) CV::simple_exception_policy< unsigned short, 1, 366, bad_day_of_year > -Define a range representation type for the day of the year 1..366. CV::constrained_value< greg_day_of_year_policies > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::date_time::date_duration< date_duration_rep >Durations in days for gregorian system. base_type::duration_rep - -BOOST_CXX14_CONSTEXPR boolconst date_duration & -BOOST_CXX14_CONSTEXPR boolconst date_duration & -BOOST_CXX14_CONSTEXPR boolconst date_duration & -BOOST_CXX14_CONSTEXPR boolconst date_duration & -BOOST_CXX14_CONSTEXPR boolconst date_duration & -BOOST_CXX14_CONSTEXPR boolconst date_duration & -BOOST_CXX14_CONSTEXPR date_duration &const date_duration &Subtract another duration – result is signed. -BOOST_CXX14_CONSTEXPR date_duration &const date_duration &Add a duration – result is signed. -BOOST_CXX14_CONSTEXPR date_durationunary- Allows for dd = -date_duration(2); -> dd == -2 -BOOST_CXX14_CONSTEXPR date_duration &intDivision operations on a duration with an integer. - -duration_rep0Construct from a day count. -date_time::special_valuesconstruct from special_values -const base_type &Construct from another date_duration. - -BOOST_CXX14_CONSTEXPR date_durationReturns the smallest duration – used by to calculate 'end'. - -An internal date representation that includes infinities, not a date. boost::date_time::duration_traits_adapted -Shorthand for date_duration. date_duration - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BOOST_CXX14_CONSTEXPR date_durationdate_durationdate_duration const & -BOOST_CXX14_CONSTEXPR date_durationdate_durationdate_duration const & -BOOST_CXX14_CONSTEXPR date_durationdate_durationint - - - - - - - - - - - - - - - - - - - - - - -
-
- - -config struct for additional duration types (ie months_duration<> & years_duration<>) date -date_time::int_adapter< int > -date_time::month_functor< date_type > -boost::gregorian::date_duration - -duration_rep -date_time::special_values -date_time::months_duration< greg_durations_config > -date_time::years_duration< greg_durations_config > -weeks_duration - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Configuration of the output facet template. boost::gregorian::greg_month -boost::date_time::special_values -boost::gregorian::months_of_year -boost::date_time::weekdays -Create the base facet type for gregorian::date. boost::date_time::date_names_put< greg_facet_config > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const date &ostream operator for gregorian::date Uses the date facet to determine various output parameters including: -string values for the month (eg: Jan, Feb, Mar) (default: English) -string values for special values (eg: not-a-date-time) (default: English) -selection of long, short strings, or numerical month representation (default: short string) -month day year order (default yyyy-mmm-dd) - - -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const greg_month &operator<< for gregorian::greg_month typically streaming: Jan, Feb, Mar... Uses the date facet to determine output string as well as selection of long or short strings. Default if no facet is installed is to output a 2 wide numeric value for the month eg: 01 == Jan, 02 == Feb, ... 12 == Dec. -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const greg_weekday &operator<< for gregorian::greg_weekday typically streaming: Sun, Mon, Tue, ... Uses the date facet to determine output string as well as selection of long or short string. Default if no facet is installed is to output a 3 char english string for the day of the week. -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const date_period &operator<< for gregorian::date_period typical output: [2002-Jan-01/2002-Jan-31] Uses the date facet to determine output string as well as selection of long or short string fr dates. Default if no facet is installed is to output a 3 char english string for the day of the week. -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const date_duration & -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const partial_date &operator<< for gregorian::partial_date. Output: "Jan 1" -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const nth_kday_of_month &operator<< for gregorian::nth_kday_of_month. Output: "first Mon of Jun" -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const first_kday_of_month &operator<< for gregorian::first_kday_of_month. Output: "first Mon of Jun" -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const last_kday_of_month &operator<< for gregorian::last_kday_of_month. Output: "last Mon of Jun" -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const first_kday_after &operator<< for gregorian::first_kday_after. Output: "first Mon after" -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const first_kday_before &operator<< for gregorian::first_kday_before. Output: "first Mon before" -std::basic_istream< charT > &std::basic_istream< charT > &date &operator>> for gregorian::date -std::basic_istream< charT > &std::basic_istream< charT > &date_duration &operator>> for gregorian::date_duration -std::basic_istream< charT > &std::basic_istream< charT > &date_period &operator>> for gregorian::date_period -BOOST_DATE_TIME_DECL std::localestd::locale &chargenerates a locale with the set of gregorian name-strings of type char* -BOOST_DATE_TIME_DECL boost::date_time::all_date_names_put< greg_facet_config, char > *charReturns a pointer to a facet with a default set of names (English) -BOOST_DATE_TIME_DECL std::localestd::locale &wchar_tgenerates a locale with the set of gregorian name-strings of type wchar_t* -BOOST_DATE_TIME_DECL boost::date_time::all_date_names_put< greg_facet_config, wchar_t > *wchar_tReturns a pointer to a facet with a default set of names (English) -std::basic_istream< charT > &std::basic_istream< charT > &greg_month &operator>> for gregorian::greg_month - throws exception if invalid month given -std::basic_istream< charT > &std::basic_istream< charT > &greg_weekday &operator>> for gregorian::greg_weekday - throws exception if invalid weekday given - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -out_of_rangeException thrown if a greg_month is constructed with a value out of range. - - -greg_month_repWrapper class to represent months in gregorian based calendar. date_time::months_of_year - -BOOST_CXX14_CONSTEXPRConvert the value back to a short. -BOOST_CXX14_CONSTEXPR value_typeReturns month as number from 1 to 12. -BOOST_CXX14_CONSTEXPR month_enum -const char *Returns 3 char english string for the month ex: Jan, Feb, Mar, Apr. -const char *Returns full name of month as string in english ex: January, February. -const wchar_t *Returns 3 wchar_t english string for the month ex: Jan, Feb, Mar, Apr. -const wchar_t *Returns full name of month as wchar_t string in english ex: January, February. -const char *char -const char *char -const wchar_t *wchar_t -const wchar_t *wchar_t - -month_enumConstruct a month from the months_of_year enumeration. -value_typeConstruct from a short value. -date_time::months_of_year -Build a policy class for the greg_month_rep. CV::simple_exception_policy< unsigned short, 1, 12, bad_month > -A constrained range that implements the gregorian_month rules. CV::constrained_value< greg_month_policies > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::stringconst date &Convert to ISO 8601 standard string YYYYMMDD. Example: 20021231. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -::boost::gregorian::dateMethod that does serialization for gregorian::date – splits to load/saveDates are serialized into a string for transport and storage. While it would be more efficient to store the internal integer used to manipulate the dates, it is an unstable solution. -voidArchive &::boost::gregorian::date &unsigned intFunction to load gregorian::date objects using serialization lib. Dates are serialized into a string for transport and storage. While it would be more efficient to store the internal integer used to manipulate the dates, it is an unstable solution. -voidArchive &::boost::gregorian::date *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::date_duration &unsigned intFunction to save gregorian::date_duration objects using serialization lib. -voidArchive &gregorian::date_duration &unsigned intFunction to load gregorian::date_duration objects using serialization lib. -voidArchive &gregorian::date_duration *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::date_duration::duration_rep &unsigned inthelper unction to save date_duration objects using serialization lib -voidArchive &gregorian::date_duration::duration_rep &unsigned inthelper function to load date_duration objects using serialization lib -voidArchive &gregorian::date_duration::duration_rep *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::date_period &unsigned intFunction to save gregorian::date_period objects using serialization lib. date_period objects are broken down into 2 parts for serialization: the begining date object and the end date object -voidArchive &gregorian::date_period &unsigned intFunction to load gregorian::date_period objects using serialization lib. date_period objects are broken down into 2 parts for serialization: the begining date object and the end date object -voidArchive &gregorian::date_period *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::greg_year &unsigned intFunction to save gregorian::greg_year objects using serialization lib. -voidArchive &gregorian::greg_year &unsigned intFunction to load gregorian::greg_year objects using serialization lib. -voidArchive &gregorian::greg_year *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::greg_month &unsigned intFunction to save gregorian::greg_month objects using serialization lib. -voidArchive &gregorian::greg_month &unsigned intFunction to load gregorian::greg_month objects using serialization lib. -voidArchive &gregorian::greg_month *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::greg_day &unsigned intFunction to save gregorian::greg_day objects using serialization lib. -voidArchive &gregorian::greg_day &unsigned intFunction to load gregorian::greg_day objects using serialization lib. -voidArchive &gregorian::greg_day *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::greg_weekday &unsigned intFunction to save gregorian::greg_weekday objects using serialization lib. -voidArchive &gregorian::greg_weekday &unsigned intFunction to load gregorian::greg_weekday objects using serialization lib. -voidArchive &gregorian::greg_weekday *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::partial_date &unsigned intFunction to save gregorian::partial_date objects using serialization lib. partial_date objects are broken down into 2 parts for serialization: the day (typically greg_day) and month (typically greg_month) objects -voidArchive &gregorian::partial_date &unsigned intFunction to load gregorian::partial_date objects using serialization lib. partial_date objects are broken down into 2 parts for serialization: the day (greg_day) and month (greg_month) objects -voidArchive &gregorian::partial_date *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::nth_kday_of_month &unsigned intFunction to save nth_day_of_the_week_in_month objects using serialization lib. nth_day_of_the_week_in_month objects are broken down into 3 parts for serialization: the week number, the day of the week, and the month -voidArchive &gregorian::nth_kday_of_month &unsigned intFunction to load nth_day_of_the_week_in_month objects using serialization lib. nth_day_of_the_week_in_month objects are broken down into 3 parts for serialization: the week number, the day of the week, and the month -voidArchive &gregorian::nth_kday_of_month *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::first_kday_of_month &unsigned intFunction to save first_day_of_the_week_in_month objects using serialization lib. first_day_of_the_week_in_month objects are broken down into 2 parts for serialization: the day of the week, and the month -voidArchive &gregorian::first_kday_of_month &unsigned intFunction to load first_day_of_the_week_in_month objects using serialization lib. first_day_of_the_week_in_month objects are broken down into 2 parts for serialization: the day of the week, and the month -voidArchive &gregorian::first_kday_of_month *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::last_kday_of_month &unsigned intFunction to save last_day_of_the_week_in_month objects using serialization lib. last_day_of_the_week_in_month objects are broken down into 2 parts for serialization: the day of the week, and the month -voidArchive &gregorian::last_kday_of_month &unsigned intFunction to load last_day_of_the_week_in_month objects using serialization lib. last_day_of_the_week_in_month objects are broken down into 2 parts for serialization: the day of the week, and the month -voidArchive &gregorian::last_kday_of_month *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::first_kday_before &unsigned intFunction to save first_day_of_the_week_before objects using serialization lib. -voidArchive &gregorian::first_kday_before &unsigned intFunction to load first_day_of_the_week_before objects using serialization lib. -voidArchive &gregorian::first_kday_before *const unsigned intoverride needed b/c no default constructor -voidArchive &const gregorian::first_kday_after &unsigned intFunction to save first_day_of_the_week_after objects using serialization lib. -voidArchive &gregorian::first_kday_after &unsigned intFunction to load first_day_of_the_week_after objects using serialization lib. -voidArchive &gregorian::first_kday_after *const unsigned intoverride needed b/c no default constructor - - -
-
- - -out_of_rangeException that flags that a weekday number is incorrect. - - -greg_weekday_repRepresent a day within a week (range 0==Sun to 6==Sat) boost::date_time::weekdays - -BOOST_CXX14_CONSTEXPR value_type -BOOST_CXX14_CONSTEXPR weekday_enum -const char *Return a 3 digit english string of the day of week (eg: Sun) -const char *Return a point to a long english string representing day of week. -const wchar_t *Return a 3 digit english wchar_t string of the day of week (eg: Sun) -const wchar_t *Return a point to a long english wchar_t string representing day of week. - -value_type -CV::simple_exception_policy< unsigned short, 0, 6, bad_weekday > -CV::constrained_value< greg_weekday_policies > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -out_of_rangeException type for gregorian year. - - -greg_year_repRepresent a year (range 1400 - 9999) This small class allows for simple conversion an integer value into a year for the gregorian calendar. This currently only allows a range of 1400 to 9999. Both ends of the range are a bit arbitrary at the moment, but they are the limits of current testing of the library. As such they may be increased in the future. -BOOST_CXX14_CONSTEXPR - -value_type -Policy class that declares error handling gregorian year type. CV::simple_exception_policy< unsigned short, 1400, 9999, bad_year > -Generated representation for gregorian year. CV::constrained_value< greg_year_policies > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -date_time::year_month_day_base< greg_year, greg_month, greg_day > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Single file header that provides overall include for all elements of the gregorian date-time system. This includes the various types defined, but also other functions for formatting and parsing.
-
- - -boost::date_time::period_formatter< wchar_t > -boost::date_time::period_formatter< char > -boost::date_time::date_facet< date, wchar_t > -boost::date_time::date_facet< date, char > -boost::date_time::period_parser< date, char > -boost::date_time::period_parser< date, wchar_t > -boost::date_time::special_values_formatter< char > -boost::date_time::special_values_formatter< wchar_t > -boost::date_time::special_values_parser< date, char > -boost::date_time::special_values_parser< date, wchar_t > -boost::date_time::date_input_facet< date, char > -boost::date_time::date_input_facet< date, wchar_t > - - - - - - - - - - -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::date & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &date &input operator for date -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::date_duration & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &date_duration &input operator for date_duration -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::date_period & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &date_period &input operator for date_period -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::greg_month & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &greg_month &input operator for greg_month -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::greg_weekday & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &greg_weekday &input operator for greg_weekday -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &greg_day &input operator for greg_day -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &greg_year &input operator for greg_year -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::partial_date & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &partial_date &input operator for partial_date -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::nth_day_of_the_week_in_month & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &nth_day_of_the_week_in_month &input operator for nth_day_of_the_week_in_month -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::first_day_of_the_week_in_month & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &first_day_of_the_week_in_month &input operator for first_day_of_the_week_in_month -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::last_day_of_the_week_in_month & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &last_day_of_the_week_in_month &input operator for last_day_of_the_week_in_month -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::first_day_of_the_week_after & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &first_day_of_the_week_after &input operator for first_day_of_the_week_after -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::gregorian::first_day_of_the_week_before & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &first_day_of_the_week_before &input operator for first_day_of_the_week_before - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Single file header that defines most of the types for the gregorian date-time system. - -Date periods for the gregorian system. date_time::period< date, date_duration > -A unifying date_generator base type. A unifying date_generator base type for: partial_date, nth_day_of_the_week_in_month, first_day_of_the_week_in_month, and last_day_of_the_week_in_month date_time::year_based_generator< date > -A date generation object type. date_time::partial_date< date > -date_time::nth_kday_of_month< date > -nth_kday_of_month -date_time::first_kday_of_month< date > -first_kday_of_month -date_time::last_kday_of_month< date > -last_kday_of_month -date_time::first_kday_after< date > -first_kday_after -date_time::first_kday_before< date > -first_kday_before -A clock to get the current day from the local computer. date_time::day_clock< date > -Base date_iterator type for gregorian types. date_time::date_itr_base< date > -A day level iterator. date_time::date_itr< date_time::day_functor< date >, date > -A week level iterator. date_time::date_itr< date_time::week_functor< date >, date > -A month level iterator. date_time::date_itr< date_time::month_functor< date >, date > -A year level iterator. date_time::date_itr< date_time::year_functor< date >, date > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -date_time::special_valuesconst std::string &Return special_value from string argument. Return special_value from string argument. If argument is not one of the special value names (defined in names.hpp), return 'not_special' -dateconst std::string &Deprecated: Use from_simple_string. -dateconst std::string &From delimited date string where with order year-month-day eg: 2002-1-25 or 2003-Jan-25 (full month name is also accepted) -dateconst std::string &From delimited date string where with order year-month-day eg: 1-25-2003 or Jan-25-2003 (full month name is also accepted) -dateconst std::string &From delimited date string where with order day-month-year eg: 25-1-2002 or 25-Jan-2003 (full month name is also accepted) -dateconst std::string &From ISO 8601 type date string where with order year-month-day eg: 20020125. -dateconst std::string &From ISO 8601 type date string where with order year-month-day eg: 20020125. -dateiterator_typeiterator_typeStream should hold a date in the form of: 2002-1-25. Month number, abbrev, or name are accepted. -date_periodconst std::string &Function to parse a date_period from a string (eg: [2003-Oct-31/2003-Dec-25]) -date_periodconst std::wstring &Function to parse a date_period from a wstring (eg: [2003-Oct-31/2003-Dec-25]) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/date_time/xmldoc/local_time_autodoc.xml boost1.81-1.81.0/libs/date_time/xmldoc/local_time_autodoc.xml --- boost1.81-1.81.0/libs/date_time/xmldoc/local_time_autodoc.xml 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/date_time/xmldoc/local_time_autodoc.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,371 +0,0 @@ - -Local Time Reference
- - - - - - - - - - - - - - -std::tmconst local_date_time &Function that creates a tm struct from a local_date_time. - - -
-
- - -date_time::time_zone_base< posix_time::ptime, CharT >A real time zone. boost::posix_time::time_duration -date_time::time_zone_base< posix_time::ptime, CharT > -base_type::string_type -base_type::stringstream_type -date_time::time_zone_names_base< CharT > -CharT - -string_type -string_type -string_type -string_type -boolTrue if zone uses daylight savings adjustments. -posix_time::ptimegregorian::greg_yearLocal time that DST starts – NADT if has_dst is false. -posix_time::ptimegregorian::greg_yearLocal time that DST ends – NADT if has_dst is false. -time_duration_typeBase offset from UTC for zone (eg: -07:30:00) -time_duration_typeAdjustment forward or back made while DST is in effect. -string_typeReturns a POSIX time_zone string for this object. - -const time_zone_names &const time_duration_type &const dst_adjustment_offsets &boost::shared_ptr< dst_calc_rule > - -boost::shared_ptr< dst_calc_rule > -custom_time_zone_base< char > - - - - - - - - - - - - - - - -
-
-Operators for local_date_time and optional gregorian types. Operators use snap-to-end-of-month behavior. Further details on this behavior can be found in reference for date_time/date_duration_types.hpp and documentation for month and year iterators. - - - - - -local_date_timeconst local_date_time &const boost::gregorian::months &Adds a months object and a local_date_time. Result will be same day-of-month as local_date_time unless original day was the last day of month. see date_time::months_duration for more details -local_date_timelocal_date_time &const boost::gregorian::months &Adds a months object to a local_date_time. Result will be same day-of-month as local_date_time unless original day was the last day of month. see date_time::months_duration for more details -local_date_timeconst local_date_time &const boost::gregorian::months &Subtracts a months object and a local_date_time. Result will be same day-of-month as local_date_time unless original day was the last day of month. see date_time::months_duration for more details -local_date_timelocal_date_time &const boost::gregorian::months &Subtracts a months object from a local_date_time. Result will be same day-of-month as local_date_time unless original day was the last day of month. see date_time::months_duration for more details -local_date_timeconst local_date_time &const boost::gregorian::years &Adds a years object and a local_date_time. Result will be same month and day-of-month as local_date_time unless original day was the last day of month. see date_time::years_duration for more details -local_date_timelocal_date_time &const boost::gregorian::years &Adds a years object to a local_date_time. Result will be same month and day-of-month as local_date_time unless original day was the last day of month. see date_time::years_duration for more details -local_date_timeconst local_date_time &const boost::gregorian::years &Subtracts a years object and a local_date_time. Result will be same month and day-of-month as local_date_time unless original day was the last day of month. see date_time::years_duration for more details -local_date_timelocal_date_time &const boost::gregorian::years &Subtracts a years object from a local_date_time. Result will be same month and day-of-month as local_date_time unless original day was the last day of month. see date_time::years_duration for more details - - - -
-
- - -gregorian::date -gregorian::first_kday_of_month -gregorian::last_kday_of_month -gregorian::date -gregorian::last_kday_of_month -gregorian::last_kday_of_month -gregorian::date -gregorian::nth_kday_of_month -gregorian::nth_kday_of_month -gregorian::date -gregorian::nth_kday_of_month -gregorian::last_kday_of_month -gregorian::date -gregorian::partial_date -gregorian::partial_date -Provides rule of the form starting Apr 30 ending Oct 21. date_time::dst_day_calc_rule< gregorian::date > -Provides rule of the form first Sunday in April, last Saturday in Oct. date_time::day_calc_dst_rule< partial_date_rule_spec > -Provides rule of the form first Sunday in April, last Saturday in Oct. date_time::day_calc_dst_rule< first_last_rule_spec > -Provides rule of the form last Sunday in April, last Saturday in Oct. date_time::day_calc_dst_rule< last_last_rule_spec > -Provides rule in form of [1st|2nd|3rd|4th] Sunday in April, last Sunday in Oct. date_time::day_calc_dst_rule< nth_last_rule_spec > -Provides rule in form of [1st|2nd|3rd|4th] Sunday in April/October. date_time::day_calc_dst_rule< nth_kday_rule_spec > -Provides rule in form of [1st|2nd|3rd|4th] Sunday in April/October. date_time::day_calc_dst_rule< nth_kday_rule_spec > - - - - - - - - - - - - - - - -
-
- - -logic_errorsimple exception for reporting when STD or DST cannot be determined - -std::string const &std::string() -logic_error - -std::string const &std::string() -date_time::base_time< utc_time_, boost::posix_time::posix_time_system >Representation of "wall-clock" time in a particular time zone. Representation of "wall-clock" time in a particular time zone Local_date_time_base holds a time value (date and time offset from 00:00) along with a time zone. The time value is stored as UTC and conversions to wall clock time are made as needed. This approach allows for operations between wall-clock times in different time zones, and daylight savings time considerations, to be made. Time zones are required to be in the form of a boost::shared_ptr<time_zone_base>. -utc_time_ -utc_time_type::time_duration_type -utc_time_type::date_type -date_type::duration_type -utc_time_type::time_system_type - -boost::shared_ptr< tz_type >returns time zone associated with calling instance -boolreturns false is time_zone is NULL and if time value is a special_value -utc_time_typeReturns object's time value as a utc representation. -utc_time_typeReturns object's time value as a local representation. -std::stringReturns string in the form "2003-Aug-20 05:00:00 EDT". Returns string in the form "2003-Aug-20 05:00:00 EDT". If time_zone is NULL the time zone abbreviation will be "UTC". The time zone abbrev will not be included if calling object is a special_value -local_date_time_baseboost::shared_ptr< tz_type >time_duration_typetime_duration_type(0, 0, 0)returns a local_date_time_base in the given time zone with the optional time_duration added. -std::stringboolfalseReturns name of associated time zone or "Coordinated Universal Time". Optional bool parameter will return time zone as an offset (ie "+07:00" extended ISO 8601 format). Empty string is returned for classes that do not use a time_zone -std::stringboolfalseReturns abbreviation of associated time zone or "UTC". Optional bool parameter will return time zone as an offset (ie "+0700" ISO 8601 format). Empty string is returned for classes that do not use a time_zone -std::stringreturns a posix_time_zone string for the associated time_zone. If no time_zone, "UTC+00" is returned. -boolconst local_date_time_base &Equality comparison operator. Equality comparison operator -boolconst local_date_time_base &Non-Equality comparison operator. -boolconst local_date_time_base &Less than comparison operator. -boolconst local_date_time_base &Less than or equal to comparison operator. -boolconst local_date_time_base &Greater than comparison operator. -boolconst local_date_time_base &Greater than or equal to comparison operator. -local_date_time_baseconst date_duration_type &Local_date_time + date_duration. -local_date_time_baseconst date_duration_type &Local_date_time += date_duration. -local_date_time_baseconst date_duration_type &Local_date_time - date_duration. -local_date_time_baseconst date_duration_type &Local_date_time -= date_duration. -local_date_time_baseconst time_duration_type &Local_date_time + time_duration. -local_date_time_baseconst time_duration_type &Local_date_time += time_duration. -local_date_time_baseconst time_duration_type &Local_date_time - time_duration. -local_date_time_baseconst time_duration_type &Local_date_time -= time_duration. -time_duration_typeconst local_date_time_base &local_date_time -= local_date_time --> time_duration_type - -utc_time_typeA UTC time boost::shared_ptr< tz_type >Timezone for to adjust the UTC time to. This constructor interprets the passed time as a UTC time. So, for example, if the passed timezone is UTC-5 then the time will be adjusted back 5 hours. The time zone allows for automatic calculation of whether the particular time is adjusted for daylight savings, etc. If the time zone shared pointer is null then time stays unadjusted. - -date_typetime_duration_typeboost::shared_ptr< tz_type >boolThis constructs a local time – the passed time information understood to be in the passed tz. The DST flag must be passed to indicate whether the time is in daylight savings or not. -&ndash; time_label_invalid if the time passed does not exist in the given locale. The non-existent case occurs typically during the shift-back from daylight savings time. When the clock is shifted forward a range of times (2 am to 3 am in the US) is skipped and hence is invalid. dst_not_valid if the DST flag is passed for a period where DST is not active. -date_typetime_duration_typeboost::shared_ptr< tz_type >DST_CALC_OPTIONSThis constructs a local time – the passed time information understood to be in the passed tz. The DST flag is calculated according to the specified rule. -Simple destructor, releases time zone if last referrer. -const local_date_time_base &Copy constructor. -const boost::date_time::special_valuesboost::shared_ptr< tz_type >boost::shared_ptr< tz_type >()Special values constructor. - -time_is_dst_resultdate_typetime_duration_typeboost::shared_ptr< tz_type >Determines if given time label is in daylight savings for given zone. Determines if given time label is in daylight savings for given zone. Takes a date and time_duration representing a local time, along with time zone, and returns a time_is_dst_result object as result. - - -utc_time_typeutc_time_typeboost::shared_ptr< tz_type >boolAdjust the passed in time to UTC? -std::stringconst time_duration_type &const std::string &Simple formatting code – todo remove this? - -logic_errorsimple exception for when time label given cannot exist - -std::string const &std::string() -Use the default parameters to define local_date_time. local_date_time_base - - - - - - - - - - - - - - - -
-
-
-
- - -boost::date_time::time_facet< local_date_time, wchar_t > -boost::date_time::time_facet< local_date_time, char > -boost::date_time::time_input_facet< local_date_time::utc_time_type, wchar_t > -boost::date_time::time_input_facet< local_date_time::utc_time_type, char > -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const local_date_time &operator<< for local_date_time - see local_time docs for formatting details -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &local_date_time &input operator for local_date_time -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::local_time::local_time_period &output operator for local_time_period -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &boost::local_time::local_time_period &input operator for local_time_period - - - - - - - - - - - -
-
- - -boost::date_time::period< local_date_time, boost::posix_time::time_duration > -date_time::time_itr< local_date_time > -date_time::second_clock< local_date_time > -date_time::microsec_clock< local_date_time > -date_time::time_zone_base< posix_time::ptime, char > -date_time::time_zone_base< posix_time::ptime, wchar_t > -Shared Pointer for custom_time_zone and posix_time_zone objects. boost::shared_ptr< time_zone > -boost::shared_ptr< wtime_zone > -date_time::time_zone_names_base< char > -date_time::time_zone_names_base< wchar_t > - - - - - - - - - - - - - - - -
-
- - -out_of_rangesimple exception for UTC daylight savings adjustment - -std::string const &std::string() -out_of_rangesimple exception for UTC and Daylight savings start/end offsets - -std::string const &std::string() -date_time::time_zone_base< posix_time::ptime, CharT >A time zone class constructed from a POSIX time zone string. A POSIX time zone string takes the form of: - "std offset dst [offset],start[/time],end[/time]" (w/no spaces) 'std' specifies the abbrev of the time zone. - 'offset' is the offset from UTC. - 'dst' specifies the abbrev of the time zone during daylight savings time. - The second offset is how many hours changed during DST. Default=1 - 'start' and'end' are the dates when DST goes into (and out of) effect. - 'offset' takes the form of: [+|-]hh[:mm[:ss]] {h=0-23, m/s=0-59} - 'time' and 'offset' take the same form. Time defaults=02:00:00 - 'start' and 'end' can be one of three forms: - Mm.w.d {month=1-12, week=1-5 (5 is always last), day=0-6} - Jn {n=1-365 Feb29 is never counted} - n {n=0-365 Feb29 is counted in leap years} - Example "PST-5PDT01:00:00,M4.1.0/02:00:00,M10.1.0/02:00:00" - Exceptions will be thrown under these conditions: - An invalid date spec (see date class) - A boost::local_time::bad_offset exception will be thrown for: - A DST start or end offset that is negative or more than 24 hours - A UTC zone that is greater than +14 or less than -12 hours - A boost::local_time::bad_adjustment exception will be thrown for: - A DST adjustment that is 24 hours or more (positive or negative) -Note that UTC zone offsets can be greater than +12: http://www.worldtimezone.com/utc/utc+1200.html boost::posix_time::time_duration -date_time::time_zone_names_base< CharT > -date_time::time_zone_base< posix_time::ptime, CharT > -base_type::string_type -CharT -base_type::stringstream_type -boost::char_separator< char_type, std::char_traits< char_type > > -boost::tokenizer< char_separator_type, typename string_type::const_iterator, string_type > -tokenizer_type::iterator - -string_typeString for the zone when not in daylight savings (eg: EST) -string_typeString for the timezone when in daylight savings (eg: EDT) For those time zones that have no DST, an empty string is used -string_typeString for the zone when not in daylight savings (eg: Eastern Standard Time) The full STD name is not extracted from the posix time zone string. Therefore, the STD abbreviation is used in it's place -string_typeString for the timezone when in daylight savings (eg: Eastern Daylight Time) The full DST name is not extracted from the posix time zone string. Therefore, the STD abbreviation is used in it's place. For time zones that have no DST, an empty string is used -boolTrue if zone uses daylight savings adjustments otherwise false. -posix_time::ptimegregorian::greg_yearLocal time that DST starts – NADT if has_dst is false. -posix_time::ptimegregorian::greg_yearLocal time that DST ends – NADT if has_dst is false. -time_duration_typeBase offset from UTC for zone (eg: -07:30:00) -time_duration_typeAdjustment forward or back made while DST is in effect. -string_typeReturns a POSIX time_zone string for this object. - -const string_type &Construct from a POSIX time zone string. - - -voidconst string_type &Extract time zone abbreviations for STD & DST as well as the offsets for the time shift that occurs and how much of a shift. At this time full time zone names are NOT extracted so the abbreviations are used in their place -voidconst string_type &const string_type & -voidconst string_type &const string_type & -voidconst string_type &const string_type &Julian day. Feb29 is never counted, even in leap years. -voidconst string_type &const string_type &Julian day. Feb29 is always counted, but exception thrown in non-leap years. - - -std::stringconst time_duration_type &helper function used when throwing exceptions - -boost::date_time::dst_adjustment_offsets< boost::posix_time::time_duration > -posix_time_zone_base< char > - - - - - - - - - - - - - - - -
-
- - -Object populated with boost::shared_ptr<time_zone_base> objects. Object populated with boost::shared_ptr<time_zone_base> objects Database is populated from specs stored in external csv file. See date_time::tz_db_base for greater detail date_time::tz_db_base< custom_time_zone, nth_kday_dst_rule > - - - - - - - - - - - - - - - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/date_time/xmldoc/posix_time_autodoc.xml boost1.81-1.81.0/libs/date_time/xmldoc/posix_time_autodoc.xml --- boost1.81-1.81.0/libs/date_time/xmldoc/posix_time_autodoc.xml 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/date_time/xmldoc/posix_time_autodoc.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,900 +0,0 @@ - -Posix Time Reference
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ptimestd::time_tFunction that converts a time_t into a ptime. -std::time_tptimeFunction that converts a ptime into a time_t. -std::tmconst boost::posix_time::ptime &Convert a time to a tm structure truncating any fractional seconds. -std::tmconst boost::posix_time::time_duration &Convert a time_duration to a tm structure truncating any fractional seconds and zeroing fields for date components. -ptimeconst std::tm &Convert a tm struct to a ptime ignoring is_dst flag. -TimeTconst FileTimeT &Function to create a time object from an initialized FILETIME struct. Function to create a time object from an initialized FILETIME struct. A FILETIME struct holds 100-nanosecond units (0.0000001). When built with microsecond resolution the FILETIME's sub second value will be truncated. Nanosecond resolution has no truncation.FILETIME is part of the Win32 API, so it is not portable to non-windows platforms. - -The function is templated on the FILETIME type, so that it can be used with both native FILETIME and the ad-hoc boost::detail::winapi::FILETIME_ type. - - - - -
-
-Operators for ptime and optional gregorian types. Operators use snap-to-end-of-month behavior. Further details on this behavior can be found in reference for date_time/date_duration_types.hpp and documentation for month and year iterators. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BOOST_CXX14_CONSTEXPR ptimeconst ptime &const boost::gregorian::months &Adds a months object and a ptime. Result will be same day-of-month as ptime unless original day was the last day of month. see date_time::months_duration for more details -BOOST_CXX14_CONSTEXPR ptimeptime &const boost::gregorian::months &Adds a months object to a ptime. Result will be same day-of-month as ptime unless original day was the last day of month. see date_time::months_duration for more details -BOOST_CXX14_CONSTEXPR ptimeconst ptime &const boost::gregorian::months &Subtracts a months object and a ptime. Result will be same day-of-month as ptime unless original day was the last day of month. see date_time::months_duration for more details -BOOST_CXX14_CONSTEXPR ptimeptime &const boost::gregorian::months &Subtracts a months object from a ptime. Result will be same day-of-month as ptime unless original day was the last day of month. see date_time::months_duration for more details -BOOST_CXX14_CONSTEXPR ptimeconst ptime &const boost::gregorian::years &Adds a years object and a ptime. Result will be same month and day-of-month as ptime unless original day was the last day of month. see date_time::years_duration for more details -BOOST_CXX14_CONSTEXPR ptimeptime &const boost::gregorian::years &Adds a years object to a ptime. Result will be same month and day-of-month as ptime unless original day was the last day of month. see date_time::years_duration for more details -BOOST_CXX14_CONSTEXPR ptimeconst ptime &const boost::gregorian::years &Subtracts a years object and a ptime. Result will be same month and day-of-month as ptime unless original day was the last day of month. see date_time::years_duration for more details -BOOST_CXX14_CONSTEXPR ptimeptime &const boost::gregorian::years &Subtracts a years object from a ptime. Result will be same month and day-of-month as ptime unless original day was the last day of month. see date_time::years_duration for more details - - - - - - - - -
-
-Global header file to get all of posix time types
-
- - -boost::int64_t -gregorian::date -gregorian::date_duration -time_duration -time_res_traits::tick_type -time_res_traits::impl_type -time_res_traits - -boost::int64_ttick_per_second1000000 - -simple_time_rep -gregorian::date -gregorian::date_duration -time_duration -time_res_traits::tick_type -time_res_traits - -boost::int64_ttick_per_second1000000000 - -Simple implementation for the time rep. gregorian::date -time_duration -date_type -time_duration_type - -BOOST_CXX14_CONSTEXPR bool -BOOST_CXX14_CONSTEXPR bool -BOOST_CXX14_CONSTEXPR bool -BOOST_CXX14_CONSTEXPR bool - -date_typetime_duration_type -date_time::time_duration< time_duration, time_res_traits >Base time duration type. time_res_traits -time_res_traits::day_type -time_res_traits::hour_type -time_res_traits::min_type -time_res_traits::sec_type -time_res_traits::fractional_seconds_type -time_res_traits::tick_type -time_res_traits::impl_type - - -hour_typemin_typesec_typefractional_seconds_type0 - -boost::date_time::special_valuesConstruct from special_values. - - -impl_type -date_time::time_resolution_traits< boost::date_time::time_resolution_traits_adapted64_impl, boost::date_time::nano, 1000000000, 9 > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::posix_time::time_durationAllows expression of durations as an hour count The argument must be an integral type - -T const &typename boost::enable_if< boost::is_integral< T >, void >::type *BOOST_DATE_TIME_NULLPTR -boost::posix_time::time_durationAllows expression of durations as a minute count The argument must be an integral type - -T const &typename boost::enable_if< boost::is_integral< T >, void >::type *BOOST_DATE_TIME_NULLPTR -boost::posix_time::time_durationAllows expression of durations as a seconds count The argument must be an integral type - -T const &typename boost::enable_if< boost::is_integral< T >, void >::type *BOOST_DATE_TIME_NULLPTR -Allows expression of durations as milli seconds. date_time::subsecond_duration< time_duration, 1000 > -date_time::subsecond_duration< time_duration, 1000 > -Allows expression of durations as micro seconds. date_time::subsecond_duration< time_duration, 1000000 > -date_time::subsecond_duration< time_duration, 1000000 > -Allows expression of durations as nano seconds. date_time::subsecond_duration< time_duration, 1000000000 > -date_time::subsecond_duration< time_duration, 1000000000 > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -wptime_facet is depricated and will be phased out. use wtime_facet instead ptime_facet is depricated and will be phased out. use time_facet instead wptime_input_facet is depricated and will be phased out. use wtime_input_facet instead ptime_input_facet is depricated and will be phased out. use time_input_facet instead boost::date_time::time_facet< ptime, wchar_t > -boost::date_time::time_facet< ptime, char > -boost::date_time::time_input_facet< ptime, wchar_t > -boost::date_time::time_input_facet< ptime, char > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const ptime & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &ptime &input operator for ptime -std::basic_ostream< CharT, TraitsT > &std::basic_ostream< CharT, TraitsT > &const boost::posix_time::time_period & -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &time_period &input operator for time_period -std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const time_duration &ostream operator for posix_time::time_duration -std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &time_duration &input operator for time_duration - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const time_duration &ostream operator for posix_time::time_duration -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const ptime &ostream operator for posix_time::ptime -std::basic_ostream< charT, traits > &std::basic_ostream< charT, traits > &const time_period &ostream operator for posix_time::time_period -std::basic_istream< charT > &std::basic_istream< charT > &time_duration & -std::basic_istream< charT > &std::basic_istream< charT > &ptime & -std::basic_istream< charT > &std::basic_istream< charT > &time_period &operator>> for time_period. time_period must be in "[date time_duration/date time_duration]" format. - - - - - - - - - - - - - - - - - - - - - - -
-
- - -date_time::split_timedate_system< posix_time_system_config, 1000000000 > -date_time::counted_time_rep< millisec_posix_time_system_config > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Iterator over a defined time duration. date_time::time_itr< ptime > -A time clock that has a resolution of one second. date_time::second_clock< ptime > -A time clock that has a resolution of one microsecond. date_time::microsec_clock< ptime > -Define a dst null dst rule for the posix_time system. date_time::null_dst_rules< ptime::date_type, time_duration > -Define US dst rule calculator for the posix_time system. date_time::us_dst_rules< ptime::date_type, time_duration > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -date_time::base_time< ptime, posix_time_system >Time type with no timezone or other adjustments. posix_time_system -time_system_type::time_rep_type -time_system_type::time_duration_type -ptime - - -gregorian::datetime_duration_typeConstruct with date and offset in day. -gregorian::dateConstruct a time at start of the given day (midnight) -const time_rep_type &Copy from time_rep. -const special_valuesConstruct from special value. - - - - - - - - - - - - - - - - - - - - - - - -BOOST_CXX14_CONSTEXPR boolconst ptime &const ptime & - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - -std::basic_string< charT >time_duration -std::basic_string< charT >time_duration -std::basic_string< charT >ptimeTime to simple format CCYY-mmm-dd hh:mm:ss.fffffff. -std::basic_string< charT >time_period -std::basic_string< charT >ptime -std::basic_string< charT >ptime -std::wstringtime_durationTime duration to wstring -hh::mm::ss.fffffff. Example: 10:09:03.0123456. -std::wstringtime_durationTime duration in ISO 8601 format -hhmmss.fffffff. Example: 10:09:03.0123456. -std::wstringptime -std::wstringtime_periodConvert to wstring of form [YYYY-mmm-DD HH:MM::SS.ffffff/YYYY-mmm-DD HH:MM::SS.fffffff]. -std::wstringptimeConvert ISO 8601 short form YYYYMMDDTHHMMSS where T is the date-time separator. -std::wstringptimeConvert to form YYYY-MM-DDTHH:MM:SS where T is the date-time separator. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - -std::stringtime_durationTime duration to string -hh::mm::ss.fffffff. Example: 10:09:03.0123456. -std::stringtime_durationTime duration in ISO 8601 format -hhmmss.fffffff. Example: 10:09:03.0123456. -std::stringptimeTime to simple format CCYY-mmm-dd hh:mm:ss.fffffff. -std::stringtime_periodConvert to string of form [YYYY-mmm-DD HH:MM::SS.ffffff/YYYY-mmm-DD HH:MM::SS.fffffff]. -std::stringptimeConvert ISO 8601 short form YYYYMMDDTHHMMSS where T is the date-time separator. -std::stringptimeConvert to form YYYY-MM-DDTHH:MM:SS where T is the date-time separator. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -time_durationconst std::string &Creates a time_duration object from a delimited string. Expected format for string is "[-]h[h][:mm][:ss][.fff]". A negative duration will be created if the first character in string is a '-', all other '-' will be treated as delimiters. Accepted delimiters are "-:,.". -ptimeconst std::string & -ptimeconst std::string & -ptimeconst std::string & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Time period type. date_time::period< ptime, time_duration > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::posix_time::time_durationintegral_constant< int, BOOST_DATE_TIME_POSIX_TIME_DURATION_VERSION >boost::posix_time::ptimetime_duration objects are broken down into 4 parts for serialization: types are hour_type, min_type, sec_type, and fractional_seconds_type as defined in the time_duration class -voidArchive &const posix_time::time_duration &unsigned int -voidArchive &posix_time::time_duration &Function to load posix_time::time_duration objects using serialization lib. time_duration objects are broken down into 4 parts for serialization: types are hour_type, min_type, sec_type, and fractional_seconds_type as defined in the time_duration class -voidArchive &posix_time::time_duration &unsigned int -voidArchive &const posix_time::ptime &unsigned intFunction to save posix_time::ptime objects using serialization lib. ptime objects are broken down into 2 parts for serialization: a date object and a time_duration onject -voidArchive &posix_time::ptime &unsigned intFunction to load posix_time::ptime objects using serialization lib. ptime objects are broken down into 2 parts for serialization: a date object and a time_duration onject -voidArchive &posix_time::ptime *const unsigned intoverride needed b/c no default constructor -voidArchive &const posix_time::time_period &unsigned intFunction to save posix_time::time_period objects using serialization lib. time_period objects are broken down into 2 parts for serialization: a begining ptime object and an ending ptime object -voidArchive &boost::posix_time::time_period &unsigned intFunction to load posix_time::time_period objects using serialization lib. time_period objects are broken down into 2 parts for serialization: a begining ptime object and an ending ptime object -voidArchive &boost::posix_time::time_period *const unsigned intoverride needed b/c no default constructor - - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/exception/include/boost/exception/exception.hpp boost1.81-1.81.0/libs/exception/include/boost/exception/exception.hpp --- boost1.81-1.81.0/libs/exception/include/boost/exception/exception.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/exception/include/boost/exception/exception.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,569 +0,0 @@ -//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. - -//Distributed under the Boost Software License, Version 1.0. (See accompanying -//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#ifndef BOOST_EXCEPTION_274DA366004E11DCB1DDFE2E56D89593 -#define BOOST_EXCEPTION_274DA366004E11DCB1DDFE2E56D89593 - -#include -#include -#include - -#ifdef BOOST_EXCEPTION_MINI_BOOST -#include -namespace boost { namespace exception_detail { using std::shared_ptr; } } -#else -namespace boost { template class shared_ptr; } -namespace boost { namespace exception_detail { using boost::shared_ptr; } } -#endif - -#if !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) -#if __GNUC__*100+__GNUC_MINOR__>301 -#pragma GCC system_header -#endif -#ifdef __clang__ -#pragma clang system_header -#endif -#ifdef _MSC_VER -#pragma warning(push,1) -#pragma warning(disable: 4265) -#endif -#endif - -namespace -boost - { - namespace - exception_detail - { - template - class - refcount_ptr - { - public: - - refcount_ptr(): - px_(0) - { - } - - ~refcount_ptr() - { - release(); - } - - refcount_ptr( refcount_ptr const & x ): - px_(x.px_) - { - add_ref(); - } - - refcount_ptr & - operator=( refcount_ptr const & x ) - { - adopt(x.px_); - return *this; - } - - void - adopt( T * px ) - { - release(); - px_=px; - add_ref(); - } - - T * - get() const - { - return px_; - } - - private: - - T * px_; - - void - add_ref() - { - if( px_ ) - px_->add_ref(); - } - - void - release() - { - if( px_ && px_->release() ) - px_=0; - } - }; - } - - //////////////////////////////////////////////////////////////////////// - - template - class error_info; - - typedef error_info throw_function; - typedef error_info throw_file; - typedef error_info throw_line; - typedef error_info throw_column; - - template <> - class - error_info - { - public: - typedef char const * value_type; - value_type v_; - explicit - error_info( value_type v ): - v_(v) - { - } - }; - - template <> - class - error_info - { - public: - typedef char const * value_type; - value_type v_; - explicit - error_info( value_type v ): - v_(v) - { - } - }; - - template <> - class - error_info - { - public: - typedef int value_type; - value_type v_; - explicit - error_info( value_type v ): - v_(v) - { - } - }; - - template <> - class - error_info - { - public: - typedef int value_type; - value_type v_; - explicit - error_info( value_type v ): - v_(v) - { - } - }; - - class - BOOST_SYMBOL_VISIBLE - exception; - - namespace - exception_detail - { - class error_info_base; - struct type_info_; - - struct - error_info_container - { - virtual char const * diagnostic_information( char const * ) const = 0; - virtual shared_ptr get( type_info_ const & ) const = 0; - virtual void set( shared_ptr const &, type_info_ const & ) = 0; - virtual void add_ref() const = 0; - virtual bool release() const = 0; - virtual refcount_ptr clone() const = 0; - - protected: - - ~error_info_container() BOOST_NOEXCEPT_OR_NOTHROW - { - } - }; - - template - struct get_info; - - template <> - struct get_info; - - template <> - struct get_info; - - template <> - struct get_info; - - template <> - struct get_info; - - template - struct set_info_rv; - - template <> - struct set_info_rv; - - template <> - struct set_info_rv; - - template <> - struct set_info_rv; - - template <> - struct set_info_rv; - - char const * get_diagnostic_information( exception const &, char const * ); - - void copy_boost_exception( exception *, exception const * ); - - template - E const & set_info( E const &, error_info const & ); - - template - E const & set_info( E const &, throw_function const & ); - - template - E const & set_info( E const &, throw_file const & ); - - template - E const & set_info( E const &, throw_line const & ); - - template - E const & set_info( E const &, throw_column const & ); - - boost::source_location get_exception_throw_location( exception const & ); - } - - class - BOOST_SYMBOL_VISIBLE - exception - { - // - public: - template void set( typename Tag::type const & ); - template typename Tag::type const * get() const; - // - - protected: - - exception(): - throw_function_(0), - throw_file_(0), - throw_line_(-1), - throw_column_(-1) - { - } - -#ifdef __HP_aCC - //On HP aCC, this protected copy constructor prevents throwing boost::exception. - //On all other platforms, the same effect is achieved by the pure virtual destructor. - exception( exception const & x ) BOOST_NOEXCEPT_OR_NOTHROW: - data_(x.data_), - throw_function_(x.throw_function_), - throw_file_(x.throw_file_), - throw_line_(x.throw_line_), - throw_column_(x.throw_column_) - { - } -#endif - - virtual ~exception() BOOST_NOEXCEPT_OR_NOTHROW -#ifndef __HP_aCC - = 0 //Workaround for HP aCC, =0 incorrectly leads to link errors. -#endif - ; - -#if (defined(__MWERKS__) && __MWERKS__<=0x3207) || (defined(_MSC_VER) && _MSC_VER<=1310) - public: -#else - private: - - template - friend E const & exception_detail::set_info( E const &, throw_function const & ); - - template - friend E const & exception_detail::set_info( E const &, throw_file const & ); - - template - friend E const & exception_detail::set_info( E const &, throw_line const & ); - - template - friend E const & exception_detail::set_info( E const &, throw_column const & ); - - template - friend E const & exception_detail::set_info( E const &, error_info const & ); - - friend char const * exception_detail::get_diagnostic_information( exception const &, char const * ); - - friend boost::source_location exception_detail::get_exception_throw_location( exception const & ); - - template - friend struct exception_detail::get_info; - friend struct exception_detail::get_info; - friend struct exception_detail::get_info; - friend struct exception_detail::get_info; - friend struct exception_detail::get_info; - template - friend struct exception_detail::set_info_rv; - friend struct exception_detail::set_info_rv; - friend struct exception_detail::set_info_rv; - friend struct exception_detail::set_info_rv; - friend struct exception_detail::set_info_rv; - friend void exception_detail::copy_boost_exception( exception *, exception const * ); -#endif - mutable exception_detail::refcount_ptr data_; - mutable char const * throw_function_; - mutable char const * throw_file_; - mutable int throw_line_; - mutable int throw_column_; - }; - - inline - exception:: - ~exception() BOOST_NOEXCEPT_OR_NOTHROW - { - } - - namespace - exception_detail - { - template - E const & - set_info( E const & x, throw_function const & y ) - { - x.throw_function_=y.v_; - return x; - } - - template - E const & - set_info( E const & x, throw_file const & y ) - { - x.throw_file_=y.v_; - return x; - } - - template - E const & - set_info( E const & x, throw_line const & y ) - { - x.throw_line_=y.v_; - return x; - } - - template - E const & - set_info( E const & x, throw_column const & y ) - { - x.throw_column_=y.v_; - return x; - } - -#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES - - template <> - struct - set_info_rv - { - template - static - E const & - set( E const & x, throw_column && y ) - { - x.throw_column_=y.v_; - return x; - } - }; - -#endif - - inline boost::source_location get_exception_throw_location( exception const & x ) - { - return boost::source_location( - x.throw_file_? x.throw_file_: "", - x.throw_line_ >= 0? x.throw_line_: 0, - x.throw_function_? x.throw_function_: "", - x.throw_column_ >= 0? x.throw_column_: 0 - ); - } - } - - //////////////////////////////////////////////////////////////////////// - - namespace - exception_detail - { - template - struct - BOOST_SYMBOL_VISIBLE - error_info_injector: - public T, - public exception - { - explicit - error_info_injector( T const & x ): - T(x) - { - } - - ~error_info_injector() BOOST_NOEXCEPT_OR_NOTHROW - { - } - }; - - struct large_size { char c[256]; }; - large_size dispatch_boost_exception( exception const * ); - - struct small_size { }; - small_size dispatch_boost_exception( void const * ); - - template - struct enable_error_info_helper; - - template - struct - enable_error_info_helper - { - typedef T type; - }; - - template - struct - enable_error_info_helper - { - typedef error_info_injector type; - }; - - template - struct - enable_error_info_return_type - { - typedef typename enable_error_info_helper(0)))>::type type; - }; - } - - template - inline - typename - exception_detail::enable_error_info_return_type::type - enable_error_info( T const & x ) - { - typedef typename exception_detail::enable_error_info_return_type::type rt; - return rt(x); - } - - //////////////////////////////////////////////////////////////////////// -#if defined(BOOST_NO_EXCEPTIONS) - BOOST_NORETURN void throw_exception(std::exception const & e); // user defined -#endif - - namespace - exception_detail - { - class - BOOST_SYMBOL_VISIBLE - clone_base - { - public: - - virtual clone_base const * clone() const = 0; - virtual void rethrow() const = 0; - - virtual - ~clone_base() BOOST_NOEXCEPT_OR_NOTHROW - { - } - }; - - inline - void - copy_boost_exception( exception * a, exception const * b ) - { - refcount_ptr data; - if( error_info_container * d=b->data_.get() ) - data = d->clone(); - a->throw_file_ = b->throw_file_; - a->throw_line_ = b->throw_line_; - a->throw_function_ = b->throw_function_; - a->throw_column_ = b->throw_column_; - a->data_ = data; - } - - inline - void - copy_boost_exception( void *, void const * ) - { - } - - template - class - BOOST_SYMBOL_VISIBLE - clone_impl: - public T, - public virtual clone_base - { - struct clone_tag { }; - clone_impl( clone_impl const & x, clone_tag ): - T(x) - { - copy_boost_exception(this,&x); - } - - public: - - explicit - clone_impl( T const & x ): - T(x) - { - copy_boost_exception(this,&x); - } - - ~clone_impl() BOOST_NOEXCEPT_OR_NOTHROW - { - } - - private: - - clone_base const * - clone() const - { - return new clone_impl(*this,clone_tag()); - } - - void - rethrow() const - { -#if defined(BOOST_NO_EXCEPTIONS) - boost::throw_exception(*this); -#else - throw*this; -#endif - } - }; - } - - template - inline - exception_detail::clone_impl - enable_current_exception( T const & x ) - { - return exception_detail::clone_impl(x); - } - } - -#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) -#pragma warning(pop) -#endif - -#endif // #ifndef BOOST_EXCEPTION_274DA366004E11DCB1DDFE2E56D89593 diff -Nru boost1.81-1.81.0/libs/fiber/README.md boost1.81-1.81.0/libs/fiber/README.md --- boost1.81-1.81.0/libs/fiber/README.md 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/fiber/README.md 2022-12-24 13:24:09.805554900 +0000 @@ -1,11 +1,11 @@ -Boost.fiber -=========== - - -Boost.fiber provides a framework for micro-/userland-threads (fibers) scheduled cooperatively. The API contains classes and functions to manage and synchronize fibers similar to boost.thread. - -A fiber is able to store the current execution state, including all registers and CPU flags, the instruction pointer, and the stack pointer and later restore this state. The idea is to have multiple execution paths running on a single thread using a sort of cooperative scheduling (threads are preemptively scheduled) - the running fiber decides explicitly when it yields to allow another fiber to run (context switching). - -A context switch between threads costs usually thousands of CPU cycles on x86 compared to a fiber switch with less than 100 cycles. A fiber can only run on a single thread at any point in time. - -Boost.fiber requires C++11! +Boost.fiber +=========== + + +Boost.fiber provides a framework for micro-/userland-threads (fibers) scheduled cooperatively. The API contains classes and functions to manage and synchronize fibers similar to boost.thread. + +A fiber is able to store the current execution state, including all registers and CPU flags, the instruction pointer, and the stack pointer and later restore this state. The idea is to have multiple execution paths running on a single thread using a sort of cooperative scheduling (threads are preemptively scheduled) - the running fiber decides explicitly when it yields to allow another fiber to run (context switching). + +A context switch between threads costs usually thousands of CPU cycles on x86 compared to a fiber switch with less than 100 cycles. A fiber can only run on a single thread at any point in time. + +Boost.fiber requires C++11! diff -Nru boost1.81-1.81.0/libs/functional/forward/index.html boost1.81-1.81.0/libs/functional/forward/index.html --- boost1.81-1.81.0/libs/functional/forward/index.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/functional/forward/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ - - - - - - - Automatic redirection failed, click this -
link  
-

© Copyright Tobias Schwinger, 2009

-

Distributed under the Boost Software License, Version 1.0. (See - accompanying file - LICENSE_1_0.txt or copy at - www.boost.org/LICENSE_1_0.txt)

- - diff -Nru boost1.81-1.81.0/libs/functional/overloaded_function/index.html boost1.81-1.81.0/libs/functional/overloaded_function/index.html --- boost1.81-1.81.0/libs/functional/overloaded_function/index.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/functional/overloaded_function/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ - - - - - - - Automatic redirection failed, click this - link  
-

© Copyright Lorenzo Caminiti, 2009-2012

-

Distributed under the Boost Software License, Version 1.0 (see - accompanying file - LICENSE_1_0.txt or a copy at - www.boost.org/LICENSE_1_0.txt)

- - diff -Nru boost1.81-1.81.0/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_footer.html boost1.81-1.81.0/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_footer.html --- boost1.81-1.81.0/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_footer.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_footer.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -
- - - - - - - -
-

April 2, 2011

-
- -Copyright © 2007-2011 Barend Gehrels, Amsterdam, the Netherlands
-Copyright © 2008-2011 Bruno Lalande, Paris, France
-Copyright © 2009-2010 Mateusz Loskot, London, UK
-
-
- -
-Documentation is generated by Doxygen -
- - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_header.html boost1.81-1.81.0/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_header.html --- boost1.81-1.81.0/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_header.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/doxy/doxygen_input/ggl_doxygen_header.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ - - - - -Boost.Geometry (aka GGL, Generic Geometry Library) - - - - - - - - - - - -
-Boost.Geometry -   - - -Boost C++ Libraries - -
Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/geometry/doc/other/logo/DENMARK.TTF and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/geometry/doc/other/logo/DENMARK.TTF differ diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/boost.vsprops boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/boost.vsprops --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/boost.vsprops 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/boost.vsprops 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ - - - - - - diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/manual.html boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/manual.html --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/manual.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/contrib/rapidxml-1.13/manual.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,406 +0,0 @@ -

RAPIDXML Manual

Version 1.13

Copyright (C) 2006, 2009 Marcin Kalicinski
See accompanying file license.txt for license information.

Table of Contents

1. What is RapidXml?
1.1 Dependencies And Compatibility
1.2 Character Types And Encodings
1.3 Error Handling
1.4 Memory Allocation
1.5 W3C Compliance
1.6 API Design
1.7 Reliability
1.8 Acknowledgements
2. Two Minute Tutorial
2.1 Parsing
2.2 Accessing The DOM Tree
2.3 Modifying The DOM Tree
2.4 Printing XML
3. Differences From Regular XML Parsers
3.1 Lifetime Of Source Text
3.2 Ownership Of Strings
3.3 Destructive Vs Non-Destructive Mode
4. Performance
4.1 Comparison With Other Parsers
5. Reference

1. What is RapidXml?

RapidXml is an attempt to create the fastest XML DOM parser possible, while retaining useability, portability and reasonable W3C compatibility. It is an in-situ parser written in C++, with parsing speed approaching that of strlen() function executed on the same data.

- Entire parser is contained in a single header file, so no building or linking is neccesary. To use it you just need to copy rapidxml.hpp file to a convenient place (such as your project directory), and include it where needed. You may also want to use printing functions contained in header rapidxml_print.hpp.

1.1 Dependencies And Compatibility

RapidXml has no dependencies other than a very small subset of standard C++ library (<cassert>, <cstdlib>, <new> and <exception>, unless exceptions are disabled). It should compile on any reasonably conformant compiler, and was tested on Visual C++ 2003, Visual C++ 2005, Visual C++ 2008, gcc 3, gcc 4, and Comeau 4.3.3. Care was taken that no warnings are produced on these compilers, even with highest warning levels enabled.

1.2 Character Types And Encodings

RapidXml is character type agnostic, and can work both with narrow and wide characters. Current version does not fully support UTF-16 or UTF-32, so use of wide characters is somewhat incapacitated. However, it should succesfully parse wchar_t strings containing UTF-16 or UTF-32 if endianness of the data matches that of the machine. UTF-8 is fully supported, including all numeric character references, which are expanded into appropriate UTF-8 byte sequences (unless you enable parse_no_utf8 flag).

- Note that RapidXml performs no decoding - strings returned by name() and value() functions will contain text encoded using the same encoding as source file. Rapidxml understands and expands the following character references: &apos; &amp; &quot; &lt; &gt; &#...; Other character references are not expanded.

1.3 Error Handling

By default, RapidXml uses C++ exceptions to report errors. If this behaviour is undesirable, RAPIDXML_NO_EXCEPTIONS can be defined to suppress exception code. See parse_error class and parse_error_handler() function for more information.

1.4 Memory Allocation

RapidXml uses a special memory pool object to allocate nodes and attributes, because direct allocation using new operator would be far too slow. Underlying memory allocations performed by the pool can be customized by use of memory_pool::set_allocator() function. See class memory_pool for more information.

1.5 W3C Compliance

RapidXml is not a W3C compliant parser, primarily because it ignores DOCTYPE declarations. There is a number of other, minor incompatibilities as well. Still, it can successfully parse and produce complete trees of all valid XML files in W3C conformance suite (over 1000 files specially designed to find flaws in XML processors). In destructive mode it performs whitespace normalization and character entity substitution for a small set of built-in entities.

1.6 API Design

RapidXml API is minimalistic, to reduce code size as much as possible, and facilitate use in embedded environments. Additional convenience functions are provided in separate headers: rapidxml_utils.hpp and rapidxml_print.hpp. Contents of these headers is not an essential part of the library, and is currently not documented (otherwise than with comments in code).

1.7 Reliability

RapidXml is very robust and comes with a large harness of unit tests. Special care has been taken to ensure stability of the parser no matter what source text is thrown at it. One of the unit tests produces 100,000 randomly corrupted variants of XML document, which (when uncorrupted) contains all constructs recognized by RapidXml. RapidXml passes this test when it correctly recognizes that errors have been introduced, and does not crash or loop indefinitely.

- Another unit test puts RapidXml head-to-head with another, well estabilished XML parser, and verifies that their outputs match across a wide variety of small and large documents.

- Yet another test feeds RapidXml with over 1000 test files from W3C compliance suite, and verifies that correct results are obtained. There are also additional tests that verify each API function separately, and test that various parsing modes work as expected.

1.8 Acknowledgements

I would like to thank Arseny Kapoulkine for his work on pugixml, which was an inspiration for this project. Additional thanks go to Kristen Wegner for creating pugxml, from which pugixml was derived. Janusz Wohlfeil kindly ran RapidXml speed tests on hardware that I did not have access to, allowing me to expand performance comparison table.

2. Two Minute Tutorial

2.1 Parsing

The following code causes RapidXml to parse a zero-terminated string named text:
using namespace rapidxml;
-xml_document<> doc;    // character type defaults to char
-doc.parse<0>(text);    // 0 means default parse flags
-
doc object is now a root of DOM tree containing representation of the parsed XML. Because all RapidXml interface is contained inside namespace rapidxml, users must either bring contents of this namespace into scope, or fully qualify all the names. Class xml_document represents a root of the DOM hierarchy. By means of public inheritance, it is also an xml_node and a memory_pool. Template parameter of xml_document::parse() function is used to specify parsing flags, with which you can fine-tune behaviour of the parser. Note that flags must be a compile-time constant.

2.2 Accessing The DOM Tree

To access the DOM tree, use methods of xml_node and xml_attribute classes:
cout << "Name of my first node is: " << doc.first_node()->name() << "\n";
-xml_node<> *node = doc.first_node("foobar");
-cout << "Node foobar has value " << node->value() << "\n";
-for (xml_attribute<> *attr = node->first_attribute();
-     attr; attr = attr->next_attribute())
-{
-    cout << "Node foobar has attribute " << attr->name() << " ";
-    cout << "with value " << attr->value() << "\n";
-}
-

2.3 Modifying The DOM Tree

DOM tree produced by the parser is fully modifiable. Nodes and attributes can be added/removed, and their contents changed. The below example creates a HTML document, whose sole contents is a link to google.com website:
xml_document<> doc;
-xml_node<> *node = doc.allocate_node(node_element, "a", "Google");
-doc.append_node(node);
-xml_attribute<> *attr = doc.allocate_attribute("href", "google.com");
-node->append_attribute(attr);
-
One quirk is that nodes and attributes do not own the text of their names and values. This is because normally they only store pointers to the source text. So, when assigning a new name or value to the node, care must be taken to ensure proper lifetime of the string. The easiest way to achieve it is to allocate the string from the xml_document memory pool. In the above example this is not necessary, because we are only assigning character constants. But the code below uses memory_pool::allocate_string() function to allocate node name (which will have the same lifetime as the document), and assigns it to a new node:
xml_document<> doc;
-char *node_name = doc.allocate_string(name);        // Allocate string and copy name into it
-xml_node<> *node = doc.allocate_node(node_element, node_name);  // Set node name to node_name
-
Check Reference section for description of the entire interface.

2.4 Printing XML

You can print xml_document and xml_node objects into an XML string. Use print() function or operator <<, which are defined in rapidxml_print.hpp header.
using namespace rapidxml;
-xml_document<> doc;    // character type defaults to char
-// ... some code to fill the document
-
-// Print to stream using operator <<
-std::cout << doc;   
-
-// Print to stream using print function, specifying printing flags
-print(std::cout, doc, 0);   // 0 means default printing flags
-
-// Print to string using output iterator
-std::string s;
-print(std::back_inserter(s), doc, 0);
-
-// Print to memory buffer using output iterator
-char buffer[4096];                      // You are responsible for making the buffer large enough!
-char *end = print(buffer, doc, 0);      // end contains pointer to character after last printed character
-*end = 0;                               // Add string terminator after XML
-

3. Differences From Regular XML Parsers

RapidXml is an in-situ parser, which allows it to achieve very high parsing speed. In-situ means that parser does not make copies of strings. Instead, it places pointers to the source text in the DOM hierarchy.

3.1 Lifetime Of Source Text

In-situ parsing requires that source text lives at least as long as the document object. If source text is destroyed, names and values of nodes in DOM tree will become destroyed as well. Additionally, whitespace processing, character entity translation, and zero-termination of strings require that source text be modified during parsing (but see non-destructive mode). This makes the text useless for further processing once it was parsed by RapidXml.

- In many cases however, these are not serious issues.

3.2 Ownership Of Strings

Nodes and attributes produced by RapidXml do not own their name and value strings. They merely hold the pointers to them. This means you have to be careful when setting these values manually, by using xml_base::name(const Ch *) or xml_base::value(const Ch *) functions. Care must be taken to ensure that lifetime of the string passed is at least as long as lifetime of the node/attribute. The easiest way to achieve it is to allocate the string from memory_pool owned by the document. Use memory_pool::allocate_string() function for this purpose.

3.3 Destructive Vs Non-Destructive Mode

By default, the parser modifies source text during the parsing process. This is required to achieve character entity translation, whitespace normalization, and zero-termination of strings.

- In some cases this behaviour may be undesirable, for example if source text resides in read only memory, or is mapped to memory directly from file. By using appropriate parser flags (parse_non_destructive), source text modifications can be disabled. However, because RapidXml does in-situ parsing, it obviously has the following side-effects:

4. Performance

RapidXml achieves its speed through use of several techniques:
  • In-situ parsing. When building DOM tree, RapidXml does not make copies of string data, such as node names and values. Instead, it stores pointers to interior of the source text.
  • Use of template metaprogramming techniques. This allows it to move much of the work to compile time. Through magic of the templates, C++ compiler generates a separate copy of parsing code for any combination of parser flags you use. In each copy, all possible decisions are made at compile time and all unused code is omitted.
  • Extensive use of lookup tables for parsing.
  • Hand-tuned C++ with profiling done on several most popular CPUs.
This results in a very small and fast code: a parser which is custom tailored to exact needs with each invocation.

4.1 Comparison With Other Parsers

The table below compares speed of RapidXml to some other parsers, and to strlen() function executed on the same data. On a modern CPU (as of 2007), you can expect parsing throughput to be close to 1 GB/s. As a rule of thumb, parsing speed is about 50-100x faster than Xerces DOM, 30-60x faster than TinyXml, 3-12x faster than pugxml, and about 5% - 30% faster than pugixml, the fastest XML parser I know of.
  • The test file is a real-world, 50kB large, moderately dense XML file.
  • All timing is done by using RDTSC instruction present in Pentium-compatible CPUs.
  • No profile-guided optimizations are used.
  • All parsers are running in their fastest modes.
  • The results are given in CPU cycles per character, so frequency of CPUs is irrelevant.
  • The results are minimum values from a large number of runs, to minimize effects of operating system activity, task switching, interrupt handling etc.
  • A single parse of the test file takes about 1/10th of a millisecond, so with large number of runs there is a good chance of hitting at least one no-interrupt streak, and obtaining undisturbed results.
Platform
Compiler
strlen() RapidXml pugixml 0.3 pugxml TinyXml
Pentium 4
MSVC 8.0
2.5
5.4
7.0
61.7
298.8
Pentium 4
gcc 4.1.1
0.8
6.1
9.5
67.0
413.2
Core 2
MSVC 8.0
1.0
4.5
5.0
24.6
154.8
Core 2
gcc 4.1.1
0.6
4.6
5.4
28.3
229.3
Athlon XP
MSVC 8.0
3.1
7.7
8.0
25.5
182.6
Athlon XP
gcc 4.1.1
0.9
8.2
9.2
33.7
265.2
Pentium 3
MSVC 8.0
2.0
6.3
7.0
30.9
211.9
Pentium 3
gcc 4.1.1
1.0
6.7
8.9
35.3
316.0
(*) All results are in CPU cycles per character of source text

5. Reference

This section lists all classes, functions, constants etc. and describes them in detail.
class - template - rapidxml::memory_pool
- constructor - memory_pool()
- destructor - ~memory_pool()
function allocate_node(node_type type, const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0)
function allocate_attribute(const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0)
function allocate_string(const Ch *source=0, std::size_t size=0)
function clone_node(const xml_node< Ch > *source, xml_node< Ch > *result=0)
function clear()
function set_allocator(alloc_func *af, free_func *ff)

class rapidxml::parse_error
- constructor - parse_error(const char *what, void *where)
function what() const
function where() const

class - template - rapidxml::xml_attribute
- constructor - xml_attribute()
function document() const
function previous_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function next_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const

class - template - rapidxml::xml_base
- constructor - xml_base()
function name() const
function name_size() const
function value() const
function value_size() const
function name(const Ch *name, std::size_t size)
function name(const Ch *name)
function value(const Ch *value, std::size_t size)
function value(const Ch *value)
function parent() const

class - template - rapidxml::xml_document
- constructor - xml_document()
function parse(Ch *text)
function clear()

class - template - rapidxml::xml_node
- constructor - xml_node(node_type type)
function type() const
function document() const
function first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function last_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function previous_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function next_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
function type(node_type type)
function prepend_node(xml_node< Ch > *child)
function append_node(xml_node< Ch > *child)
function insert_node(xml_node< Ch > *where, xml_node< Ch > *child)
function remove_first_node()
function remove_last_node()
function remove_node(xml_node< Ch > *where)
function remove_all_nodes()
function prepend_attribute(xml_attribute< Ch > *attribute)
function append_attribute(xml_attribute< Ch > *attribute)
function insert_attribute(xml_attribute< Ch > *where, xml_attribute< Ch > *attribute)
function remove_first_attribute()
function remove_last_attribute()
function remove_attribute(xml_attribute< Ch > *where)
function remove_all_attributes()

namespace rapidxml
enum node_type
function parse_error_handler(const char *what, void *where)
function print(OutIt out, const xml_node< Ch > &node, int flags=0)
function print(std::basic_ostream< Ch > &out, const xml_node< Ch > &node, int flags=0)
function operator<<(std::basic_ostream< Ch > &out, const xml_node< Ch > &node)
- constant - parse_no_data_nodes
- constant - parse_no_element_values
- constant - parse_no_string_terminators
- constant - parse_no_entity_translation
- constant - parse_no_utf8
- constant - parse_declaration_node
- constant - parse_comment_nodes
- constant - parse_doctype_node
- constant - parse_pi_nodes
- constant - parse_validate_closing_tags
- constant - parse_trim_whitespace
- constant - parse_normalize_whitespace
- constant - parse_default
- constant - parse_non_destructive
- constant - parse_fastest
- constant - parse_full
- constant - print_no_indenting


class - template - rapidxml::memory_pool

- - Defined in rapidxml.hpp
- Base class for - xml_document

Description

This class is used by the parser to create new nodes and attributes, without overheads of dynamic memory allocation. In most cases, you will not need to use this class directly. However, if you need to create nodes manually or modify names/values of nodes, you are encouraged to use memory_pool of relevant xml_document to allocate the memory. Not only is this faster than allocating them by using new operator, but also their lifetime will be tied to the lifetime of document, possibly simplyfing memory management.

- Call allocate_node() or allocate_attribute() functions to obtain new nodes or attributes from the pool. You can also call allocate_string() function to allocate strings. Such strings can then be used as names or values of nodes without worrying about their lifetime. Note that there is no free() function -- all allocations are freed at once when clear() function is called, or when the pool is destroyed.

- It is also possible to create a standalone memory_pool, and use it to allocate nodes, whose lifetime will not be tied to any document.

- Pool maintains RAPIDXML_STATIC_POOL_SIZE bytes of statically allocated memory. Until static memory is exhausted, no dynamic memory allocations are done. When static memory is exhausted, pool allocates additional blocks of memory of size RAPIDXML_DYNAMIC_POOL_SIZE each, by using global new[] and delete[] operators. This behaviour can be changed by setting custom allocation routines. Use set_allocator() function to set them.

- Allocations for nodes, attributes and strings are aligned at RAPIDXML_ALIGNMENT bytes. This value defaults to the size of pointer on target architecture.

- To obtain absolutely top performance from the parser, it is important that all nodes are allocated from a single, contiguous block of memory. Otherwise, cache misses when jumping between two (or more) disjoint blocks of memory can slow down parsing quite considerably. If required, you can tweak RAPIDXML_STATIC_POOL_SIZE, RAPIDXML_DYNAMIC_POOL_SIZE and RAPIDXML_ALIGNMENT to obtain best wasted memory to performance compromise. To do it, define their values before rapidxml.hpp file is included.

Parameters

Ch
Character type of created nodes.

- constructor - memory_pool::memory_pool

Synopsis

memory_pool(); -

Description

Constructs empty pool with default allocator functions.

- destructor - memory_pool::~memory_pool

Synopsis

~memory_pool(); -

Description

Destroys pool and frees all the memory. This causes memory occupied by nodes allocated by the pool to be freed. Nodes allocated from the pool are no longer valid.

function memory_pool::allocate_node

Synopsis

xml_node<Ch>* allocate_node(node_type type, const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0); -

Description

Allocates a new node from the pool, and optionally assigns name and value to it. If the allocation request cannot be accomodated, this function will throw std::bad_alloc. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call rapidxml::parse_error_handler() function.

Parameters

type
Type of node to create.
name
Name to assign to the node, or 0 to assign no name.
value
Value to assign to the node, or 0 to assign no value.
name_size
Size of name to assign, or 0 to automatically calculate size from name string.
value_size
Size of value to assign, or 0 to automatically calculate size from value string.

Returns

Pointer to allocated node. This pointer will never be NULL.

function memory_pool::allocate_attribute

Synopsis

xml_attribute<Ch>* allocate_attribute(const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0); -

Description

Allocates a new attribute from the pool, and optionally assigns name and value to it. If the allocation request cannot be accomodated, this function will throw std::bad_alloc. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call rapidxml::parse_error_handler() function.

Parameters

name
Name to assign to the attribute, or 0 to assign no name.
value
Value to assign to the attribute, or 0 to assign no value.
name_size
Size of name to assign, or 0 to automatically calculate size from name string.
value_size
Size of value to assign, or 0 to automatically calculate size from value string.

Returns

Pointer to allocated attribute. This pointer will never be NULL.

function memory_pool::allocate_string

Synopsis

Ch* allocate_string(const Ch *source=0, std::size_t size=0); -

Description

Allocates a char array of given size from the pool, and optionally copies a given string to it. If the allocation request cannot be accomodated, this function will throw std::bad_alloc. If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function will call rapidxml::parse_error_handler() function.

Parameters

source
String to initialize the allocated memory with, or 0 to not initialize it.
size
Number of characters to allocate, or zero to calculate it automatically from source string length; if size is 0, source string must be specified and null terminated.

Returns

Pointer to allocated char array. This pointer will never be NULL.

function memory_pool::clone_node

Synopsis

xml_node<Ch>* clone_node(const xml_node< Ch > *source, xml_node< Ch > *result=0); -

Description

Clones an xml_node and its hierarchy of child nodes and attributes. Nodes and attributes are allocated from this memory pool. Names and values are not cloned, they are shared between the clone and the source. Result node can be optionally specified as a second parameter, in which case its contents will be replaced with cloned source node. This is useful when you want to clone entire document.

Parameters

source
Node to clone.
result
Node to put results in, or 0 to automatically allocate result node

Returns

Pointer to cloned node. This pointer will never be NULL.

function memory_pool::clear

Synopsis

void clear(); -

Description

Clears the pool. This causes memory occupied by nodes allocated by the pool to be freed. Any nodes or strings allocated from the pool will no longer be valid.

function memory_pool::set_allocator

Synopsis

void set_allocator(alloc_func *af, free_func *ff); -

Description

Sets or resets the user-defined memory allocation functions for the pool. This can only be called when no memory is allocated from the pool yet, otherwise results are undefined. Allocation function must not return invalid pointer on failure. It should either throw, stop the program, or use longjmp() function to pass control to other place of program. If it returns invalid pointer, results are undefined.

- User defined allocation functions must have the following forms:

-void *allocate(std::size_t size);
-void free(void *pointer);

Parameters

af
Allocation function, or 0 to restore default function
ff
Free function, or 0 to restore default function

class rapidxml::parse_error

- - Defined in rapidxml.hpp

Description

Parse error exception. This exception is thrown by the parser when an error occurs. Use what() function to get human-readable error message. Use where() function to get a pointer to position within source text where error was detected.

- If throwing exceptions by the parser is undesirable, it can be disabled by defining RAPIDXML_NO_EXCEPTIONS macro before rapidxml.hpp is included. This will cause the parser to call rapidxml::parse_error_handler() function instead of throwing an exception. This function must be defined by the user.

- This class derives from std::exception class.

- constructor - parse_error::parse_error

Synopsis

parse_error(const char *what, void *where); -

Description

Constructs parse error.

function parse_error::what

Synopsis

virtual const char* what() const; -

Description

Gets human readable description of error.

Returns

Pointer to null terminated description of the error.

function parse_error::where

Synopsis

Ch* where() const; -

Description

Gets pointer to character data where error happened. Ch should be the same as char type of xml_document that produced the error.

Returns

Pointer to location within the parsed string where error occured.

class - template - rapidxml::xml_attribute

- - Defined in rapidxml.hpp
- Inherits from - xml_base

Description

Class representing attribute node of XML document. Each attribute has name and value strings, which are available through name() and value() functions (inherited from xml_base). Note that after parse, both name and value of attribute will point to interior of source text used for parsing. Thus, this text must persist in memory for the lifetime of attribute.

Parameters

Ch
Character type to use.

- constructor - xml_attribute::xml_attribute

Synopsis

xml_attribute(); -

Description

Constructs an empty attribute with the specified type. Consider using memory_pool of appropriate xml_document if allocating attributes manually.

function xml_attribute::document

Synopsis

xml_document<Ch>* document() const; -

Description

Gets document of which attribute is a child.

Returns

Pointer to document that contains this attribute, or 0 if there is no parent document.

function xml_attribute::previous_attribute

Synopsis

xml_attribute<Ch>* previous_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets previous attribute, optionally matching attribute name.

Parameters

name
Name of attribute to find, or 0 to return previous attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found attribute, or 0 if not found.

function xml_attribute::next_attribute

Synopsis

xml_attribute<Ch>* next_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets next attribute, optionally matching attribute name.

Parameters

name
Name of attribute to find, or 0 to return next attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found attribute, or 0 if not found.

class - template - rapidxml::xml_base

- - Defined in rapidxml.hpp
- Base class for - xml_attribute xml_node

Description

Base class for xml_node and xml_attribute implementing common functions: name(), name_size(), value(), value_size() and parent().

Parameters

Ch
Character type to use

- constructor - xml_base::xml_base

Synopsis

xml_base(); -

function xml_base::name

Synopsis

Ch* name() const; -

Description

Gets name of the node. Interpretation of name depends on type of node. Note that name will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse.

- Use name_size() function to determine length of the name.

Returns

Name of node, or empty string if node has no name.

function xml_base::name_size

Synopsis

std::size_t name_size() const; -

Description

Gets size of node name, not including terminator character. This function works correctly irrespective of whether name is or is not zero terminated.

Returns

Size of node name, in characters.

function xml_base::value

Synopsis

Ch* value() const; -

Description

Gets value of node. Interpretation of value depends on type of node. Note that value will not be zero-terminated if rapidxml::parse_no_string_terminators option was selected during parse.

- Use value_size() function to determine length of the value.

Returns

Value of node, or empty string if node has no value.

function xml_base::value_size

Synopsis

std::size_t value_size() const; -

Description

Gets size of node value, not including terminator character. This function works correctly irrespective of whether value is or is not zero terminated.

Returns

Size of node value, in characters.

function xml_base::name

Synopsis

void name(const Ch *name, std::size_t size); -

Description

Sets name of node to a non zero-terminated string. See Ownership Of Strings .

- Note that node does not own its name or value, it only stores a pointer to it. It will not delete or otherwise free the pointer on destruction. It is reponsibility of the user to properly manage lifetime of the string. The easiest way to achieve it is to use memory_pool of the document to allocate the string - on destruction of the document the string will be automatically freed.

- Size of name must be specified separately, because name does not have to be zero terminated. Use name(const Ch *) function to have the length automatically calculated (string must be zero terminated).

Parameters

name
Name of node to set. Does not have to be zero terminated.
size
Size of name, in characters. This does not include zero terminator, if one is present.

function xml_base::name

Synopsis

void name(const Ch *name); -

Description

Sets name of node to a zero-terminated string. See also Ownership Of Strings and xml_node::name(const Ch *, std::size_t).

Parameters

name
Name of node to set. Must be zero terminated.

function xml_base::value

Synopsis

void value(const Ch *value, std::size_t size); -

Description

Sets value of node to a non zero-terminated string. See Ownership Of Strings .

- Note that node does not own its name or value, it only stores a pointer to it. It will not delete or otherwise free the pointer on destruction. It is reponsibility of the user to properly manage lifetime of the string. The easiest way to achieve it is to use memory_pool of the document to allocate the string - on destruction of the document the string will be automatically freed.

- Size of value must be specified separately, because it does not have to be zero terminated. Use value(const Ch *) function to have the length automatically calculated (string must be zero terminated).

- If an element has a child node of type node_data, it will take precedence over element value when printing. If you want to manipulate data of elements using values, use parser flag rapidxml::parse_no_data_nodes to prevent creation of data nodes by the parser.

Parameters

value
value of node to set. Does not have to be zero terminated.
size
Size of value, in characters. This does not include zero terminator, if one is present.

function xml_base::value

Synopsis

void value(const Ch *value); -

Description

Sets value of node to a zero-terminated string. See also Ownership Of Strings and xml_node::value(const Ch *, std::size_t).

Parameters

value
Vame of node to set. Must be zero terminated.

function xml_base::parent

Synopsis

xml_node<Ch>* parent() const; -

Description

Gets node parent.

Returns

Pointer to parent node, or 0 if there is no parent.

class - template - rapidxml::xml_document

- - Defined in rapidxml.hpp
- Inherits from - xml_node memory_pool

Description

This class represents root of the DOM hierarchy. It is also an xml_node and a memory_pool through public inheritance. Use parse() function to build a DOM tree from a zero-terminated XML text string. parse() function allocates memory for nodes and attributes by using functions of xml_document, which are inherited from memory_pool. To access root node of the document, use the document itself, as if it was an xml_node.

Parameters

Ch
Character type to use.

- constructor - xml_document::xml_document

Synopsis

xml_document(); -

Description

Constructs empty XML document.

function xml_document::parse

Synopsis

void parse(Ch *text); -

Description

Parses zero-terminated XML string according to given flags. Passed string will be modified by the parser, unless rapidxml::parse_non_destructive flag is used. The string must persist for the lifetime of the document. In case of error, rapidxml::parse_error exception will be thrown.

- If you want to parse contents of a file, you must first load the file into the memory, and pass pointer to its beginning. Make sure that data is zero-terminated.

- Document can be parsed into multiple times. Each new call to parse removes previous nodes and attributes (if any), but does not clear memory pool.

Parameters

text
XML data to parse; pointer is non-const to denote fact that this data may be modified by the parser.

function xml_document::clear

Synopsis

void clear(); -

Description

Clears the document by deleting all nodes and clearing the memory pool. All nodes owned by document pool are destroyed.

class - template - rapidxml::xml_node

- - Defined in rapidxml.hpp
- Inherits from - xml_base
- Base class for - xml_document

Description

Class representing a node of XML document. Each node may have associated name and value strings, which are available through name() and value() functions. Interpretation of name and value depends on type of the node. Type of node can be determined by using type() function.

- Note that after parse, both name and value of node, if any, will point interior of source text used for parsing. Thus, this text must persist in the memory for the lifetime of node.

Parameters

Ch
Character type to use.

- constructor - xml_node::xml_node

Synopsis

xml_node(node_type type); -

Description

Constructs an empty node with the specified type. Consider using memory_pool of appropriate document to allocate nodes manually.

Parameters

type
Type of node to construct.

function xml_node::type

Synopsis

node_type type() const; -

Description

Gets type of node.

Returns

Type of node.

function xml_node::document

Synopsis

xml_document<Ch>* document() const; -

Description

Gets document of which node is a child.

Returns

Pointer to document that contains this node, or 0 if there is no parent document.

function xml_node::first_node

Synopsis

xml_node<Ch>* first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets first child node, optionally matching node name.

Parameters

name
Name of child to find, or 0 to return first child regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found child, or 0 if not found.

function xml_node::last_node

Synopsis

xml_node<Ch>* last_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets last child node, optionally matching node name. Behaviour is undefined if node has no children. Use first_node() to test if node has children.

Parameters

name
Name of child to find, or 0 to return last child regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found child, or 0 if not found.

function xml_node::previous_sibling

Synopsis

xml_node<Ch>* previous_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets previous sibling node, optionally matching node name. Behaviour is undefined if node has no parent. Use parent() to test if node has a parent.

Parameters

name
Name of sibling to find, or 0 to return previous sibling regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found sibling, or 0 if not found.

function xml_node::next_sibling

Synopsis

xml_node<Ch>* next_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets next sibling node, optionally matching node name. Behaviour is undefined if node has no parent. Use parent() to test if node has a parent.

Parameters

name
Name of sibling to find, or 0 to return next sibling regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found sibling, or 0 if not found.

function xml_node::first_attribute

Synopsis

xml_attribute<Ch>* first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets first attribute of node, optionally matching attribute name.

Parameters

name
Name of attribute to find, or 0 to return first attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found attribute, or 0 if not found.

function xml_node::last_attribute

Synopsis

xml_attribute<Ch>* last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const; -

Description

Gets last attribute of node, optionally matching attribute name.

Parameters

name
Name of attribute to find, or 0 to return last attribute regardless of its name; this string doesn't have to be zero-terminated if name_size is non-zero
name_size
Size of name, in characters, or 0 to have size calculated automatically from string
case_sensitive
Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters

Returns

Pointer to found attribute, or 0 if not found.

function xml_node::type

Synopsis

void type(node_type type); -

Description

Sets type of node.

Parameters

type
Type of node to set.

function xml_node::prepend_node

Synopsis

void prepend_node(xml_node< Ch > *child); -

Description

Prepends a new child node. The prepended child becomes the first child, and all existing children are moved one position back.

Parameters

child
Node to prepend.

function xml_node::append_node

Synopsis

void append_node(xml_node< Ch > *child); -

Description

Appends a new child node. The appended child becomes the last child.

Parameters

child
Node to append.

function xml_node::insert_node

Synopsis

void insert_node(xml_node< Ch > *where, xml_node< Ch > *child); -

Description

Inserts a new child node at specified place inside the node. All children after and including the specified node are moved one position back.

Parameters

where
Place where to insert the child, or 0 to insert at the back.
child
Node to insert.

function xml_node::remove_first_node

Synopsis

void remove_first_node(); -

Description

Removes first child node. If node has no children, behaviour is undefined. Use first_node() to test if node has children.

function xml_node::remove_last_node

Synopsis

void remove_last_node(); -

Description

Removes last child of the node. If node has no children, behaviour is undefined. Use first_node() to test if node has children.

function xml_node::remove_node

Synopsis

void remove_node(xml_node< Ch > *where); -

Description

Removes specified child from the node.

function xml_node::remove_all_nodes

Synopsis

void remove_all_nodes(); -

Description

Removes all child nodes (but not attributes).

function xml_node::prepend_attribute

Synopsis

void prepend_attribute(xml_attribute< Ch > *attribute); -

Description

Prepends a new attribute to the node.

Parameters

attribute
Attribute to prepend.

function xml_node::append_attribute

Synopsis

void append_attribute(xml_attribute< Ch > *attribute); -

Description

Appends a new attribute to the node.

Parameters

attribute
Attribute to append.

function xml_node::insert_attribute

Synopsis

void insert_attribute(xml_attribute< Ch > *where, xml_attribute< Ch > *attribute); -

Description

Inserts a new attribute at specified place inside the node. All attributes after and including the specified attribute are moved one position back.

Parameters

where
Place where to insert the attribute, or 0 to insert at the back.
attribute
Attribute to insert.

function xml_node::remove_first_attribute

Synopsis

void remove_first_attribute(); -

Description

Removes first attribute of the node. If node has no attributes, behaviour is undefined. Use first_attribute() to test if node has attributes.

function xml_node::remove_last_attribute

Synopsis

void remove_last_attribute(); -

Description

Removes last attribute of the node. If node has no attributes, behaviour is undefined. Use first_attribute() to test if node has attributes.

function xml_node::remove_attribute

Synopsis

void remove_attribute(xml_attribute< Ch > *where); -

Description

Removes specified attribute from node.

Parameters

where
Pointer to attribute to be removed.

function xml_node::remove_all_attributes

Synopsis

void remove_all_attributes(); -

Description

Removes all attributes of node.

enum node_type

Description

Enumeration listing all node types produced by the parser. Use xml_node::type() function to query node type.

Values

node_document
A document node. Name and value are empty.
node_element
An element node. Name contains element name. Value contains text of first data node.
node_data
A data node. Name is empty. Value contains data text.
node_cdata
A CDATA node. Name is empty. Value contains data text.
node_comment
A comment node. Name is empty. Value contains comment text.
node_declaration
A declaration node. Name and value are empty. Declaration parameters (version, encoding and standalone) are in node attributes.
node_doctype
A DOCTYPE node. Name is empty. Value contains DOCTYPE text.
node_pi
A PI node. Name contains target. Value contains instructions.

function parse_error_handler

Synopsis

void rapidxml::parse_error_handler(const char *what, void *where); -

Description

When exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function is called to notify user about the error. It must be defined by the user.

- This function cannot return. If it does, the results are undefined.

- A very simple definition might look like that: - void rapidxml::parse_error_handler(const char *what, void *where) - { - std::cout << "Parse error: " << what << "\n"; - std::abort(); - } -

Parameters

what
Human readable description of the error.
where
Pointer to character data where error was detected.

function print

Synopsis

OutIt rapidxml::print(OutIt out, const xml_node< Ch > &node, int flags=0); -

Description

Prints XML to given output iterator.

Parameters

out
Output iterator to print to.
node
Node to be printed. Pass xml_document to print entire document.
flags
Flags controlling how XML is printed.

Returns

Output iterator pointing to position immediately after last character of printed text.

function print

Synopsis

std::basic_ostream<Ch>& rapidxml::print(std::basic_ostream< Ch > &out, const xml_node< Ch > &node, int flags=0); -

Description

Prints XML to given output stream.

Parameters

out
Output stream to print to.
node
Node to be printed. Pass xml_document to print entire document.
flags
Flags controlling how XML is printed.

Returns

Output stream.

function operator<<

Synopsis

std::basic_ostream<Ch>& rapidxml::operator<<(std::basic_ostream< Ch > &out, const xml_node< Ch > &node); -

Description

Prints formatted XML to given output stream. Uses default printing flags. Use print() function to customize printing process.

Parameters

out
Output stream to print to.
node
Node to be printed.

Returns

Output stream.

- constant - parse_no_data_nodes

Synopsis

const int parse_no_data_nodes - = 0x1; -

Description

Parse flag instructing the parser to not create data nodes. Text of first data node will still be placed in value of parent element, unless rapidxml::parse_no_element_values flag is also specified. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_no_element_values

Synopsis

const int parse_no_element_values - = 0x2; -

Description

Parse flag instructing the parser to not use text of first data node as a value of parent element. Can be combined with other flags by use of | operator. Note that child data nodes of element node take precendence over its value when printing. That is, if element has one or more child data nodes and a value, the value will be ignored. Use rapidxml::parse_no_data_nodes flag to prevent creation of data nodes if you want to manipulate data using values of elements.

- See xml_document::parse() function.

- constant - parse_no_string_terminators

Synopsis

const int parse_no_string_terminators - = 0x4; -

Description

Parse flag instructing the parser to not place zero terminators after strings in the source text. By default zero terminators are placed, modifying source text. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_no_entity_translation

Synopsis

const int parse_no_entity_translation - = 0x8; -

Description

Parse flag instructing the parser to not translate entities in the source text. By default entities are translated, modifying source text. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_no_utf8

Synopsis

const int parse_no_utf8 - = 0x10; -

Description

Parse flag instructing the parser to disable UTF-8 handling and assume plain 8 bit characters. By default, UTF-8 handling is enabled. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_declaration_node

Synopsis

const int parse_declaration_node - = 0x20; -

Description

Parse flag instructing the parser to create XML declaration node. By default, declaration node is not created. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_comment_nodes

Synopsis

const int parse_comment_nodes - = 0x40; -

Description

Parse flag instructing the parser to create comments nodes. By default, comment nodes are not created. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_doctype_node

Synopsis

const int parse_doctype_node - = 0x80; -

Description

Parse flag instructing the parser to create DOCTYPE node. By default, doctype node is not created. Although W3C specification allows at most one DOCTYPE node, RapidXml will silently accept documents with more than one. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_pi_nodes

Synopsis

const int parse_pi_nodes - = 0x100; -

Description

Parse flag instructing the parser to create PI nodes. By default, PI nodes are not created. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_validate_closing_tags

Synopsis

const int parse_validate_closing_tags - = 0x200; -

Description

Parse flag instructing the parser to validate closing tag names. If not set, name inside closing tag is irrelevant to the parser. By default, closing tags are not validated. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_trim_whitespace

Synopsis

const int parse_trim_whitespace - = 0x400; -

Description

Parse flag instructing the parser to trim all leading and trailing whitespace of data nodes. By default, whitespace is not trimmed. This flag does not cause the parser to modify source text. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_normalize_whitespace

Synopsis

const int parse_normalize_whitespace - = 0x800; -

Description

Parse flag instructing the parser to condense all whitespace runs of data nodes to a single space character. Trimming of leading and trailing whitespace of data is controlled by rapidxml::parse_trim_whitespace flag. By default, whitespace is not normalized. If this flag is specified, source text will be modified. Can be combined with other flags by use of | operator.

- See xml_document::parse() function.

- constant - parse_default

Synopsis

const int parse_default - = 0; -

Description

Parse flags which represent default behaviour of the parser. This is always equal to 0, so that all other flags can be simply ored together. Normally there is no need to inconveniently disable flags by anding with their negated (~) values. This also means that meaning of each flag is a negation of the default setting. For example, if flag name is rapidxml::parse_no_utf8, it means that utf-8 is enabled by default, and using the flag will disable it.

- See xml_document::parse() function.

- constant - parse_non_destructive

Synopsis

const int parse_non_destructive - = parse_no_string_terminators | parse_no_entity_translation; -

Description

A combination of parse flags that forbids any modifications of the source text. This also results in faster parsing. However, note that the following will occur:
  • names and values of nodes will not be zero terminated, you have to use xml_base::name_size() and xml_base::value_size() functions to determine where name and value ends
  • entities will not be translated
  • whitespace will not be normalized
-See xml_document::parse() function.

- constant - parse_fastest

Synopsis

const int parse_fastest - = parse_non_destructive | parse_no_data_nodes; -

Description

A combination of parse flags resulting in fastest possible parsing, without sacrificing important data.

- See xml_document::parse() function.

- constant - parse_full

Synopsis

const int parse_full - = parse_declaration_node | parse_comment_nodes | parse_doctype_node | parse_pi_nodes | parse_validate_closing_tags; -

Description

A combination of parse flags resulting in largest amount of data being extracted. This usually results in slowest parsing.

- See xml_document::parse() function.

- constant - print_no_indenting

Synopsis

const int print_no_indenting - = 0x1; -

Description

Printer flag instructing the printer to suppress indenting of XML. See print() function.

\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/deployment_path.vsprops boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/deployment_path.vsprops --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/deployment_path.vsprops 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/deployment_path.vsprops 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ - - - - diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.sln boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.sln --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.sln 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual C++ Express 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doxygen_xml2qbk", "doxygen_xml2qbk.vcproj", "{81BDA0FD-D3BC-4693-A389-D3ABFAD19214}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {81BDA0FD-D3BC-4693-A389-D3ABFAD19214}.Debug|Win32.ActiveCfg = Debug|Win32 - {81BDA0FD-D3BC-4693-A389-D3ABFAD19214}.Debug|Win32.Build.0 = Debug|Win32 - {81BDA0FD-D3BC-4693-A389-D3ABFAD19214}.Release|Win32.ActiveCfg = Release|Win32 - {81BDA0FD-D3BC-4693-A389-D3ABFAD19214}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.vcproj boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.vcproj --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.vcproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml2qbk.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,226 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.sln boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.sln --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.sln 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual C++ Express 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fruit", "fruit.vcproj", "{CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}.Debug|Win32.ActiveCfg = Debug|Win32 - {CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}.Debug|Win32.Build.0 = Debug|Win32 - {CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}.Release|Win32.ActiveCfg = Release|Win32 - {CCC26650-0FD5-4DD9-8B76-43DC2B8B0870}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.vcproj boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.vcproj --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.vcproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/sample/src/fruit.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.sln boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.sln --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.sln 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual C++ Express 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "implementation_status", "implementation_status.vcproj", "{2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}.Debug|Win32.ActiveCfg = Debug|Win32 - {2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}.Debug|Win32.Build.0 = Debug|Win32 - {2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}.Release|Win32.ActiveCfg = Release|Win32 - {2A4F2616-8F8B-4BA0-A2F6-7E41135EC7B8}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.vcproj boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.vcproj --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.vcproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/implementation_status/implementation_status.vcproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/support_status/support_status.sln boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/support_status/support_status.sln --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/support_status/support_status.sln 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/support_status/support_status.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 -Project("{047EF2F6-2E37-11E1-91D6-C70F4924019B}") = "support_status", "support_status.vcxproj", "{72FDA9D6-899F-5B22-C919-4723D44FB2A0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {72FDA9D6-899F-5B22-C919-4723D44FB2A0}.Debug|Win32.ActiveCfg = Debug|Win32 - {72FDA9D6-899F-5B22-C919-4723D44FB2A0}.Debug|Win32.Build.0 = Debug|Win32 - {72FDA9D6-899F-5B22-C919-4723D44FB2A0}.Release|Win32.ActiveCfg = Release|Win32 - {72FDA9D6-899F-5B22-C919-4723D44FB2A0}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/support_status/support_status.vcxproj boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/support_status/support_status.vcxproj --- boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/support_status/support_status.vcxproj 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/geometry/doc/src/docutils/tools/support_status/support_status.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - Win32Proj - - - - Application - - - Application - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - Debug\ - Debug\ - true - Release\ - Release\ - true - - - - Disabled - ../../../../../../..;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - - - Level3 - EditAndContinue - - - true - Console - MachineX86 - - - - - ../../../../../../..;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - - - Level3 - ProgramDatabase - - - true - Console - true - true - MachineX86 - - - - - - - - - \ No newline at end of file Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/geometry/test/algorithms/overlay/get_turn_info.xls and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/geometry/test/algorithms/overlay/get_turn_info.xls differ diff -Nru boost1.81-1.81.0/libs/gil/doc/footer.html boost1.81-1.81.0/libs/gil/doc/footer.html --- boost1.81-1.81.0/libs/gil/doc/footer.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/gil/doc/footer.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ - - - -

- - - - - - - diff -Nru boost1.81-1.81.0/libs/gil/doc/header.html boost1.81-1.81.0/libs/gil/doc/header.html --- boost1.81-1.81.0/libs/gil/doc/header.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/gil/doc/header.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ - - - - - - - - - $projectname: $title - $title - - - - $treeview - $search - $mathjax - - $extrastylesheet - - -
- - - - - - -
-

Boost GIL

-

$searchbox
-
-
-
- diff -Nru boost1.81-1.81.0/libs/gil/doc/index.html boost1.81-1.81.0/libs/gil/doc/index.html --- boost1.81-1.81.0/libs/gil/doc/index.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/gil/doc/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ - - - - - - Automatic redirection failed, please go to - html/index.html - - diff -Nru boost1.81-1.81.0/libs/gil/doc/warnings.txt boost1.81-1.81.0/libs/gil/doc/warnings.txt --- boost1.81-1.81.0/libs/gil/doc/warnings.txt 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/gil/doc/warnings.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -/root/project/libs/gil/include/boost/gil/channel.hpp:34: warning: preprocessing issue while doing constant expression evaluation: syntax error -/root/project/libs/gil/include/boost/gil/image_processing/harris.hpp:16: warning: missing title after \defgroup CornerDetectionAlgorithms -/root/project/libs/gil/include/boost/gil/image_processing/numeric.hpp:23: warning: missing title after \defgroup ImageProcessingMath -/root/project/libs/gil/include/boost/gil/image_processing/scaling.hpp:18: warning: missing title after \defgroup ScalingAlgorithms -/root/project/libs/gil/include/boost/gil/image_processing/scaling.hpp:23: warning: missing title after \defgroup DownScalingAlgorithms -/root/project/libs/gil/include/boost/gil/bit_aligned_pixel_reference.hpp:87: warning: Refusing to add group PixelModelNonAlignedPixel to itself -/root/project/libs/gil/include/boost/gil/image_processing/numeric.hpp:23: warning: Refusing to add group ImageProcessingMath to itself -/root/project/libs/gil/include/boost/gil/image_processing/scaling.hpp:23: warning: Refusing to add group DownScalingAlgorithms to itself -/root/project/libs/gil/include/boost/gil/extension/dynamic_image/algorithm.hpp:255: warning: Refusing to add group ImageViewSTLAlgorithmsForEachPixel to itself -/root/project/libs/gil/include/boost/gil/image_processing/morphology.hpp:91: warning: argument 'kernel' of command @param is not found in the argument list of boost::gil::detail::morph(SrcView const &src_view, DstView const &dst_view, Kernel const &ker_mat, morphological_operation identifier) -/root/project/libs/gil/include/boost/gil/image_processing/morphology.hpp:103: warning: The following parameters of boost::gil::detail::morph(SrcView const &src_view, DstView const &dst_view, Kernel const &ker_mat, morphological_operation identifier) are not documented: - parameter 'ker_mat' -/root/project/libs/gil/include/boost/gil/image_processing/threshold.hpp:98: warning: argument 'threshold_direction' of command @param is not found in the argument list of boost::gil::threshold_binary(SrcView const &src_view, DstView const &dst_view, typename channel_type< DstView >::type threshold_value, typename channel_type< DstView >::type max_value, threshold_direction direction=threshold_direction::regular) -/root/project/libs/gil/include/boost/gil/image_processing/threshold.hpp:109: warning: The following parameters of boost::gil::threshold_binary(SrcView const &src_view, DstView const &dst_view, typename channel_type< DstView >::type threshold_value, typename channel_type< DstView >::type max_value, threshold_direction direction=threshold_direction::regular) are not documented: - parameter 'direction' -/root/project/libs/gil/include/boost/gil/io/read_and_convert_image.hpp:24: warning: argument 'settings' of command @param is not found in the argument list of boost::gil::read_and_convert_image(Reader &reader, Image &img, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, is_format_tag< typename Reader::format_tag_t > >::value >::type *=nullptr) -/root/project/libs/gil/include/boost/gil/io/read_and_convert_image.hpp:24: warning: argument 'cc' of command @param is not found in the argument list of boost::gil::read_and_convert_image(Reader &reader, Image &img, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, is_format_tag< typename Reader::format_tag_t > >::value >::type *=nullptr) -/root/project/libs/gil/include/boost/gil/io/read_and_convert_view.hpp:24: warning: argument 'img' of command @param is not found in the argument list of boost::gil::read_and_convert_view(Reader &reader, View const &view, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, is_format_tag< typename Reader::format_tag_t > >::value >::type *=nullptr) -/root/project/libs/gil/include/boost/gil/io/read_and_convert_view.hpp:24: warning: argument 'settings' of command @param is not found in the argument list of boost::gil::read_and_convert_view(Reader &reader, View const &view, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, is_format_tag< typename Reader::format_tag_t > >::value >::type *=nullptr) -/root/project/libs/gil/include/boost/gil/io/read_and_convert_view.hpp:24: warning: argument 'cc' of command @param is not found in the argument list of boost::gil::read_and_convert_view(Reader &reader, View const &view, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, is_format_tag< typename Reader::format_tag_t > >::value >::type *=nullptr) -/root/project/libs/gil/include/boost/gil/io/read_and_convert_view.hpp:32: warning: The following parameters of boost::gil::read_and_convert_view(Reader &reader, View const &view, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, is_format_tag< typename Reader::format_tag_t > >::value >::type *=nullptr) are not documented: - parameter 'view' -/root/project/libs/gil/include/boost/gil/io/read_view.hpp:24: warning: argument 'settings' of command @param is not found in the argument list of boost::gil::read_view(Reader reader, View const &view, typename std::enable_if< mp11::mp_and< detail::is_reader< Reader >, typename is_format_tag< typename Reader::format_tag_t >::type, typename is_read_supported< typename get_pixel_type< View >::type, typename Reader::format_tag_t >::type >::value >::type *=nullptr) -/root/project/libs/gil/include/boost/gil/concepts/channel.hpp:188: warning: unexpected command endcode -/root/project/libs/gil/include/boost/gil/io/reader_base.hpp:46: warning: argument 'info' of command @param is not found in the argument list of reader_base< FormatTag, ConversionPolicy >::init_image(Image &img, const image_read_settings< FormatTag > &settings) -/root/project/libs/gil/include/boost/gil/io/reader_base.hpp:53: warning: The following parameters of boost::gil::reader_base::init_image(Image &img, const image_read_settings< FormatTag > &settings) are not documented: - parameter 'settings' Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g01bg.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g01bg.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g01bw.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g01bw.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g01p1.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g01p1.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g01wb.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g01wb.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g04.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g04.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g04p4.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g04p4.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g04rle.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g04rle.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08offs.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08offs.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08os2.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08os2.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08p256.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08p256.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08p64.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08p64.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08pi256.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08pi256.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08pi64.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08pi64.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08res11.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08res11.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08res21.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08res21.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08res22.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08res22.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08rle.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08rle.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08s0.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08s0.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08w124.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08w124.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08w125.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08w125.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08w126.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g08w126.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g16bf555.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g16bf555.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g16bf565.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g16bf565.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g16def555.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g16def555.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g24.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g24.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g32bf.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g32bf.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g32def.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/g32def.bmp differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/test.bmp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/gil/test/extension/io/images/bmp/test.bmp differ diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/accounting.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/accounting.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/accounting.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/accounting.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -// Copyright 2005 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_ACCOUNTING_HPP -#define BOOST_GRAPH_ACCOUNTING_HPP - -#include -#include -#include -#include -#include - -namespace boost { namespace graph { namespace accounting { - -typedef double time_type; - -inline time_type get_time() -{ - return MPI_Wtime(); -} - -inline std::string print_time(time_type t) -{ - std::ostringstream out; - out << std::setiosflags(std::ios::fixed) << std::setprecision(2) << t; - return out.str(); -} - -} } } // end namespace boost::graph::accounting - -#endif // BOOST_GRAPH_ACCOUNTING_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjacency_list.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjacency_list.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjacency_list.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjacency_list.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,3992 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. -// Copyright (C) 2007 Douglas Gregor - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -#ifndef BOOST_GRAPH_DISTRIBUTED_ADJACENCY_LIST_HPP -#define BOOST_GRAPH_DISTRIBUTED_ADJACENCY_LIST_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Callbacks -#include - -// Serialization -#include -#include -#include -#include - -// Named vertices -#include - -#include - -namespace boost { - - /// The type used to store an identifier that uniquely names a processor. - // NGE: I doubt we'll be running on more than 32768 procs for the time being - typedef /*int*/ short processor_id_type; - - // Tell which processor the target of an edge resides on (for - // directed graphs) or which processor the other end point of the - // edge resides on (for undirected graphs). - enum edge_target_processor_id_t { edge_target_processor_id }; - BOOST_INSTALL_PROPERTY(edge, target_processor_id); - - // For undirected graphs, tells whether the edge is locally owned. - enum edge_locally_owned_t { edge_locally_owned }; - BOOST_INSTALL_PROPERTY(edge, locally_owned); - - // For bidirectional graphs, stores the incoming edges. - enum vertex_in_edges_t { vertex_in_edges }; - BOOST_INSTALL_PROPERTY(vertex, in_edges); - - /// Tag class for directed, distributed adjacency list - struct directed_distributed_adj_list_tag - : public virtual distributed_graph_tag, - public virtual distributed_vertex_list_graph_tag, - public virtual distributed_edge_list_graph_tag, - public virtual incidence_graph_tag, - public virtual adjacency_graph_tag {}; - - /// Tag class for bidirectional, distributed adjacency list - struct bidirectional_distributed_adj_list_tag - : public virtual distributed_graph_tag, - public virtual distributed_vertex_list_graph_tag, - public virtual distributed_edge_list_graph_tag, - public virtual incidence_graph_tag, - public virtual adjacency_graph_tag, - public virtual bidirectional_graph_tag {}; - - /// Tag class for undirected, distributed adjacency list - struct undirected_distributed_adj_list_tag - : public virtual distributed_graph_tag, - public virtual distributed_vertex_list_graph_tag, - public virtual distributed_edge_list_graph_tag, - public virtual incidence_graph_tag, - public virtual adjacency_graph_tag, - public virtual bidirectional_graph_tag {}; - - namespace detail { - template - void - serialize(Archiver& ar, edge_base& e, - const unsigned int /*version*/) - { - ar & unsafe_serialize(e.m_source) - & unsafe_serialize(e.m_target); - } - - template - void - serialize(Archiver& ar, edge_desc_impl& e, - const unsigned int /*version*/) - { - ar & boost::serialization::base_object >(e) - & unsafe_serialize(e.m_eproperty); - } - } - - namespace detail { namespace parallel { - - /** - * A distributed vertex descriptor. These descriptors contain both - * the ID of the processor that owns the vertex and a local vertex - * descriptor that identifies the particular vertex for that - * processor. - */ - template - struct global_descriptor - { - typedef LocalDescriptor local_descriptor_type; - - global_descriptor() : owner(), local() { } - - global_descriptor(processor_id_type owner, LocalDescriptor local) - : owner(owner), local(local) { } - - processor_id_type owner; - LocalDescriptor local; - - /** - * A function object that, given a processor ID, generates - * distributed vertex descriptors from local vertex - * descriptors. This function object is used by the - * vertex_iterator of the distributed adjacency list. - */ - struct generator - { - typedef global_descriptor result_type; - typedef LocalDescriptor argument_type; - - generator() {} - generator(processor_id_type owner) : owner(owner) {} - - result_type operator()(argument_type v) const - { return result_type(owner, v); } - - private: - processor_id_type owner; - }; - - template - void serialize(Archiver& ar, const unsigned int /*version*/) - { - ar & owner & unsafe_serialize(local); - } - }; - - /// Determine the process that owns the given descriptor - template - inline processor_id_type owner(const global_descriptor& v) - { return v.owner; } - - /// Determine the local portion of the given descriptor - template - inline LocalDescriptor local(const global_descriptor& v) - { return v.local; } - - /// Compare distributed vertex descriptors for equality - template - inline bool - operator==(const global_descriptor& u, - const global_descriptor& v) - { - return u.owner == v.owner && u.local == v.local; - } - - /// Compare distributed vertex descriptors for inequality - template - inline bool - operator!=(const global_descriptor& u, - const global_descriptor& v) - { return !(u == v); } - - template - inline bool - operator<(const global_descriptor& u, - const global_descriptor& v) - { - return (u.owner) < v.owner || (u.owner == v.owner && (u.local) < v.local); - } - - template - inline bool - operator<=(const global_descriptor& u, - const global_descriptor& v) - { - return u.owner <= v.owner || (u.owner == v.owner && u.local <= v.local); - } - - template - inline bool - operator>(const global_descriptor& u, - const global_descriptor& v) - { - return v < u; - } - - template - inline bool - operator>=(const global_descriptor& u, - const global_descriptor& v) - { - return v <= u; - } - - // DPG TBD: Add <, <=, >=, > for global descriptors - - /** - * A Readable Property Map that extracts a global descriptor pair - * from a global_descriptor. - */ - template - struct global_descriptor_property_map - { - typedef std::pair value_type; - typedef value_type reference; - typedef global_descriptor key_type; - typedef readable_property_map_tag category; - }; - - template - inline std::pair - get(global_descriptor_property_map, - global_descriptor x) - { - return std::pair(x.owner, x.local); - } - - /** - * A Readable Property Map that extracts the owner of a global - * descriptor. - */ - template - struct owner_property_map - { - typedef processor_id_type value_type; - typedef value_type reference; - typedef global_descriptor key_type; - typedef readable_property_map_tag category; - }; - - template - inline processor_id_type - get(owner_property_map, - global_descriptor x) - { - return x.owner; - } - - /** - * A Readable Property Map that extracts the local descriptor from - * a global descriptor. - */ - template - struct local_descriptor_property_map - { - typedef LocalDescriptor value_type; - typedef value_type reference; - typedef global_descriptor key_type; - typedef readable_property_map_tag category; - }; - - template - inline LocalDescriptor - get(local_descriptor_property_map, - global_descriptor x) - { - return x.local; - } - - /** - * Stores an incoming edge for a bidirectional distributed - * adjacency list. The user does not see this type directly, - * because it is just an implementation detail. - */ - template - struct stored_in_edge - { - stored_in_edge(processor_id_type sp, Edge e) - : source_processor(sp), e(e) {} - - processor_id_type source_processor; - Edge e; - }; - - /** - * A distributed edge descriptor. These descriptors contain the - * underlying edge descriptor, the processor IDs for both the - * source and the target of the edge, and a boolean flag that - * indicates which of the processors actually owns the edge. - */ - template - struct edge_descriptor - { - edge_descriptor(processor_id_type sp = processor_id_type(), - processor_id_type tp = processor_id_type(), - bool owns = false, Edge ld = Edge()) - : source_processor(sp), target_processor(tp), - source_owns_edge(owns), local(ld) {} - - processor_id_type owner() const - { - return source_owns_edge? source_processor : target_processor; - } - - /// The processor that the source vertex resides on - processor_id_type source_processor; - - /// The processor that the target vertex resides on - processor_id_type target_processor; - - /// True when the source processor owns the edge, false when the - /// target processor owns the edge. - bool source_owns_edge; - - /// The local edge descriptor. - Edge local; - - /** - * Function object that generates edge descriptors for the - * out_edge_iterator of the given distributed adjacency list - * from the edge descriptors of the underlying adjacency list. - */ - template - class out_generator - { - typedef typename Graph::directed_selector directed_selector; - - public: - typedef edge_descriptor result_type; - typedef Edge argument_type; - - out_generator() : g(0) {} - explicit out_generator(const Graph& g) : g(&g) {} - - result_type operator()(argument_type e) const - { return map(e, directed_selector()); } - - private: - result_type map(argument_type e, directedS) const - { - return result_type(g->processor(), - get(edge_target_processor_id, g->base(), e), - true, e); - } - - result_type map(argument_type e, bidirectionalS) const - { - return result_type(g->processor(), - get(edge_target_processor_id, g->base(), e), - true, e); - } - - result_type map(argument_type e, undirectedS) const - { - return result_type(g->processor(), - get(edge_target_processor_id, g->base(), e), - get(edge_locally_owned, g->base(), e), - e); - } - - const Graph* g; - }; - - /** - * Function object that generates edge descriptors for the - * in_edge_iterator of the given distributed adjacency list - * from the edge descriptors of the underlying adjacency list. - */ - template - class in_generator - { - typedef typename Graph::directed_selector DirectedS; - - public: - typedef typename boost::mpl::if_, - stored_in_edge, - Edge>::type argument_type; - typedef edge_descriptor result_type; - - in_generator() : g(0) {} - explicit in_generator(const Graph& g) : g(&g) {} - - result_type operator()(argument_type e) const - { return map(e, DirectedS()); } - - private: - /** - * For a bidirectional graph, we just generate the appropriate - * edge. No tricks. - */ - result_type map(argument_type e, bidirectionalS) const - { - return result_type(e.source_processor, - g->processor(), - true, - e.e); - } - - /** - * For an undirected graph, we generate descriptors for the - * incoming edges by swapping the source/target of the - * underlying edge descriptor (a hack). The target processor - * ID on the edge is actually the source processor for this - * edge, and our processor is the target processor. If the - * edge is locally owned, then it is owned by the target (us); - * otherwise it is owned by the source. - */ - result_type map(argument_type e, undirectedS) const - { - typename Graph::local_edge_descriptor local_edge(e); - // TBD: This is a very, VERY lame hack that takes advantage - // of our knowledge of the internals of the BGL - // adjacency_list. There should be a cleaner way to handle - // this... - using std::swap; - swap(local_edge.m_source, local_edge.m_target); - return result_type(get(edge_target_processor_id, g->base(), e), - g->processor(), - !get(edge_locally_owned, g->base(), e), - local_edge); - } - - const Graph* g; - }; - - private: - friend class boost::serialization::access; - - template - void serialize(Archiver& ar, const unsigned int /*version*/) - { - ar - & source_processor - & target_processor - & source_owns_edge - & local; - } - }; - - /// Determine the process that owns this edge - template - inline processor_id_type - owner(const edge_descriptor& e) - { return e.source_owns_edge? e.source_processor : e.target_processor; } - - /// Determine the local descriptor for this edge. - template - inline Edge - local(const edge_descriptor& e) - { return e.local; } - - /** - * A Readable Property Map that extracts the owner and local - * descriptor of an edge descriptor. - */ - template - struct edge_global_property_map - { - typedef std::pair value_type; - typedef value_type reference; - typedef edge_descriptor key_type; - typedef readable_property_map_tag category; - }; - - template - inline std::pair - get(edge_global_property_map, const edge_descriptor& e) - { - typedef std::pair result_type; - return result_type(e.source_owns_edge? e.source_processor - /* target owns edge*/: e.target_processor, - e.local); - } - - /** - * A Readable Property Map that extracts the owner of an edge - * descriptor. - */ - template - struct edge_owner_property_map - { - typedef processor_id_type value_type; - typedef value_type reference; - typedef edge_descriptor key_type; - typedef readable_property_map_tag category; - }; - - template - inline processor_id_type - get(edge_owner_property_map, const edge_descriptor& e) - { - return e.source_owns_edge? e.source_processor : e.target_processor; - } - - /** - * A Readable Property Map that extracts the local descriptor from - * an edge descriptor. - */ - template - struct edge_local_property_map - { - typedef Edge value_type; - typedef value_type reference; - typedef edge_descriptor key_type; - typedef readable_property_map_tag category; - }; - - template - inline Edge - get(edge_local_property_map, - const edge_descriptor& e) - { - return e.local; - } - - /** Compare distributed edge descriptors for equality. - * - * \todo need edge_descriptor to know if it is undirected so we - * can compare both ways. - */ - template - inline bool - operator==(const edge_descriptor& e1, - const edge_descriptor& e2) - { - return (e1.source_processor == e2.source_processor - && e1.target_processor == e2.target_processor - && e1.local == e2.local); - } - - /// Compare distributed edge descriptors for inequality. - template - inline bool - operator!=(const edge_descriptor& e1, - const edge_descriptor& e2) - { return !(e1 == e2); } - - /** - * Configuration for the distributed adjacency list. We use this - * parameter to store all of the configuration details for the - * implementation of the distributed adjacency list, which allows us to - * get at the distribution type in the maybe_named_graph. - */ - template - struct adjacency_list_config - { - typedef typename mpl::if_, - vecS, InVertexListS>::type - VertexListS; - - /// Introduce the target processor ID property for each edge - typedef property edge_property_with_id; - - /// For undirected graphs, introduce the locally-owned property for edges - typedef typename boost::mpl::if_, - property, - edge_property_with_id>::type - base_edge_property_type; - - /// The edge descriptor type for the local subgraph - typedef typename adjacency_list_traits::edge_descriptor - local_edge_descriptor; - - /// For bidirectional graphs, the type of an incoming stored edge - typedef stored_in_edge bidir_stored_edge; - - /// The container type that will store incoming edges for a - /// bidirectional graph. - typedef typename container_gen::type - in_edge_list_type; - - // Bidirectional graphs have an extra vertex property to store - // the incoming edges. - typedef typename boost::mpl::if_, - property, - VertexProperty>::type - base_vertex_property_type; - - // The type of the distributed adjacency list - typedef adjacency_list, - DirectedS, VertexProperty, EdgeProperty, - GraphProperty, EdgeListS> - graph_type; - - // The type of the underlying adjacency list implementation - typedef adjacency_list - inherited; - - typedef InDistribution in_distribution_type; - typedef typename inherited::vertices_size_type vertices_size_type; - - typedef typename ::boost::graph::distributed::select_distribution< - in_distribution_type, VertexProperty, vertices_size_type, - ProcessGroup>::type - base_distribution_type; - - typedef ::boost::graph::distributed::shuffled_distribution< - base_distribution_type> distribution_type; - - typedef VertexProperty vertex_property_type; - typedef EdgeProperty edge_property_type; - typedef ProcessGroup process_group_type; - - typedef VertexListS vertex_list_selector; - typedef OutEdgeListS out_edge_list_selector; - typedef DirectedS directed_selector; - typedef GraphProperty graph_property_type; - typedef EdgeListS edge_list_selector; - }; - - // Maybe initialize the indices of each vertex - template - void - maybe_initialize_vertex_indices(IteratorPair p, VertexIndexMap to_index, - read_write_property_map_tag) - { - typedef typename property_traits::value_type index_t; - index_t next_index = 0; - while (p.first != p.second) - put(to_index, *p.first++, next_index++); - } - - template - inline void - maybe_initialize_vertex_indices(IteratorPair p, VertexIndexMap to_index, - readable_property_map_tag) - { - // Do nothing - } - - template - inline void - maybe_initialize_vertex_indices(IteratorPair p, VertexIndexMap to_index) - { - typedef typename property_traits::category category; - maybe_initialize_vertex_indices(p, to_index, category()); - } - - template - inline void - maybe_initialize_vertex_indices(IteratorPair p, - ::boost::detail::error_property_not_found) - { } - - /*********************************************************************** - * Message Payloads * - ***********************************************************************/ - - /** - * Data stored with a msg_add_edge message, which requests the - * remote addition of an edge. - */ - template - struct msg_add_edge_data - { - msg_add_edge_data() { } - - msg_add_edge_data(Vertex source, Vertex target) - : source(source.local), target(target) { } - - /// The source of the edge; the processor will be the - /// receiving processor. - LocalVertex source; - - /// The target of the edge. - Vertex target; - - template - void serialize(Archiver& ar, const unsigned int /*version*/) - { - ar & unsafe_serialize(source) & target; - } - }; - - /** - * Like @c msg_add_edge_data, but also includes a user-specified - * property value to be attached to the edge. - */ - template - struct msg_add_edge_with_property_data - : msg_add_edge_data, - maybe_store_property - { - private: - typedef msg_add_edge_data inherited_data; - typedef maybe_store_property inherited_property; - - public: - msg_add_edge_with_property_data() { } - - msg_add_edge_with_property_data(Vertex source, - Vertex target, - const EdgeProperty& property) - : inherited_data(source, target), - inherited_property(property) { } - - template - void serialize(Archiver& ar, const unsigned int /*version*/) - { - ar & boost::serialization::base_object(*this) - & boost::serialization::base_object(*this); - } - }; - - //------------------------------------------------------------------------ - // Distributed adjacency list property map details - /** - * Metafunction that extracts the given property from the given - * distributed adjacency list type. This could be implemented much - * more cleanly, but even newer versions of GCC (e.g., 3.2.3) - * cannot properly handle partial specializations involving - * enumerator types. - */ - template - struct get_adj_list_pmap - { - template - struct apply - { - typedef Graph graph_type; - typedef typename graph_type::process_group_type process_group_type; - typedef typename graph_type::inherited base_graph_type; - typedef typename property_map::type - local_pmap; - typedef typename property_map::const_type - local_const_pmap; - - typedef graph_traits traits; - typedef typename graph_type::local_vertex_descriptor local_vertex; - typedef typename property_traits::key_type local_key_type; - - typedef typename property_traits::value_type value_type; - - typedef typename property_map::const_type - vertex_global_map; - typedef typename property_map::const_type - edge_global_map; - - typedef typename mpl::if_c<(is_same::value), - vertex_global_map, edge_global_map>::type - global_map; - - public: - typedef ::boost::parallel::distributed_property_map< - process_group_type, global_map, local_pmap> type; - - typedef ::boost::parallel::distributed_property_map< - process_group_type, global_map, local_const_pmap> const_type; - }; - }; - - /** - * The local vertex index property map is actually a mapping from - * the local vertex descriptors to vertex indices. - */ - template<> - struct get_adj_list_pmap - { - template - struct apply - : ::boost::property_map - { }; - }; - - /** - * The vertex index property map maps from global descriptors - * (e.g., the vertex descriptor of a distributed adjacency list) - * to the underlying local index. It is not valid to use this - * property map with nonlocal descriptors. - */ - template<> - struct get_adj_list_pmap - { - template - struct apply - { - private: - typedef typename property_map::const_type - global_map; - - typedef property_map local; - - public: - typedef local_property_map type; - typedef local_property_map const_type; - }; - }; - - /** - * The vertex owner property map maps from vertex descriptors to - * the processor that owns the vertex. - */ - template<> - struct get_adj_list_pmap - { - template - struct apply - { - private: - typedef typename Graph::local_vertex_descriptor - local_vertex_descriptor; - public: - typedef global_descriptor_property_map type; - typedef type const_type; - }; - }; - - /** - * The vertex owner property map maps from vertex descriptors to - * the processor that owns the vertex. - */ - template<> - struct get_adj_list_pmap - { - template - struct apply - { - private: - typedef typename Graph::local_vertex_descriptor - local_vertex_descriptor; - public: - typedef owner_property_map type; - typedef type const_type; - }; - }; - - /** - * The vertex local property map maps from vertex descriptors to - * the local descriptor for that vertex. - */ - template<> - struct get_adj_list_pmap - { - template - struct apply - { - private: - typedef typename Graph::local_vertex_descriptor - local_vertex_descriptor; - public: - typedef local_descriptor_property_map type; - typedef type const_type; - }; - }; - - /** - * The edge global property map maps from edge descriptors to - * a pair of the owning processor and local descriptor. - */ - template<> - struct get_adj_list_pmap - { - template - struct apply - { - private: - typedef typename Graph::local_edge_descriptor - local_edge_descriptor; - public: - typedef edge_global_property_map type; - typedef type const_type; - }; - }; - - /** - * The edge owner property map maps from edge descriptors to - * the processor that owns the edge. - */ - template<> - struct get_adj_list_pmap - { - template - struct apply - { - private: - typedef typename Graph::local_edge_descriptor - local_edge_descriptor; - public: - typedef edge_owner_property_map type; - typedef type const_type; - }; - }; - - /** - * The edge local property map maps from edge descriptors to - * the local descriptor for that edge. - */ - template<> - struct get_adj_list_pmap - { - template - struct apply - { - private: - typedef typename Graph::local_edge_descriptor - local_edge_descriptor; - public: - typedef edge_local_property_map type; - typedef type const_type; - }; - }; - //------------------------------------------------------------------------ - - // Directed graphs do not have in edges, so this is a no-op - template - inline void - remove_in_edge(typename Graph::edge_descriptor, Graph&, directedS) - { } - - // Bidirectional graphs have in edges stored in the - // vertex_in_edges property. - template - inline void - remove_in_edge(typename Graph::edge_descriptor e, Graph& g, bidirectionalS) - { - typedef typename Graph::in_edge_list_type in_edge_list_type; - in_edge_list_type& in_edges = - get(vertex_in_edges, g.base())[target(e, g).local]; - typename in_edge_list_type::iterator i = in_edges.begin(); - while (i != in_edges.end() - && !(i->source_processor == source(e, g).owner) - && i->e == e.local) - ++i; - - BOOST_ASSERT(i != in_edges.end()); - in_edges.erase(i); - } - - // Undirected graphs have in edges stored as normal edges. - template - inline void - remove_in_edge(typename Graph::edge_descriptor e, Graph& g, undirectedS) - { - typedef typename Graph::inherited base_type; - typedef typename graph_traits::vertex_descriptor vertex_descriptor; - - // TBD: can we make this more efficient? - // Removing edge (v, u). v is local - base_type& bg = g.base(); - vertex_descriptor u = source(e, g); - vertex_descriptor v = target(e, g); - if (v.owner != process_id(g.process_group())) { - using std::swap; - swap(u, v); - } - - typename graph_traits::out_edge_iterator ei, ei_end; - for (boost::tie(ei, ei_end) = out_edges(v.local, bg); ei != ei_end; ++ei) - { - if (target(*ei, g.base()) == u.local - // TBD: deal with parallel edges properly && *ei == e - && get(edge_target_processor_id, bg, *ei) == u.owner) { - remove_edge(ei, bg); - return; - } - } - - if (v.owner == process_id(g.process_group())) { - - } - } - - //------------------------------------------------------------------------ - // Lazy addition of edges - - // Work around the fact that an adjacency_list with vecS vertex - // storage automatically adds edges when the descriptor is - // out-of-range. - template - inline std::pair - add_local_edge(typename Config::vertex_descriptor u, - typename Config::vertex_descriptor v, - const typename Config::edge_property_type& p, - vec_adj_list_impl& g_) - { - adj_list_helper& g = g_; - return add_edge(u, v, p, g); - } - - template - inline std::pair - add_local_edge(typename Config::vertex_descriptor u, - typename Config::vertex_descriptor v, - const typename Config::edge_property_type& p, - boost::adj_list_impl& g) - { - return add_edge(u, v, p, g); - } - - template - struct msg_nonlocal_edge_data - : public detail::parallel::maybe_store_property - { - typedef EdgeProperty edge_property_type; - typedef EdgeDescriptor local_edge_descriptor; - typedef detail::parallel::maybe_store_property - inherited; - - msg_nonlocal_edge_data() {} - msg_nonlocal_edge_data(local_edge_descriptor e, - const edge_property_type& p) - : inherited(p), e(e) { } - - local_edge_descriptor e; - - template - void serialize(Archiver& ar, const unsigned int /*version*/) - { - ar & boost::serialization::base_object(*this) & e; - } - }; - - template - struct msg_remove_edge_data - { - typedef EdgeDescriptor edge_descriptor; - msg_remove_edge_data() {} - explicit msg_remove_edge_data(edge_descriptor e) : e(e) {} - - edge_descriptor e; - - template - void serialize(Archiver& ar, const unsigned int /*version*/) - { - ar & e; - } - }; - - } } // end namespace detail::parallel - - /** - * Adjacency list traits for a distributed adjacency list. Contains - * the vertex and edge descriptors, the directed-ness, and the - * parallel edges typedefs. - */ - template - struct adjacency_list_traits, - DirectedS> - { - private: - typedef typename mpl::if_, - vecS, - InVertexListS>::type VertexListS; - - typedef adjacency_list_traits - base_type; - - public: - typedef typename base_type::vertex_descriptor local_vertex_descriptor; - typedef typename base_type::edge_descriptor local_edge_descriptor; - - typedef typename boost::mpl::if_::type - >::type directed_category; - - typedef typename parallel_edge_traits::type - edge_parallel_category; - - typedef detail::parallel::global_descriptor - vertex_descriptor; - - typedef detail::parallel::edge_descriptor - edge_descriptor; - }; - -#define PBGL_DISTRIB_ADJLIST_TEMPLATE_PARMS \ - typename OutEdgeListS, typename ProcessGroup, typename InVertexListS, \ - typename InDistribution, typename DirectedS, typename VertexProperty, \ - typename EdgeProperty, typename GraphProperty, typename EdgeListS - -#define PBGL_DISTRIB_ADJLIST_TYPE \ - adjacency_list, \ - DirectedS, VertexProperty, EdgeProperty, GraphProperty, \ - EdgeListS> - -#define PBGL_DISTRIB_ADJLIST_TEMPLATE_PARMS_CONFIG \ - typename OutEdgeListS, typename ProcessGroup, typename InVertexListS, \ - typename InDistribution, typename VertexProperty, \ - typename EdgeProperty, typename GraphProperty, typename EdgeListS - -#define PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directed) \ - adjacency_list, \ - directed, VertexProperty, EdgeProperty, GraphProperty, \ - EdgeListS> - - /** A distributed adjacency list. - * - * This class template partial specialization defines a distributed - * (or "partitioned") adjacency list graph. The distributed - * adjacency list is similar to the standard Boost Graph Library - * adjacency list, which stores a list of vertices and for each - * verted the list of edges outgoing from the vertex (and, in some - * cases, also the edges incoming to the vertex). The distributed - * adjacency list differs in that it partitions the graph into - * several subgraphs that are then divided among different - * processors (or nodes within a cluster). The distributed adjacency - * list attempts to maintain a high degree of compatibility with the - * standard, non-distributed adjacency list. - * - * The graph is partitioned by vertex, with each processor storing - * all of the required information for a particular subset of the - * vertices, including vertex properties, outgoing edges, and (for - * bidirectional graphs) incoming edges. This information is - * accessible only on the processor that owns the vertex: for - * instance, if processor 0 owns vertex @c v, no other processor can - * directly access the properties of @c v or enumerate its outgoing - * edges. - * - * Edges in a graph may be entirely local (connecting two local - * vertices), but more often it is the case that edges are - * non-local, meaning that the two vertices they connect reside in - * different processes. Edge properties are stored with the - * originating vertex for directed and bidirectional graphs, and are - * therefore only accessible from the processor that owns the - * originating vertex. Other processors may query the source and - * target of the edge, but cannot access its properties. This is - * particularly interesting when accessing the incoming edges of a - * bidirectional graph, which are not guaranteed to be stored on the - * processor that is able to perform the iteration. For undirected - * graphs the situation is more complicated, since no vertex clearly - * owns the edges: the list of edges incident to a vertex may - * contain a mix of local and non-local edges. - * - * The distributed adjacency list is able to model several of the - * existing Graph concepts. It models the Graph concept because it - * exposes vertex and edge descriptors in the normal way; these - * descriptors model the GlobalDescriptor concept (because they have - * an owner and a local descriptor), and as such the distributed - * adjacency list models the DistributedGraph concept. The adjacency - * list also models the IncidenceGraph and AdjacencyGraph concepts, - * although this is only true so long as the domain of the valid - * expression arguments are restricted to vertices and edges stored - * locally. Likewise, bidirectional and undirected distributed - * adjacency lists model the BidirectionalGraph concept (vertex and - * edge domains must be respectived) and the distributed adjacency - * list models the MutableGraph concept (vertices and edges can only - * be added or removed locally). T he distributed adjacency list - * does not, however, model the VertexListGraph or EdgeListGraph - * concepts, because we can not efficiently enumerate all vertices - * or edges in the graph. Instead, the local subsets of vertices and - * edges can be enumerated (with the same syntax): the distributed - * adjacency list therefore models the DistributedVertexListGraph - * and DistributedEdgeListGraph concepts, because concurrent - * iteration over all of the vertices or edges stored on each - * processor will visit each vertex or edge. - * - * The distributed adjacency list is distinguished from the - * non-distributed version by the vertex list descriptor, which will - * be @c distributedS. Here, - * the VertexListS type plays the same role as the VertexListS type - * in the non-distributed adjacency list: it allows one to select - * the data structure that will be used to store the local - * vertices. The ProcessGroup type, on the other hand, is unique to - * distributed data structures: it is the type that abstracts a - * group of cooperating processes, and it used for process - * identification, communication, and synchronization, among other - * things. Different process group types represent different - * communication mediums (e.g., MPI, PVM, TCP) or different models - * of communication (LogP, CGM, BSP, synchronous, etc.). This - * distributed adjacency list assumes a model based on non-blocking - * sends. - * - * Distribution of vertices across different processors is - * accomplished in two different ways. When initially constructing - * the graph, the user may provide a distribution object (that - * models the Distribution concept), which will determine the - * distribution of vertices to each process. Additionally, the @c - * add_vertex and @c add_edge operations add vertices or edges - * stored on the local processor. For @c add_edge, this is - * accomplished by requiring that the source vertex of the new edge - * be local to the process executing @c add_edge. - * - * Internal properties of a distributed adjacency list are - * accessible in the same manner as internal properties for a - * non-distributed adjacency list for local vertices or - * edges. Access to properties for remote vertices or edges occurs - * with the same syntax, but involve communication with the owner of - * the information: for more information, refer to class template - * @ref distributed_property_map, which manages distributed - * property maps. Note that the distributed property maps created - * for internal properties determine their reduction operation via - * the metafunction @ref property_reduce, which for the vast - * majority of uses is correct behavior. - * - * Communication among the processes coordinating on a particular - * distributed graph relies on non-blocking message passing along - * with synchronization. Local portions of the distributed graph may - * be modified concurrently, including the introduction of non-local - * edges, but prior to accessing the graph it is recommended that - * the @c synchronize free function be invoked on the graph to clear - * up any pending interprocess communication and modifications. All - * processes will then be released from the synchronization barrier - * concurrently. - * - * \todo Determine precisely what we should do with nonlocal edges - * in undirected graphs. Our parallelization of certain algorithms - * relies on the ability to access edge property maps immediately - * (e.g., edge_weight_t), so it may be necessary to duplicate the - * edge properties in both processes (but then we need some form of - * coherence protocol). - * - * \todo What does the user do if @c property_reduce doesn't do the - * right thing? - */ - template - class adjacency_list, - DirectedS, VertexProperty, - EdgeProperty, GraphProperty, EdgeListS> - : // Support for named vertices - public graph::distributed::maybe_named_graph< - adjacency_list, - DirectedS, VertexProperty, - EdgeProperty, GraphProperty, EdgeListS>, - typename adjacency_list_traits, - DirectedS>::vertex_descriptor, - typename adjacency_list_traits, - DirectedS>::edge_descriptor, - detail::parallel::adjacency_list_config > - { - typedef detail::parallel::adjacency_list_config - config_type; - - typedef adjacency_list_traits, - DirectedS> - traits_type; - - typedef typename DirectedS::is_directed_t is_directed; - - typedef EdgeListS edge_list_selector; - - public: - /// The container type that will store incoming edges for a - /// bidirectional graph. - typedef typename config_type::in_edge_list_type in_edge_list_type; -// typedef typename inherited::edge_descriptor edge_descriptor; - - /// The type of the underlying adjacency list implementation - typedef typename config_type::inherited inherited; - - /// The type of properties stored in the local subgraph - /// Bidirectional graphs have an extra vertex property to store - /// the incoming edges. - typedef typename inherited::vertex_property_type - base_vertex_property_type; - - /// The type of the distributed adjacency list (this type) - typedef typename config_type::graph_type graph_type; - - /// Expose graph components and graph category - typedef typename traits_type::local_vertex_descriptor - local_vertex_descriptor; - typedef typename traits_type::local_edge_descriptor - local_edge_descriptor; - typedef typename traits_type::vertex_descriptor vertex_descriptor; - typedef typename traits_type::edge_descriptor edge_descriptor; - - typedef typename traits_type::directed_category directed_category; - typedef typename inherited::edge_parallel_category - edge_parallel_category; - typedef typename inherited::graph_tag graph_tag; - - // Current implementation requires the ability to have parallel - // edges in the underlying adjacency_list. Which processor each - // edge refers to is attached as an internal property. TBD: - // remove this restriction, which may require some rewriting. - BOOST_STATIC_ASSERT((is_same::value)); - - /** Determine the graph traversal category. - * - * A directed distributed adjacency list models the Distributed - * Graph, Incidence Graph, and Adjacency Graph - * concepts. Bidirectional and undirected graphs also model the - * Bidirectional Graph concept. Note that when modeling these - * concepts the domains of certain operations (e.g., in_edges) - * are restricted; see the distributed adjacency_list - * documentation. - */ - typedef typename boost::mpl::if_< - is_same, - directed_distributed_adj_list_tag, - typename boost::mpl::if_, - bidirectional_distributed_adj_list_tag, - undirected_distributed_adj_list_tag>::type> - ::type traversal_category; - - typedef typename inherited::degree_size_type degree_size_type; - typedef typename inherited::vertices_size_type vertices_size_type; - typedef typename inherited::edges_size_type edges_size_type; - typedef VertexProperty vertex_property_type; - typedef EdgeProperty edge_property_type; - typedef typename inherited::graph_property_type graph_property_type; - typedef typename inherited::vertex_bundled vertex_bundled; - typedef typename inherited::edge_bundled edge_bundled; - typedef typename inherited::graph_bundled graph_bundled; - - typedef typename container_gen::type - local_edge_list_type; - - private: - typedef typename boost::mpl::if_, - typename in_edge_list_type::const_iterator, - typename inherited::out_edge_iterator>::type - base_in_edge_iterator; - - typedef typename inherited::out_edge_iterator base_out_edge_iterator; - typedef typename graph_traits::edge_iterator - base_edge_iterator; - typedef typename inherited::edge_property_type base_edge_property_type; - - typedef typename local_edge_list_type::const_iterator - undirected_edge_iterator; - - typedef InDistribution in_distribution_type; - - typedef parallel::trigger_receive_context trigger_receive_context; - - public: - /// Iterator over the (local) vertices of the graph - typedef transform_iterator - vertex_iterator; - - /// Helper for out_edge_iterator - typedef typename edge_descriptor::template out_generator - out_edge_generator; - - /// Iterator over the outgoing edges of a vertex - typedef transform_iterator - out_edge_iterator; - - /// Helper for in_edge_iterator - typedef typename edge_descriptor::template in_generator - in_edge_generator; - - /// Iterator over the incoming edges of a vertex - typedef transform_iterator - in_edge_iterator; - - /// Iterator over the neighbors of a vertex - typedef boost::adjacency_iterator< - adjacency_list, vertex_descriptor, out_edge_iterator, - typename std::iterator_traits - ::difference_type> - adjacency_iterator; - - /// Iterator over the (local) edges in a graph - typedef typename boost::mpl::if_, - undirected_edge_iterator, - transform_iterator - >::type - edge_iterator; - - public: - /// The type of the mixin for named vertices - typedef graph::distributed::maybe_named_graph - named_graph_mixin; - - /// Process group used for communication - typedef ProcessGroup process_group_type; - - /// How to refer to a process - typedef typename process_group_type::process_id_type process_id_type; - - /// Whether this graph is directed, undirected, or bidirectional - typedef DirectedS directed_selector; - - // Structure used for the lazy addition of vertices - struct lazy_add_vertex_with_property; - friend struct lazy_add_vertex_with_property; - - // Structure used for the lazy addition of edges - struct lazy_add_edge; - friend struct lazy_add_edge; - - // Structure used for the lazy addition of edges with properties - struct lazy_add_edge_with_property; - friend struct lazy_add_edge_with_property; - - /// default_distribution_type is the type of the distribution used if the - /// user didn't specify an explicit one - typedef typename graph::distributed::select_distribution< - InDistribution, VertexProperty, vertices_size_type, - ProcessGroup>::default_type - default_distribution_type; - - /// distribution_type is the type of the distribution instance stored in - /// the maybe_named_graph base class - typedef typename graph::distributed::select_distribution< - InDistribution, VertexProperty, vertices_size_type, - ProcessGroup>::type - base_distribution_type; - - typedef graph::distributed::shuffled_distribution< - base_distribution_type> distribution_type; - - private: - // FIXME: the original adjacency_list contained this comment: - // Default copy constructor and copy assignment operators OK??? TBD - // but the adj_list_impl contained these declarations: - adjacency_list(const adjacency_list& other); - adjacency_list& operator=(const adjacency_list& other); - - public: - adjacency_list(const ProcessGroup& pg = ProcessGroup()) - : named_graph_mixin(pg, default_distribution_type(pg, 0)), - m_local_graph(GraphProperty()), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - } - - adjacency_list(const ProcessGroup& pg, - const base_distribution_type& distribution) - : named_graph_mixin(pg, distribution), - m_local_graph(GraphProperty()), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - } - - adjacency_list(const GraphProperty& g, - const ProcessGroup& pg = ProcessGroup()) - : named_graph_mixin(pg, default_distribution_type(pg, 0)), - m_local_graph(g), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - } - - adjacency_list(vertices_size_type n, - const GraphProperty& p, - const ProcessGroup& pg, - const base_distribution_type& distribution) - : named_graph_mixin(pg, distribution), - m_local_graph(distribution.block_size(process_id(pg), n), p), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - - detail::parallel::maybe_initialize_vertex_indices(vertices(base()), - get(vertex_index, base())); - } - - adjacency_list(vertices_size_type n, - const ProcessGroup& pg, - const base_distribution_type& distribution) - : named_graph_mixin(pg, distribution), - m_local_graph(distribution.block_size(process_id(pg), n), GraphProperty()), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - - detail::parallel::maybe_initialize_vertex_indices(vertices(base()), - get(vertex_index, base())); - } - - adjacency_list(vertices_size_type n, - const GraphProperty& p, - const ProcessGroup& pg = ProcessGroup()) - : named_graph_mixin(pg, default_distribution_type(pg, n)), - m_local_graph(this->distribution().block_size(process_id(pg), n), p), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - - detail::parallel::maybe_initialize_vertex_indices(vertices(base()), - get(vertex_index, base())); - } - - adjacency_list(vertices_size_type n, - const ProcessGroup& pg = ProcessGroup()) - : named_graph_mixin(pg, default_distribution_type(pg, n)), - m_local_graph(this->distribution().block_size(process_id(pg), n), - GraphProperty()), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - - detail::parallel::maybe_initialize_vertex_indices(vertices(base()), - get(vertex_index, base())); - } - - /* - * We assume that every processor sees the same list of edges, so - * they skip over any that don't originate from themselves. This - * means that programs switching between a local and a distributed - * graph will keep the same semantics. - */ - template - adjacency_list(EdgeIterator first, EdgeIterator last, - vertices_size_type n, - const ProcessGroup& pg = ProcessGroup(), - const GraphProperty& p = GraphProperty()) - : named_graph_mixin(pg, default_distribution_type(pg, n)), - m_local_graph(this->distribution().block_size(process_id(pg), n), p), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - - typedef typename config_type::VertexListS vertex_list_selector; - initialize(first, last, n, this->distribution(), vertex_list_selector()); - detail::parallel::maybe_initialize_vertex_indices(vertices(base()), - get(vertex_index, base())); - - } - - template - adjacency_list(EdgeIterator first, EdgeIterator last, - EdgePropertyIterator ep_iter, - vertices_size_type n, - const ProcessGroup& pg = ProcessGroup(), - const GraphProperty& p = GraphProperty()) - : named_graph_mixin(pg, default_distribution_type(pg, n)), - m_local_graph(this->distribution().block_size(process_id(pg), n), p), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - - typedef typename config_type::VertexListS vertex_list_selector; - initialize(first, last, ep_iter, n, this->distribution(), - vertex_list_selector()); - detail::parallel::maybe_initialize_vertex_indices(vertices(base()), - get(vertex_index, base())); - - } - - template - adjacency_list(EdgeIterator first, EdgeIterator last, - vertices_size_type n, - const ProcessGroup& pg, - const base_distribution_type& distribution, - const GraphProperty& p = GraphProperty()) - : named_graph_mixin(pg, distribution), - m_local_graph(distribution.block_size(process_id(pg), n), p), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - - typedef typename config_type::VertexListS vertex_list_selector; - initialize(first, last, n, this->distribution(), vertex_list_selector()); - detail::parallel::maybe_initialize_vertex_indices(vertices(base()), - get(vertex_index, base())); - - } - - template - adjacency_list(EdgeIterator first, EdgeIterator last, - EdgePropertyIterator ep_iter, - vertices_size_type n, - const ProcessGroup& pg, - const base_distribution_type& distribution, - const GraphProperty& p = GraphProperty()) - : named_graph_mixin(pg, distribution), - m_local_graph(this->distribution().block_size(process_id(pg), n), p), - process_group_(pg, boost::parallel::attach_distributed_object()) - { - setup_triggers(); - - typedef typename config_type::VertexListS vertex_list_selector; - initialize(first, last, ep_iter, n, distribution, - vertex_list_selector()); - detail::parallel::maybe_initialize_vertex_indices(vertices(base()), - get(vertex_index, base())); - - } - - ~adjacency_list() - { - synchronize(process_group_); - } - - void clear() - { - base().clear(); - local_edges_.clear(); - named_graph_mixin::clearing_graph(); - } - - void swap(adjacency_list& other) - { - using std::swap; - - base().swap(other); - swap(process_group_, other.process_group_); - } - - static vertex_descriptor null_vertex() - { - return vertex_descriptor(processor_id_type(0), - inherited::null_vertex()); - } - - inherited& base() { return m_local_graph; } - const inherited& base() const { return m_local_graph; } - - processor_id_type processor() const { return process_id(process_group_); } - process_group_type process_group() const { return process_group_.base(); } - - local_edge_list_type& local_edges() { return local_edges_; } - const local_edge_list_type& local_edges() const { return local_edges_; } - - // Redistribute the vertices of the graph by placing each vertex - // v on the processor get(vertex_to_processor, v). - template - void redistribute(VertexProcessorMap vertex_to_processor); - - // Directly access a vertex or edge bundle - vertex_bundled& operator[](vertex_descriptor v) - { - BOOST_ASSERT(v.owner == processor()); - return base()[v.local]; - } - - const vertex_bundled& operator[](vertex_descriptor v) const - { - BOOST_ASSERT(v.owner == processor()); - return base()[v.local]; - } - - edge_bundled& operator[](edge_descriptor e) - { - BOOST_ASSERT(e.owner() == processor()); - return base()[e.local]; - } - - const edge_bundled& operator[](edge_descriptor e) const - { - BOOST_ASSERT(e.owner() == processor()); - return base()[e.local]; - } - - graph_bundled& operator[](graph_bundle_t) - { return get_property(*this); } - - graph_bundled const& operator[](graph_bundle_t) const - { return get_property(*this); } - - template - void save(std::string const& filename) const; - - template - void load(std::string const& filename); - - // Callback that will be invoked whenever a new vertex is added locally - boost::function on_add_vertex; - - // Callback that will be invoked whenever a new edge is added locally - boost::function on_add_edge; - - private: - // Request vertex->processor mapping for neighbors - template - void - request_in_neighbors(vertex_descriptor, - VertexProcessorMap, - directedS) { } - - // Request vertex->processor mapping for neighbors - template - void - request_in_neighbors(vertex_descriptor, - VertexProcessorMap, - undirectedS) { } - - // Request vertex->processor mapping for neighbors - template - void - request_in_neighbors(vertex_descriptor v, - VertexProcessorMap vertex_to_processor, - bidirectionalS); - - // Clear the list of in-edges, but don't tell the remote processor - void clear_in_edges_local(vertex_descriptor v, directedS) {} - void clear_in_edges_local(vertex_descriptor v, undirectedS) {} - - void clear_in_edges_local(vertex_descriptor v, bidirectionalS) - { get(vertex_in_edges, base())[v.local].clear(); } - - // Remove in-edges that have migrated - template - void - remove_migrated_in_edges(vertex_descriptor, - VertexProcessorMap, - directedS) { } - - // Remove in-edges that have migrated - template - void - remove_migrated_in_edges(vertex_descriptor, - VertexProcessorMap, - undirectedS) { } - - // Remove in-edges that have migrated - template - void - remove_migrated_in_edges(vertex_descriptor v, - VertexProcessorMap vertex_to_processor, - bidirectionalS); - - // Initialize the graph with the given edge list and vertex - // distribution. This variation works only when - // VertexListS=vecS, and we know how to create remote vertex - // descriptors based solely on the distribution. - template - void - initialize(EdgeIterator first, EdgeIterator last, - vertices_size_type, const base_distribution_type& distribution, - vecS); - - // Initialize the graph with the given edge list, edge - // properties, and vertex distribution. This variation works - // only when VertexListS=vecS, and we know how to create remote - // vertex descriptors based solely on the distribution. - template - void - initialize(EdgeIterator first, EdgeIterator last, - EdgePropertyIterator ep_iter, - vertices_size_type, const base_distribution_type& distribution, - vecS); - - // Initialize the graph with the given edge list, edge - // properties, and vertex distribution. - template - void - initialize(EdgeIterator first, EdgeIterator last, - EdgePropertyIterator ep_iter, - vertices_size_type n, - const base_distribution_type& distribution, - VertexListS); - - // Initialize the graph with the given edge list and vertex - // distribution. This is nearly identical to the one below it, - // for which I should be flogged. However, this version does use - // slightly less memory than the version that accepts an edge - // property iterator. - template - void - initialize(EdgeIterator first, EdgeIterator last, - vertices_size_type n, - const base_distribution_type& distribution, - VertexListS); - - public: - //--------------------------------------------------------------------- - // Build a vertex property instance for the underlying adjacency - // list from the given property instance of the type exposed to - // the user. - base_vertex_property_type - build_vertex_property(const vertex_property_type& p) - { return build_vertex_property(p, directed_selector()); } - - base_vertex_property_type - build_vertex_property(const vertex_property_type& p, directedS) - { - return base_vertex_property_type(p); - } - - base_vertex_property_type - build_vertex_property(const vertex_property_type& p, bidirectionalS) - { - return base_vertex_property_type(in_edge_list_type(), p); - } - - base_vertex_property_type - build_vertex_property(const vertex_property_type& p, undirectedS) - { - return base_vertex_property_type(p); - } - //--------------------------------------------------------------------- - - //--------------------------------------------------------------------- - // Build an edge property instance for the underlying adjacency - // list from the given property instance of the type exposed to - // the user. - base_edge_property_type build_edge_property(const edge_property_type& p) - { return build_edge_property(p, directed_selector()); } - - base_edge_property_type - build_edge_property(const edge_property_type& p, directedS) - { - return base_edge_property_type(0, p); - } - - base_edge_property_type - build_edge_property(const edge_property_type& p, bidirectionalS) - { - return base_edge_property_type(0, p); - } - - base_edge_property_type - build_edge_property(const edge_property_type& p, undirectedS) - { - typedef typename base_edge_property_type::next_type - edge_property_with_id; - return base_edge_property_type(true, edge_property_with_id(0, p)); - } - //--------------------------------------------------------------------- - - //--------------------------------------------------------------------- - // Opposite of above. - edge_property_type split_edge_property(const base_edge_property_type& p) - { return split_edge_property(p, directed_selector()); } - - edge_property_type - split_edge_property(const base_edge_property_type& p, directedS) - { - return p.m_base; - } - - edge_property_type - split_edge_property(const base_edge_property_type& p, bidirectionalS) - { - return p.m_base; - } - - edge_property_type - split_edge_property(const base_edge_property_type& p, undirectedS) - { - return p.m_base.m_base; - } - //--------------------------------------------------------------------- - - /** The set of messages that can be transmitted and received by - * a distributed adjacency list. This list will eventually be - * exhaustive, but is currently quite limited. - */ - enum { - /** - * Request to add or find a vertex with the given vertex - * property. The data will be a vertex_property_type - * structure. - */ - msg_add_vertex_with_property = 0, - - /** - * Request to add or find a vertex with the given vertex - * property, and request that the remote processor return the - * descriptor for the added/found edge. The data will be a - * vertex_property_type structure. - */ - msg_add_vertex_with_property_and_reply, - - /** - * Reply to a msg_add_vertex_* message, containing the local - * vertex descriptor that was added or found. - */ - msg_add_vertex_reply, - - /** - * Request to add an edge remotely. The data will be a - * msg_add_edge_data structure. - */ - msg_add_edge, - - /** - * Request to add an edge remotely. The data will be a - * msg_add_edge_with_property_data structure. - */ - msg_add_edge_with_property, - - /** - * Request to add an edge remotely and reply back with the - * edge descriptor. The data will be a - * msg_add_edge_data structure. - */ - msg_add_edge_with_reply, - - /** - * Request to add an edge remotely and reply back with the - * edge descriptor. The data will be a - * msg_add_edge_with_property_data structure. - */ - msg_add_edge_with_property_and_reply, - - /** - * Reply message responding to an @c msg_add_edge_with_reply - * or @c msg_add_edge_with_property_and_reply messages. The - * data will be a std::pair. - */ - msg_add_edge_reply, - - /** - * Indicates that a nonlocal edge has been created that should - * be added locally. Only valid for bidirectional and - * undirected graphs. The message carries a - * msg_nonlocal_edge_data structure. - */ - msg_nonlocal_edge, - - /** - * Indicates that a remote edge should be removed. This - * message does not exist for directedS graphs but may refer - * to either in-edges or out-edges for undirectedS graphs. - */ - msg_remove_edge, - - /** - * Indicates the number of vertices and edges that will be - * relocated from the source processor to the target - * processor. The data will be a pair. - */ - msg_num_relocated - }; - - typedef detail::parallel::msg_add_edge_data - msg_add_edge_data; - - typedef detail::parallel::msg_add_edge_with_property_data - msg_add_edge_with_property_data; - - typedef boost::detail::parallel::msg_nonlocal_edge_data< - edge_property_type,local_edge_descriptor> msg_nonlocal_edge_data; - - typedef boost::detail::parallel::msg_remove_edge_data - msg_remove_edge_data; - - void send_remove_edge_request(edge_descriptor e) - { - process_id_type dest = e.target_processor; - if (e.target_processor == process_id(process_group_)) - dest = e.source_processor; - send(process_group_, dest, msg_remove_edge, msg_remove_edge_data(e)); - } - - /// Process incoming messages. - void setup_triggers(); - - void - handle_add_vertex_with_property(int source, int tag, - const vertex_property_type&, - trigger_receive_context); - - local_vertex_descriptor - handle_add_vertex_with_property_and_reply(int source, int tag, - const vertex_property_type&, - trigger_receive_context); - - void - handle_add_edge(int source, int tag, const msg_add_edge_data& data, - trigger_receive_context); - - boost::parallel::detail::untracked_pair - handle_add_edge_with_reply(int source, int tag, - const msg_add_edge_data& data, - trigger_receive_context); - - void - handle_add_edge_with_property(int source, int tag, - const msg_add_edge_with_property_data&, - trigger_receive_context); - - boost::parallel::detail::untracked_pair - handle_add_edge_with_property_and_reply - (int source, int tag, const msg_add_edge_with_property_data&, - trigger_receive_context); - - void - handle_nonlocal_edge(int source, int tag, - const msg_nonlocal_edge_data& data, - trigger_receive_context); - - void - handle_remove_edge(int source, int tag, - const msg_remove_edge_data& data, - trigger_receive_context); - - protected: - /** Add an edge (locally) that was received from another - * processor. This operation is a no-op for directed graphs, - * because all edges reside on the local processor. For - * bidirectional graphs, this routine places the edge onto the - * list of incoming edges for the target vertex. For undirected - * graphs, the edge is placed along with all of the other edges - * for the target vertex, but it is marked as a non-local edge - * descriptor. - * - * \todo There is a potential problem here, where we could - * unintentionally allow duplicate edges in undirected graphs - * because the same edge is added on two different processors - * simultaneously. It's not an issue now, because we require - * that the graph allow parallel edges. Once we do support - * containers such as setS or hash_setS that disallow parallel - * edges we will need to deal with this. - */ - void - add_remote_edge(const msg_nonlocal_edge_data&, - processor_id_type, directedS) - { } - - - /** - * \overload - */ - void - add_remote_edge(const msg_nonlocal_edge_data& data, - processor_id_type other_proc, bidirectionalS) - { - typedef detail::parallel::stored_in_edge stored_edge; - - stored_edge edge(other_proc, data.e); - local_vertex_descriptor v = target(data.e, base()); - boost::graph_detail::push(get(vertex_in_edges, base())[v], edge); - } - - /** - * \overload - */ - void - add_remote_edge(const msg_nonlocal_edge_data& data, - processor_id_type other_proc, undirectedS) - { - std::pair edge = - detail::parallel::add_local_edge(target(data.e, base()), - source(data.e, base()), - build_edge_property(data.get_property()), base()); - BOOST_ASSERT(edge.second); - put(edge_target_processor_id, base(), edge.first, other_proc); - - if (edge.second && on_add_edge) - on_add_edge(edge_descriptor(processor(), other_proc, false, - edge.first), - *this); - } - - void - remove_local_edge(const msg_remove_edge_data&, processor_id_type, - directedS) - { } - - void - remove_local_edge(const msg_remove_edge_data& data, - processor_id_type other_proc, bidirectionalS) - { - /* When the source is local, we first check if the edge still - * exists (it may have been deleted locally) and, if so, - * remove it locally. - */ - vertex_descriptor src = source(data.e, *this); - vertex_descriptor tgt = target(data.e, *this); - - if (src.owner == process_id(process_group_)) { - base_out_edge_iterator ei, ei_end; - for (boost::tie(ei, ei_end) = out_edges(src.local, base()); - ei != ei_end; ++ei) { - // TBD: can't check the descriptor here, because it could - // have changed if we're allowing the removal of - // edges. Egads! - if (tgt.local == target(*ei, base()) - && get(edge_target_processor_id, base(), *ei) == other_proc) - break; - } - - if (ei != ei_end) boost::remove_edge(ei, base()); - - remove_local_edge_from_list(src, tgt, undirectedS()); - } else { - BOOST_ASSERT(tgt.owner == process_id(process_group_)); - in_edge_list_type& in_edges = - get(vertex_in_edges, base())[tgt.local]; - typename in_edge_list_type::iterator ei; - for (ei = in_edges.begin(); ei != in_edges.end(); ++ei) { - if (src.local == source(ei->e, base()) - && src.owner == ei->source_processor) - break; - } - - if (ei != in_edges.end()) in_edges.erase(ei); - } - } - - void - remove_local_edge(const msg_remove_edge_data& data, - processor_id_type other_proc, undirectedS) - { - vertex_descriptor local_vertex = source(data.e, *this); - vertex_descriptor remote_vertex = target(data.e, *this); - if (remote_vertex.owner == process_id(process_group_)) { - using std::swap; - swap(local_vertex, remote_vertex); - } - - // Remove the edge from the out-edge list, if it is there - { - base_out_edge_iterator ei, ei_end; - for (boost::tie(ei, ei_end) = out_edges(local_vertex.local, base()); - ei != ei_end; ++ei) { - // TBD: can't check the descriptor here, because it could - // have changed if we're allowing the removal of - // edges. Egads! - if (remote_vertex.local == target(*ei, base()) - && get(edge_target_processor_id, base(), *ei) == other_proc) - break; - } - - if (ei != ei_end) boost::remove_edge(ei, base()); - } - - remove_local_edge_from_list(local_vertex, remote_vertex, undirectedS()); - } - - public: - void - remove_local_edge_from_list(vertex_descriptor, vertex_descriptor, - directedS) - { - } - - void - remove_local_edge_from_list(vertex_descriptor, vertex_descriptor, - bidirectionalS) - { - } - - void - remove_local_edge_from_list(vertex_descriptor src, vertex_descriptor tgt, - undirectedS) - { - // TBD: At some point we'll be able to improve the speed here - // because we'll know when the edge can't be in the local - // list. - { - typename local_edge_list_type::iterator ei; - for (ei = local_edges_.begin(); ei != local_edges_.end(); ++ei) { - if ((source(*ei, *this) == src - && target(*ei, *this) == tgt) - || (source(*ei, *this) == tgt - && target(*ei, *this) == src)) - break; - } - - if (ei != local_edges_.end()) local_edges_.erase(ei); - } - - } - - private: - /// The local subgraph - inherited m_local_graph; - - /// The process group through which this distributed graph - /// communicates. - process_group_type process_group_; - - // TBD: should only be available for undirected graphs, but for - // now it'll just be empty for directed and bidirectional - // graphs. - local_edge_list_type local_edges_; - }; - - //------------------------------------------------------------------------ - // Lazy addition of vertices - template - struct PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_vertex_with_property - { - /// Construct a lazy request to add a vertex - lazy_add_vertex_with_property(adjacency_list& self, - const vertex_property_type& property) - : self(self), property(property), committed(false) { } - - /// Copying a lazy_add_vertex_with_property transfers the - /// responsibility for adding the vertex to the newly-constructed - /// object. - lazy_add_vertex_with_property(const lazy_add_vertex_with_property& other) - : self(other.self), property(other.property), - committed(other.committed) - { - other.committed = true; - } - - /// If the vertex has not yet been added, add the vertex but don't - /// wait for a reply. - ~lazy_add_vertex_with_property(); - - /// Returns commit(). - operator vertex_descriptor() const { return commit(); } - - // Add the vertex. This operation will block if the vertex is - // being added remotely. - vertex_descriptor commit() const; - - protected: - adjacency_list& self; - vertex_property_type property; - mutable bool committed; - - private: - // No copy-assignment semantics - void operator=(lazy_add_vertex_with_property&); - }; - - template - PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_vertex_with_property:: - ~lazy_add_vertex_with_property() - { - /// If this vertex has already been created or will be created by - /// someone else, or if someone threw an exception, we will not - /// create the vertex now. - if (committed || boost::core::uncaught_exceptions() > 0) - return; - - committed = true; - - process_id_type owner - = static_cast(self).owner_by_property(property); - if (owner == self.processor()) { - /// Add the vertex locally. - vertex_descriptor v(owner, - add_vertex(self.build_vertex_property(property), - self.base())); - if (self.on_add_vertex) - self.on_add_vertex(v, self); - } - else - /// Ask the owner of this new vertex to add the vertex. We - /// don't need a reply. - send(self.process_group_, owner, msg_add_vertex_with_property, - property); - } - - template - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor - PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_vertex_with_property:: - commit() const - { - BOOST_ASSERT(!this->committed); - this->committed = true; - - process_id_type owner - = static_cast(self).owner_by_property(property); - local_vertex_descriptor local_v; - if (owner == self.processor()) - /// Add the vertex locally. - local_v = add_vertex(self.build_vertex_property(property), - self.base()); - else { - // Request that the remote process add the vertex immediately - send_oob_with_reply(self.process_group_, owner, - msg_add_vertex_with_property_and_reply, property, - local_v); - } - - vertex_descriptor v(owner, local_v); - if (self.on_add_vertex) - self.on_add_vertex(v, self); - - // Build the full vertex descriptor to return - return v; - } - - - /** - * Data structure returned from add_edge that will "lazily" add - * the edge, either when it is converted to a - * @c pair or when the most recent copy has - * been destroyed. - */ - template - struct PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge - { - /// Construct a lazy request to add an edge - lazy_add_edge(adjacency_list& self, - vertex_descriptor source, vertex_descriptor target) - : self(self), source(source), target(target), committed(false) { } - - /// Copying a lazy_add_edge transfers the responsibility for - /// adding the edge to the newly-constructed object. - lazy_add_edge(const lazy_add_edge& other) - : self(other.self), source(other.source), target(other.target), - committed(other.committed) - { - other.committed = true; - } - - /// If the edge has not yet been added, add the edge but don't - /// wait for a reply. - ~lazy_add_edge(); - - /// Returns commit(). - operator std::pair() const { return commit(); } - - // Add the edge. This operation will block if a remote edge is - // being added. - std::pair commit() const; - - protected: - std::pair - add_local_edge(const edge_property_type& property, directedS) const; - - std::pair - add_local_edge(const edge_property_type& property, bidirectionalS) const; - - std::pair - add_local_edge(const edge_property_type& property, undirectedS) const; - - adjacency_list& self; - vertex_descriptor source; - vertex_descriptor target; - mutable bool committed; - - private: - // No copy-assignment semantics - void operator=(lazy_add_edge&); - }; - - template - PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge::~lazy_add_edge() - { - /// If this edge has already been created or will be created by - /// someone else, or if someone threw an exception, we will not - /// create the edge now. - if (committed || boost::core::uncaught_exceptions() > 0) - return; - - committed = true; - - if (source.owner == self.processor()) - this->add_local_edge(edge_property_type(), DirectedS()); - else - // Request that the remote processor add an edge and, but - // don't wait for a reply. - send(self.process_group_, source.owner, msg_add_edge, - msg_add_edge_data(source, target)); - } - - template - std::pair - PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge::commit() const - { - BOOST_ASSERT(!committed); - committed = true; - - if (source.owner == self.processor()) - return this->add_local_edge(edge_property_type(), DirectedS()); - else { - // Request that the remote processor add an edge - boost::parallel::detail::untracked_pair result; - send_oob_with_reply(self.process_group_, source.owner, - msg_add_edge_with_reply, - msg_add_edge_data(source, target), result); - return result; - } - } - - // Add a local edge into a directed graph - template - std::pair - PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge:: - add_local_edge(const edge_property_type& property, directedS) const - { - // Add the edge to the local part of the graph - std::pair inserted = - detail::parallel::add_local_edge(source.local, target.local, - self.build_edge_property(property), - self.base()); - - if (inserted.second) - // Keep track of the owner of the target - put(edge_target_processor_id, self.base(), inserted.first, - target.owner); - - // Compose the edge descriptor and return the result - edge_descriptor e(source.owner, target.owner, true, inserted.first); - - // Trigger the on_add_edge event - if (inserted.second && self.on_add_edge) - self.on_add_edge(e, self); - - return std::pair(e, inserted.second); - } - - template - std::pair - PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge:: - add_local_edge(const edge_property_type& property, bidirectionalS) const - { - // Add the directed edge. - std::pair result - = this->add_local_edge(property, directedS()); - - if (result.second) { - if (target.owner == self.processor()) { - // Edge is local, so add the stored edge to the in_edges list - typedef detail::parallel::stored_in_edge - stored_edge; - - stored_edge e(self.processor(), result.first.local); - boost::graph_detail::push(get(vertex_in_edges, - self.base())[target.local], e); - } - else { - // Edge is remote, so notify the target's owner that an edge - // has been added. - if (self.process_group_.trigger_context() == boost::parallel::trc_out_of_band) - send_oob(self.process_group_, target.owner, msg_nonlocal_edge, - msg_nonlocal_edge_data(result.first.local, property)); - else - send(self.process_group_, target.owner, msg_nonlocal_edge, - msg_nonlocal_edge_data(result.first.local, property)); - } - } - - return result; - } - - template - std::pair - PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge:: - add_local_edge(const edge_property_type& property, undirectedS) const - { - // Add the directed edge - std::pair result - = this->add_local_edge(property, directedS()); - - if (result.second) { - if (target.owner == self.processor()) { - // Edge is local, so add the new edge to the list - - // TODO: This is not what we want to do for an undirected - // edge, because we haven't linked the source and target's - // representations of those edges. - local_edge_descriptor return_edge = - detail::parallel::add_local_edge(target.local, source.local, - self.build_edge_property(property), - self.base()).first; - - put(edge_target_processor_id, self.base(), return_edge, - source.owner); - } - else { - // Edge is remote, so notify the target's owner that an edge - // has been added. - if (self.process_group_.trigger_context() == boost::parallel::trc_out_of_band) - send_oob(self.process_group_, target.owner, msg_nonlocal_edge, - msg_nonlocal_edge_data(result.first.local, property)); - else - send(self.process_group_, target.owner, msg_nonlocal_edge, - msg_nonlocal_edge_data(result.first.local, property)); - - } - - // Add this edge to the list of local edges - graph_detail::push(self.local_edges(), result.first); - } - - return result; - } - - - /** - * Data structure returned from add_edge that will "lazily" add - * the edge with its property, either when it is converted to a - * pair or when the most recent copy has - * been destroyed. - */ - template - struct PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge_with_property - : lazy_add_edge - { - /// Construct a lazy request to add an edge - lazy_add_edge_with_property(adjacency_list& self, - vertex_descriptor source, - vertex_descriptor target, - const edge_property_type& property) - : lazy_add_edge(self, source, target), property(property) { } - - /// Copying a lazy_add_edge transfers the responsibility for - /// adding the edge to the newly-constructed object. - lazy_add_edge_with_property(const lazy_add_edge& other) - : lazy_add_edge(other), property(other.property) { } - - /// If the edge has not yet been added, add the edge but don't - /// wait for a reply. - ~lazy_add_edge_with_property(); - - /// Returns commit(). - operator std::pair() const { return commit(); } - - // Add the edge. This operation will block if a remote edge is - // being added. - std::pair commit() const; - - private: - // No copy-assignment semantics - void operator=(lazy_add_edge_with_property&); - - edge_property_type property; - }; - - template - PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge_with_property:: - ~lazy_add_edge_with_property() - { - /// If this edge has already been created or will be created by - /// someone else, or if someone threw an exception, we will not - /// create the edge now. - if (this->committed || boost::core::uncaught_exceptions() > 0) - return; - - this->committed = true; - - if (this->source.owner == this->self.processor()) - // Add a local edge - this->add_local_edge(property, DirectedS()); - else - // Request that the remote processor add an edge and, but - // don't wait for a reply. - send(this->self.process_group_, this->source.owner, - msg_add_edge_with_property, - msg_add_edge_with_property_data(this->source, this->target, - property)); - } - - template - std::pair - PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge_with_property:: - commit() const - { - BOOST_ASSERT(!this->committed); - this->committed = true; - - if (this->source.owner == this->self.processor()) - // Add a local edge - return this->add_local_edge(property, DirectedS()); - else { - // Request that the remote processor add an edge - boost::parallel::detail::untracked_pair result; - send_oob_with_reply(this->self.process_group_, this->source.owner, - msg_add_edge_with_property_and_reply, - msg_add_edge_with_property_data(this->source, - this->target, - property), - result); - return result; - } - } - - - /** - * Returns the set of vertices local to this processor. Note that - * although this routine matches a valid expression of a - * VertexListGraph, it does not meet the semantic requirements of - * VertexListGraph because it returns only local vertices (not all - * vertices). - */ - template - std::pair - vertices(const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE - ::vertex_descriptor Vertex; - - typedef typename Vertex::generator generator; - - return std::make_pair(make_transform_iterator(vertices(g.base()).first, - generator(g.processor())), - make_transform_iterator(vertices(g.base()).second, - generator(g.processor()))); - } - - /** - * Returns the number of vertices local to this processor. Note that - * although this routine matches a valid expression of a - * VertexListGraph, it does not meet the semantic requirements of - * VertexListGraph because it returns only a count of local vertices - * (not all vertices). - */ - template - typename PBGL_DISTRIB_ADJLIST_TYPE - ::vertices_size_type - num_vertices(const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - return num_vertices(g.base()); - } - - /*************************************************************************** - * Implementation of Incidence Graph concept - ***************************************************************************/ - /** - * Returns the source of edge @param e in @param g. - */ - template - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor - source(const detail::parallel::edge_descriptor& e, - const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE - ::vertex_descriptor Vertex; - return Vertex(e.source_processor, source(e.local, g.base())); - } - - /** - * Returns the target of edge @param e in @param g. - */ - template - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor - target(const detail::parallel::edge_descriptor& e, - const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE - ::vertex_descriptor Vertex; - return Vertex(e.target_processor, target(e.local, g.base())); - } - - /** - * Return the set of edges outgoing from a particular vertex. The - * vertex @param v must be local to the processor executing this - * routine. - */ - template - std::pair - out_edges(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - BOOST_ASSERT(v.owner == g.processor()); - - typedef PBGL_DISTRIB_ADJLIST_TYPE impl; - typedef typename impl::out_edge_generator generator; - - return std::make_pair( - make_transform_iterator(out_edges(v.local, g.base()).first, - generator(g)), - make_transform_iterator(out_edges(v.local, g.base()).second, - generator(g))); - } - - /** - * Return the number of edges outgoing from a particular vertex. The - * vertex @param v must be local to the processor executing this - * routine. - */ - template - typename PBGL_DISTRIB_ADJLIST_TYPE::degree_size_type - out_degree(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - BOOST_ASSERT(v.owner == g.processor()); - - return out_degree(v.local, g.base()); - } - - /*************************************************************************** - * Implementation of Bidirectional Graph concept - ***************************************************************************/ - /** - * Returns the set of edges incoming to a particular vertex. The - * vertex @param v must be local to the processor executing this - * routine. - */ - template - std::pair - in_edges(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) - ::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) - { - BOOST_ASSERT(v.owner == g.processor()); - - typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) impl; - typedef typename impl::inherited base_graph_type; - typedef typename impl::in_edge_generator generator; - - - typename property_map::const_type - in_edges = get(vertex_in_edges, g.base()); - - return std::make_pair(make_transform_iterator(in_edges[v.local].begin(), - generator(g)), - make_transform_iterator(in_edges[v.local].end(), - generator(g))); - } - - /** - * \overload - */ - template - std::pair - in_edges(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) - ::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) - { - BOOST_ASSERT(v.owner == g.processor()); - - typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) impl; - typedef typename impl::in_edge_generator generator; - - return std::make_pair( - make_transform_iterator(out_edges(v.local, g.base()).first, - generator(g)), - make_transform_iterator(out_edges(v.local, g.base()).second, - generator(g))); - } - - /** - * Returns the number of edges incoming to a particular vertex. The - * vertex @param v must be local to the processor executing this - * routine. - */ - template - typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)::degree_size_type - in_degree(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) - ::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) - { - BOOST_ASSERT(v.owner == g.processor()); - - return get(vertex_in_edges, g.base())[v.local].size(); - } - - /** - * \overload - */ - template - typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)::degree_size_type - in_degree(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) - ::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) - { - BOOST_ASSERT(v.owner == g.processor()); - - return out_degree(v.local, g.base()); - } - - /** - * Returns the number of edges incident on the given vertex. The - * vertex @param v must be local to the processor executing this - * routine. - */ - template - typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) - ::degree_size_type - degree(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) - ::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) - { - BOOST_ASSERT(v.owner == g.processor()); - return out_degree(v.local, g.base()); - } - - /** - * \overload - */ - template - typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) - ::degree_size_type - degree(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) - ::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) - { - BOOST_ASSERT(v.owner == g.processor()); - return out_degree(v, g) + in_degree(v, g); - } - - template - typename PBGL_DISTRIB_ADJLIST_TYPE::edges_size_type - num_edges(const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - return num_edges(g.base()); - } - - template - typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)::edges_size_type - num_edges(const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) - { - return g.local_edges().size(); - } - - template - std::pair< - typename PBGL_DISTRIB_ADJLIST_TYPE::edge_iterator, - typename PBGL_DISTRIB_ADJLIST_TYPE::edge_iterator> - edges(const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE impl; - typedef typename impl::out_edge_generator generator; - - return std::make_pair(make_transform_iterator(edges(g.base()).first, - generator(g)), - make_transform_iterator(edges(g.base()).second, - generator(g))); - } - - template - std::pair< - typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)::edge_iterator, - typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)::edge_iterator> - edges(const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) - { - return std::make_pair(g.local_edges().begin(), g.local_edges().end()); - } - - template - inline - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor - vertex(typename PBGL_DISTRIB_ADJLIST_TYPE::vertices_size_type n, - const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor - vertex_descriptor; - - return vertex_descriptor(g.distribution()(n), g.distribution().local(n)); - } - - /*************************************************************************** - * Access to particular edges - ***************************************************************************/ - template - std::pair< - typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)::edge_descriptor, - bool - > - edge(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)::vertex_descriptor u, - typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS) - ::edge_descriptor edge_descriptor; - - // For directed graphs, u must be local - BOOST_ASSERT(u.owner == process_id(g.process_group())); - - typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS) - ::out_edge_iterator ei, ei_end; - for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) { - if (target(*ei, g) == v) return std::make_pair(*ei, true); - } - return std::make_pair(edge_descriptor(), false); - } - - template - std::pair< - typename PBGL_DISTRIB_ADJLIST_TYPE::edge_descriptor, - bool - > - edge(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE - ::edge_descriptor edge_descriptor; - - // For bidirectional and undirected graphs, u must be local or v - // must be local - if (u.owner == process_id(g.process_group())) { - typename PBGL_DISTRIB_ADJLIST_TYPE::out_edge_iterator ei, ei_end; - for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) { - if (target(*ei, g) == v) return std::make_pair(*ei, true); - } - return std::make_pair(edge_descriptor(), false); - } else if (v.owner == process_id(g.process_group())) { - typename PBGL_DISTRIB_ADJLIST_TYPE::in_edge_iterator ei, ei_end; - for (boost::tie(ei, ei_end) = in_edges(v, g); ei != ei_end; ++ei) { - if (source(*ei, g) == u) return std::make_pair(*ei, true); - } - return std::make_pair(edge_descriptor(), false); - } else { - BOOST_ASSERT(false); - abort(); - } - } - -#if 0 - // TBD: not yet supported - std::pair - edge_range(vertex_descriptor u, vertex_descriptor v, - const adjacency_list& g); -#endif - - /*************************************************************************** - * Implementation of Adjacency Graph concept - ***************************************************************************/ - template - std::pair - adjacent_vertices(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, - const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE::adjacency_iterator iter; - return std::make_pair(iter(out_edges(v, g).first, &g), - iter(out_edges(v, g).second, &g)); - } - - /*************************************************************************** - * Implementation of Mutable Graph concept - ***************************************************************************/ - - /************************************************************************ - * add_edge - ************************************************************************/ - template - typename PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge - add_edge(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, - PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge lazy_add_edge; - - return lazy_add_edge(g, u, v); - } - - template - typename PBGL_DISTRIB_ADJLIST_TYPE - ::lazy_add_edge_with_property - add_edge(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, - typename PBGL_DISTRIB_ADJLIST_TYPE::edge_property_type const& p, - PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE - ::lazy_add_edge_with_property lazy_add_edge_with_property; - return lazy_add_edge_with_property(g, u, v, p); - } - - /************************************************************************ - * - * remove_edge - * - ************************************************************************/ - template - void - remove_edge(typename PBGL_DISTRIB_ADJLIST_TYPE::edge_descriptor e, - PBGL_DISTRIB_ADJLIST_TYPE& g) - { - BOOST_ASSERT(source(e, g).owner == g.processor() - || target(e, g).owner == g.processor()); - - if (target(e, g).owner == g.processor()) - detail::parallel::remove_in_edge(e, g, DirectedS()); - if (source(e, g).owner == g.processor()) - remove_edge(e.local, g.base()); - - g.remove_local_edge_from_list(source(e, g), target(e, g), DirectedS()); - - if (source(e, g).owner != g.processor() - || (target(e, g).owner != g.processor() - && !(is_same::value))) { - g.send_remove_edge_request(e); - } - } - - template - void - remove_edge(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, - PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE - ::edge_descriptor edge_descriptor; - std::pair the_edge = edge(u, v, g); - if (the_edge.second) remove_edge(the_edge.first, g); - } - - template - inline void - remove_edge(typename PBGL_DISTRIB_ADJLIST_TYPE::out_edge_iterator ei, - PBGL_DISTRIB_ADJLIST_TYPE& g) - { - remove_edge(*ei, g); - } - - template - inline void - remove_edge(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS) - ::out_edge_iterator ei, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)& g) - { - BOOST_ASSERT(source(*ei, g).owner == g.processor()); - remove_edge(ei->local, g.base()); - } - - /************************************************************************ - * - * remove_out_edge_if - * - ************************************************************************/ - namespace parallel { namespace detail { - /** - * Function object that applies the underlying predicate to - * determine if an out-edge should be removed. If so, either - * removes the incoming edge (if it is stored locally) or sends a - * message to the owner of the target requesting that it remove - * the edge. - */ - template - struct remove_out_edge_predicate - { - typedef typename graph_traits::edge_descriptor edge_descriptor; - typedef typename Graph::local_edge_descriptor argument_type; - typedef typename Graph::directed_selector directed_selector; - typedef bool result_type; - - remove_out_edge_predicate(Graph& g, Predicate& predicate) - : g(g), predicate(predicate) { } - - bool operator()(const argument_type& le) - { - typedef typename edge_descriptor::template out_generator - generator; - - edge_descriptor e = generator(g)(le); - - if (predicate(e)) { - if (source(e, g).owner != target(e, g).owner - && !(is_same::value)) - g.send_remove_edge_request(e); - else - ::boost::detail::parallel::remove_in_edge(e, g, - directed_selector()); - - g.remove_local_edge_from_list(source(e, g), target(e, g), - directed_selector()); - return true; - } else return false; - } - - private: - Graph& g; - Predicate predicate; - }; - } } // end namespace parallel::detail - - template - inline void - remove_out_edge_if - (typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, - Predicate predicate, - PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE Graph; - typedef parallel::detail::remove_out_edge_predicate - Pred; - - BOOST_ASSERT(u.owner == g.processor()); - remove_out_edge_if(u.local, Pred(g, predicate), g.base()); - } - - /************************************************************************ - * - * remove_in_edge_if - * - ************************************************************************/ - namespace parallel { namespace detail { - /** - * Function object that applies the underlying predicate to - * determine if an in-edge should be removed. If so, either - * removes the outgoing edge (if it is stored locally) or sends a - * message to the owner of the target requesting that it remove - * the edge. Only required for bidirectional graphs. - */ - template - struct remove_in_edge_predicate - { - typedef typename graph_traits::edge_descriptor edge_descriptor; - typedef bool result_type; - - remove_in_edge_predicate(Graph& g, const Predicate& predicate) - : g(g), predicate(predicate) { } - - template - bool operator()(const StoredEdge& le) - { - typedef typename edge_descriptor::template in_generator - generator; - - edge_descriptor e = generator(g)(le); - - if (predicate(e)) { - if (source(e, g).owner != target(e, g).owner) - g.send_remove_edge_request(e); - else - remove_edge(source(e, g).local, target(e, g).local, g.base()); - return true; - } else return false; - } - - private: - Graph& g; - Predicate predicate; - }; - } } // end namespace parallel::detail - - template - inline void - remove_in_edge_if - (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) - ::vertex_descriptor u, - Predicate predicate, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) Graph; - typedef parallel::detail::remove_in_edge_predicate - Pred; - - BOOST_ASSERT(u.owner == g.processor()); - graph_detail::erase_if(get(vertex_in_edges, g.base())[u.local], - Pred(g, predicate)); - } - - template - inline void - remove_in_edge_if - (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) - ::vertex_descriptor u, - Predicate predicate, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) - { - remove_out_edge_if(u, predicate, g); - } - - /************************************************************************ - * - * remove_edge_if - * - ************************************************************************/ - namespace parallel { namespace detail { - /** - * Function object that applies the underlying predicate to - * determine if a directed edge can be removed. This only applies - * to directed graphs. - */ - template - struct remove_directed_edge_predicate - { - typedef typename Graph::local_edge_descriptor argument_type; - typedef typename graph_traits::edge_descriptor edge_descriptor; - typedef bool result_type; - - remove_directed_edge_predicate(Graph& g, const Predicate& predicate) - : g(g), predicate(predicate) { } - - bool operator()(const argument_type& le) - { - typedef typename edge_descriptor::template out_generator - generator; - - edge_descriptor e = generator(g)(le); - return predicate(e); - } - - private: - Graph& g; - Predicate predicate; - }; - } } // end namespace parallel::detail - - template - inline void - remove_edge_if(Predicate predicate, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS) Graph; - typedef parallel::detail::remove_directed_edge_predicate Pred; - remove_edge_if(Pred(g, predicate), g.base()); - } - - template - inline void - remove_edge_if(Predicate predicate, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) Graph; - typedef parallel::detail::remove_out_edge_predicate Pred; - remove_edge_if(Pred(g, predicate), g.base()); - } - - namespace parallel { namespace detail { - /** - * Function object that applies the underlying predicate to - * determine if an undirected edge should be removed. If so, - * removes the local edges associated with the edge and - * (potentially) sends a message to the remote processor that also - * is removing this edge. - */ - template - struct remove_undirected_edge_predicate - { - typedef typename graph_traits::edge_descriptor argument_type; - typedef bool result_type; - - remove_undirected_edge_predicate(Graph& g, Predicate& predicate) - : g(g), predicate(predicate) { } - - bool operator()(const argument_type& e) - { - if (predicate(e)) { - if (source(e, g).owner != target(e, g).owner) - g.send_remove_edge_request(e); - if (target(e, g).owner == g.processor()) - ::boost::detail::parallel::remove_in_edge(e, g, undirectedS()); - if (source(e, g).owner == g.processor()) - remove_edge(e.local, g.base()); - return true; - } else return false; - } - - private: - Graph& g; - Predicate predicate; - }; - } } // end namespace parallel::detail - - template - inline void - remove_edge_if(Predicate predicate, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) Graph; - typedef parallel::detail::remove_undirected_edge_predicate Pred; - graph_detail::erase_if(g.local_edges(), Pred(g, predicate)); - } - - /************************************************************************ - * - * clear_vertex - * - ************************************************************************/ - namespace parallel { namespace detail { - struct always_true - { - typedef bool result_type; - - template bool operator()(const T&) const { return true; } - }; - } } // end namespace parallel::detail - - template - void - clear_vertex - (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) - ::vertex_descriptor u, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) - { - clear_out_edges(u, g); - clear_in_edges(u, g); - } - - template - void - clear_vertex - (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) - ::vertex_descriptor u, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) - { - remove_out_edge_if(u, parallel::detail::always_true(), g); - } - - /************************************************************************ - * - * clear_out_edges - * - ************************************************************************/ - template - void - clear_out_edges - (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)::vertex_descriptor u, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)& g) - { - BOOST_ASSERT(u.owner == g.processor()); - clear_out_edges(u.local, g.base()); - } - - template - void - clear_out_edges - (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) - ::vertex_descriptor u, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) - { - remove_out_edge_if(u, parallel::detail::always_true(), g); - } - - /************************************************************************ - * - * clear_in_edges - * - ************************************************************************/ - template - void - clear_in_edges - (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) - ::vertex_descriptor u, - PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) - { - remove_in_edge_if(u, parallel::detail::always_true(), g); - } - - /************************************************************************ - * - * add_vertex - * - ************************************************************************/ - template - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor - add_vertex(PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE graph_type; - typename graph_type::vertex_property_type p; - return add_vertex(p, g); - } - - template - typename PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_vertex_with_property - add_vertex(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_property_type const& p, - PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE - ::lazy_add_vertex_with_property lazy_add_vertex; - return lazy_add_vertex(g, p); - } - - /************************************************************************ - * - * remove_vertex - * - ************************************************************************/ - template - void - remove_vertex(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, - PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename PBGL_DISTRIB_ADJLIST_TYPE::graph_type graph_type; - typedef typename graph_type::named_graph_mixin named_graph_mixin; - BOOST_ASSERT(u.owner == g.processor()); - static_cast(static_cast(g)) - .removing_vertex(u, boost::graph_detail::iterator_stability(g.base().m_vertices)); - g.distribution().clear(); - remove_vertex(u.local, g.base()); - } - - /*************************************************************************** - * Implementation of Property Graph concept - ***************************************************************************/ - template - struct property_map - : detail::parallel::get_adj_list_pmap - ::template apply - { }; - - template - struct property_map - : boost::detail::parallel::get_adj_list_pmap -// FIXME: in the original code the following was not const - ::template apply - { }; - - template - typename property_map::type - get(Property p, PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE Graph; - typedef typename property_map::type result_type; - typedef typename property_traits::value_type value_type; - typedef typename property_reduce::template apply - reduce; - - typedef typename property_traits::key_type descriptor; - typedef typename graph_traits::vertex_descriptor vertex_descriptor; - typedef typename mpl::if_, - vertex_global_t, edge_global_t>::type - global_map_t; - - return result_type(g.process_group(), get(global_map_t(), g), - get(p, g.base()), reduce()); - } - - template - typename property_map::const_type - get(Property p, const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE Graph; - typedef typename property_map::const_type result_type; - typedef typename property_traits::value_type value_type; - typedef typename property_reduce::template apply - reduce; - - typedef typename property_traits::key_type descriptor; - typedef typename graph_traits::vertex_descriptor vertex_descriptor; - typedef typename mpl::if_, - vertex_global_t, edge_global_t>::type - global_map_t; - - return result_type(g.process_group(), get(global_map_t(), g), - get(p, g.base()), reduce()); - } - - template - typename property_map::type - get(vertex_local_index_t, PBGL_DISTRIB_ADJLIST_TYPE& g) - { - return get(vertex_local_index, g.base()); - } - - template - typename property_map::const_type - get(vertex_local_index_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - return get(vertex_local_index, g.base()); - } - - template - typename property_map::const_type - get(vertex_global_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - vertex_global_t>::const_type result_type; - return result_type(); - } - - template - typename property_map::const_type - get(vertex_global_t, PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - vertex_global_t>::const_type result_type; - return result_type(); - } - - /// Retrieve a property map mapping from a vertex descriptor to its - /// owner. - template - typename property_map::type - get(vertex_owner_t, PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - vertex_owner_t>::type result_type; - return result_type(); - } - - /// Retrieve a property map mapping from a vertex descriptor to its - /// owner. - template - typename property_map::const_type - get(vertex_owner_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - vertex_owner_t>::const_type result_type; - return result_type(); - } - - /// Retrieve the owner of a vertex - template - inline processor_id_type - get(vertex_owner_t, PBGL_DISTRIB_ADJLIST_TYPE&, - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v) - { - return v.owner; - } - - /// Retrieve the owner of a vertex - template - inline processor_id_type - get(vertex_owner_t, const PBGL_DISTRIB_ADJLIST_TYPE&, - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v) - { - return v.owner; - } - - /// Retrieve a property map that maps from a vertex descriptor to - /// its local descriptor. - template - typename property_map::type - get(vertex_local_t, PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - vertex_local_t>::type result_type; - return result_type(); - } - - /// Retrieve a property map that maps from a vertex descriptor to - /// its local descriptor. - template - typename property_map::const_type - get(vertex_local_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - vertex_local_t>::const_type result_type; - return result_type(); - } - - /// Retrieve the local descriptor of a vertex - template - inline typename PBGL_DISTRIB_ADJLIST_TYPE::local_vertex_descriptor - get(vertex_local_t, PBGL_DISTRIB_ADJLIST_TYPE&, - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v) - { - return v.local; - } - - /// Retrieve the local descriptor of a vertex - template - inline typename PBGL_DISTRIB_ADJLIST_TYPE::local_vertex_descriptor - get(vertex_local_t, const PBGL_DISTRIB_ADJLIST_TYPE&, - typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v) - { - return v.local; - } - - - template - typename property_map::const_type - get(edge_global_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - edge_global_t>::const_type result_type; - return result_type(); - } - - template - typename property_map::const_type - get(edge_global_t, PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - edge_global_t>::const_type result_type; - return result_type(); - } - - template - typename property_map::type - get(edge_owner_t, PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - edge_owner_t>::type result_type; - return result_type(); - } - - template - typename property_map::const_type - get(edge_owner_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - edge_owner_t>::const_type result_type; - return result_type(); - } - - template - typename property_map::type - get(edge_local_t, PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - edge_local_t>::type result_type; - return result_type(); - } - - template - typename property_map::const_type - get(edge_local_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef typename property_map< - PBGL_DISTRIB_ADJLIST_TYPE, - edge_local_t>::const_type result_type; - return result_type(); - } - - template - inline - typename property_traits::const_type - >::value_type - get(Property p, const PBGL_DISTRIB_ADJLIST_TYPE& g, const Key& key) - { - if (owner(key) == process_id(g.process_group())) - return get(p, g.base(), local(key)); - else - BOOST_ASSERT(false); - } - - template - void - put(Property p, PBGL_DISTRIB_ADJLIST_TYPE& g, const Key& key, const Value& v) - { - if (owner(key) == process_id(g.process_group())) - put(p, g.base(), local(key), v); - else - BOOST_ASSERT(false); - } - - template - typename property_map::type - get(vertex_index_t vi, PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE graph_type; - typedef typename property_map::type - result_type; - return result_type(g.process_group(), get(vertex_global, g), - get(vi, g.base())); - } - - template - typename property_map::const_type - get(vertex_index_t vi, const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE graph_type; - typedef typename property_map::const_type - result_type; - return result_type(g.process_group(), get(vertex_global, g), - get(vi, g.base())); - } - - /*************************************************************************** - * Implementation of bundled properties - ***************************************************************************/ - template - struct property_map - : detail::parallel::get_adj_list_pmap - ::template apply - { }; - - template - struct property_map - : detail::parallel::get_adj_list_pmap - ::template apply - { }; - - template - typename property_map::type - get(T Bundle::* p, PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE Graph; - typedef typename property_map::type result_type; - typedef typename property_traits::value_type value_type; - typedef typename property_reduce::template apply - reduce; - - typedef typename property_traits::key_type descriptor; - typedef typename graph_traits::vertex_descriptor vertex_descriptor; - typedef typename mpl::if_, - vertex_global_t, edge_global_t>::type - global_map_t; - - return result_type(g.process_group(), get(global_map_t(), g), - get(p, g.base()), reduce()); - } - - template - typename property_map::const_type - get(T Bundle::* p, const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - typedef PBGL_DISTRIB_ADJLIST_TYPE Graph; - typedef typename property_map::const_type result_type; - typedef typename property_traits::value_type value_type; - typedef typename property_reduce::template apply - reduce; - - typedef typename property_traits::key_type descriptor; - typedef typename graph_traits::vertex_descriptor vertex_descriptor; - typedef typename mpl::if_, - vertex_global_t, edge_global_t>::type - global_map_t; - - return result_type(g.process_group(), get(global_map_t(), g), - get(p, g.base()), reduce()); - } - - /*************************************************************************** - * Implementation of DistributedGraph concept - ***************************************************************************/ - template - void synchronize(const PBGL_DISTRIB_ADJLIST_TYPE& g) - { - synchronize(g.process_group()); - } - - template - ProcessGroup - process_group(const PBGL_DISTRIB_ADJLIST_TYPE& g) - { return g.process_group(); } - - /*************************************************************************** - * Specializations of is_mpi_datatype for Serializable entities - ***************************************************************************/ - namespace mpi { - template - struct is_mpi_datatype > - : is_mpi_datatype { }; - - template - struct is_mpi_datatype > - : is_mpi_datatype > { }; - - template - struct is_mpi_datatype > - : is_mpi_datatype { }; - - template - struct is_mpi_datatype > - : is_mpi_datatype { }; - - template - struct is_mpi_datatype > - : is_mpi_datatype { }; - - template - struct is_mpi_datatype > - : mpl::and_, is_mpi_datatype > { }; - - - template - struct is_mpi_datatype > - : mpl::and_< - is_mpi_datatype >, - is_mpi_datatype > - {}; - - template - struct is_mpi_datatype< - boost::detail::parallel::msg_remove_edge_data > - : is_mpi_datatype {}; - } - - /*************************************************************************** - * Specializations of is_bitwise_serializable for Serializable entities - ***************************************************************************/ - namespace serialization { - template - struct is_bitwise_serializable > - : is_bitwise_serializable { }; - - template - struct is_bitwise_serializable > - : is_bitwise_serializable > { }; - - template - struct is_bitwise_serializable > - : is_bitwise_serializable { }; - - template - struct is_bitwise_serializable > - : is_bitwise_serializable { }; - - template - struct is_bitwise_serializable > - : is_bitwise_serializable { }; - - template - struct is_bitwise_serializable > - : mpl::and_, - is_bitwise_serializable > { }; - - template - struct is_bitwise_serializable > - : mpl::and_< - is_bitwise_serializable< - boost::detail::parallel::maybe_store_property >, - is_bitwise_serializable > - {}; - - template - struct is_bitwise_serializable< - boost::detail::parallel::msg_remove_edge_data > - : is_bitwise_serializable {}; - - template - struct implementation_level > - : mpl::int_ {}; - - template - struct implementation_level > - : mpl::int_ {}; - - template - struct implementation_level > - : mpl::int_ {}; - - template - struct implementation_level > - : mpl::int_ {}; - - template - struct implementation_level > - : mpl::int_ {}; - - template - struct implementation_level > - : mpl::int_ {}; - - template - struct implementation_level > - : mpl::int_ {}; - - template - struct implementation_level< - boost::detail::parallel::msg_remove_edge_data > - : mpl::int_ {}; - - template - struct tracking_level > - : mpl::int_ {}; - - template - struct tracking_level > - : mpl::int_ {}; - - template - struct tracking_level > - : mpl::int_ {}; - - template - struct tracking_level > - : mpl::int_ {}; - - template - struct tracking_level > - : mpl::int_ {}; - - template - struct tracking_level > - : mpl::int_ {}; - - template - struct tracking_level > - : mpl::int_ {}; - - template - struct tracking_level< - boost::detail::parallel::msg_remove_edge_data > - : mpl::int_ {}; - } - - // Hash function for global descriptors - template - struct hash > - { - typedef detail::parallel::global_descriptor argument_type; - std::size_t operator()(argument_type const& x) const - { - std::size_t hash = hash_value(x.owner); - hash_combine(hash, x.local); - return hash; - } - }; - - // Hash function for parallel edge descriptors - template - struct hash > - { - typedef detail::parallel::edge_descriptor argument_type; - - std::size_t operator()(argument_type const& x) const - { - std::size_t hash = hash_value(x.owner()); - hash_combine(hash, x.local); - return hash; - } - }; - -} // end namespace boost - -#include -#include -#include -#include - -#endif // BOOST_GRAPH_DISTRIBUTED_ADJACENCY_LIST_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/handlers.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/handlers.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/handlers.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/handlers.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,148 +0,0 @@ -// Copyright (C) 2007 Douglas Gregor - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// This file contains code for the distributed adjacency list's -// message handlers. It should not be included directly by users. - -#ifndef BOOST_GRAPH_DISTRIBUTED_ADJLIST_HANDLERS_HPP -#define BOOST_GRAPH_DISTRIBUTED_ADJLIST_HANDLERS_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include - -namespace boost { - -template -void -PBGL_DISTRIB_ADJLIST_TYPE:: -setup_triggers() -{ - using boost::graph::parallel::simple_trigger; - - simple_trigger(process_group_, msg_add_vertex_with_property, this, - &adjacency_list::handle_add_vertex_with_property); - simple_trigger(process_group_, msg_add_vertex_with_property_and_reply, this, - &adjacency_list::handle_add_vertex_with_property_and_reply); - simple_trigger(process_group_, msg_add_edge, this, - &adjacency_list::handle_add_edge); - simple_trigger(process_group_, msg_add_edge_with_reply, this, - &adjacency_list::handle_add_edge_with_reply); - simple_trigger(process_group_, msg_add_edge_with_property, this, - &adjacency_list::handle_add_edge_with_property); - simple_trigger(process_group_, msg_add_edge_with_property_and_reply, this, - &adjacency_list::handle_add_edge_with_property_and_reply); - simple_trigger(process_group_, msg_nonlocal_edge, this, - &adjacency_list::handle_nonlocal_edge); - simple_trigger(process_group_, msg_remove_edge, this, - &adjacency_list::handle_remove_edge); -} - -template -void -PBGL_DISTRIB_ADJLIST_TYPE:: -handle_add_vertex_with_property(int source, int tag, - const vertex_property_type& data, - trigger_receive_context) -{ - vertex_descriptor v(this->processor(), - add_vertex(this->build_vertex_property(data), - this->base())); - if (on_add_vertex) - on_add_vertex(v, *this); -} - -template -typename PBGL_DISTRIB_ADJLIST_TYPE::local_vertex_descriptor -PBGL_DISTRIB_ADJLIST_TYPE:: -handle_add_vertex_with_property_and_reply(int source, int tag, - const vertex_property_type& data, - trigger_receive_context) -{ - // Try to find a vertex with this name - local_vertex_descriptor local_v - = add_vertex(this->build_vertex_property(data), this->base()); - - vertex_descriptor v(processor(), local_v); - if (on_add_vertex) - on_add_vertex(v, *this); - - return local_v; -} - -template -void -PBGL_DISTRIB_ADJLIST_TYPE:: -handle_add_edge(int source, int tag, const msg_add_edge_data& data, - trigger_receive_context) -{ - add_edge(vertex_descriptor(processor(), data.source), - data.target, *this); -} - -template -boost::parallel::detail::untracked_pair -PBGL_DISTRIB_ADJLIST_TYPE:: -handle_add_edge_with_reply(int source, int tag, const msg_add_edge_data& data, - trigger_receive_context) -{ - std::pair p = - add_edge(vertex_descriptor(processor(), data.source),data.target, *this); - return p; -} - -template -void -PBGL_DISTRIB_ADJLIST_TYPE:: -handle_add_edge_with_property(int source, int tag, - const msg_add_edge_with_property_data& data, - trigger_receive_context) -{ - add_edge(vertex_descriptor(processor(), data.source), - data.target, data.get_property(), *this); -} - -template -boost::parallel::detail::untracked_pair -PBGL_DISTRIB_ADJLIST_TYPE:: -handle_add_edge_with_property_and_reply - (int source, int tag, - const msg_add_edge_with_property_data& data, - trigger_receive_context) -{ - std::pair p = - add_edge(vertex_descriptor(processor(), data.source), - data.target, data.get_property(), *this); - return p; -} - -template -void -PBGL_DISTRIB_ADJLIST_TYPE:: -handle_nonlocal_edge(int source, int tag, - const msg_nonlocal_edge_data& data, - trigger_receive_context) -{ - add_remote_edge(data, source, directed_selector()); -} - -template -void -PBGL_DISTRIB_ADJLIST_TYPE:: -handle_remove_edge(int source, int tag, - const msg_remove_edge_data& data, - trigger_receive_context) -{ - remove_local_edge(data, source, directed_selector()); -} - -} - -#endif // BOOST_GRAPH_DISTRIBUTED_ADJLIST_HANDLERS_HPP - diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/initialize.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/initialize.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/initialize.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/initialize.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,319 +0,0 @@ -// Copyright (C) 2007 Douglas Gregor - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// This file contains code for the distributed adjacency list's -// initializations. It should not be included directly by users. - -#ifndef BOOST_GRAPH_DISTRIBUTED_ADJLIST_INITIALIZE_HPP -#define BOOST_GRAPH_DISTRIBUTED_ADJLIST_INITIALIZE_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -namespace boost { - -template -template -void -PBGL_DISTRIB_ADJLIST_TYPE:: -initialize(EdgeIterator first, EdgeIterator last, - vertices_size_type, const base_distribution_type& distribution, - vecS) -{ - process_id_type id = process_id(process_group_); - while (first != last) { - if ((process_id_type)distribution(first->first) == id) { - vertex_descriptor source(id, distribution.local(first->first)); - vertex_descriptor target(distribution(first->second), - distribution.local(first->second)); - add_edge(source, target, *this); - } - ++first; - } - - synchronize(process_group_); -} - -template -template -void -PBGL_DISTRIB_ADJLIST_TYPE:: -initialize(EdgeIterator first, EdgeIterator last, - EdgePropertyIterator ep_iter, - vertices_size_type, const base_distribution_type& distribution, - vecS) -{ - process_id_type id = process_id(process_group_); - while (first != last) { - if (static_cast(distribution(first->first)) == id) { - vertex_descriptor source(id, distribution.local(first->first)); - vertex_descriptor target(distribution(first->second), - distribution.local(first->second)); - add_edge(source, target, *ep_iter, *this); - } - ++first; - ++ep_iter; - } - - synchronize(process_group_); -} - -template -template -void -PBGL_DISTRIB_ADJLIST_TYPE:: -initialize(EdgeIterator first, EdgeIterator last, - EdgePropertyIterator ep_iter, - vertices_size_type n, const base_distribution_type& distribution, - VertexListS) -{ - using boost::parallel::inplace_all_to_all; - - typedef vertices_size_type vertex_number_t; - typedef typename std::iterator_traits::value_type - edge_property_init_t; - - typedef std::pair - st_pair; - typedef std::pair delayed_edge_t; - - process_group_type pg = process_group(); - process_id_type id = process_id(pg); - - // Vertex indices - std::vector index_to_vertex; - index_to_vertex.reserve(num_vertices(*this)); - BGL_FORALL_VERTICES_T(v, base(), inherited) - index_to_vertex.push_back(v); - - // The list of edges we can't add immediately. - std::vector delayed_edges; - - std::vector > descriptor_requests; - descriptor_requests.resize(num_processes(pg)); - - // Add all of the edges we can, up to the point where we run - // into a descriptor we don't know. - while (first != last) { - if (distribution(first->first) == id) { - if (distribution(first->second) != id) break; - vertex_descriptor source - (id, index_to_vertex[distribution.local(first->first)]); - vertex_descriptor target - (distribution(first->second), - index_to_vertex[distribution.local(first->second)]); - add_edge(source, target, *ep_iter, *this); - } - ++first; - ++ep_iter; - } - - // Queue all of the remaining edges and determine the set of - // descriptors we need to know about. - while (first != last) { - if (distribution(first->first) == id) { - vertex_descriptor source - (id, index_to_vertex[distribution.local(first->first)]); - process_id_type dest = distribution(first->second); - if (dest != id) { - descriptor_requests[dest] - .push_back(distribution.local(first->second)); - // Compact request list if we need to - if (descriptor_requests[dest].size() > - distribution.block_size(dest, n)) { - std::sort(descriptor_requests[dest].begin(), - descriptor_requests[dest].end()); - descriptor_requests[dest].erase( - std::unique(descriptor_requests[dest].begin(), - descriptor_requests[dest].end()), - descriptor_requests[dest].end()); - } - } - - // Save the edge for later - delayed_edges.push_back - (delayed_edge_t(st_pair(source, first->second), *ep_iter)); - } - ++first; - ++ep_iter; - } - - // Compact descriptor requests - for (process_id_type dest = 0; dest < num_processes(pg); ++dest) { - std::sort(descriptor_requests[dest].begin(), - descriptor_requests[dest].end()); - descriptor_requests[dest].erase( - std::unique(descriptor_requests[dest].begin(), - descriptor_requests[dest].end()), - descriptor_requests[dest].end()); - } - - // Send out all of the descriptor requests - std::vector > in_descriptor_requests; - in_descriptor_requests.resize(num_processes(pg)); - inplace_all_to_all(pg, descriptor_requests, in_descriptor_requests); - - // Reply to all of the descriptor requests - std::vector > - descriptor_responses; - descriptor_responses.resize(num_processes(pg)); - for (process_id_type dest = 0; dest < num_processes(pg); ++dest) { - for (std::size_t i = 0; i < in_descriptor_requests[dest].size(); ++i) { - local_vertex_descriptor v = - index_to_vertex[in_descriptor_requests[dest][i]]; - descriptor_responses[dest].push_back(v); - } - in_descriptor_requests[dest].clear(); - } - in_descriptor_requests.clear(); - inplace_all_to_all(pg, descriptor_responses); - - // Add the queued edges - for(typename std::vector::iterator i - = delayed_edges.begin(); i != delayed_edges.end(); ++i) { - process_id_type dest = distribution(i->first.second); - local_vertex_descriptor tgt_local; - if (dest == id) { - tgt_local = index_to_vertex[distribution.local(i->first.second)]; - } else { - std::vector& requests = descriptor_requests[dest]; - typename std::vector::iterator pos = - std::lower_bound(requests.begin(), requests.end(), - distribution.local(i->first.second)); - tgt_local = descriptor_responses[dest][pos - requests.begin()]; - } - add_edge(i->first.first, vertex_descriptor(dest, tgt_local), - i->second, *this); - } - synchronize(process_group_); -} - -template -template -void -PBGL_DISTRIB_ADJLIST_TYPE:: -initialize(EdgeIterator first, EdgeIterator last, - vertices_size_type n, const base_distribution_type& distribution, - VertexListS) -{ - using boost::parallel::inplace_all_to_all; - - typedef vertices_size_type vertex_number_t; - - typedef std::pair delayed_edge_t; - - process_group_type pg = process_group(); - process_id_type id = process_id(pg); - - // Vertex indices - std::vector index_to_vertex; - index_to_vertex.reserve(num_vertices(*this)); - BGL_FORALL_VERTICES_T(v, base(), inherited) - index_to_vertex.push_back(v); - - // The list of edges we can't add immediately. - std::vector delayed_edges; - - std::vector > descriptor_requests; - descriptor_requests.resize(num_processes(pg)); - - // Add all of the edges we can, up to the point where we run - // into a descriptor we don't know. - while (first != last) { - if (distribution(first->first) == id) { - if (distribution(first->second) != id) break; - vertex_descriptor source - (id, index_to_vertex[distribution.local(first->first)]); - vertex_descriptor target - (distribution(first->second), - index_to_vertex[distribution.local(first->second)]); - add_edge(source, target, *this); - } - ++first; - } - - // Queue all of the remaining edges and determine the set of - // descriptors we need to know about. - while (first != last) { - if (distribution(first->first) == id) { - vertex_descriptor source - (id, index_to_vertex[distribution.local(first->first)]); - process_id_type dest = distribution(first->second); - if (dest != id) { - descriptor_requests[dest] - .push_back(distribution.local(first->second)); - // Compact request list if we need to - if (descriptor_requests[dest].size() > - distribution.block_size(dest, n)) { - std::sort(descriptor_requests[dest].begin(), - descriptor_requests[dest].end()); - descriptor_requests[dest].erase( - std::unique(descriptor_requests[dest].begin(), - descriptor_requests[dest].end()), - descriptor_requests[dest].end()); - } - } - - // Save the edge for later - delayed_edges.push_back(delayed_edge_t(source, first->second)); - } - ++first; - } - - // Compact descriptor requests - for (process_id_type dest = 0; dest < num_processes(pg); ++dest) { - std::sort(descriptor_requests[dest].begin(), - descriptor_requests[dest].end()); - descriptor_requests[dest].erase( - std::unique(descriptor_requests[dest].begin(), - descriptor_requests[dest].end()), - descriptor_requests[dest].end()); - } - - // Send out all of the descriptor requests - std::vector > in_descriptor_requests; - in_descriptor_requests.resize(num_processes(pg)); - inplace_all_to_all(pg, descriptor_requests, in_descriptor_requests); - - // Reply to all of the descriptor requests - std::vector > - descriptor_responses; - descriptor_responses.resize(num_processes(pg)); - for (process_id_type dest = 0; dest < num_processes(pg); ++dest) { - for (std::size_t i = 0; i < in_descriptor_requests[dest].size(); ++i) { - local_vertex_descriptor v = - index_to_vertex[in_descriptor_requests[dest][i]]; - descriptor_responses[dest].push_back(v); - } - in_descriptor_requests[dest].clear(); - } - in_descriptor_requests.clear(); - inplace_all_to_all(pg, descriptor_responses); - - // Add the queued edges - for(typename std::vector::iterator i - = delayed_edges.begin(); i != delayed_edges.end(); ++i) { - process_id_type dest = distribution(i->second); - local_vertex_descriptor tgt_local; - if (dest == id) { - tgt_local = index_to_vertex[distribution.local(i->second)]; - } else { - std::vector& requests = descriptor_requests[dest]; - typename std::vector::iterator pos = - std::lower_bound(requests.begin(), requests.end(), - distribution.local(i->second)); - tgt_local = descriptor_responses[dest][pos - requests.begin()]; - } - add_edge(i->first, vertex_descriptor(dest, tgt_local), *this); - } - synchronize(process_group_); -} - -} // end namespace boost - -#endif // BOOST_GRAPH_DISTRIBUTED_ADJLIST_INITIALIZE_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/redistribute.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/redistribute.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/redistribute.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/adjlist/redistribute.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,392 +0,0 @@ -// Copyright (C) 2005-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -// -// Implements redistribution of vertices for a distributed adjacency -// list. This file should not be included by users. It will be -// included by the distributed adjacency list header. -// - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include - -namespace boost { namespace detail { namespace parallel { - -/* This structure contains a (vertex or edge) descriptor that is being - moved from one processor to another. It contains the properties for - that descriptor (if any). - */ -template -struct redistributed_descriptor : maybe_store_property -{ - typedef maybe_store_property inherited; - - redistributed_descriptor() { } - - redistributed_descriptor(const Descriptor& v, const DescriptorProperty& p) - : inherited(p), descriptor(v) { } - - Descriptor descriptor; - -private: - friend class boost::serialization::access; - - template - void serialize(Archiver& ar, unsigned int /*version*/) - { - ar & boost::serialization::base_object(*this) - & unsafe_serialize(descriptor); - } -}; - -/* Predicate that returns true if the target has migrated. */ -template -struct target_migrated_t -{ - typedef typename graph_traits::vertex_descriptor Vertex; - typedef typename graph_traits::edge_descriptor Edge; - - target_migrated_t(VertexProcessorMap vertex_to_processor, const Graph& g) - : vertex_to_processor(vertex_to_processor), g(g) { } - - bool operator()(Edge e) const - { - typedef global_descriptor DVertex; - processor_id_type owner = get(edge_target_processor_id, g, e); - return get(vertex_to_processor, DVertex(owner, target(e, g))) != owner; - } - -private: - VertexProcessorMap vertex_to_processor; - const Graph& g; -}; - -template -inline target_migrated_t -target_migrated(VertexProcessorMap vertex_to_processor, const Graph& g) -{ return target_migrated_t(vertex_to_processor, g); } - -/* Predicate that returns true if the source of an in-edge has migrated. */ -template -struct source_migrated_t -{ - typedef typename graph_traits::vertex_descriptor Vertex; - typedef typename graph_traits::edge_descriptor Edge; - - source_migrated_t(VertexProcessorMap vertex_to_processor, const Graph& g) - : vertex_to_processor(vertex_to_processor), g(g) { } - - bool operator()(stored_in_edge e) const - { - return get(vertex_to_processor, DVertex(e.source_processor, source(e.e, g))) - != e.source_processor; - } - -private: - VertexProcessorMap vertex_to_processor; - const Graph& g; -}; - -template -inline source_migrated_t -source_migrated(VertexProcessorMap vertex_to_processor, const Graph& g) -{ return source_migrated_t(vertex_to_processor, g); } - -/* Predicate that returns true if the target has migrated. */ -template -struct source_or_target_migrated_t -{ - typedef typename graph_traits::edge_descriptor Edge; - - source_or_target_migrated_t(VertexProcessorMap vertex_to_processor, - const Graph& g) - : vertex_to_processor(vertex_to_processor), g(g) { } - - bool operator()(Edge e) const - { - return get(vertex_to_processor, source(e, g)) != source(e, g).owner - || get(vertex_to_processor, target(e, g)) != target(e, g).owner; - } - -private: - VertexProcessorMap vertex_to_processor; - const Graph& g; -}; - -template -inline source_or_target_migrated_t -source_or_target_migrated(VertexProcessorMap vertex_to_processor, -const Graph& g) -{ - typedef source_or_target_migrated_t result_type; - return result_type(vertex_to_processor, g); -} - -} } // end of namespace detail::parallel - -template -template -void -PBGL_DISTRIB_ADJLIST_TYPE -::request_in_neighbors(vertex_descriptor v, - VertexProcessorMap vertex_to_processor, - bidirectionalS) -{ - BGL_FORALL_INEDGES_T(v, e, *this, graph_type) - request(vertex_to_processor, source(e, *this)); -} - -template -template -void -PBGL_DISTRIB_ADJLIST_TYPE -::remove_migrated_in_edges(vertex_descriptor v, - VertexProcessorMap vertex_to_processor, - bidirectionalS) -{ - graph_detail::erase_if(get(vertex_in_edges, base())[v.local], - source_migrated(vertex_to_processor, base())); -} - -template -template -void -PBGL_DISTRIB_ADJLIST_TYPE -::redistribute(VertexProcessorMap vertex_to_processor) -{ - using boost::parallel::inplace_all_to_all; - - // When we have stable descriptors, we only move those descriptors - // that actually need to be moved. Otherwise, we essentially have to - // regenerate the entire graph. - const bool has_stable_descriptors = - is_same::value - || is_same::value - || is_same::value; - - typedef detail::parallel::redistributed_descriptor - redistributed_vertex; - typedef detail::parallel::redistributed_descriptor - redistributed_edge; - - vertex_iterator vi, vi_end; - edge_iterator ei, ei_end; - - process_group_type pg = process_group(); - - // Initial synchronization makes sure that we have all of our ducks - // in a row. We don't want any outstanding add/remove messages - // coming in mid-redistribution! - synchronize(process_group_); - - // We cannot cope with eviction of ghost cells - vertex_to_processor.set_max_ghost_cells(0); - - process_id_type p = num_processes(pg); - - // Send vertices and edges to the processor where they will - // actually reside. This requires O(|V| + |E|) communication - std::vector > redistributed_vertices(p); - std::vector > redistributed_edges(p); - - // Build the sets of relocated vertices for each process and then do - // an all-to-all transfer. - for (boost::tie(vi, vi_end) = vertices(*this); vi != vi_end; ++vi) { - if (!has_stable_descriptors - || get(vertex_to_processor, *vi) != vi->owner) { - redistributed_vertices[get(vertex_to_processor, *vi)] - .push_back(redistributed_vertex(*vi, get(vertex_all_t(), base(), - vi->local))); - } - - // When our descriptors are stable, we need to determine which - // adjacent descriptors are stable to determine which edges will - // be removed. - if (has_stable_descriptors) { - BGL_FORALL_OUTEDGES_T(*vi, e, *this, graph_type) - request(vertex_to_processor, target(e, *this)); - request_in_neighbors(*vi, vertex_to_processor, directed_selector()); - } - } - - inplace_all_to_all(pg, redistributed_vertices); - - // If we have stable descriptors, we need to know where our neighbor - // vertices are moving. - if (has_stable_descriptors) - synchronize(vertex_to_processor); - - // Build the sets of relocated edges for each process and then do - // an all-to-all transfer. - for (boost::tie(ei, ei_end) = edges(*this); ei != ei_end; ++ei) { - vertex_descriptor src = source(*ei, *this); - vertex_descriptor tgt = target(*ei, *this); - if (!has_stable_descriptors - || get(vertex_to_processor, src) != src.owner - || get(vertex_to_processor, tgt) != tgt.owner) - redistributed_edges[get(vertex_to_processor, source(*ei, *this))] - .push_back(redistributed_edge(*ei, split_edge_property(get(edge_all_t(), base(), - ei->local)))); - } - inplace_all_to_all(pg, redistributed_edges); - - // A mapping from old vertex descriptors to new vertex - // descriptors. This is an STL map partly because I'm too lazy to - // build a real property map (which is hard in the general case) but - // also because it won't try to look in the graph itself, because - // the keys are all vertex descriptors that have been invalidated. - std::map old_to_new_vertex_map; - - if (has_stable_descriptors) { - // Clear out all vertices and edges that will have moved. There - // are several stages to this. - - // First, eliminate all outgoing edges from the (local) vertices - // that have been moved or whose targets have been moved. - BGL_FORALL_VERTICES_T(v, *this, graph_type) { - if (get(vertex_to_processor, v) != v.owner) { - clear_out_edges(v.local, base()); - clear_in_edges_local(v, directed_selector()); - } else { - remove_out_edge_if(v.local, - target_migrated(vertex_to_processor, base()), - base()); - remove_migrated_in_edges(v, vertex_to_processor, directed_selector()); - } - } - - // Next, eliminate locally-stored edges that have migrated (for - // undirected graphs). - graph_detail::erase_if(local_edges_, - source_or_target_migrated(vertex_to_processor, *this)); - - // Eliminate vertices that have migrated - for (boost::tie(vi, vi_end) = vertices(*this); vi != vi_end; /* in loop */) { - if (get(vertex_to_processor, *vi) != vi->owner) - remove_vertex((*vi++).local, base()); - else { - // Add the identity relation for vertices that have not migrated - old_to_new_vertex_map[*vi] = *vi; - ++vi; - } - } - } else { - // Clear out the local graph: the entire graph is in transit - clear(); - } - - // Add the new vertices to the graph. When we do so, update the old - // -> new vertex mapping both locally and for the owner of the "old" - // vertex. - { - typedef std::pair mapping_pair; - std::vector > mappings(p); - - for (process_id_type src = 0; src < p; ++src) { - for (typename std::vector::iterator vi = - redistributed_vertices[src].begin(); - vi != redistributed_vertices[src].end(); ++vi) { - vertex_descriptor new_vertex = - add_vertex(vi->get_property(), *this); - old_to_new_vertex_map[vi->descriptor] = new_vertex; - mappings[vi->descriptor.owner].push_back(mapping_pair(vi->descriptor, - new_vertex)); - } - - redistributed_vertices[src].clear(); - } - - inplace_all_to_all(pg, mappings); - - // Add the mappings we were sent into the old->new map. - for (process_id_type src = 0; src < p; ++src) - old_to_new_vertex_map.insert(mappings[src].begin(), mappings[src].end()); - } - - // Get old->new vertex mappings for all of the vertices we need to - // know about. - - // TBD: An optimization here might involve sending the - // request-response pairs without an explicit request step (for - // bidirectional and undirected graphs). However, it may not matter - // all that much given the cost of redistribution. - { - std::vector > vertex_map_requests(p); - std::vector > vertex_map_responses(p); - - // We need to know about all of the vertices incident on edges - // that have been relocated to this processor. Tell each processor - // what each other processor needs to know. - for (process_id_type src = 0; src < p; ++src) - for (typename std::vector::iterator ei = - redistributed_edges[src].begin(); - ei != redistributed_edges[src].end(); ++ei) { - vertex_descriptor need_vertex = target(ei->descriptor, *this); - if (old_to_new_vertex_map.find(need_vertex) - == old_to_new_vertex_map.end()) - { - old_to_new_vertex_map[need_vertex] = need_vertex; - vertex_map_requests[need_vertex.owner].push_back(need_vertex); - } - } - inplace_all_to_all(pg, - vertex_map_requests, - vertex_map_responses); - - // Process the requests made for vertices we own. Then perform yet - // another all-to-all swap. This one matches the requests we've - // made to the responses we were given. - for (process_id_type src = 0; src < p; ++src) - for (typename std::vector::iterator vi = - vertex_map_responses[src].begin(); - vi != vertex_map_responses[src].end(); ++vi) - *vi = old_to_new_vertex_map[*vi]; - inplace_all_to_all(pg, vertex_map_responses); - - // Matching the requests to the responses, update the old->new - // vertex map for all of the vertices we will need to know. - for (process_id_type src = 0; src < p; ++src) { - typedef typename std::vector::size_type size_type; - for (size_type i = 0; i < vertex_map_requests[src].size(); ++i) { - old_to_new_vertex_map[vertex_map_requests[src][i]] = - vertex_map_responses[src][i]; - } - } - } - - // Add edges to the graph by mapping the source and target. - for (process_id_type src = 0; src < p; ++src) { - for (typename std::vector::iterator ei = - redistributed_edges[src].begin(); - ei != redistributed_edges[src].end(); ++ei) { - add_edge(old_to_new_vertex_map[source(ei->descriptor, *this)], - old_to_new_vertex_map[target(ei->descriptor, *this)], - ei->get_property(), - *this); - } - - redistributed_edges[src].clear(); - } - - // Be sure that edge-addition messages are received now, completing - // the graph. - synchronize(process_group_); - - this->distribution().clear(); - - detail::parallel::maybe_initialize_vertex_indices(vertices(base()), - get(vertex_index, base())); -} - -} // end namespace boost diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/boman_et_al_graph_coloring.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/boman_et_al_graph_coloring.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/boman_et_al_graph_coloring.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/boman_et_al_graph_coloring.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,372 +0,0 @@ -// Copyright (C) 2005-2008 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_DISTRIBUTED_BOMAN_ET_AL_GRAPH_COLORING_HPP -#define BOOST_GRAPH_DISTRIBUTED_BOMAN_ET_AL_GRAPH_COLORING_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef PBGL_ACCOUNTING -# include -#endif // PBGL_ACCOUNTING - -namespace boost { namespace graph { namespace distributed { - -/************************************************************************** - * This source file implements the distributed graph coloring algorithm * - * by Boman et al in: * - * * - * Erik G. Boman, Doruk Bozdag, Umit Catalyurek, Assefaw H. Gebremedhin,* - * and Fredrik Manne. A Scalable Parallel Graph Coloring Algorithm for * - * Distributed Memory Computers. [unpublished preprint?] * - * * - **************************************************************************/ - -#ifdef PBGL_ACCOUNTING -struct boman_et_al_graph_coloring_stats_t -{ - /* The size of the blocks to step through (i.e., the parameter s). */ - std::size_t block_size; - - /* Total wall-clock time used by the algorithm.*/ - accounting::time_type execution_time; - - /* The number of conflicts that occurred during execution. */ - std::size_t conflicts; - - /* The number of supersteps. */ - std::size_t supersteps; - - /* The number of colors used. */ - std::size_t num_colors; - - template - void print(OutputStream& out) - { - out << "Problem = \"Coloring\"\n" - << "Algorithm = \"Boman et al\"\n" - << "Function = boman_et_al_graph_coloring\n" - << "(P) Block size = " << block_size << "\n" - << "Wall clock time = " << accounting::print_time(execution_time) - << "\nConflicts = " << conflicts << "\n" - << "Supersteps = " << supersteps << "\n" - << "(R) Colors = " << num_colors << "\n"; - } -}; - -static boman_et_al_graph_coloring_stats_t boman_et_al_graph_coloring_stats; -#endif - -namespace detail { - template - struct graph_coloring_reduce - { - BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); - - template - T operator()(const Key&) const { return (std::numeric_limits::max)(); } - - template T operator()(const Key&, T, T y) const { return y; } - }; -} - -template -struct first_fit_color -{ - template - Color operator()(const std::vector& marked, T marked_true) - { - Color k = 0; - while (k < (Color)marked.size() && marked[k] == marked_true) - ++k; - return k; - } -}; - -template -typename property_traits::value_type -boman_et_al_graph_coloring - (const DistributedGraph& g, - ColorMap color, - typename graph_traits::vertices_size_type s, - ChooseColor choose_color, - VertexOrdering ordering, VertexIndexMap vertex_index) -{ - using namespace boost::graph::parallel; - using boost::parallel::all_reduce; - - typename property_map::const_type - owner = get(vertex_owner, g); - - typedef typename process_group_type::type - process_group_type; - typedef typename process_group_type::process_id_type process_id_type; - typedef typename graph_traits::vertex_descriptor Vertex; - typedef typename graph_traits::vertices_size_type - vertices_size_type; - typedef typename property_traits::value_type color_type; - typedef unsigned long long iterations_type; - typedef typename std::vector::iterator vertex_set_iterator; - typedef std::pair message_type; - -#ifdef PBGL_ACCOUNTING - boman_et_al_graph_coloring_stats.block_size = s; - boman_et_al_graph_coloring_stats.execution_time = accounting::get_time(); - boman_et_al_graph_coloring_stats.conflicts = 0; - boman_et_al_graph_coloring_stats.supersteps = 0; -#endif - - // Initialize color map - color_type no_color = (std::numeric_limits::max)(); - BGL_FORALL_VERTICES_T(v, g, DistributedGraph) - put(color, v, no_color); - color.set_reduce(detail::graph_coloring_reduce()); - - // Determine if we'll be using synchronous or asynchronous communication. - typedef typename process_group_type::communication_category - communication_category; - static const bool asynchronous = - is_convertible::value; - process_group_type pg = process_group(g); - - // U_i <- V_i - std::vector vertices_to_color(vertices(g).first, vertices(g).second); - - iterations_type iter_num = 1, outer_iter_num = 1; - std::vector marked; - std::vector marked_conflicting(num_vertices(g), 0); - std::vector sent_to_processors; - - std::size_t rounds = vertices_to_color.size() / s - + (vertices_to_color.size() % s == 0? 0 : 1); - rounds = all_reduce(pg, rounds, boost::parallel::maximum()); - -#ifdef PBGL_GRAPH_COLORING_DEBUG - std::cerr << "Number of rounds = " << rounds << std::endl; -#endif - - while (rounds > 0) { - if (!vertices_to_color.empty()) { - // Set of conflicting vertices - std::vector conflicting_vertices; - - vertex_set_iterator first = vertices_to_color.begin(); - while (first != vertices_to_color.end()) { - // For each subset of size s (or smaller for the last subset) - vertex_set_iterator start = first; - for (vertices_size_type counter = s; - first != vertices_to_color.end() && counter > 0; - ++first, --counter) { - // This vertex hasn't been sent to anyone yet - sent_to_processors.assign(num_processes(pg), false); - sent_to_processors[process_id(pg)] = true; - - // Mark all of the colors that we see - BGL_FORALL_OUTEDGES_T(*first, e, g, DistributedGraph) { - color_type k = get(color, target(e, g)); - if (k != no_color) { - if (k >= (color_type)marked.size()) marked.resize(k + 1, 0); - marked[k] = iter_num; - } - } - - // Find a color for this vertex - put(color, *first, choose_color(marked, iter_num)); - -#ifdef PBGL_GRAPH_COLORING_DEBUG - std::cerr << "Chose color " << get(color, *first) << " for vertex " - << *first << std::endl; -#endif - - // Send this vertex's color to the owner of the edge target. - BGL_FORALL_OUTEDGES_T(*first, e, g, DistributedGraph) { - if (!sent_to_processors[get(owner, target(e, g))]) { - send(pg, get(owner, target(e, g)), 17, - message_type(source(e, g), get(color, source(e, g)))); - sent_to_processors[get(owner, target(e, g))] = true; - } - } - - ++iter_num; - } - - // Synchronize for non-immediate process groups. - if (!asynchronous) { - --rounds; - synchronize(pg); - } - - // Receive boundary colors from other processors - while (optional > stp = probe(pg)) { - BOOST_ASSERT(stp->second == 17); - message_type msg; - receive(pg, stp->first, stp->second, msg); - cache(color, msg.first, msg.second); -#ifdef PBGL_GRAPH_COLORING_DEBUG - std::cerr << "Cached color " << msg.second << " for vertex " - << msg.first << std::endl; -#endif - } - - // Compute the set of conflicting vertices - // [start, first) contains all vertices in this subset - for (vertex_set_iterator vi = start; vi != first; ++vi) { - Vertex v = *vi; - BGL_FORALL_OUTEDGES_T(v, e, g, DistributedGraph) { - Vertex w = target(e, g); - if (get(owner, w) != process_id(pg) // boundary vertex - && marked_conflicting[get(vertex_index, v)] != outer_iter_num - && get(color, v) == get(color, w) - && ordering(v, w)) { - conflicting_vertices.push_back(v); - marked_conflicting[get(vertex_index, v)] = outer_iter_num; - put(color, v, no_color); -#ifdef PBGL_GRAPH_COLORING_DEBUG - std::cerr << "Vertex " << v << " has a conflict with vertex " - << w << std::endl; -#endif - break; - } - } - } - -#ifdef PBGL_ACCOUNTING - boman_et_al_graph_coloring_stats.conflicts += - conflicting_vertices.size(); -#endif - } - - if (asynchronous) synchronize(pg); - else { - while (rounds > 0) { - synchronize(pg); - --rounds; - } - } - conflicting_vertices.swap(vertices_to_color); - ++outer_iter_num; - } else { - if (asynchronous) synchronize(pg); - else { - while (rounds > 0) { - synchronize(pg); - --rounds; - } - } - } - - // Receive boundary colors from other processors - while (optional > stp = probe(pg)) { - BOOST_ASSERT(stp->second == 17); - message_type msg; - receive(pg, stp->first, stp->second, msg); - cache(color, msg.first, msg.second); - } - - rounds = vertices_to_color.size() / s - + (vertices_to_color.size() % s == 0? 0 : 1); - rounds = all_reduce(pg, rounds, boost::parallel::maximum()); - -#ifdef PBGL_ACCOUNTING - ++boman_et_al_graph_coloring_stats.supersteps; -#endif - } - - // Determine the number of colors used. - color_type num_colors = 0; - BGL_FORALL_VERTICES_T(v, g, DistributedGraph) { - color_type k = get(color, v); - BOOST_ASSERT(k != no_color); - if (k != no_color) { - if (k >= (color_type)marked.size()) marked.resize(k + 1, 0); // TBD: perf? - if (marked[k] != iter_num) { - marked[k] = iter_num; - ++num_colors; - } - } - } - - num_colors = - all_reduce(pg, num_colors, boost::parallel::maximum()); - - -#ifdef PBGL_ACCOUNTING - boman_et_al_graph_coloring_stats.execution_time = - accounting::get_time() - boman_et_al_graph_coloring_stats.execution_time; - - boman_et_al_graph_coloring_stats.conflicts = - all_reduce(pg, boman_et_al_graph_coloring_stats.conflicts, - std::plus()); - boman_et_al_graph_coloring_stats.num_colors = num_colors; -#endif - - return num_colors; -} - - -template -inline typename property_traits::value_type -boman_et_al_graph_coloring - (const DistributedGraph& g, ColorMap color, - typename graph_traits::vertices_size_type s, - ChooseColor choose_color, VertexOrdering ordering) -{ - return boman_et_al_graph_coloring(g, color, s, choose_color, ordering, - get(vertex_index, g)); -} - -template -inline typename property_traits::value_type -boman_et_al_graph_coloring - (const DistributedGraph& g, - ColorMap color, - typename graph_traits::vertices_size_type s, - ChooseColor choose_color) -{ - typedef typename graph_traits::vertex_descriptor - vertex_descriptor; - return boman_et_al_graph_coloring(g, color, s, choose_color, - std::less()); -} - -template -inline typename property_traits::value_type -boman_et_al_graph_coloring - (const DistributedGraph& g, - ColorMap color, - typename graph_traits::vertices_size_type s = 100) -{ - typedef typename property_traits::value_type Color; - return boman_et_al_graph_coloring(g, color, s, first_fit_color()); -} - -} } } // end namespace boost::graph::distributed - -namespace boost { namespace graph { -using distributed::boman_et_al_graph_coloring; -} } // end namespace boost::graph - -#endif // BOOST_GRAPH_DISTRIBUTED_BOMAN_ET_AL_GRAPH_COLORING_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/breadth_first_search.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/breadth_first_search.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/breadth_first_search.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/breadth_first_search.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,163 +0,0 @@ -// Copyright 2004 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_PARALLEL_BFS_HPP -#define BOOST_GRAPH_PARALLEL_BFS_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace boost { - namespace detail { - /** @brief A unary predicate that decides when to push into a - * breadth-first search queue. - * - * This predicate stores a color map that is used to determine - * when to push. If it is provided with a key for which the color - * is white, it darkens the color to gray and returns true (so - * that the value will be pushed appropriately); if the color is - * not white, it returns false so that the vertex will be - * ignored. - */ - template - struct darken_and_push - { - typedef typename property_traits::key_type argument_type; - typedef bool result_type; - - explicit darken_and_push(const ColorMap& color) : color(color) { } - - bool operator()(const argument_type& value) const - { - typedef color_traits::value_type> - Color; - if (get(color, value) == Color::white()) { - put(color, value, Color::gray()); - return true; - } else { - return false; - } - } - - ColorMap color; - }; - - template - struct has_not_been_seen - { - typedef bool result_type; - - has_not_been_seen() { } - - has_not_been_seen(std::size_t n, IndexMap index_map) - : seen(n), index_map(index_map) {} - - template - result_type operator()(Key key) - { - bool result = seen[get(index_map, key)]; - seen[get(index_map, key)] = true; - return !result; - } - - void swap(has_not_been_seen& other) - { - using std::swap; - swap(seen, other.seen); - swap(index_map, other.index_map); - } - - private: - dynamic_bitset<> seen; - IndexMap index_map; - }; - - template - inline void - swap(has_not_been_seen& x, has_not_been_seen& y) - { - x.swap(y); - } - - template - inline void - parallel_bfs_helper - (DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - ColorMap color, - BFSVisitor vis, - BufferRef Q, - VertexIndexMap) - { - set_property_map_role(vertex_color, color); - color.set_consistency_model(0); - breadth_first_search(g, s, Q.ref, vis, color); - } - - template - void parallel_bfs_helper - (DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - ColorMap color, - BFSVisitor vis, - boost::param_not_found, - VertexIndexMap vertex_index) - { - using boost::graph::parallel::process_group; - - typedef graph_traits Traits; - typedef typename Traits::vertex_descriptor Vertex; - typedef typename boost::graph::parallel::process_group_type::type - process_group_type; - - set_property_map_role(vertex_color, color); - color.set_consistency_model(0); - - // Buffer default - typedef typename property_map - ::const_type vertex_owner_map; - typedef boost::graph::distributed::distributed_queue< - process_group_type, vertex_owner_map, queue, - detail::darken_and_push > queue_t; - queue_t Q(process_group(g), - get(vertex_owner, g), - detail::darken_and_push(color)); - breadth_first_search(g, s, Q, vis, color); - } - - template - void bfs_helper - (DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - ColorMap color, - BFSVisitor vis, - const bgl_named_params& params, - boost::mpl::true_) - { - parallel_bfs_helper - (g, s, color, vis, get_param(params, buffer_param_t()), - choose_const_pmap(get_param(params, vertex_index), g, vertex_index)); - } - } -} - -#endif // BOOST_GRAPH_PARALLEL_BFS_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/concepts.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/concepts.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/concepts.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/concepts.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,213 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -// -// Distributed graph concepts and helpers -// - -#ifndef BOOST_GRAPH_DISTRIBUTED_CONCEPTS_HPP -#define BOOST_GRAPH_DISTRIBUTED_CONCEPTS_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include - -#if BOOST_VERSION >= 103500 -# include -#endif - -namespace boost { - -#if BOOST_VERSION >= 103500 - namespace concepts { -#endif - -#if BOOST_VERSION < 103500 - -template -struct DistributedVertexListGraphConcept -{ - typedef typename graph_traits::vertex_iterator vertex_iterator; - typedef typename graph_traits::vertices_size_type vertices_size_type; - typedef typename graph_traits::traversal_category - traversal_category; - void constraints() { - BOOST_CONCEPT_ASSERT(( GraphConcept )); - BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept )); - BOOST_CONCEPT_ASSERT(( ConvertibleConcept )); - -#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK - // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if - // you want to use vector_as_graph, it is! I'm sure the graph - // library leaves these out all over the place. Probably a - // redesign involving specializing a template with a static - // member function is in order :( - using boost::vertices; -#endif - p = vertices(g); - v = *p.first; - const_constraints(g); - } - void const_constraints(const G& cg) { -#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK - // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if - // you want to use vector_as_graph, it is! I'm sure the graph - // library leaves these out all over the place. Probably a - // redesign involving specializing a template with a static - // member function is in order :( - using boost::vertices; -#endif - - p = vertices(cg); - v = *p.first; - V = num_vertices(cg); - } - std::pair p; - typename graph_traits::vertex_descriptor v; - G g; - vertices_size_type V; -}; - -template -struct DistributedEdgeListGraphConcept -{ - typedef typename graph_traits::edge_descriptor edge_descriptor; - typedef typename graph_traits::edge_iterator edge_iterator; - typedef typename graph_traits::edges_size_type edges_size_type; - typedef typename graph_traits::traversal_category - traversal_category; - void constraints() { - BOOST_CONCEPT_ASSERT(( GraphConcept )); - BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept )); - BOOST_CONCEPT_ASSERT(( DefaultConstructibleConcept )); - BOOST_CONCEPT_ASSERT(( EqualityComparableConcept )); - BOOST_CONCEPT_ASSERT(( AssignableConcept )); - BOOST_CONCEPT_ASSERT(( ConvertibleConcept )); - - p = edges(g); - e = *p.first; - u = source(e, g); - v = target(e, g); - const_constraints(g); - } - void const_constraints(const G& cg) { - p = edges(cg); - E = num_edges(cg); - e = *p.first; - u = source(e, cg); - v = target(e, cg); - } - std::pair p; - typename graph_traits::vertex_descriptor u, v; - typename graph_traits::edge_descriptor e; - edges_size_type E; - G g; -}; -#else - BOOST_concept(DistributedVertexListGraph,(G)) - : Graph - { - typedef typename graph_traits::vertex_iterator vertex_iterator; - typedef typename graph_traits::vertices_size_type vertices_size_type; - typedef typename graph_traits::traversal_category - traversal_category; - ~DistributedVertexListGraph() { - BOOST_CONCEPT_ASSERT((MultiPassInputIterator)); - BOOST_CONCEPT_ASSERT((Convertible)); - -#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK - // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if - // you want to use vector_as_graph, it is! I'm sure the graph - // library leaves these out all over the place. Probably a - // redesign involving specializing a template with a static - // member function is in order :( - using boost::vertices; -#endif - p = vertices(g); - v = *p.first; - const_constraints(g); - } - void const_constraints(const G& cg) { -#ifdef BOOST_VECTOR_AS_GRAPH_GRAPH_ADL_HACK - // dwa 2003/7/11 -- This clearly shouldn't be necessary, but if - // you want to use vector_as_graph, it is! I'm sure the graph - // library leaves these out all over the place. Probably a - // redesign involving specializing a template with a static - // member function is in order :( - using boost::vertices; -#endif - - p = vertices(cg); - v = *p.first; - V = num_vertices(cg); - } - std::pair p; - typename graph_traits::vertex_descriptor v; - G g; - vertices_size_type V; - }; - - BOOST_concept(DistributedEdgeListGraph,(G)) - : Graph - { - typedef typename graph_traits::edge_descriptor edge_descriptor; - typedef typename graph_traits::edge_iterator edge_iterator; - typedef typename graph_traits::edges_size_type edges_size_type; - typedef typename graph_traits::traversal_category - traversal_category; - ~DistributedEdgeListGraph() { - BOOST_CONCEPT_ASSERT((MultiPassInputIterator)); - BOOST_CONCEPT_ASSERT((DefaultConstructible)); - BOOST_CONCEPT_ASSERT((EqualityComparable)); - BOOST_CONCEPT_ASSERT((Assignable)); - BOOST_CONCEPT_ASSERT((Convertible)); - - p = edges(g); - e = *p.first; - u = source(e, g); - v = target(e, g); - const_constraints(g); - } - void const_constraints(const G& cg) { - p = edges(cg); - E = num_edges(cg); - e = *p.first; - u = source(e, cg); - v = target(e, cg); - } - std::pair p; - typename graph_traits::vertex_descriptor u, v; - typename graph_traits::edge_descriptor e; - edges_size_type E; - G g; - }; -#endif - -#if BOOST_VERSION >= 103500 - } // end namespace concepts - - using concepts::DistributedVertexListGraphConcept; - using concepts::DistributedEdgeListGraphConcept; -#endif -} // end namespace boost - -#if BOOST_VERSION >= 103500 -# include -#endif - -#endif // BOOST_GRAPH_DISTRIBUTED_CONCEPTS_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/connected_components_parallel_search.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/connected_components_parallel_search.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/connected_components_parallel_search.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/connected_components_parallel_search.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,408 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Brian Barrett -// Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_PARALLEL_CC_PS_HPP -#define BOOST_GRAPH_PARALLEL_CC_PS_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -// Connected components algorithm based on a parallel search. -// -// Every N nodes starts a parallel search from the first vertex in -// their local vertex list during the first superstep (the other nodes -// remain idle during the first superstep to reduce the number of -// conflicts in numbering the components). At each superstep, all new -// component mappings from remote nodes are handled. If there is no -// work from remote updates, a new vertex is removed from the local -// list and added to the work queue. -// -// Components are allocated from the component_value_allocator object, -// which ensures that a given component number is unique in the -// system, currently by using the rank and number of processes to -// stride allocations. -// -// When two components are discovered to actually be the same -// component, a mapping is created in the collisions object. The -// lower component number is prefered in the resolution, so component -// numbering resolution is consistent. After the search has exhausted -// all vertices in the graph, the mapping is shared with all -// processes, and they independently resolve the comonent mapping (so -// O((N * NP) + (V * NP)) work, in O(N + V) time, where N is the -// number of mappings and V is the number of local vertices). This -// phase can likely be significantly sped up if a clever algorithm for -// the reduction can be found. -namespace boost { namespace graph { namespace distributed { - namespace cc_ps_detail { - // Local object for allocating component numbers. There are two - // places this happens in the code, and I was getting sick of them - // getting out of sync. Components are not tightly packed in - // numbering, but are numbered to ensure each rank has its own - // independent sets of numberings. - template - class component_value_allocator { - public: - component_value_allocator(int num, int size) : - last(0), num(num), size(size) - { - } - - component_value_type allocate(void) - { - component_value_type ret = num + (last * size); - last++; - return ret; - } - - private: - component_value_type last; - int num; - int size; - }; - - - // Map of the "collisions" between component names in the global - // component mapping. TO make cleanup easier, component numbers - // are added, pointing to themselves, when a new component is - // found. In order to make the results deterministic, the lower - // component number is always taken. The resolver will drill - // through the map until it finds a component entry that points to - // itself as the next value, allowing some cleanup to happen at - // update() time. Attempts are also made to update the mapping - // when new entries are created. - // - // Note that there's an assumption that the entire mapping is - // shared during the end of the algorithm, but before component - // name resolution. - template - class collision_map { - public: - collision_map() : num_unique(0) - { - } - - // add new component mapping first time component is used. Own - // function only so that we can sanity check there isn't already - // a mapping for that component number (which would be bad) - void add(const component_value_type &a) - { - BOOST_ASSERT(collisions.count(a) == 0); - collisions[a] = a; - } - - // add a mapping between component values saying they're the - // same component - void add(const component_value_type &a, const component_value_type &b) - { - component_value_type high, low, tmp; - if (a > b) { - high = a; - low = b; - } else { - high = b; - low = a; - } - - if (collisions.count(high) != 0 && collisions[high] != low) { - tmp = collisions[high]; - if (tmp > low) { - collisions[tmp] = low; - collisions[high] = low; - } else { - collisions[low] = tmp; - collisions[high] = tmp; - } - } else { - collisions[high] = low; - } - - } - - // get the "real" component number for the given component. - // Used to resolve mapping at end of run. - component_value_type update(component_value_type a) - { - BOOST_ASSERT(num_unique > 0); - BOOST_ASSERT(collisions.count(a) != 0); - return collisions[a]; - } - - // collapse the collisions tree, so that update is a one lookup - // operation. Count unique components at the same time. - void uniqify(void) - { - typename std::map::iterator i, end; - - end = collisions.end(); - for (i = collisions.begin() ; i != end ; ++i) { - if (i->first == i->second) { - num_unique++; - } else { - i->second = collisions[i->second]; - } - } - } - - // get the number of component entries that have an associated - // component number of themselves, which are the real components - // used in the final mapping. This is the number of unique - // components in the graph. - int unique(void) - { - BOOST_ASSERT(num_unique > 0); - return num_unique; - } - - // "serialize" into a vector for communication. - std::vector serialize(void) - { - std::vector ret; - typename std::map::iterator i, end; - - end = collisions.end(); - for (i = collisions.begin() ; i != end ; ++i) { - ret.push_back(i->first); - ret.push_back(i->second); - } - - return ret; - } - - private: - std::map collisions; - int num_unique; - }; - - - // resolver to handle remote updates. The resolver will add - // entries into the collisions map if required, and if it is the - // first time the vertex has been touched, it will add the vertex - // to the remote queue. Note that local updates are handled - // differently, in the main loop (below). - - // BWB - FIX ME - don't need graph anymore - can pull from key value of Component Map. - template - struct update_reducer { - BOOST_STATIC_CONSTANT(bool, non_default_resolver = false); - - typedef typename property_traits::value_type component_value_type; - typedef typename property_traits::key_type vertex_descriptor; - - update_reducer(work_queue *q, - cc_ps_detail::collision_map *collisions, - processor_id_type pg_id) : - q(q), collisions(collisions), pg_id(pg_id) - { - } - - // ghost cell initialization routine. This should never be - // called in this imlementation. - template - component_value_type operator()(const K&) const - { - return component_value_type(0); - } - - // resolver for remote updates. I'm not entirely sure why, but - // I decided to not change the value of the vertex if it's - // already non-infinite. It doesn't matter in the end, as we'll - // touch every vertex in the cleanup phase anyway. If the - // component is currently infinite, set to the new component - // number and add the vertex to the work queue. If it's not - // infinite, we've touched it already so don't add it to the - // work queue. Do add a collision entry so that we know the two - // components are the same. - component_value_type operator()(const vertex_descriptor &v, - const component_value_type& current, - const component_value_type& update) const - { - const component_value_type max = (std::numeric_limits::max)(); - component_value_type ret = current; - - if (max == current) { - q->push(v); - ret = update; - } else if (current != update) { - collisions->add(current, update); - } - - return ret; - } - - // So for whatever reason, the property map can in theory call - // the resolver with a local descriptor in addition to the - // standard global descriptor. As far as I can tell, this code - // path is never taken in this implementation, but I need to - // have this code here to make it compile. We just make a - // global descriptor and call the "real" operator(). - template - component_value_type operator()(const K& v, - const component_value_type& current, - const component_value_type& update) const - { - return (*this)(vertex_descriptor(pg_id, v), current, update); - } - - private: - work_queue *q; - collision_map *collisions; - boost::processor_id_type pg_id; - }; - - } // namespace cc_ps_detail - - - template - typename property_traits::value_type - connected_components_ps(const Graph& g, ComponentMap c) - { - using boost::graph::parallel::process_group; - - typedef typename property_traits::value_type component_value_type; - typedef typename graph_traits::vertex_iterator vertex_iterator; - typedef typename graph_traits::vertex_descriptor vertex_descriptor; - typedef typename boost::graph::parallel::process_group_type - ::type process_group_type; - typedef typename process_group_type::process_id_type process_id_type; - typedef std::queue work_queue; - - static const component_value_type max_component = - (std::numeric_limits::max)(); - typename property_map::const_type - owner = get(vertex_owner, g); - - // standard who am i? stuff - process_group_type pg = process_group(g); - process_id_type id = process_id(pg); - - // Initialize every vertex to have infinite component number - BGL_FORALL_VERTICES_T(v, g, Graph) put(c, v, max_component); - - vertex_iterator current, end; - boost::tie(current, end) = vertices(g); - - cc_ps_detail::component_value_allocator cva(process_id(pg), num_processes(pg)); - cc_ps_detail::collision_map collisions; - work_queue q; // this is intentionally a local data structure - c.set_reduce(cc_ps_detail::update_reducer(&q, &collisions, id)); - - // add starting work - while (true) { - bool useful_found = false; - component_value_type val = cva.allocate(); - put(c, *current, val); - collisions.add(val); - q.push(*current); - if (0 != out_degree(*current, g)) useful_found = true; - ++current; - if (useful_found) break; - } - - // Run the loop until everyone in the system is done - bool global_done = false; - while (!global_done) { - - // drain queue of work for this superstep - while (!q.empty()) { - vertex_descriptor v = q.front(); - q.pop(); - // iterate through outedges of the vertex currently being - // examined, setting their component to our component. There - // is no way to end up in the queue without having a component - // number already. - - BGL_FORALL_ADJ_T(v, peer, g, Graph) { - component_value_type my_component = get(c, v); - - // update other vertex with our component information. - // Resolver will handle remote collisions as well as whether - // to put the vertex on the work queue or not. We have to - // handle local collisions and work queue management - if (id == get(owner, peer)) { - if (max_component == get(c, peer)) { - put(c, peer, my_component); - q.push(peer); - } else if (my_component != get(c, peer)) { - collisions.add(my_component, get(c, peer)); - } - } else { - put(c, peer, my_component); - } - } - } - - // synchronize / start a new superstep. - synchronize(pg); - global_done = all_reduce(pg, (q.empty() && (current == end)), boost::parallel::minimum()); - - // If the queue is currently empty, add something to do to start - // the current superstep (supersteps start at the sync, not at - // the top of the while loop as one might expect). Down at the - // bottom of the while loop so that not everyone starts the - // algorithm with something to do, to try to reduce component - // name conflicts - if (q.empty()) { - bool useful_found = false; - for ( ; current != end && !useful_found ; ++current) { - if (max_component == get(c, *current)) { - component_value_type val = cva.allocate(); - put(c, *current, val); - collisions.add(val); - q.push(*current); - if (0 != out_degree(*current, g)) useful_found = true; - } - } - } - } - - // share component mappings - std::vector global; - std::vector mine = collisions.serialize(); - all_gather(pg, mine.begin(), mine.end(), global); - for (size_t i = 0 ; i < global.size() ; i += 2) { - collisions.add(global[i], global[i + 1]); - } - collisions.uniqify(); - - // update the component mappings - BGL_FORALL_VERTICES_T(v, g, Graph) { - put(c, v, collisions.update(get(c, v))); - } - - return collisions.unique(); - } - -} // end namespace distributed - -} // end namespace graph - -} // end namespace boost - -#endif // BOOST_GRAPH_PARALLEL_CC_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/depth_first_search.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/depth_first_search.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/depth_first_search.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/depth_first_search.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,308 +0,0 @@ -// Copyright (C) 2004-2008 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_DISTRIBUTED_DFS_HPP -#define BOOST_GRAPH_DISTRIBUTED_DFS_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace boost { - namespace graph { namespace distributed { namespace detail { - template - class parallel_dfs - { - typedef typename graph_traits::vertex_iterator - vertex_iterator; - typedef typename graph_traits::vertex_descriptor - vertex_descriptor; - typedef typename graph_traits::out_edge_iterator - out_edge_iterator; - - typedef typename boost::graph::parallel::process_group_type - ::type process_group_type; - typedef typename process_group_type::process_id_type process_id_type; - - /** - * The first vertex in the pair is the local node (i) and the - * second vertex in the pair is the (possibly remote) node (j). - */ - typedef boost::parallel::detail::untracked_pair vertex_pair; - - typedef typename property_traits::value_type color_type; - typedef color_traits Color; - - // Message types - enum { discover_msg = 10, return_msg = 50, visited_msg = 100 , done_msg = 150}; - - - public: - parallel_dfs(const DistributedGraph& g, ColorMap color, - ParentMap parent, ExploreMap explore, - VertexIndexMap index_map, DFSVisitor vis) - : g(g), color(color), parent(parent), explore(explore), - index_map(index_map), vis(vis), pg(process_group(g)), - owner(get(vertex_owner, g)), next_out_edge(num_vertices(g)) - { } - - void run(vertex_descriptor s) - { - vertex_iterator vi, vi_end; - for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) { - put(color, *vi, Color::white()); - put(parent, *vi, *vi); - put(explore, *vi, *vi); - next_out_edge[get(index_map, *vi)] = out_edges(*vi, g).first; - vis.initialize_vertex(*vi, g); - } - - vis.start_vertex(s, g); - - if (get(owner, s) == process_id(pg)) { - send_oob(pg, get(owner, s), discover_msg, vertex_pair(s, s)); - } - - bool done = false; - while (!done) { - std::pair msg = *pg.poll(true); - - switch (msg.second) { - case discover_msg: - { - vertex_pair p; - receive_oob(pg, msg.first, msg.second, p); - - if (p.first != p.second) { - // delete j from nomessage(j) - if (get(color, p.second) != Color::black()) - local_put(color, p.second, Color::gray()); - - if (recover(p)) break; - } - - if (get(color, p.first) == Color::white()) { - put(color, p.first, Color::gray()); - put(parent, p.first, p.second); - - vis.discover_vertex(p.first, g); - - if (shift_center_of_activity(p.first)) break; - - out_edge_iterator ei, ei_end; - for (boost::tie(ei,ei_end) = out_edges(p.first, g); ei != ei_end; ++ei) - { - // Notify everyone who may not know that the source - // vertex has been visited. They can then mark the - // corresponding color map entry gray. - if (get(parent, p.first) != target(*ei, g) - && get(explore, p.first) != target(*ei, g)) { - vertex_pair visit(target(*ei, g), p.first); - - send_oob(pg, get(owner, target(*ei, g)), visited_msg, visit); - } - } - } - } - break; - - case visited_msg: - { - vertex_pair p; - receive_oob(pg, msg.first, msg.second, p); - - // delete j from nomessage(j) - if (get(color, p.second) != Color::black()) - local_put(color, p.second, Color::gray()); - - recover(p); - } - break; - - case return_msg: - { - vertex_pair p; - receive_oob(pg, msg.first, msg.second, p); - - // delete j from nomessage(i) - local_put(color, p.second, Color::black()); - - shift_center_of_activity(p.first); - } - break; - - case done_msg: - { - receive_oob(pg, msg.first, msg.second, done); - - // Propagate done message downward in tree - done = true; - process_id_type id = process_id(pg); - process_id_type left = 2*id + 1; - process_id_type right = left + 1; - if (left < num_processes(pg)) - send_oob(pg, left, done_msg, done); - if (right < num_processes(pg)) - send_oob(pg, right, done_msg, done); - } - break; - - default: - BOOST_ASSERT(false); - } - } - } - - private: - bool recover(const vertex_pair& p) - { - if (get(explore, p.first) == p.second) { - return shift_center_of_activity(p.first); - } - else - return false; - } - - bool shift_center_of_activity(vertex_descriptor i) - { - for (out_edge_iterator ei = next_out_edge[get(index_map, i)], - ei_end = out_edges(i, g).second; - ei != ei_end; ++ei) { - vis.examine_edge(*ei, g); - - vertex_descriptor k = target(*ei, g); - color_type target_color = get(color, k); - if (target_color == Color::black()) vis.forward_or_cross_edge(*ei, g); - else if (target_color == Color::gray()) vis.back_edge(*ei, g); - else { - put(explore, i, k); - vis.tree_edge(*ei, g); - vertex_pair p(k, i); - send_oob(pg, get(owner, k), discover_msg, p); - next_out_edge[get(index_map, i)] = ++ei; - return false; - } - } - - next_out_edge[get(index_map, i)] = out_edges(i, g).second; - put(explore, i, i); - put(color, i, Color::black()); - vis.finish_vertex(i, g); - - if (get(parent, i) == i) { - send_oob(pg, 0, done_msg, true); - return true; - } - else { - vertex_pair ret(get(parent, i), i); - send_oob(pg, get(owner, ret.first), return_msg, ret); - } - return false; - } - - const DistributedGraph& g; - ColorMap color; - ParentMap parent; - ExploreMap explore; - VertexIndexMap index_map; - DFSVisitor vis; - process_group_type pg; - typename property_map::const_type owner; - std::vector next_out_edge; - }; - } // end namespace detail - - template - void - tsin_depth_first_visit - (const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - DFSVisitor vis, ColorMap color, ParentMap parent, ExploreMap explore, - VertexIndexMap index_map) - { - typedef typename graph_traits::directed_category - directed_category; - BOOST_STATIC_ASSERT( - (is_convertible::value)); - - set_property_map_role(vertex_color, color); - graph::distributed::detail::parallel_dfs - do_dfs(g, color, parent, explore, index_map, vis); - do_dfs.run(s); - - using boost::graph::parallel::process_group; - synchronize(process_group(g)); - } - - template - void - tsin_depth_first_visit - (const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - DFSVisitor vis, - VertexIndexMap index_map) - { - typedef typename graph_traits::vertex_descriptor - vertex_descriptor; - - std::vector colors(num_vertices(g)); - std::vector parent(num_vertices(g)); - std::vector explore(num_vertices(g)); - tsin_depth_first_visit - (g, s, - vis, - make_iterator_property_map(colors.begin(), index_map), - make_iterator_property_map(parent.begin(), index_map), - make_iterator_property_map(explore.begin(), index_map), - index_map); - } - - template - void - tsin_depth_first_visit - (const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - DFSVisitor vis) - { - tsin_depth_first_visit(g, s, vis, get(vertex_index, g)); - } -} // end namespace distributed - -using distributed::tsin_depth_first_visit; - -} // end namespace graph - -template -void -depth_first_visit - (const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - DFSVisitor vis) -{ - graph::tsin_depth_first_visit(g, s, vis, get(vertex_index, g)); -} - -} // end namespace boost - -#endif // BOOST_GRAPH_DISTRIBUTED_DFS_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/dijkstra_shortest_paths.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/dijkstra_shortest_paths.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/dijkstra_shortest_paths.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/dijkstra_shortest_paths.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_PARALLEL_DIJKSTRA_DETAIL_HPP -#define BOOST_GRAPH_PARALLEL_DIJKSTRA_DETAIL_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include - -namespace boost { namespace graph { namespace distributed { namespace detail { - -/********************************************************************** - * Dijkstra queue message data * - **********************************************************************/ -template -class dijkstra_msg_value -{ - typedef typename property_traits::value_type distance_type; - typedef typename property_traits::value_type - predecessor_type; - -public: - typedef std::pair type; - - static type create(distance_type dist, predecessor_type pred) - { return std::make_pair(dist, pred); } -}; - -template -class dijkstra_msg_value -{ - typedef typename property_traits::key_type vertex_descriptor; -public: - typedef typename property_traits::value_type type; - - static type create(type dist, vertex_descriptor) { return dist; } -}; -/**********************************************************************/ - -} } } } // end namespace boost::graph::distributed::detail - -#endif // BOOST_GRAPH_PARALLEL_DIJKSTRA_DETAIL_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/filtered_queue.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/filtered_queue.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/filtered_queue.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/filtered_queue.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_FILTERED_QUEUE_HPP -#define BOOST_FILTERED_QUEUE_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include - -namespace boost { - -/** Queue adaptor that filters elements pushed into the queue - * according to some predicate. - */ -template -class filtered_queue -{ - public: - typedef Buffer buffer_type; - typedef Predicate predicate_type; - typedef typename Buffer::value_type value_type; - typedef typename Buffer::size_type size_type; - - /** - * Constructs a new filtered queue with an initial buffer and a - * predicate. - * - * @param buffer the initial buffer - * @param pred the predicate - */ - explicit - filtered_queue(const buffer_type& buffer = buffer_type(), - const predicate_type& pred = predicate_type()) - : buffer(buffer), pred(pred) {} - - /** Push a value into the queue. - * - * If the predicate returns @c true for @p x, pushes @p x into the - * buffer. - */ - void push(const value_type& x) { if (pred(x)) buffer.push(x); } - - /** Pop the front element off the buffer. - * - * @pre @c !empty() - */ - void pop() { buffer.pop(); } - - /** Retrieve the front (top) element in the buffer. - * - * @pre @c !empty() - */ - value_type& top() { return buffer.top(); } - - /** - * \overload - */ - const value_type& top() const { return buffer.top(); } - - /** Determine the number of elements in the buffer. */ - size_type size() const { return buffer.size(); } - - /** Determine if the buffer is empty. */ - bool empty() const { return buffer.empty(); } - - /** Get a reference to the underlying buffer. */ - buffer_type& base() { return buffer; } - const buffer_type& base() const { return buffer; } - - /** Swap the contents of this with @p other. */ - void swap(filtered_queue& other) - { - using std::swap; - swap(buffer, other.buffer); - swap(pred, other.pred); - } - - private: - buffer_type buffer; - predicate_type pred; -}; - -/** Create a filtered queue. */ -template -inline filtered_queue -make_filtered_queue(const Buffer& buffer, const Predicate& pred) -{ return filtered_queue(buffer, pred); } - -/** Swap a filtered_queue. */ -template -inline void -swap(filtered_queue& x, - filtered_queue& y) -{ - x.swap(y); -} - -} // end namespace boost - -#endif // BOOST_FILTERED_QUEUE_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/queue.ipp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/queue.ipp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/queue.ipp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/queue.ipp 1970-01-01 00:00:00.000000000 +0000 @@ -1,177 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#include -#include -#include -#include -#include -#include -#include - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -namespace boost { namespace graph { namespace distributed { - -template -BOOST_DISTRIBUTED_QUEUE_TYPE:: -distributed_queue(const ProcessGroup& process_group, const OwnerMap& owner, - const Buffer& buffer, bool polling) - : process_group(process_group, attach_distributed_object()), - owner(owner), - buffer(buffer), - polling(polling) -{ - if (!polling) - outgoing_buffers.reset( - new outgoing_buffers_t(num_processes(process_group))); - - setup_triggers(); -} - -template -BOOST_DISTRIBUTED_QUEUE_TYPE:: -distributed_queue(const ProcessGroup& process_group, const OwnerMap& owner, - const Buffer& buffer, const UnaryPredicate& pred, - bool polling) - : process_group(process_group, attach_distributed_object()), - owner(owner), - buffer(buffer), - pred(pred), - polling(polling) -{ - if (!polling) - outgoing_buffers.reset( - new outgoing_buffers_t(num_processes(process_group))); - - setup_triggers(); -} - -template -BOOST_DISTRIBUTED_QUEUE_TYPE:: -distributed_queue(const ProcessGroup& process_group, const OwnerMap& owner, - const UnaryPredicate& pred, bool polling) - : process_group(process_group, attach_distributed_object()), - owner(owner), - pred(pred), - polling(polling) -{ - if (!polling) - outgoing_buffers.reset( - new outgoing_buffers_t(num_processes(process_group))); - - setup_triggers(); -} - -template -void -BOOST_DISTRIBUTED_QUEUE_TYPE::push(const value_type& x) -{ - typename ProcessGroup::process_id_type dest = get(owner, x); - if (outgoing_buffers) - outgoing_buffers->at(dest).push_back(x); - else if (dest == process_id(process_group)) - buffer.push(x); - else - send(process_group, get(owner, x), msg_push, x); -} - -template -bool -BOOST_DISTRIBUTED_QUEUE_TYPE::empty() const -{ - /* Processes will stay here until the buffer is nonempty or - synchronization with the other processes indicates that all local - buffers are empty (and no messages are in transit). - */ - while (buffer.empty() && !do_synchronize()) ; - - return buffer.empty(); -} - -template -typename BOOST_DISTRIBUTED_QUEUE_TYPE::size_type -BOOST_DISTRIBUTED_QUEUE_TYPE::size() const -{ - empty(); - return buffer.size(); -} - -template -void BOOST_DISTRIBUTED_QUEUE_TYPE::setup_triggers() -{ - using boost::graph::parallel::simple_trigger; - - simple_trigger(process_group, msg_push, this, - &distributed_queue::handle_push); - simple_trigger(process_group, msg_multipush, this, - &distributed_queue::handle_multipush); -} - -template -void -BOOST_DISTRIBUTED_QUEUE_TYPE:: -handle_push(int /*source*/, int /*tag*/, const value_type& value, - trigger_receive_context) -{ - if (pred(value)) buffer.push(value); -} - -template -void -BOOST_DISTRIBUTED_QUEUE_TYPE:: -handle_multipush(int /*source*/, int /*tag*/, - const std::vector& values, - trigger_receive_context) -{ - for (std::size_t i = 0; i < values.size(); ++i) - if (pred(values[i])) buffer.push(values[i]); -} - -template -bool -BOOST_DISTRIBUTED_QUEUE_TYPE::do_synchronize() const -{ -#ifdef PBGL_ACCOUNTING - ++num_synchronizations; -#endif - - using boost::parallel::all_reduce; - using std::swap; - - typedef typename ProcessGroup::process_id_type process_id_type; - - if (outgoing_buffers) { - // Transfer all of the push requests - process_id_type id = process_id(process_group); - process_id_type np = num_processes(process_group); - for (process_id_type dest = 0; dest < np; ++dest) { - outgoing_buffer_t& outgoing = outgoing_buffers->at(dest); - std::size_t size = outgoing.size(); - if (size != 0) { - if (dest != id) { - send(process_group, dest, msg_multipush, outgoing); - } else { - for (std::size_t i = 0; i < size; ++i) - buffer.push(outgoing[i]); - } - outgoing.clear(); - } - } - } - synchronize(process_group); - - unsigned local_size = buffer.size(); - unsigned global_size = - all_reduce(process_group, local_size, std::plus()); - return global_size == 0; -} - -} } } // end namespace boost::graph::distributed diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/remote_update_set.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/remote_update_set.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/remote_update_set.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/remote_update_set.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,259 +0,0 @@ -// Copyright (C) 2005-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_DETAIL_REMOTE_UPDATE_SET_HPP -#define BOOST_GRAPH_DETAIL_REMOTE_UPDATE_SET_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include - -namespace boost { namespace graph { namespace detail { - -template -void do_synchronize(ProcessGroup& pg) -{ - using boost::parallel::synchronize; - synchronize(pg); -} - -struct remote_set_queued {}; -struct remote_set_immediate {}; - -template -class remote_set_semantics -{ - BOOST_STATIC_CONSTANT - (bool, - queued = (is_convertible< - typename ProcessGroup::communication_category, - boost::parallel::bsp_process_group_tag>::value)); - - public: - typedef typename mpl::if_c::type type; -}; - - -template::type> -class remote_update_set; - -/********************************************************************** - * Remote updating set that queues messages until synchronization * - **********************************************************************/ -template -class remote_update_set -{ - typedef typename property_traits::key_type Key; - typedef std::vector > Updates; - typedef typename Updates::size_type updates_size_type; - typedef typename Updates::value_type updates_pair_type; - -public: - -private: - typedef typename ProcessGroup::process_id_type process_id_type; - - enum message_kind { - /** Message containing the number of updates that will be sent in - * a msg_updates message that will immediately follow. This - * message will contain a single value of type - * updates_size_type. - */ - msg_num_updates, - - /** Contains (key, value) pairs with all of the updates from a - * particular source. The number of updates is variable, but will - * be provided in a msg_num_updates message that immediately - * preceeds this message. - * - */ - msg_updates - }; - - struct handle_messages - { - explicit - handle_messages(remote_update_set* self, const ProcessGroup& pg) - : self(self), update_sizes(num_processes(pg), 0) { } - - void operator()(process_id_type source, int tag) - { - switch(tag) { - case msg_num_updates: - { - // Receive the # of updates - updates_size_type num_updates; - receive(self->process_group, source, tag, num_updates); - - update_sizes[source] = num_updates; - } - break; - - case msg_updates: - { - updates_size_type num_updates = update_sizes[source]; - BOOST_ASSERT(num_updates); - - // Receive the actual updates - std::vector updates(num_updates); - receive(self->process_group, source, msg_updates, &updates[0], - num_updates); - - // Send updates to derived "receive_update" member - Derived* derived = static_cast(self); - for (updates_size_type u = 0; u < num_updates; ++u) - derived->receive_update(source, updates[u].first, updates[u].second); - - update_sizes[source] = 0; - } - break; - }; - } - - private: - remote_update_set* self; - std::vector update_sizes; - }; - friend struct handle_messages; - - protected: - remote_update_set(const ProcessGroup& pg, const OwnerMap& owner) - : process_group(pg, handle_messages(this, pg)), - updates(num_processes(pg)), owner(owner) { - } - - - void update(const Key& key, const Value& value) - { - if (get(owner, key) == process_id(process_group)) { - Derived* derived = static_cast(this); - derived->receive_update(get(owner, key), key, value); - } - else { - updates[get(owner, key)].push_back(std::make_pair(key, value)); - } - } - - void collect() { } - - void synchronize() - { - // Emit all updates and then remove them - process_id_type num_processes = updates.size(); - for (process_id_type p = 0; p < num_processes; ++p) { - if (!updates[p].empty()) { - send(process_group, p, msg_num_updates, updates[p].size()); - send(process_group, p, msg_updates, - &updates[p].front(), updates[p].size()); - updates[p].clear(); - } - } - - do_synchronize(process_group); - } - - ProcessGroup process_group; - - private: - std::vector updates; - OwnerMap owner; -}; - -/********************************************************************** - * Remote updating set that sends messages immediately * - **********************************************************************/ -template -class remote_update_set -{ - typedef typename property_traits::key_type Key; - typedef std::pair update_pair_type; - typedef typename std::vector::size_type updates_size_type; - -public: - typedef typename ProcessGroup::process_id_type process_id_type; - -private: - enum message_kind { - /** Contains a (key, value) pair that will be updated. */ - msg_update - }; - - struct handle_messages - { - explicit handle_messages(remote_update_set* self, const ProcessGroup& pg) - : self(self) - { update_sizes.resize(num_processes(pg), 0); } - - void operator()(process_id_type source, int tag) - { - // Receive the # of updates - BOOST_ASSERT(tag == msg_update); - update_pair_type update; - receive(self->process_group, source, tag, update); - - // Send update to derived "receive_update" member - Derived* derived = static_cast(self); - derived->receive_update(source, update.first, update.second); - } - - private: - std::vector update_sizes; - remote_update_set* self; - }; - friend struct handle_messages; - - protected: - remote_update_set(const ProcessGroup& pg, const OwnerMap& owner) - : process_group(pg, handle_messages(this, pg)), owner(owner) { } - - void update(const Key& key, const Value& value) - { - if (get(owner, key) == process_id(process_group)) { - Derived* derived = static_cast(this); - derived->receive_update(get(owner, key), key, value); - } - else - send(process_group, get(owner, key), msg_update, - update_pair_type(key, value)); - } - - void collect() - { - typedef std::pair probe_type; - handle_messages handler(this, process_group); - while (optional stp = probe(process_group)) - if (stp->second == msg_update) handler(stp->first, stp->second); - } - - void synchronize() - { - do_synchronize(process_group); - } - - ProcessGroup process_group; - OwnerMap owner; -}; - -} } } // end namespace boost::graph::detail - -#endif // BOOST_GRAPH_DETAIL_REMOTE_UPDATE_SET_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/tag_allocator.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/tag_allocator.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/tag_allocator.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/detail/tag_allocator.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -// -*- C++ -*- - -// Copyright (C) 2007 Douglas Gregor - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GRAPH_DISTRIBUTED_TAG_ALLOCATOR_HPP -#define BOOST_GRAPH_DISTRIBUTED_TAG_ALLOCATOR_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include - -namespace boost { namespace graph { namespace distributed { namespace detail { - -/** - * \brief The tag allocator allows clients to request unique tags that - * can be used for one-time communications. - * - * The tag allocator hands out tag values from a predefined maximum - * (given in the constructor) moving downward. Tags are provided one - * at a time via a @c token. When the @c token goes out of scope, the - * tag is returned and may be reallocated. These tags should be used, - * for example, for one-time communication of values. - */ -class tag_allocator { -public: - class token; - friend class token; - - /** - * Construct a new tag allocator that provides unique tags starting - * with the value @p top_tag and moving lower, as necessary. - */ - explicit tag_allocator(int top_tag) : bottom(top_tag) { } - - /** - * Retrieve a new tag. The token itself holds onto the tag, which - * will be released when the token is destroyed. - */ - token get_tag(); - -private: - int bottom; - std::vector freed; -}; - -/** - * A token used to represent an allocated tag. - */ -class tag_allocator::token { -public: - /// Transfer ownership of the tag from @p other. - token(const token& other); - - /// De-allocate the tag, if this token still owns it. - ~token(); - - /// Retrieve the tag allocated for this task. - operator int() const { return tag_; } - -private: - /// Create a token with a specific tag from the given tag_allocator - token(tag_allocator* allocator, int tag) - : allocator(allocator), tag_(tag) { } - - /// Undefined: tokens are not copy-assignable - token& operator=(const token&); - - /// The allocator from which this tag was allocated. - tag_allocator* allocator; - - /// The stored tag flag. If -1, this token does not own the tag. - mutable int tag_; - - friend class tag_allocator; -}; - -} } } } // end namespace boost::graph::distributed::detail - -#endif // BOOST_GRAPH_DISTRIBUTED_TAG_ALLOCATOR_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/dijkstra_shortest_paths.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/dijkstra_shortest_paths.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/dijkstra_shortest_paths.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/dijkstra_shortest_paths.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,204 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_PARALLEL_DIJKSTRA_HPP -#define BOOST_GRAPH_PARALLEL_DIJKSTRA_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include - -namespace boost { - - namespace graph { namespace detail { - - - template - struct parallel_dijkstra_impl2 - { - template - static void - run(const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - PredecessorMap predecessor, DistanceMap distance, - typename property_traits::value_type lookahead, - WeightMap weight, IndexMap index_map, ColorMap color_map, - Compare compare, Combine combine, DistInf inf, DistZero zero, - DijkstraVisitor vis) - { - eager_dijkstra_shortest_paths(g, s, predecessor, distance, lookahead, - weight, index_map, color_map, compare, - combine, inf, zero, vis); - } - }; - - template<> - struct parallel_dijkstra_impl2< ::boost::param_not_found > - { - template - static void - run(const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - PredecessorMap predecessor, DistanceMap distance, - ::boost::param_not_found, - WeightMap weight, IndexMap index_map, ColorMap color_map, - Compare compare, Combine combine, DistInf inf, DistZero zero, - DijkstraVisitor vis) - { - crauser_et_al_shortest_paths(g, s, predecessor, distance, weight, - index_map, color_map, compare, combine, - inf, zero, vis); - } - }; - - template - struct parallel_dijkstra_impl - { - template - static void - run(const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - PredecessorMap predecessor, DistanceMap distance, - Lookahead lookahead, - WeightMap weight, IndexMap index_map, ColorMap color_map, - Compare compare, Combine combine, DistInf inf, DistZero zero, - DijkstraVisitor vis) - { - graph::detail::parallel_dijkstra_impl2 - ::run(g, s, predecessor, distance, lookahead, weight, index_map, - color_map, compare, combine, inf, zero, vis); - } - }; - - template<> - struct parallel_dijkstra_impl< ::boost::param_not_found > - { - private: - template - static void - run_impl(const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - PredecessorMap predecessor, DistanceMap distance, - Lookahead lookahead, WeightMap weight, IndexMap index_map, - ColorMap color_map, Compare compare, Combine combine, - DistInf inf, DistZero zero, DijkstraVisitor vis) - { - BGL_FORALL_VERTICES_T(u, g, DistributedGraph) - BGL_FORALL_OUTEDGES_T(u, e, g, DistributedGraph) - local_put(color_map, target(e, g), white_color); - - graph::detail::parallel_dijkstra_impl2 - ::run(g, s, predecessor, distance, lookahead, weight, index_map, - color_map, compare, combine, inf, zero, vis); - } - - public: - template - static void - run(const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - PredecessorMap predecessor, DistanceMap distance, - Lookahead lookahead, WeightMap weight, IndexMap index_map, - ::boost::param_not_found, - Compare compare, Combine combine, DistInf inf, DistZero zero, - DijkstraVisitor vis) - { - typedef typename graph_traits::vertices_size_type - vertices_size_type; - - vertices_size_type n = num_vertices(g); - std::vector colors(n, white_color); - - run_impl(g, s, predecessor, distance, lookahead, weight, index_map, - make_iterator_property_map(colors.begin(), index_map), - compare, combine, inf, zero, vis); - } - }; - } } // end namespace graph::detail - - - /** Dijkstra's single-source shortest paths algorithm for distributed - * graphs. - * - * Also implements the heuristics of: - * - * Andreas Crauser, Kurt Mehlhorn, Ulrich Meyer, and Peter - * Sanders. A Parallelization of Dijkstra's Shortest Path - * Algorithm. In Lubos Brim, Jozef Gruska, and Jiri Zlatuska, - * editors, Mathematical Foundations of Computer Science (MFCS), - * volume 1450 of Lecture Notes in Computer Science, pages - * 722--731, 1998. Springer. - */ - template - inline - void - dijkstra_shortest_paths - (const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - PredecessorMap predecessor, DistanceMap distance, WeightMap weight, - IndexMap index_map, - Compare compare, Combine combine, DistInf inf, DistZero zero, - DijkstraVisitor vis, - const bgl_named_params& params - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(DistributedGraph,distributed_graph_tag)) - { - typedef typename graph_traits::vertices_size_type - vertices_size_type; - - // Build a distributed property map for vertex colors, if we need it - bool use_default_color_map - = is_default_param(get_param(params, vertex_color)); - vertices_size_type n = use_default_color_map? num_vertices(g) : 1; - std::vector color(n, white_color); - typedef iterator_property_map::iterator, - IndexMap> DefColorMap; - DefColorMap color_map(color.begin(), index_map); - - typedef typename get_param_type< vertex_color_t, bgl_named_params >::type color_map_type; - - graph::detail::parallel_dijkstra_impl - ::run(g, s, predecessor, distance, - get_param(params, lookahead_t()), - weight, index_map, - get_param(params, vertex_color), - compare, combine, inf, zero, vis); - } -} // end namespace boost - -#endif // BOOST_GRAPH_PARALLEL_DIJKSTRA_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/distributed_graph_utility.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/distributed_graph_utility.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/distributed_graph_utility.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/distributed_graph_utility.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,154 +0,0 @@ -// Copyright (C) 2005-2006 The Trustees of Indiana University. -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Peter Gottschling -// Douglas Gregor -// Andrew Lumsdaine - -#include -#include - -#ifndef BOOST_GRAPH_DISTRIBUTED_GRAPH_UTILITY_INCLUDE -#define BOOST_GRAPH_DISTRIBUTED_GRAPH_UTILITY_INCLUDE - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -namespace boost { namespace graph { - - template - void property_on_inedges(Property p, const Graph& g) - { - BGL_FORALL_VERTICES_T(u, g, Graph) - BGL_FORALL_INEDGES_T(u, e, g, Graph) - request(p, e); - synchronize(p); - } - - // For reverse graphs - template - void property_on_outedges(Property p, const Graph& g) - { - BGL_FORALL_VERTICES_T(u, g, Graph) - BGL_FORALL_OUTEDGES_T(u, e, g, Graph) - request(p, e); - synchronize(p); - } - - template - void property_on_successors(Property p, const Graph& g) - { - BGL_FORALL_VERTICES_T(u, g, Graph) - BGL_FORALL_OUTEDGES_T(u, e, g, Graph) - request(p, target(e, g)); - synchronize(p); - } - - template - void property_on_predecessors(Property p, const Graph& g) - { - BGL_FORALL_VERTICES_T(u, g, Graph) - BGL_FORALL_INEDGES_T(u, e, g, Graph) - request(p, source(e, g)); - synchronize(p); - } - - // Like successors and predecessors but saves one synchronize (and a call) - template - void property_on_adjacents(Property p, const Graph& g) - { - BGL_FORALL_VERTICES_T(u, g, Graph) { - BGL_FORALL_OUTEDGES_T(u, e, g, Graph) - request(p, target(e, g)); - BGL_FORALL_INEDGES_T(u, e, g, Graph) - request(p, source(e, g)); - } - synchronize(p); - } - - template - void copy_vertex_property(PropertyIn p_in, PropertyOut p_out, Graph& g) - { - BGL_FORALL_VERTICES_T(u, g, Graph) - put(p_out, u, get(p_in, g)); - } - - template - void copy_edge_property(PropertyIn p_in, PropertyOut p_out, Graph& g) - { - BGL_FORALL_EDGES_T(e, g, Graph) - put(p_out, e, get(p_in, g)); - } - - - namespace distributed { - - // Define global_index global(graph); - // Then global(v) returns global index of v - template - struct global_index - { - typedef typename property_map::const_type - VertexIndexMap; - typedef typename property_map::const_type - VertexGlobalMap; - - explicit global_index(Graph const& g) - : global_index_map(process_group(g), num_vertices(g), get(vertex_index, g), - get(vertex_global, g)) {} - - int operator() (typename graph_traits::vertex_descriptor v) - { return get(global_index_map, v); } - - protected: - boost::parallel::global_index_map - global_index_map; - }; - - template - struct additive_reducer { - BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); - - template - T operator()(const K&) const { return T(0); } - - template - T operator()(const K&, const T& local, const T& remote) const { return local + remote; } - }; - - template - struct choose_min_reducer { - BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); - - template - T operator()(const K&) const { return (std::numeric_limits::max)(); } - - template - T operator()(const K&, const T& x, const T& y) const - { return x < y ? x : y; } - }; - - // To use a property map syntactically like a function - template - struct property_map_reader - { - explicit property_map_reader(PropertyMap pm) : pm(pm) {} - - template - typename PropertyMap::value_type - operator() (const T& v) - { - return get(pm, v); - } - private: - PropertyMap pm; - }; - - } // namespace distributed - -}} // namespace boost::graph - -#endif // BOOST_GRAPH_DISTRIBUTED_GRAPH_UTILITY_INCLUDE diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/eager_dijkstra_shortest_paths.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/eager_dijkstra_shortest_paths.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/eager_dijkstra_shortest_paths.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/eager_dijkstra_shortest_paths.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,441 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -/************************************************************************** - * This source file implements a variation on distributed Dijkstra's * - * algorithm that can expose additional parallelism by permitting * - * vertices within a certain distance from the minimum to be processed, * - * even though they may not be at their final distance. This can * - * introduce looping, but the algorithm will still terminate so long as * - * there are no negative loops. * - **************************************************************************/ -#ifndef BOOST_GRAPH_EAGER_DIJKSTRA_SHORTEST_PATHS_HPP -#define BOOST_GRAPH_EAGER_DIJKSTRA_SHORTEST_PATHS_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef PBGL_ACCOUNTING -# include -# include -#endif // PBGL_ACCOUNTING - -#ifdef MUTABLE_QUEUE -# include -#endif - -namespace boost { namespace graph { namespace distributed { - -#ifdef PBGL_ACCOUNTING -struct eager_dijkstra_shortest_paths_stats_t -{ - /* The value of the lookahead parameter. */ - double lookahead; - - /* Total wall-clock time used by the algorithm.*/ - accounting::time_type execution_time; - - /* The number of vertices deleted in each superstep. */ - std::vector deleted_vertices; - - template - void print(OutputStream& out) - { - double avg_deletions = std::accumulate(deleted_vertices.begin(), - deleted_vertices.end(), - 0.0); - avg_deletions /= deleted_vertices.size(); - - out << "Problem = \"Single-Source Shortest Paths\"\n" - << "Algorithm = \"Eager Dijkstra\"\n" - << "Function = eager_dijkstra_shortest_paths\n" - << "(P) Lookahead = " << lookahead << "\n" - << "Wall clock time = " << accounting::print_time(execution_time) - << "\nSupersteps = " << deleted_vertices.size() << "\n" - << "Avg. deletions per superstep = " << avg_deletions << "\n"; - } -}; - -static eager_dijkstra_shortest_paths_stats_t eager_dijkstra_shortest_paths_stats; -#endif - -namespace detail { - -// Borrowed from BGL's dijkstra_shortest_paths -template - struct parallel_dijkstra_bfs_visitor : bfs_visitor<> -{ - typedef typename property_traits::value_type distance_type; - - parallel_dijkstra_bfs_visitor(UniformCostVisitor vis, Queue& Q, - WeightMap w, PredecessorMap p, DistanceMap d, - BinaryFunction combine, BinaryPredicate compare, - distance_type zero) - : m_vis(vis), m_Q(Q), m_weight(w), m_predecessor(p), m_distance(d), - m_combine(combine), m_compare(compare), m_zero(zero) { } - - template - void initialize_vertex(Vertex u, Graph& g) - { m_vis.initialize_vertex(u, g); } - template - void discover_vertex(Vertex u, Graph& g) { m_vis.discover_vertex(u, g); } - template - void examine_vertex(Vertex u, Graph& g) { m_vis.examine_vertex(u, g); } - - /* Since the eager formulation of Parallel Dijkstra's algorithm can - loop, we may relax on *any* edge, not just those associated with - white and gray targets. */ - template - void examine_edge(Edge e, Graph& g) { - if (m_compare(get(m_weight, e), m_zero)) - boost::throw_exception(negative_edge()); - - m_vis.examine_edge(e, g); - - boost::parallel::caching_property_map c_pred(m_predecessor); - boost::parallel::caching_property_map c_dist(m_distance); - - distance_type old_distance = get(c_dist, target(e, g)); - - bool m_decreased = relax(e, g, m_weight, c_pred, c_dist, - m_combine, m_compare); - - /* On x86 Linux with optimization, we sometimes get into a - horrible case where m_decreased is true but the distance hasn't - actually changed. This occurs when the comparison inside - relax() occurs with the 80-bit precision of the x87 floating - point unit, but the difference is lost when the resulting - values are written back to lower-precision memory (e.g., a - double). With the eager Dijkstra's implementation, this results - in looping. */ - if (m_decreased && old_distance != get(c_dist, target(e, g))) { - m_Q.update(target(e, g)); - m_vis.edge_relaxed(e, g); - } else - m_vis.edge_not_relaxed(e, g); - } - template - void finish_vertex(Vertex u, Graph& g) { m_vis.finish_vertex(u, g); } - - UniformCostVisitor m_vis; - Queue& m_Q; - WeightMap m_weight; - PredecessorMap m_predecessor; - DistanceMap m_distance; - BinaryFunction m_combine; - BinaryPredicate m_compare; - distance_type m_zero; -}; - - /********************************************************************** - * Dijkstra queue that implements arbitrary "lookahead" * - **********************************************************************/ - template - class lookahead_dijkstra_queue - : public graph::detail::remote_update_set< - lookahead_dijkstra_queue< - Graph, Combine, Compare, VertexIndexMap, DistanceMap, - PredecessorMap>, - typename boost::graph::parallel::process_group_type::type, - typename dijkstra_msg_value::type, - typename property_map::const_type> - { - typedef typename graph_traits::vertex_descriptor - vertex_descriptor; - typedef lookahead_dijkstra_queue self_type; - typedef typename boost::graph::parallel::process_group_type::type - process_group_type; - typedef dijkstra_msg_value msg_value_creator; - typedef typename msg_value_creator::type msg_value_type; - typedef typename property_map::const_type - OwnerPropertyMap; - - typedef graph::detail::remote_update_set - inherited; - - // Priority queue for tentative distances - typedef indirect_cmp queue_compare_type; - - typedef typename property_traits::value_type distance_type; - -#ifdef MUTABLE_QUEUE - typedef mutable_queue, - queue_compare_type, VertexIndexMap> queue_type; - -#else - typedef relaxed_heap queue_type; -#endif // MUTABLE_QUEUE - - typedef typename process_group_type::process_id_type process_id_type; - - public: - typedef vertex_descriptor value_type; - - lookahead_dijkstra_queue(const Graph& g, - const Combine& combine, - const Compare& compare, - const VertexIndexMap& id, - const DistanceMap& distance_map, - const PredecessorMap& predecessor_map, - distance_type lookahead) - : inherited(boost::graph::parallel::process_group(g), get(vertex_owner, g)), - queue(num_vertices(g), queue_compare_type(distance_map, compare), id), - distance_map(distance_map), - predecessor_map(predecessor_map), - min_distance(0), - lookahead(lookahead) -#ifdef PBGL_ACCOUNTING - , local_deletions(0) -#endif - { } - - void push(const value_type& x) - { - msg_value_type msg_value = - msg_value_creator::create(get(distance_map, x), - predecessor_value(get(predecessor_map, x))); - inherited::update(x, msg_value); - } - - void update(const value_type& x) { push(x); } - - void pop() - { - queue.pop(); -#ifdef PBGL_ACCOUNTING - ++local_deletions; -#endif - } - - value_type& top() { return queue.top(); } - const value_type& top() const { return queue.top(); } - - bool empty() - { - inherited::collect(); - - // If there are no suitable messages, wait until we get something - while (!has_suitable_vertex()) { - if (do_synchronize()) return true; - } - - // Return true only if nobody has any messages; false if we - // have suitable messages - return false; - } - - private: - vertex_descriptor predecessor_value(vertex_descriptor v) const - { return v; } - - vertex_descriptor - predecessor_value(property_traits::reference) const - { return graph_traits::null_vertex(); } - - bool has_suitable_vertex() const - { - return (!queue.empty() - && get(distance_map, queue.top()) <= min_distance + lookahead); - } - - bool do_synchronize() - { - using boost::parallel::all_reduce; - using boost::parallel::minimum; - - inherited::synchronize(); - - // TBD: could use combine here, but then we need to stop using - // minimum() as the function object. - distance_type local_distance = - queue.empty()? (std::numeric_limits::max)() - : get(distance_map, queue.top()); - - all_reduce(this->process_group, &local_distance, &local_distance + 1, - &min_distance, minimum()); - -#ifdef PBGL_ACCOUNTING - std::size_t deletions = 0; - all_reduce(this->process_group, &local_deletions, &local_deletions + 1, - &deletions, std::plus()); - if (process_id(this->process_group) == 0) - eager_dijkstra_shortest_paths_stats.deleted_vertices - .push_back(deletions); - local_deletions = 0; - BOOST_ASSERT(deletions > 0); -#endif - - return min_distance == (std::numeric_limits::max)(); - } - - public: - void - receive_update(process_id_type source, vertex_descriptor vertex, - distance_type distance) - { - // Update the queue if the received distance is better than - // the distance we know locally - if (distance <= get(distance_map, vertex)) { - - // Update the local distance map - put(distance_map, vertex, distance); - - bool is_in_queue = queue.contains(vertex); - - if (!is_in_queue) - queue.push(vertex); - else - queue.update(vertex); - } - } - - void - receive_update(process_id_type source, vertex_descriptor vertex, - std::pair p) - { - if (p.first <= get(distance_map, vertex)) { - put(predecessor_map, vertex, p.second); - receive_update(source, vertex, p.first); - } - } - - private: - queue_type queue; - DistanceMap distance_map; - PredecessorMap predecessor_map; - distance_type min_distance; - distance_type lookahead; -#ifdef PBGL_ACCOUNTING - std::size_t local_deletions; -#endif - }; - /**********************************************************************/ -} // end namespace detail - -template -void -eager_dijkstra_shortest_paths - (const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - PredecessorMap predecessor, DistanceMap distance, - typename property_traits::value_type lookahead, - WeightMap weight, IndexMap index_map, ColorMap color_map, - Compare compare, Combine combine, DistInf inf, DistZero zero, - DijkstraVisitor vis) -{ -#ifdef PBGL_ACCOUNTING - eager_dijkstra_shortest_paths_stats.deleted_vertices.clear(); - eager_dijkstra_shortest_paths_stats.lookahead = lookahead; - eager_dijkstra_shortest_paths_stats.execution_time = accounting::get_time(); -#endif - - // Initialize local portion of property maps - typename graph_traits::vertex_iterator ui, ui_end; - for (boost::tie(ui, ui_end) = vertices(g); ui != ui_end; ++ui) { - put(distance, *ui, inf); - put(predecessor, *ui, *ui); - } - put(distance, s, zero); - - // Dijkstra Queue - typedef detail::lookahead_dijkstra_queue - Queue; - - Queue Q(g, combine, compare, index_map, distance, - predecessor, lookahead); - - // Parallel Dijkstra visitor - detail::parallel_dijkstra_bfs_visitor - bfs_vis(vis, Q, weight, predecessor, distance, combine, compare, - zero); - - set_property_map_role(vertex_color, color_map); - set_property_map_role(vertex_distance, distance); - - breadth_first_search(g, s, Q, bfs_vis, color_map); - -#ifdef PBGL_ACCOUNTING - eager_dijkstra_shortest_paths_stats.execution_time = - accounting::get_time() - - eager_dijkstra_shortest_paths_stats.execution_time; -#endif -} - -template -void -eager_dijkstra_shortest_paths - (const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - PredecessorMap predecessor, DistanceMap distance, - typename property_traits::value_type lookahead, - WeightMap weight) -{ - typedef typename property_traits::value_type distance_type; - - std::vector colors(num_vertices(g), white_color); - - eager_dijkstra_shortest_paths(g, s, predecessor, distance, lookahead, weight, - get(vertex_index, g), - make_iterator_property_map(&colors[0], - get(vertex_index, - g)), - std::less(), - closed_plus(), - distance_type(), - (std::numeric_limits::max)(), - dijkstra_visitor<>()); -} - -template -void -eager_dijkstra_shortest_paths - (const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - PredecessorMap predecessor, DistanceMap distance, - typename property_traits::value_type lookahead) -{ - eager_dijkstra_shortest_paths(g, s, predecessor, distance, lookahead, - get(edge_weight, g)); -} -} // end namespace distributed - -#ifdef PBGL_ACCOUNTING -using distributed::eager_dijkstra_shortest_paths_stats; -#endif - -using distributed::eager_dijkstra_shortest_paths; - -} } // end namespace boost::graph - -#endif // BOOST_GRAPH_EAGER_DIJKSTRA_SHORTEST_PATHS_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/filtered_graph.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/filtered_graph.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/filtered_graph.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/filtered_graph.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -// Copyright (C) 2004-2008 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Nick Edmonds -// Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_DISTRIBUTED_FILTERED_GRAPH_HPP -#define BOOST_DISTRIBUTED_FILTERED_GRAPH_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include - -namespace boost { - namespace graph { - namespace parallel { - /// Retrieve the process group from a filtered graph - template - struct process_group_type > - : process_group_type { }; - - template - struct process_group_type > - : process_group_type { }; - } - - } - - /// Retrieve the process group from a filtered graph - template - inline typename graph::parallel::process_group_type::type - process_group(filtered_graph const& g) { - return process_group(g.m_g); - } - - /// Forward vertex() to vertex() of the base graph - template - typename graph_traits::vertex_descriptor - vertex(typename graph_traits::vertices_size_type i, - filtered_graph const& g) - { return vertex(i, g.m_g); } - -} - -#endif // BOOST_DISTRIBUTED_FILTERED_GRAPH_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/fruchterman_reingold.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/fruchterman_reingold.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/fruchterman_reingold.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/fruchterman_reingold.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,384 +0,0 @@ -// Copyright (C) 2005-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_DISTRIBUTED_FRUCHTERMAN_REINGOLD_HPP -#define BOOST_GRAPH_DISTRIBUTED_FRUCHTERMAN_REINGOLD_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include - -namespace boost { namespace graph { namespace distributed { - -class simple_tiling -{ - public: - simple_tiling(int columns, int rows, bool flip = true) - : columns(columns), rows(rows), flip(flip) - { - } - - // Convert from a position (x, y) in the tiled display into a - // processor ID number - int operator()(int x, int y) const - { - return flip? (rows - y - 1) * columns + x : y * columns + x; - } - - // Convert from a process ID to a position (x, y) in the tiled - // display - std::pair operator()(int id) - { - int my_col = id % columns; - int my_row = flip? rows - (id / columns) - 1 : id / columns; - return std::make_pair(my_col, my_row); - } - - int columns, rows; - - private: - bool flip; -}; - -// Force pairs function object that does nothing -struct no_force_pairs -{ - template - void operator()(const Graph&, const ApplyForce&) - { - } -}; - -// Computes force pairs in the distributed case. -template -class distributed_force_pairs_proxy -{ - public: - distributed_force_pairs_proxy(const PositionMap& position, - const DisplacementMap& displacement, - const LocalForces& local_forces, - const NonLocalForces& nonlocal_forces = NonLocalForces()) - : position(position), displacement(displacement), - local_forces(local_forces), nonlocal_forces(nonlocal_forces) - { - } - - template - void operator()(const Graph& g, ApplyForce apply_force) - { - // Flush remote displacements - displacement.flush(); - - // Receive updated positions for all of our neighbors - synchronize(position); - - // Reset remote displacements - displacement.reset(); - - // Compute local repulsive forces - local_forces(g, apply_force); - - // Compute neighbor repulsive forces - nonlocal_forces(g, apply_force); - } - - protected: - PositionMap position; - DisplacementMap displacement; - LocalForces local_forces; - NonLocalForces nonlocal_forces; -}; - -template -inline -distributed_force_pairs_proxy -make_distributed_force_pairs(const PositionMap& position, - const DisplacementMap& displacement, - const LocalForces& local_forces) -{ - typedef - distributed_force_pairs_proxy - result_type; - return result_type(position, displacement, local_forces); -} - -template -inline -distributed_force_pairs_proxy -make_distributed_force_pairs(const PositionMap& position, - const DisplacementMap& displacement, - const LocalForces& local_forces, - const NonLocalForces& nonlocal_forces) -{ - typedef - distributed_force_pairs_proxy - result_type; - return result_type(position, displacement, local_forces, nonlocal_forces); -} - -// Compute nonlocal force pairs based on the shared borders with -// adjacent tiles. -template -class neighboring_tiles_force_pairs -{ - public: - typedef typename property_traits::value_type Point; - typedef typename point_traits::component_type Dim; - - enum bucket_position { left, top, right, bottom, end_position }; - - neighboring_tiles_force_pairs(PositionMap position, Point origin, - Point extent, simple_tiling tiling) - : position(position), origin(origin), extent(extent), tiling(tiling) - { - } - - template - void operator()(const Graph& g, ApplyForce apply_force) - { - // TBD: Do this some smarter way - if (tiling.columns == 1 && tiling.rows == 1) - return; - - typedef typename graph_traits::vertex_descriptor vertex_descriptor; -#ifndef BOOST_NO_STDC_NAMESPACE - using std::sqrt; -#endif // BOOST_NO_STDC_NAMESPACE - - // TBD: num_vertices(g) should be the global number of vertices? - Dim two_k = Dim(2) * sqrt(extent[0] * extent[1] / num_vertices(g)); - - std::vector my_vertices[4]; - std::vector neighbor_vertices[4]; - - // Compute cutoff positions - Dim cutoffs[4]; - cutoffs[left] = origin[0] + two_k; - cutoffs[top] = origin[1] + two_k; - cutoffs[right] = origin[0] + extent[0] - two_k; - cutoffs[bottom] = origin[1] + extent[1] - two_k; - - // Compute neighbors - typename PositionMap::process_group_type pg = position.process_group(); - std::pair my_tile = tiling(process_id(pg)); - int neighbors[4] = { -1, -1, -1, -1 } ; - if (my_tile.first > 0) - neighbors[left] = tiling(my_tile.first - 1, my_tile.second); - if (my_tile.second > 0) - neighbors[top] = tiling(my_tile.first, my_tile.second - 1); - if (my_tile.first < tiling.columns - 1) - neighbors[right] = tiling(my_tile.first + 1, my_tile.second); - if (my_tile.second < tiling.rows - 1) - neighbors[bottom] = tiling(my_tile.first, my_tile.second + 1); - - // Sort vertices along the edges into buckets - BGL_FORALL_VERTICES_T(v, g, Graph) { - if (position[v][0] <= cutoffs[left]) my_vertices[left].push_back(v); - if (position[v][1] <= cutoffs[top]) my_vertices[top].push_back(v); - if (position[v][0] >= cutoffs[right]) my_vertices[right].push_back(v); - if (position[v][1] >= cutoffs[bottom]) my_vertices[bottom].push_back(v); - } - - // Send vertices to neighbors, and gather our neighbors' vertices - bucket_position pos; - for (pos = left; pos < end_position; pos = bucket_position(pos + 1)) { - if (neighbors[pos] != -1) { - send(pg, neighbors[pos], 0, my_vertices[pos].size()); - if (!my_vertices[pos].empty()) - send(pg, neighbors[pos], 1, - &my_vertices[pos].front(), my_vertices[pos].size()); - } - } - - // Pass messages around - synchronize(pg); - - // Receive neighboring vertices - for (pos = left; pos < end_position; pos = bucket_position(pos + 1)) { - if (neighbors[pos] != -1) { - std::size_t incoming_vertices; - receive(pg, neighbors[pos], 0, incoming_vertices); - - if (incoming_vertices) { - neighbor_vertices[pos].resize(incoming_vertices); - receive(pg, neighbors[pos], 1, &neighbor_vertices[pos].front(), - incoming_vertices); - } - } - } - - // For each neighboring vertex, we need to get its current position - for (pos = left; pos < end_position; pos = bucket_position(pos + 1)) - for (typename std::vector::iterator i = - neighbor_vertices[pos].begin(); - i != neighbor_vertices[pos].end(); - ++i) - request(position, *i); - synchronize(position); - - // Apply forces in adjacent bins. This is O(n^2) in the worst - // case. Oh well. - for (pos = left; pos < end_position; pos = bucket_position(pos + 1)) { - for (typename std::vector::iterator i = - my_vertices[pos].begin(); - i != my_vertices[pos].end(); - ++i) - for (typename std::vector::iterator j = - neighbor_vertices[pos].begin(); - j != neighbor_vertices[pos].end(); - ++j) - apply_force(*i, *j); - } - } - - protected: - PositionMap position; - Point origin; - Point extent; - simple_tiling tiling; -}; - -template -inline neighboring_tiles_force_pairs -make_neighboring_tiles_force_pairs - (PositionMap position, - typename property_traits::value_type origin, - typename property_traits::value_type extent, - simple_tiling tiling) -{ - return neighboring_tiles_force_pairs(position, origin, extent, - tiling); -} - -template -class distributed_cooling_proxy -{ - public: - typedef typename Cooling::result_type result_type; - - distributed_cooling_proxy(const DisplacementMap& displacement, - const Cooling& cooling) - : displacement(displacement), cooling(cooling) - { - } - - result_type operator()() - { - // Accumulate displacements computed on each processor - synchronize(displacement.data->process_group); - - // Allow the underlying cooling to occur - return cooling(); - } - - protected: - DisplacementMap displacement; - Cooling cooling; -}; - -template -inline distributed_cooling_proxy -make_distributed_cooling(const DisplacementMap& displacement, - const Cooling& cooling) -{ - typedef distributed_cooling_proxy result_type; - return result_type(displacement, cooling); -} - -template -struct point_accumulating_reducer { - BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); - - template - Point operator()(const K&) const { return Point(); } - - template - Point operator()(const K&, const Point& p1, const Point& p2) const - { return Point(p1[0] + p2[0], p1[1] + p2[1]); } -}; - -template -void -fruchterman_reingold_force_directed_layout - (const Graph& g, - PositionMap position, - typename property_traits::value_type const& origin, - typename property_traits::value_type const& extent, - AttractiveForce attractive_force, - RepulsiveForce repulsive_force, - ForcePairs force_pairs, - Cooling cool, - DisplacementMap displacement) -{ - typedef typename property_traits::value_type Point; - - // Reduction in the displacement map involves summing the forces - displacement.set_reduce(point_accumulating_reducer()); - - // We need to track the positions of all of our neighbors - BGL_FORALL_VERTICES_T(u, g, Graph) - BGL_FORALL_ADJ_T(u, v, g, Graph) - request(position, v); - - // Invoke the "sequential" Fruchterman-Reingold implementation - boost::fruchterman_reingold_force_directed_layout - (g, position, origin, extent, - attractive_force, repulsive_force, - make_distributed_force_pairs(position, displacement, force_pairs), - make_distributed_cooling(displacement, cool), - displacement); -} - -template -void -fruchterman_reingold_force_directed_layout - (const Graph& g, - PositionMap position, - typename property_traits::value_type const& origin, - typename property_traits::value_type const& extent, - AttractiveForce attractive_force, - RepulsiveForce repulsive_force, - ForcePairs force_pairs, - Cooling cool, - DisplacementMap displacement, - simple_tiling tiling) -{ - typedef typename property_traits::value_type Point; - - // Reduction in the displacement map involves summing the forces - displacement.set_reduce(point_accumulating_reducer()); - - // We need to track the positions of all of our neighbors - BGL_FORALL_VERTICES_T(u, g, Graph) - BGL_FORALL_ADJ_T(u, v, g, Graph) - request(position, v); - - // Invoke the "sequential" Fruchterman-Reingold implementation - boost::fruchterman_reingold_force_directed_layout - (g, position, origin, extent, - attractive_force, repulsive_force, - make_distributed_force_pairs - (position, displacement, force_pairs, - make_neighboring_tiles_force_pairs(position, origin, extent, tiling)), - make_distributed_cooling(displacement, cool), - displacement); -} - -} } } // end namespace boost::graph::distributed - -#endif // BOOST_GRAPH_DISTRIBUTED_FRUCHTERMAN_REINGOLD_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/graphviz.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/graphviz.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/graphviz.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/graphviz.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,293 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_PARALLEL_GRAPHVIZ_HPP -#define BOOST_GRAPH_PARALLEL_GRAPHVIZ_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace boost { - -template -struct graph_id_writer -{ - explicit graph_id_writer(const Graph& g) : g(g) { } - - void operator()(std::ostream& out) - { - out << " label=\"p" << process_id(g.process_group()) << "\";\n"; - } - - private: - const Graph& g; -}; - -template -struct paint_by_number_writer -{ - explicit paint_by_number_writer(NumberMap number) : number(number) { } - - template - void operator()(std::ostream& out, Descriptor k) - { - static const char* color_names[] = { - "blue", - "brown", - "cyan", - "darkgreen", - "darkorchid", - "darksalmon", - "darkviolet", - "deeppink", - "gold3", - "green", - "magenta", - "navy", - "red", - "yellow", - "palegreen", - "gray65", - "gray21", - "bisque2", - "greenyellow", - "indianred4", - "lightblue2", - "mediumspringgreen", - "orangered", - "orange" - }; - const int colors = sizeof(color_names) / sizeof(color_names[0]); - if (get(number, k) < colors) { - out << " [ style=\"filled\", fillcolor=\"" << color_names[get(number, k)] - << "\" ]"; - } else { - out << " [ label=\"(" << get(number, k) << ")\" ]"; - } - } - - private: - NumberMap number; -}; - -template -inline paint_by_number_writer -paint_by_number(NumberMap number) -{ return paint_by_number_writer(number); } - -template -void -write_graphviz(std::ostream& out, - const Graph& g, - VertexPropertiesWriter vpw, - EdgePropertiesWriter epw, - GraphPropertiesWriter gpw - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) -{ - typedef typename graph_traits::directed_category directed_category; - typedef typename boost::graph::parallel::process_group_type::type - process_group_type; - typedef typename property_map::const_type - VertexIndexMap; - typedef typename property_map::const_type - VertexGlobalMap; - - static const bool is_undirected - = (is_base_and_derived::value - || is_same::value); - static const char* graph_kind = is_undirected? "graph" : "digraph"; - static const char* edge_kind = is_undirected? "--" : "->"; - - using boost::graph::parallel::process_group; - process_group_type pg = process_group(g); - - parallel::global_index_map - global_index(pg, num_vertices(g), get(vertex_index, g), - get(vertex_global, g)); - - std::ostringstream local_graph_out; - - local_graph_out << " subgraph cluster_" << process_id(pg) << " {\n"; - gpw(local_graph_out); - - typename graph_traits::vertex_iterator vi, vi_end; - for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) { - - int global_idx = get(global_index, *vi); - local_graph_out << " n" << global_idx; - vpw(local_graph_out, *vi); - local_graph_out << ";\n"; - } - local_graph_out << " }\n\n"; - - - typename graph_traits::edge_iterator ei, ei_end; - for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei) { - int source_idx = get(global_index, source(*ei, g)); - int target_idx = get(global_index, target(*ei, g)); - local_graph_out << " n" << source_idx << " " << edge_kind << " n" - << target_idx; - epw(local_graph_out, *ei); - local_graph_out << ";\n"; - } - - if (process_id(pg) == 0) { - out << graph_kind << " g {\n"; - out << local_graph_out.str(); - - synchronize(pg); - for (int i = 1; i < num_processes(pg); ++i) { - int len; - receive(pg, i, 0, len); - char* data = new char [len+1]; - data[len] = 0; - receive(pg, i, 1, data, len); - out << std::endl << data; - delete [] data; - } - out << "}\n"; - } else { - std::string result_str = local_graph_out.str(); - const char* data = result_str.c_str(); - - int len = result_str.length(); - send(pg, 0, 0, len); - send(pg, 0, 1, data, len); - synchronize(pg); - } - synchronize(pg); - synchronize(pg); - synchronize(pg); -} - -template -inline void -write_graphviz(std::ostream& out, - const Graph& g, - VertexPropertiesWriter vpw, - EdgePropertiesWriter epw - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) -{ - write_graphviz(out, g, vpw, epw, graph_id_writer(g)); -} - -template -inline void -write_graphviz(std::ostream& out, - const Graph& g, - VertexPropertiesWriter vpw - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) -{ - write_graphviz(out, g, vpw, default_writer()); -} - -template -inline void -write_graphviz(std::ostream& out, const Graph& g - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) -{ - write_graphviz(out, g, default_writer()); -} - -template -void -write_graphviz(const std::string& filename, - const Graph& g, - VertexPropertiesWriter vpw, - EdgePropertiesWriter epw, - GraphPropertiesWriter gpw - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) -{ - if (process_id(g.process_group()) == 0) { - std::ofstream out(filename.c_str()); - write_graphviz(out, g, vpw, epw, gpw); - } else { - write_graphviz(std::cout, g, vpw, epw, gpw); - } -} - -template -void -write_graphviz(const std::string& filename, - const Graph& g, - VertexPropertiesWriter vpw, - EdgePropertiesWriter epw - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) -{ - if (process_id(g.process_group()) == 0) { - std::ofstream out(filename.c_str()); - write_graphviz(out, g, vpw, epw); - } else { - write_graphviz(std::cout, g, vpw, epw); - } -} - -template -void -write_graphviz(const std::string& filename, - const Graph& g, - VertexPropertiesWriter vpw - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) -{ - if (process_id(g.process_group()) == 0) { - std::ofstream out(filename.c_str()); - write_graphviz(out, g, vpw); - } else { - write_graphviz(std::cout, g, vpw); - } -} - -template -void -write_graphviz(const std::string& filename, const Graph& g - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) -{ - if (process_id(g.process_group()) == 0) { - std::ofstream out(filename.c_str()); - write_graphviz(out, g); - } else { - write_graphviz(std::cout, g); - } -} - -template -void -write_graphviz(std::ostream& out, const Graph& g, - const dynamic_properties& dp, - const std::string& node_id = "node_id" - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph,distributed_graph_tag)) -{ - write_graphviz - (out, g, - /*vertex_writer=*/dynamic_vertex_properties_writer(dp, node_id), - /*edge_writer=*/dynamic_properties_writer(dp)); -} - -} // end namespace boost - -#endif // BOOST_GRAPH_PARALLEL_GRAPHVIZ_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/local_subgraph.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/local_subgraph.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/local_subgraph.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/local_subgraph.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,175 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_LOCAL_SUBGRAPH_HPP -#define BOOST_GRAPH_LOCAL_SUBGRAPH_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include - -namespace boost { - -namespace graph { namespace detail { - // Optionally, virtually derive from a base class - template struct derive_from_if; - template struct derive_from_if : virtual Base {}; - template struct derive_from_if {}; - - template - struct derive_from_if_tag_is : - derive_from_if<(is_base_and_derived::value - || is_same::value), - NewBase> - { - }; -} } // end namespace graph::detail - -template -class is_local_edge -{ -public: - typedef bool result_type; - typedef typename graph_traits::edge_descriptor - argument_type; - - is_local_edge() : g(0) {} - is_local_edge(DistributedGraph& g) : g(&g), owner(get(vertex_owner, g)) {} - - // Since either the source or target vertex must be local, the - // equivalence of their owners indicates a local edge. - result_type operator()(const argument_type& e) const - { return get(owner, source(e, *g)) == get(owner, target(e, *g)); } - -private: - DistributedGraph* g; - typename property_map::const_type owner; -}; - -template -class is_local_vertex -{ -public: - typedef bool result_type; - typedef typename graph_traits::vertex_descriptor - argument_type; - - is_local_vertex() : g(0) {} - is_local_vertex(DistributedGraph& g) : g(&g), owner(get(vertex_owner, g)) { } - - // Since either the source or target vertex must be local, the - // equivalence of their owners indicates a local edge. - result_type operator()(const argument_type& v) const - { - return get(owner, v) == process_id(process_group(*g)); - } - -private: - DistributedGraph* g; - typename property_map::const_type owner; -}; - -template -class local_subgraph - : public filtered_graph, - is_local_vertex > -{ - typedef filtered_graph, - is_local_vertex > - inherited; - typedef typename graph_traits::traversal_category - inherited_category; - -public: - struct traversal_category : - graph::detail::derive_from_if_tag_is, - graph::detail::derive_from_if_tag_is, - graph::detail::derive_from_if_tag_is, - graph::detail::derive_from_if_tag_is, - graph::detail::derive_from_if_tag_is, - graph::detail::derive_from_if_tag_is - { }; - - local_subgraph(DistributedGraph& g) - : inherited(g, - is_local_edge(g), - is_local_vertex(g)), - g(g) - { - } - - // Distributed Container - typedef typename boost::graph::parallel::process_group_type::type - process_group_type; - - process_group_type& process_group() - { - using boost::graph::parallel::process_group; - return process_group(g); - } - const process_group_type& process_group() const - { - using boost::graph::parallel::process_group; - return boost::graph::parallel::process_group(g); - } - - DistributedGraph& base() { return g; } - const DistributedGraph& base() const { return g; } - -private: - DistributedGraph& g; -}; - -template -class property_map, PropertyTag> - : public property_map { }; - -template -class property_map, PropertyTag> -{ - public: - typedef typename property_map::const_type - type; - typedef type const_type; -}; - -template -inline typename property_map, PropertyTag>::type -get(PropertyTag p, local_subgraph& g) -{ return get(p, g.base()); } - -template -inline typename property_map, PropertyTag> - ::const_type -get(PropertyTag p, const local_subgraph& g) -{ return get(p, g.base()); } - -template -inline local_subgraph -make_local_subgraph(DistributedGraph& g) -{ return local_subgraph(g); } - -} // end namespace boost - -#endif // BOOST_GRAPH_LOCAL_SUBGRAPH_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/one_bit_color_map.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/one_bit_color_map.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/one_bit_color_map.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/one_bit_color_map.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -// Copyright (C) 2006-2010 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Jeremiah Willcock -// Andrew Lumsdaine - -// Distributed version of the one-bit color map -#ifndef BOOST_DISTRIBUTED_ONE_BIT_COLOR_MAP_HPP -#define BOOST_DISTRIBUTED_ONE_BIT_COLOR_MAP_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include - -namespace boost { - -template -class one_bit_color_map > - : public parallel::distributed_property_map > -{ - typedef one_bit_color_map local_map; - - typedef parallel::distributed_property_map - inherited; - - typedef local_property_map - index_map_type; - -public: - one_bit_color_map(std::size_t inital_size, - const index_map_type& index = index_map_type()) - : inherited(index.process_group(), index.global(), - local_map(inital_size, index.base())) { } - - inherited& base() { return *this; } - const inherited& base() const { return *this; } -}; - -template -inline one_bit_color_type -get(one_bit_color_map > - const& pm, - typename property_traits::key_type key) -{ - return get(pm.base(), key); -} - -template -inline void -put(one_bit_color_map > - const& pm, - typename property_traits::key_type key, - one_bit_color_type value) -{ - put(pm.base(), key, value); -} - -template -class one_bit_color_map > - : public parallel::distributed_property_map< - ProcessGroup, GlobalMap, one_bit_color_map > -{ - typedef one_bit_color_map local_map; - - typedef parallel::distributed_property_map - inherited; - - typedef parallel::distributed_property_map - index_map_type; - -public: - one_bit_color_map(std::size_t inital_size, - const index_map_type& index = index_map_type()) - : inherited(index.process_group(), index.global(), - local_map(inital_size, index.base())) { } - - inherited& base() { return *this; } - const inherited& base() const { return *this; } -}; - -template -inline one_bit_color_type -get(one_bit_color_map< - parallel::distributed_property_map< - ProcessGroup, GlobalMap, one_bit_color_map > > const& pm, - typename property_traits::key_type key) -{ - return get(pm.base(), key); -} - -template -inline void -put(one_bit_color_map< - parallel::distributed_property_map< - ProcessGroup, GlobalMap, one_bit_color_map > > const& pm, - typename property_traits::key_type key, - one_bit_color_type value) -{ - put(pm.base(), key, value); -} - -} // end namespace boost - -#endif // BOOST_DISTRIBUTED_ONE_BIT_COLOR_MAP_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/page_rank.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/page_rank.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/page_rank.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/page_rank.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,225 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. -// Copyright (C) 2002 Brad King and Douglas Gregor - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -// Brian Barrett -#ifndef BOOST_PARALLEL_GRAPH_PAGE_RANK_HPP -#define BOOST_PARALLEL_GRAPH_PAGE_RANK_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -// #define WANT_MPI_ONESIDED 1 - -namespace boost { namespace graph { namespace distributed { - -namespace detail { -#ifdef WANT_MPI_ONESIDED - template - void page_rank_step(const Graph& g, RankMap from_rank, MPI_Win to_win, - typename property_traits::value_type damping, - owner_map_t owner) - { - typedef typename property_traits::value_type rank_type; - int me, ret; - MPI_Comm_rank(MPI_COMM_WORLD, &me); - - // MPI_Accumulate is not required to store the value of the data - // being sent, only the address. The value of the memory location - // must not change until the end of the access epoch, meaning the - // call to MPI_Fence. We therefore store the updated value back - // into the from_rank map before the accumulate rather than using - // a temporary. We're going to reset the values in the from_rank - // before the end of page_rank_step() anyway, so this isn't a huge - // deal. But MPI-2 One-sided is an abomination. - BGL_FORALL_VERTICES_T(u, g, Graph) { - put(from_rank, u, (damping * get(from_rank, u) / out_degree(u, g))); - BGL_FORALL_ADJ_T(u, v, g, Graph) { - ret = MPI_Accumulate(&(from_rank[u]), - 1, MPI_DOUBLE, - get(owner, v), local(v), - 1, MPI_DOUBLE, MPI_SUM, to_win); - BOOST_ASSERT(MPI_SUCCESS == ret); - } - } - MPI_Win_fence(0, to_win); - - // Set new rank maps for the other map. Do this now to get around - // the stupid synchronization rules of MPI-2 One-sided - BGL_FORALL_VERTICES_T(v, g, Graph) put(from_rank, v, rank_type(1 - damping)); - } -#endif - - template - struct rank_accumulate_reducer { - BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); - - template - T operator()(const K&) const { return T(0); } - - template - T operator()(const K&, const T& x, const T& y) const { return x + y; } - }; -} // end namespace detail - -template -void -page_rank_impl(const Graph& g, RankMap rank_map, Done done, - typename property_traits::value_type damping, - typename graph_traits::vertices_size_type n, - RankMap2 rank_map2) -{ - typedef typename property_traits::value_type rank_type; - - int me; - MPI_Comm_rank(MPI_COMM_WORLD, &me); - - typename property_map::const_type - owner = get(vertex_owner, g); - (void)owner; - - typedef typename boost::graph::parallel::process_group_type - ::type process_group_type; - typedef typename process_group_type::process_id_type process_id_type; - - process_group_type pg = process_group(g); - process_id_type id = process_id(pg); - - BOOST_ASSERT(me == id); - - rank_type initial_rank = rank_type(rank_type(1) / n); - BGL_FORALL_VERTICES_T(v, g, Graph) put(rank_map, v, initial_rank); - -#ifdef WANT_MPI_ONESIDED - - BOOST_ASSERT(sizeof(rank_type) == sizeof(double)); - - bool to_map_2 = true; - MPI_Win win, win2; - - MPI_Win_create(&(rank_map[*(vertices(g).first)]), - sizeof(double) * num_vertices(g), - sizeof(double), - MPI_INFO_NULL, MPI_COMM_WORLD, &win); - MPI_Win_set_name(win, "rank_map_win"); - MPI_Win_create(&(rank_map2[*(vertices(g).first)]), - sizeof(double) * num_vertices(g), - sizeof(double), - MPI_INFO_NULL, MPI_COMM_WORLD, &win2); - MPI_Win_set_name(win, "rank_map2_win"); - - // set initial rank maps for the first iteration... - BGL_FORALL_VERTICES_T(v, g, Graph) put(rank_map2, v, rank_type(1 - damping)); - - MPI_Win_fence(0, win); - MPI_Win_fence(0, win2); - - while ((to_map_2 && !done(rank_map, g)) || - (!to_map_2 && !done(rank_map2, g))) { - if (to_map_2) { - graph::distributed::detail::page_rank_step(g, rank_map, win2, damping, owner); - to_map_2 = false; - } else { - graph::distributed::detail::page_rank_step(g, rank_map2, win, damping, owner); - to_map_2 = true; - } - } - synchronize(boost::graph::parallel::process_group(g)); - - MPI_Win_free(&win); - MPI_Win_free(&win2); - -#else - // The ranks accumulate after each step. - rank_map.set_reduce(detail::rank_accumulate_reducer()); - rank_map2.set_reduce(detail::rank_accumulate_reducer()); - rank_map.set_consistency_model(boost::parallel::cm_flush | boost::parallel::cm_reset); - rank_map2.set_consistency_model(boost::parallel::cm_flush | boost::parallel::cm_reset); - - bool to_map_2 = true; - while ((to_map_2 && !done(rank_map, g)) || - (!to_map_2 && !done(rank_map2, g))) { - /** - * PageRank can implemented slightly more efficiently on a - * bidirectional graph than on an incidence graph. However, - * distributed PageRank requires that we have the rank of the - * source vertex available locally, so we force the incidence - * graph implementation, which pushes rank from source to - * target. - */ - typedef incidence_graph_tag category; - if (to_map_2) { - graph::detail::page_rank_step(g, rank_map, rank_map2, damping, - category()); - to_map_2 = false; - } else { - graph::detail::page_rank_step(g, rank_map2, rank_map, damping, - category()); - to_map_2 = true; - } - using boost::graph::parallel::process_group; - synchronize(process_group(g)); - } - - rank_map.reset(); -#endif - - if (!to_map_2) - BGL_FORALL_VERTICES_T(v, g, Graph) put(rank_map, v, get(rank_map2, v)); -} - -template -void -page_rank(const Graph& g, RankMap rank_map, Done done, - typename property_traits::value_type damping, - typename graph_traits::vertices_size_type n, - RankMap2 rank_map2 - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(Graph, distributed_graph_tag)) -{ - (page_rank_impl)(g, rank_map, done, damping, n, rank_map2); -} - -template -void -remove_dangling_links(MutableGraph& g - BOOST_GRAPH_ENABLE_IF_MODELS_PARM(MutableGraph, - distributed_graph_tag)) -{ - typename graph_traits::vertices_size_type old_n; - do { - old_n = num_vertices(g); - - typename graph_traits::vertex_iterator vi, vi_end; - for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; /* in loop */) { - typename graph_traits::vertex_descriptor v = *vi++; - if (out_degree(v, g) == 0) { - clear_vertex(v, g); - remove_vertex(v, g); - } - } - } while (num_vertices(g) < old_n); -} - -} // end namespace distributed - -using distributed::page_rank; -using distributed::remove_dangling_links; - -} } // end namespace boost::graph - -#endif // BOOST_PARALLEL_GRAPH_PAGE_RANK_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/queue.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/queue.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/queue.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/queue.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,278 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_DISTRIBUTED_QUEUE_HPP -#define BOOST_GRAPH_DISTRIBUTED_QUEUE_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include - -namespace boost { namespace graph { namespace distributed { - -/// A unary predicate that always returns "true". -struct always_push -{ - template bool operator()(const T&) const { return true; } -}; - - - -/** A distributed queue adaptor. - * - * Class template @c distributed_queue implements a distributed queue - * across a process group. The distributed queue is an adaptor over an - * existing (local) queue, which must model the @ref Buffer - * concept. Each process stores a distinct copy of the local queue, - * from which it draws or removes elements via the @ref pop and @ref - * top members. - * - * The value type of the local queue must be a model of the @ref - * GlobalDescriptor concept. The @ref push operation of the - * distributed queue passes (via a message) the value to its owning - * processor. Thus, the elements within a particular local queue are - * guaranteed to have the process owning that local queue as an owner. - * - * Synchronization of distributed queues occurs in the @ref empty and - * @ref size functions, which will only return "empty" values (true or - * 0, respectively) when the entire distributed queue is empty. If the - * local queue is empty but the distributed queue is not, the - * operation will block until either condition changes. When the @ref - * size function of a nonempty queue returns, it returns the size of - * the local queue. These semantics were selected so that sequential - * code that processes elements in the queue via the following idiom - * can be parallelized via introduction of a distributed queue: - * - * distributed_queue<...> Q; - * Q.push(x); - * while (!Q.empty()) { - * // do something, that may push a value onto Q - * } - * - * In the parallel version, the initial @ref push operation will place - * the value @c x onto its owner's queue. All processes will - * synchronize at the call to empty, and only the process owning @c x - * will be allowed to execute the loop (@ref Q.empty() returns - * false). This iteration may in turn push values onto other remote - * queues, so when that process finishes execution of the loop body - * and all processes synchronize again in @ref empty, more processes - * may have nonempty local queues to execute. Once all local queues - * are empty, @ref Q.empty() returns @c false for all processes. - * - * The distributed queue can receive messages at two different times: - * during synchronization and when polling @ref empty. Messages are - * always received during synchronization, to ensure that accurate - * local queue sizes can be determines. However, whether @ref empty - * should poll for messages is specified as an option to the - * constructor. Polling may be desired when the order in which - * elements in the queue are processed is not important, because it - * permits fewer synchronization steps and less communication - * overhead. However, when more strict ordering guarantees are - * required, polling may be semantically incorrect. By disabling - * polling, one ensures that parallel execution using the idiom above - * will not process an element at a later "level" before an earlier - * "level". - * - * The distributed queue nearly models the @ref Buffer - * concept. However, the @ref push routine does not necessarily - * increase the result of @c size() by one (although the size of the - * global queue does increase by one). - */ -template -class distributed_queue -{ - typedef distributed_queue self_type; - - enum { - /** Message indicating a remote push. The message contains a - * single value x of type value_type that is to be pushed on the - * receiver's queue. - */ - msg_push, - /** Push many elements at once. */ - msg_multipush - }; - - public: - typedef ProcessGroup process_group_type; - typedef Buffer buffer_type; - typedef typename buffer_type::value_type value_type; - typedef typename buffer_type::size_type size_type; - - /** Construct a new distributed queue. - * - * Build a new distributed queue that communicates over the given @p - * process_group, whose local queue is initialized via @p buffer and - * which may or may not poll for messages. - */ - explicit - distributed_queue(const ProcessGroup& process_group, - const OwnerMap& owner, - const Buffer& buffer, - bool polling = false); - - /** Construct a new distributed queue. - * - * Build a new distributed queue that communicates over the given @p - * process_group, whose local queue is initialized via @p buffer and - * which may or may not poll for messages. - */ - explicit - distributed_queue(const ProcessGroup& process_group = ProcessGroup(), - const OwnerMap& owner = OwnerMap(), - const Buffer& buffer = Buffer(), - const UnaryPredicate& pred = UnaryPredicate(), - bool polling = false); - - /** Construct a new distributed queue. - * - * Build a new distributed queue that communicates over the given @p - * process_group, whose local queue is default-initalized and which - * may or may not poll for messages. - */ - distributed_queue(const ProcessGroup& process_group, const OwnerMap& owner, - const UnaryPredicate& pred, bool polling = false); - - /** Virtual destructor required with virtual functions. - * - */ - virtual ~distributed_queue() {} - - /** Push an element onto the distributed queue. - * - * The element will be sent to its owner process to be added to that - * process's local queue. If polling is enabled for this queue and - * the owner process is the current process, the value will be - * immediately pushed onto the local queue. - * - * Complexity: O(1) messages of size O(sizeof(value_type)) will be - * transmitted. - */ - void push(const value_type& x); - - /** Pop an element off the local queue. - * - * @p @c !empty() - */ - void pop() { buffer.pop(); } - - /** - * Return the element at the top of the local queue. - * - * @p @c !empty() - */ - value_type& top() { return buffer.top(); } - - /** - * \overload - */ - const value_type& top() const { return buffer.top(); } - - /** Determine if the queue is empty. - * - * When the local queue is nonempty, returns @c true. If the local - * queue is empty, synchronizes with all other processes in the - * process group until either (1) the local queue is nonempty - * (returns @c true) (2) the entire distributed queue is empty - * (returns @c false). - */ - bool empty() const; - - /** Determine the size of the local queue. - * - * The behavior of this routine is equivalent to the behavior of - * @ref empty, except that when @ref empty returns true this - * function returns the size of the local queue and when @ref empty - * returns false this function returns zero. - */ - size_type size() const; - - // private: - /** Synchronize the distributed queue and determine if all queues - * are empty. - * - * \returns \c true when all local queues are empty, or false if at least - * one of the local queues is nonempty. - * Defined as virtual for derived classes like depth_limited_distributed_queue. - */ - virtual bool do_synchronize() const; - - private: - // Setup triggers - void setup_triggers(); - - // Message handlers - void - handle_push(int source, int tag, const value_type& value, - trigger_receive_context); - - void - handle_multipush(int source, int tag, const std::vector& values, - trigger_receive_context); - - mutable ProcessGroup process_group; - OwnerMap owner; - mutable Buffer buffer; - UnaryPredicate pred; - bool polling; - - typedef std::vector outgoing_buffer_t; - typedef std::vector outgoing_buffers_t; - shared_ptr outgoing_buffers; -}; - -/// Helper macro containing the normal names for the template -/// parameters to distributed_queue. -#define BOOST_DISTRIBUTED_QUEUE_PARMS \ - typename ProcessGroup, typename OwnerMap, typename Buffer, \ - typename UnaryPredicate - -/// Helper macro containing the normal template-id for -/// distributed_queue. -#define BOOST_DISTRIBUTED_QUEUE_TYPE \ - distributed_queue - -/** Synchronize all processes involved with the given distributed queue. - * - * This function will synchronize all of the local queues for a given - * distributed queue, by ensuring that no additional messages are in - * transit. It is rarely required by the user, because most - * synchronization of distributed queues occurs via the @c empty or @c - * size methods. - */ -template -inline void -synchronize(const BOOST_DISTRIBUTED_QUEUE_TYPE& Q) -{ Q.do_synchronize(); } - -/// Construct a new distributed queue. -template -inline distributed_queue -make_distributed_queue(const ProcessGroup& process_group, - const OwnerMap& owner, - const Buffer& buffer, - bool polling = false) -{ - typedef distributed_queue result_type; - return result_type(process_group, owner, buffer, polling); -} - -} } } // end namespace boost::graph::distributed - -#include - -#undef BOOST_DISTRIBUTED_QUEUE_TYPE -#undef BOOST_DISTRIBUTED_QUEUE_PARMS - -#endif // BOOST_GRAPH_DISTRIBUTED_QUEUE_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/reverse_graph.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/reverse_graph.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/reverse_graph.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/reverse_graph.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -// Copyright (C) 2005-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Nick Edmonds -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_DISTRIBUTED_REVERSE_GRAPH_HPP -#define BOOST_GRAPH_DISTRIBUTED_REVERSE_GRAPH_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include - -namespace boost { - namespace graph { - namespace parallel { - /// Retrieve the process group from a reverse graph - template - struct process_group_type > - : process_group_type { }; - } - - } - - /// Retrieve the process group from a reverse graph - template - inline typename graph::parallel::process_group_type::type - process_group(reverse_graph const& g) { - return process_group(g.m_g); - } -} // namespace boost - -#endif diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/rmat_graph_generator.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/rmat_graph_generator.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/rmat_graph_generator.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/rmat_graph_generator.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,164 +0,0 @@ -// Copyright 2004, 2005 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Nick Edmonds -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_DISTRIBUTED_RMAT_GENERATOR_HPP -#define BOOST_GRAPH_DISTRIBUTED_RMAT_GENERATOR_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include - -namespace boost { - - // Memory-scalable (amount of memory required will scale down - // linearly as the number of processes increases) generator, which - // requires an MPI process group. Run-time is slightly worse than - // the unique rmat generator. Edge list generated is sorted and - // unique. - template - class scalable_rmat_iterator - { - typedef typename graph_traits::directed_category directed_category; - typedef typename graph_traits::vertices_size_type vertices_size_type; - typedef typename graph_traits::edges_size_type edges_size_type; - - public: - typedef std::input_iterator_tag iterator_category; - typedef std::pair value_type; - typedef const value_type& reference; - typedef const value_type* pointer; - typedef void difference_type; - - // No argument constructor, set to terminating condition - scalable_rmat_iterator() - : gen(), done(true) - { } - - // Initialize for edge generation - scalable_rmat_iterator(ProcessGroup pg, Distribution distrib, - RandomGenerator& gen, vertices_size_type n, - edges_size_type m, double a, double b, double c, - double d, bool permute_vertices = true) - : gen(), done(false) - { - BOOST_ASSERT(a + b + c + d == 1); - int id = process_id(pg); - - this->gen.reset(new uniform_01(gen)); - - std::vector vertexPermutation; - if (permute_vertices) - generate_permutation_vector(gen, vertexPermutation, n); - - int SCALE = int(floor(log(double(n))/log(2.))); - boost::uniform_01 prob(gen); - - std::map edge_map; - - edges_size_type generated = 0, local_edges = 0; - do { - edges_size_type tossed = 0; - do { - vertices_size_type u, v; - boost::tie(u, v) = generate_edge(this->gen, n, SCALE, a, b, c, d); - - if (permute_vertices) { - u = vertexPermutation[u]; - v = vertexPermutation[v]; - } - - // Lowest vertex number always comes first (this - // means we don't have to worry about i->j and j->i - // being in the edge list) - if (u > v && is_same::value) - std::swap(u, v); - - if (distrib(u) == id || distrib(v) == id) { - if (edge_map.find(std::make_pair(u, v)) == edge_map.end()) { - edge_map[std::make_pair(u, v)] = true; - local_edges++; - } else { - tossed++; - - // special case - if both u and v are on same - // proc, ++ twice, since we divide by two (to - // cover the two process case) - if (distrib(u) == id && distrib(v) == id) - tossed++; - } - } - generated++; - - } while (generated < m); - tossed = all_reduce(pg, tossed, boost::parallel::sum()); - generated -= (tossed / 2); - } while (generated < m); - // NGE - Asking for more than n^2 edges will result in an infinite loop here - // Asking for a value too close to n^2 edges may as well - - values.reserve(local_edges); - typename std::map::reverse_iterator em_end = edge_map.rend(); - for (typename std::map::reverse_iterator em_i = edge_map.rbegin(); - em_i != em_end ; - ++em_i) { - values.push_back(em_i->first); - } - - current = values.back(); - values.pop_back(); - } - - reference operator*() const { return current; } - pointer operator->() const { return ¤t; } - - scalable_rmat_iterator& operator++() - { - if (!values.empty()) { - current = values.back(); - values.pop_back(); - } else - done = true; - - return *this; - } - - scalable_rmat_iterator operator++(int) - { - scalable_rmat_iterator temp(*this); - ++(*this); - return temp; - } - - bool operator==(const scalable_rmat_iterator& other) const - { - return values.empty() && other.values.empty() && done && other.done; - } - - bool operator!=(const scalable_rmat_iterator& other) const - { return !(*this == other); } - - private: - - // Parameters - shared_ptr > gen; - - // Internal data structures - std::vector values; - value_type current; - bool done; - }; - -} // end namespace boost - -#endif // BOOST_GRAPH_DISTRIBUTED_RMAT_GENERATOR_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/selector.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/selector.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/selector.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/selector.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -// Copyright (C) 2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_DISTRIBUTED_SELECTOR_HPP -#define BOOST_GRAPH_DISTRIBUTED_SELECTOR_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include - -namespace boost { - - /* The default local selector for a distributedS selector. */ - struct defaultS {}; - - /** - * Selector that specifies that the graph should be distributed - * among different processes organized based on the given process - * group. - */ - template - struct distributedS - { - typedef ProcessGroup process_group_type; - typedef LocalS local_selector; - typedef DistributionS distribution; - }; - - namespace detail { - template - struct is_distributed_selector >: mpl::true_ {}; - } - -} - -#endif // BOOST_GRAPH_DISTRIBUTED_SELECTOR_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/shuffled_distribution.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/shuffled_distribution.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/shuffled_distribution.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/shuffled_distribution.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,114 +0,0 @@ -// Copyright Daniel Wallin 2007. Use, modification and distribution is -// subject to the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#ifndef BOOST_SHUFFLED_DISTRIBUTION_070923_HPP -#define BOOST_SHUFFLED_DISTRIBUTION_070923_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -# include -# include -# include - -namespace boost { namespace graph { namespace distributed { - -template -struct shuffled_distribution : BaseDistribution -{ - typedef std::size_t size_type; - - template - shuffled_distribution(ProcessGroup const& pg, BaseDistribution const& base) - : BaseDistribution(base) - , n(num_processes(pg)) - , mapping_(make_counting_iterator(size_type(0)), make_counting_iterator(n)) - , reverse_mapping(mapping_) - {} - - std::vector const& mapping() const - { - return mapping_; - } - - template - void assign_mapping(InputIterator first, InputIterator last) - { - mapping_.assign(first, last); - BOOST_ASSERT(mapping_.size() == n); - reverse_mapping.resize(mapping_.size()); - - for (std::vector::iterator i(mapping_.begin()); - i != mapping_.end(); ++i) - { - reverse_mapping[*i] = i - mapping_.begin(); - } - } - - BaseDistribution& base() - { - return *this; - } - - BaseDistribution const& base() const - { - return *this; - } - - template - size_type block_size(ProcessID id, size_type n) const - { - return base().block_size(reverse_mapping[id], n); - } - - template - size_type operator()(T const& value) const - { - return mapping_[base()(value)]; - } - - template - size_type start(ProcessID id) const - { - return base().start(reverse_mapping[id]); - } - - size_type local(size_type i) const - { - return base().local(i); - } - - size_type global(size_type i) const - { - return base().global(i); - } - - template - size_type global(ProcessID id, size_type n) const - { - return base().global(reverse_mapping[id], n); - } - - template - void serialize(Archive& ar, unsigned long /*version*/) - { - ar & serialization::make_nvp("base", base()); - } - - void clear() - { - base().clear(); - } - -private: - size_type n; - std::vector mapping_; - std::vector reverse_mapping; -}; - -}}} // namespace boost::graph::distributed - -#endif // BOOST_SHUFFLED_DISTRIBUTION_070923_HPP - diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/st_connected.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/st_connected.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/st_connected.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/st_connected.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,187 +0,0 @@ -// Copyright (C) 2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_GRAPH_DISTRIBUTED_ST_CONNECTED_HPP -#define BOOST_GRAPH_DISTRIBUTED_ST_CONNECTED_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace boost { namespace graph { namespace distributed { - -namespace detail { - struct pair_and_or - { - std::pair - operator()(std::pair x, std::pair y) const - { - return std::pair(x.first && y.first, - x.second || y.second); - } - }; - -} // end namespace detail - -template -bool -st_connected(const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - typename graph_traits::vertex_descriptor t, - ColorMap color, OwnerMap owner) -{ - using boost::graph::parallel::process_group; - using boost::graph::parallel::process_group_type; - using boost::parallel::all_reduce; - - typedef typename property_traits::value_type Color; - typedef color_traits ColorTraits; - typedef typename process_group_type::type ProcessGroup; - typedef typename ProcessGroup::process_id_type ProcessID; - typedef typename graph_traits::vertex_descriptor Vertex; - - // Set all vertices to white (unvisited) - BGL_FORALL_VERTICES_T(v, g, DistributedGraph) - put(color, v, ColorTraits::white()); - - // "color" plays the role of a color map, with no synchronization. - set_property_map_role(vertex_color, color); - color.set_consistency_model(0); - - // Vertices found from the source are grey - put(color, s, ColorTraits::gray()); - - // Vertices found from the target are green - put(color, t, ColorTraits::green()); - - ProcessGroup pg = process_group(g); - ProcessID rank = process_id(pg); - - // Build a local queue - queue Q; - if (get(owner, s) == rank) Q.push(s); - if (get(owner, t) == rank) Q.push(t); - - queue other_Q; - - while (true) { - bool found = false; - - // Process all vertices in the local queue - while (!found && !Q.empty()) { - Vertex u = Q.top(); Q.pop(); - Color u_color = get(color, u); - - BGL_FORALL_OUTEDGES_T(u, e, g, DistributedGraph) { - Vertex v = target(e, g); - Color v_color = get(color, v); - if (v_color == ColorTraits::white()) { - // We have not seen "v" before; mark it with the same color as u - Color u_color = get(color, u); - put(color, v, u_color); - - // Either push v into the local queue or send it off to its - // owner. - ProcessID v_owner = get(owner, v); - if (v_owner == rank) - other_Q.push(v); - else - send(pg, v_owner, 0, - std::make_pair(v, u_color == ColorTraits::gray())); - } else if (v_color != ColorTraits::black() && u_color != v_color) { - // Colors have collided. We're done! - found = true; - break; - } - } - - // u is done, so mark it black - put(color, u, ColorTraits::black()); - } - - // Ensure that all transmitted messages have been received. - synchronize(pg); - - // Move all of the send-to-self values into the local Q. - other_Q.swap(Q); - - if (!found) { - // Receive all messages - while (optional > msg = probe(pg)) { - std::pair data; - receive(pg, msg->first, msg->second, data); - - // Determine the colors of u and v, the source and target - // vertices (v is local). - Vertex v = data.first; - Color v_color = get(color, v); - Color u_color = data.second? ColorTraits::gray() : ColorTraits::green(); - if (v_color == ColorTraits::white()) { - // v had no color before, so give it u's color and push it - // into the queue. - Q.push(v); - put(color, v, u_color); - } else if (v_color != ColorTraits::black() && u_color != v_color) { - // Colors have collided. We're done! - found = true; - break; - } - } - } - - // Check if either all queues are empty or - std::pair results = all_reduce(pg, - boost::parallel::detail::make_untracked_pair(Q.empty(), found), - detail::pair_and_or()); - - // If someone found the answer, we're done! - if (results.second) - return true; - - // If all queues are empty, we're done. - if (results.first) - return false; - } -} - -template -inline bool -st_connected(const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - typename graph_traits::vertex_descriptor t, - ColorMap color) -{ - return st_connected(g, s, t, color, get(vertex_owner, g)); -} - -template -inline bool -st_connected(const DistributedGraph& g, - typename graph_traits::vertex_descriptor s, - typename graph_traits::vertex_descriptor t) -{ - return st_connected(g, s, t, - make_two_bit_color_map(num_vertices(g), - get(vertex_index, g))); -} - -} } } // end namespace boost::graph::distributed - -#endif // BOOST_GRAPH_DISTRIBUTED_ST_CONNECTED_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/two_bit_color_map.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/two_bit_color_map.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/two_bit_color_map.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/two_bit_color_map.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -// Copyright (C) 2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Jeremiah Willcock -// Andrew Lumsdaine - -// Distributed version of the two-bit color map -#ifndef BOOST_DISTRIBUTED_TWO_BIT_COLOR_MAP_HPP -#define BOOST_DISTRIBUTED_TWO_BIT_COLOR_MAP_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include - -namespace boost { - -template -class two_bit_color_map > - : public parallel::distributed_property_map > -{ - typedef two_bit_color_map local_map; - - typedef parallel::distributed_property_map - inherited; - - typedef local_property_map - index_map_type; - -public: - two_bit_color_map(std::size_t inital_size, - const index_map_type& index = index_map_type()) - : inherited(index.process_group(), index.global(), - local_map(inital_size, index.base())) { } - - inherited& base() { return *this; } - const inherited& base() const { return *this; } -}; - -template -inline two_bit_color_type -get(two_bit_color_map > - const& pm, - typename property_traits::key_type key) -{ - return get(pm.base(), key); -} - -template -inline void -put(two_bit_color_map > - const& pm, - typename property_traits::key_type key, - two_bit_color_type value) -{ - put(pm.base(), key, value); -} - -template -class two_bit_color_map > - : public parallel::distributed_property_map< - ProcessGroup, GlobalMap, two_bit_color_map > -{ - typedef two_bit_color_map local_map; - - typedef parallel::distributed_property_map - inherited; - - typedef parallel::distributed_property_map - index_map_type; - -public: - two_bit_color_map(std::size_t inital_size, - const index_map_type& index = index_map_type()) - : inherited(index.process_group(), index.global(), - local_map(inital_size, index.base())) { } - - inherited& base() { return *this; } - const inherited& base() const { return *this; } -}; - -template -inline two_bit_color_type -get(two_bit_color_map< - parallel::distributed_property_map< - ProcessGroup, GlobalMap, two_bit_color_map > > const& pm, - typename property_traits::key_type key) -{ - return get(pm.base(), key); -} - -template -inline void -put(two_bit_color_map< - parallel::distributed_property_map< - ProcessGroup, GlobalMap, two_bit_color_map > > const& pm, - typename property_traits::key_type key, - two_bit_color_type value) -{ - put(pm.base(), key, value); -} - -} // end namespace boost - -#endif // BOOST_DISTRIBUTED_TWO_BIT_COLOR_MAP_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/unsafe_serialize.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/unsafe_serialize.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/unsafe_serialize.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/unsafe_serialize.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -// Copyright (C) 2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -// File moved -#include diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/vertex_list_adaptor.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/vertex_list_adaptor.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/vertex_list_adaptor.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/distributed/vertex_list_adaptor.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,404 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -#ifndef BOOST_VERTEX_LIST_ADAPTOR_HPP -#define BOOST_VERTEX_LIST_ADAPTOR_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace boost { namespace graph { - -// -------------------------------------------------------------------------- -// Global index map built from a distribution -// -------------------------------------------------------------------------- -template -class distribution_global_index_map -{ - public: - typedef std::size_t value_type; - typedef value_type reference; - typedef typename property_traits::key_type key_type; - typedef readable_property_map_tag category; - - distribution_global_index_map(const Distribution& distribution, - const OwnerPropertyMap& owner, - const LocalPropertyMap& local) - : distribution_(distribution), owner(owner), local(local) { } - - Distribution distribution_; - OwnerPropertyMap owner; - LocalPropertyMap local; -}; - -template -inline -typename distribution_global_index_map::value_type -get(const distribution_global_index_map& p, - typename distribution_global_index_map::key_type x) -{ - using boost::get; - return p.distribution_.global(get(p.owner, x), get(p.local, x)); -} - -template -inline -distribution_global_index_map< - Distribution, - typename property_map::const_type, - typename property_map::const_type> -make_distribution_global_index_map(const Graph& g, const Distribution& d) -{ - typedef distribution_global_index_map< - Distribution, - typename property_map::const_type, - typename property_map::const_type> - result_type; - return result_type(d, get(vertex_owner, g), get(vertex_local, g)); -} - -// -------------------------------------------------------------------------- -// Global index map built from a distributed index map and list of vertices -// -------------------------------------------------------------------------- -template -class stored_global_index_map : public IndexMap -{ - public: - typedef readable_property_map_tag category; - - stored_global_index_map(const IndexMap& index_map) : IndexMap(index_map) { - // When we have a global index, we need to always have the indices - // of every key we've seen - this->set_max_ghost_cells(0); - } -}; - -// -------------------------------------------------------------------------- -// Global index map support code -// -------------------------------------------------------------------------- -namespace detail { - template - inline void - initialize_global_index_map(const PropertyMap&, - ForwardIterator, ForwardIterator) - { } - - template - void - initialize_global_index_map(stored_global_index_map& p, - ForwardIterator first, ForwardIterator last) - { - using std::distance; - - typedef typename property_traits::value_type size_t; - - size_t n = distance(first, last); - for (size_t i = 0; i < n; ++i, ++first) local_put(p, *first, i); - } -} - -// -------------------------------------------------------------------------- -// Adapts a Distributed Vertex List Graph to a Vertex List Graph -// -------------------------------------------------------------------------- -template -class vertex_list_adaptor : public graph_traits -{ - typedef graph_traits inherited; - - typedef typename inherited::traversal_category base_traversal_category; - - public: - typedef typename inherited::vertex_descriptor vertex_descriptor; - typedef typename std::vector::iterator vertex_iterator; - typedef typename std::vector::size_type - vertices_size_type; - - struct traversal_category - : public virtual base_traversal_category, - public virtual vertex_list_graph_tag {}; - - vertex_list_adaptor(const Graph& g, - const GlobalIndexMap& index_map = GlobalIndexMap()) - : g(&g), index_map(index_map) - { - using boost::vertices; - - all_vertices_.reset(new std::vector()); - all_gather(process_group(), vertices(g).first, vertices(g).second, - *all_vertices_); - detail::initialize_global_index_map(this->index_map, - all_vertices_->begin(), - all_vertices_->end()); - } - - const Graph& base() const { return *g; } - - // -------------------------------------------------------------------------- - // Distributed Container - // -------------------------------------------------------------------------- - typedef typename boost::graph::parallel::process_group_type::type - process_group_type; - - process_group_type process_group() const - { - using boost::graph::parallel::process_group; - return process_group(*g); - } - - std::pair vertices() const - { return std::make_pair(all_vertices_->begin(), all_vertices_->end()); } - - vertices_size_type num_vertices() const { return all_vertices_->size(); } - - GlobalIndexMap get_index_map() const { return index_map; } - - private: - const Graph* g; - GlobalIndexMap index_map; - shared_ptr > all_vertices_; -}; - -template -inline vertex_list_adaptor -make_vertex_list_adaptor(const Graph& g, const GlobalIndexMap& index_map) -{ return vertex_list_adaptor(g, index_map); } - -namespace detail { - template - class default_global_index_map - { - typedef typename graph_traits::vertices_size_type value_type; - typedef typename property_map::const_type local_map; - - public: - typedef vector_property_map distributed_map; - typedef stored_global_index_map type; - }; -} - -template -inline -vertex_list_adaptor::type> -make_vertex_list_adaptor(const Graph& g) -{ - typedef typename detail::default_global_index_map::type - GlobalIndexMap; - typedef typename detail::default_global_index_map::distributed_map - DistributedMap; - typedef vertex_list_adaptor result_type; - return result_type(g, - GlobalIndexMap(DistributedMap(num_vertices(g), - get(vertex_index, g)))); -} - -// -------------------------------------------------------------------------- -// Incidence Graph -// -------------------------------------------------------------------------- -template -inline typename vertex_list_adaptor::vertex_descriptor -source(typename vertex_list_adaptor::edge_descriptor e, - const vertex_list_adaptor& g) -{ return source(e, g.base()); } - -template -inline typename vertex_list_adaptor::vertex_descriptor -target(typename vertex_list_adaptor::edge_descriptor e, - const vertex_list_adaptor& g) -{ return target(e, g.base()); } - -template -inline -std::pair::out_edge_iterator, - typename vertex_list_adaptor::out_edge_iterator> -out_edges(typename vertex_list_adaptor::vertex_descriptor v, - const vertex_list_adaptor& g) -{ return out_edges(v, g.base()); } - -template -inline typename vertex_list_adaptor::degree_size_type -out_degree(typename vertex_list_adaptor::vertex_descriptor v, - const vertex_list_adaptor& g) -{ return out_degree(v, g.base()); } - -// -------------------------------------------------------------------------- -// Bidirectional Graph -// -------------------------------------------------------------------------- -template -inline -std::pair::in_edge_iterator, - typename vertex_list_adaptor::in_edge_iterator> -in_edges(typename vertex_list_adaptor::vertex_descriptor v, - const vertex_list_adaptor& g) -{ return in_edges(v, g.base()); } - -template -inline typename vertex_list_adaptor::degree_size_type -in_degree(typename vertex_list_adaptor::vertex_descriptor v, - const vertex_list_adaptor& g) -{ return in_degree(v, g.base()); } - -template -inline typename vertex_list_adaptor::degree_size_type -degree(typename vertex_list_adaptor::vertex_descriptor v, - const vertex_list_adaptor& g) -{ return degree(v, g.base()); } - -// -------------------------------------------------------------------------- -// Adjacency Graph -// -------------------------------------------------------------------------- -template -inline -std::pair::adjacency_iterator, - typename vertex_list_adaptor::adjacency_iterator> -adjacent_vertices(typename vertex_list_adaptor::vertex_descriptor v, - const vertex_list_adaptor& g) -{ return adjacent_vertices(v, g.base()); } - - -// -------------------------------------------------------------------------- -// Vertex List Graph -// -------------------------------------------------------------------------- -template -inline -std::pair::vertex_iterator, - typename vertex_list_adaptor::vertex_iterator> -vertices(const vertex_list_adaptor& g) -{ return g.vertices(); } - -template -inline -typename vertex_list_adaptor::vertices_size_type -num_vertices(const vertex_list_adaptor& g) -{ return g.num_vertices(); } - -// -------------------------------------------------------------------------- -// Edge List Graph -// -------------------------------------------------------------------------- -template -inline -std::pair::edge_iterator, - typename vertex_list_adaptor::edge_iterator> -edges(const vertex_list_adaptor& g) -{ return edges(g.base()); } - -template -inline -typename vertex_list_adaptor::edges_size_type -num_edges(const vertex_list_adaptor& g) -{ return num_edges(g.base()); } - -// -------------------------------------------------------------------------- -// Property Graph -// -------------------------------------------------------------------------- -template -inline typename property_map::type -get(PropertyTag p, vertex_list_adaptor& g) -{ return get(p, g.base()); } - -template -inline typename property_map::const_type -get(PropertyTag p, const vertex_list_adaptor& g) -{ return get(p, g.base()); } - -template -inline typename property_traits< - typename property_map::type - >::value_type -get(PropertyTag p, const vertex_list_adaptor& g, - typename property_traits< - typename property_map::type - >::key_type const& x) -{ return get(p, g.base(), x); } - -template -inline void -put(PropertyTag p, vertex_list_adaptor& g, - typename property_traits< - typename property_map::type - >::key_type const& x, - typename property_traits< - typename property_map::type - >::value_type const& v) -{ return put(p, g.base(), x, v); } - -// -------------------------------------------------------------------------- -// Property Graph: vertex_index property -// -------------------------------------------------------------------------- -template -inline GlobalIndexMap -get(vertex_index_t, const vertex_list_adaptor& g) -{ return g.get_index_map(); } - -template -inline typename vertex_list_adaptor::vertices_size_type -get(vertex_index_t, const vertex_list_adaptor& g, - typename vertex_list_adaptor::vertex_descriptor x) -{ return get(g.get_index_map(), x); } - -// -------------------------------------------------------------------------- -// Adjacency Matrix Graph -// -------------------------------------------------------------------------- -template -std::pair::edge_descriptor, - bool> -edge(typename vertex_list_adaptor::vertex_descriptor u, - typename vertex_list_adaptor::vertex_descriptor v, - vertex_list_adaptor& g) -{ return edge(u, v, g.base()); } - -} } // end namespace boost::graph - -namespace boost { - -// -------------------------------------------------------------------------- -// Property Graph: vertex_index property -// -------------------------------------------------------------------------- -template -class property_map > -{ -public: - typedef GlobalIndexMap type; - typedef type const_type; -}; - -template -class property_map > -{ -public: - typedef GlobalIndexMap type; - typedef type const_type; -}; - -using graph::distribution_global_index_map; -using graph::make_distribution_global_index_map; -using graph::stored_global_index_map; -using graph::make_vertex_list_adaptor; -using graph::vertex_list_adaptor; - -} // end namespace boost - -#endif // BOOST_VERTEX_LIST_ADAPTOR_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/algorithm.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/algorithm.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/algorithm.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/algorithm.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -// Copyright 2004 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_PARALLEL_ALGORITHM_HPP -#define BOOST_PARALLEL_ALGORITHM_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include // for BOOST_STATIC_CONSTANT -#include - -namespace boost { namespace parallel { - template - struct is_commutative - { - BOOST_STATIC_CONSTANT(bool, value = false); - }; - - template - struct minimum - { - typedef T first_argument_type; - typedef T second_argument_type; - typedef T result_type; - const T& operator()(const T& x, const T& y) const { return x < y? x : y; } - }; - - template - struct maximum - { - typedef T first_argument_type; - typedef T second_argument_type; - typedef T result_type; - const T& operator()(const T& x, const T& y) const { return x < y? y : x; } - }; - - template - struct sum - { - typedef T first_argument_type; - typedef T second_argument_type; - typedef T result_type; - const T operator()(const T& x, const T& y) const { return x + y; } - }; - - template - OutputIterator - reduce(ProcessGroup pg, typename ProcessGroup::process_id_type root, - InputIterator first, InputIterator last, OutputIterator out, - BinaryOperation bin_op); - - template - inline T - all_reduce(ProcessGroup pg, const T& value, BinaryOperation bin_op) - { - T result; - all_reduce(pg, - const_cast(&value), const_cast(&value+1), - &result, bin_op); - return result; - } - - template - inline T - scan(ProcessGroup pg, const T& value, BinaryOperation bin_op) - { - T result; - scan(pg, - const_cast(&value), const_cast(&value+1), - &result, bin_op); - return result; - } - - - template - void - all_gather(ProcessGroup pg, InputIterator first, InputIterator last, - std::vector& out); -} } // end namespace boost::parallel - -#include - -#endif // BOOST_PARALLEL_ALGORITHM_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/basic_reduce.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/basic_reduce.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/basic_reduce.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/basic_reduce.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -// Copyright 2005 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -// File moved -#include diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/container_traits.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/container_traits.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/container_traits.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/container_traits.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -// -// This file contains traits that describe -// -#ifndef BOOST_GRAPH_PARALLEL_CONTAINER_TRAITS_HPP -#define BOOST_GRAPH_PARALLEL_CONTAINER_TRAITS_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -namespace boost { namespace graph { namespace parallel { - -template -struct process_group_type -{ - typedef typename T::process_group_type type; -}; - -template -inline typename process_group_type::type -process_group(const T& x) -{ return x.process_group(); } - -// Helper function that algorithms should use to get the process group -// out of a container. -template -inline typename process_group_type::type -process_group_adl(const Container& container) -{ - return process_group(container); -} - - -} } } // end namespace boost::graph::parallel - -#endif // BOOST_GRAPH_PARALLEL_CONTAINER_TRAITS_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/inplace_all_to_all.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/inplace_all_to_all.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/inplace_all_to_all.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/inplace_all_to_all.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -// Copyright 2005 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -#ifndef BOOST_GRAPH_PARALLEL_INPLACE_ALL_TO_ALL_HPP -#define BOOST_GRAPH_PARALLEL_INPLACE_ALL_TO_ALL_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -// -// Implements the inplace all-to-all communication algorithm. -// -#include -#include - -namespace boost { namespace parallel { - -template -// where {LinearProcessGroup, MessagingProcessGroup} -void -inplace_all_to_all(ProcessGroup pg, - const std::vector >& outgoing, - std::vector >& incoming) -{ - typedef typename std::vector::size_type size_type; - - typedef typename ProcessGroup::process_size_type process_size_type; - typedef typename ProcessGroup::process_id_type process_id_type; - - process_size_type p = num_processes(pg); - - // Make sure there are no straggling messages - synchronize(pg); - - // Send along the count (always) and the data (if count > 0) - for (process_id_type dest = 0; dest < p; ++dest) { - if (dest != process_id(pg)) { - send(pg, dest, 0, outgoing[dest].size()); - if (!outgoing[dest].empty()) - send(pg, dest, 1, &outgoing[dest].front(), outgoing[dest].size()); - } - } - - // Make sure all of the data gets transferred - synchronize(pg); - - // Receive the sizes and data - for (process_id_type source = 0; source < p; ++source) { - if (source != process_id(pg)) { - size_type size; - receive(pg, source, 0, size); - incoming[source].resize(size); - if (size > 0) - receive(pg, source, 1, &incoming[source].front(), size); - } else if (&incoming != &outgoing) { - incoming[source] = outgoing[source]; - } - } -} - -template -// where {LinearProcessGroup, MessagingProcessGroup} -void -inplace_all_to_all(ProcessGroup pg, std::vector >& data) -{ - inplace_all_to_all(pg, data, data); -} - -} } // end namespace boost::parallel - -#endif // BOOST_GRAPH_PARALLEL_INPLACE_ALL_TO_ALL_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/property_holders.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/property_holders.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/property_holders.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/property_holders.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,153 +0,0 @@ -// Copyright (C) 2007 Douglas Gregor and Matthias Troyer -// -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// -// This file contains helper data structures for use in transmitting -// properties. The basic idea is to optimize away any storage for the -// properties when no properties are specified. -#ifndef BOOST_PARALLEL_DETAIL_PROPERTY_HOLDERS_HPP -#define BOOST_PARALLEL_DETAIL_PROPERTY_HOLDERS_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include -#include -#include -#include -#include - -namespace boost { namespace detail { namespace parallel { - -/** - * This structure contains an instance of @c Property, unless @c - * Property is a placeholder for "no property". Always access the - * property through @c get_property. Typically used as a base class. - */ -template -struct maybe_store_property -{ - maybe_store_property() {} - maybe_store_property(const Property& p) : p(p) {} - - Property& get_property() { return p; } - const Property& get_property() const { return p; } - -private: - Property p; - - friend class boost::serialization::access; - - template - void serialize(Archiver& ar, const unsigned int /*version*/) - { - ar & p; - } -}; - -template<> -struct maybe_store_property -{ - maybe_store_property() {} - maybe_store_property(no_property) {} - - no_property get_property() const { return no_property(); } - -private: - friend class boost::serialization::access; - - template - void serialize(Archiver&, const unsigned int /*version*/) { } -}; - -/** - * This structure is a simple pair that also contains a property. - */ -template -class pair_with_property - : public boost::parallel::detail::untracked_pair - , public maybe_store_property -{ -public: - typedef boost::parallel::detail::untracked_pair pair_base; - typedef maybe_store_property property_base; - - pair_with_property() { } - - pair_with_property(const T& t, const U& u, const Property& property) - : pair_base(t, u), property_base(property) { } - -private: - friend class boost::serialization::access; - - template - void serialize(Archiver& ar, const unsigned int /*version*/) - { - ar & boost::serialization::base_object(*this) - & boost::serialization::base_object(*this); - } -}; - -template -inline pair_with_property -make_pair_with_property(const T& t, const U& u, const Property& property) -{ - return pair_with_property(t, u, property); -} - -} } } // end namespace boost::parallel::detail - -namespace boost { namespace mpi { - -template<> -struct is_mpi_datatype > : mpl::true_ { }; - -template -struct is_mpi_datatype > - : is_mpi_datatype { }; - -template -struct is_mpi_datatype > - : boost::mpl::and_ >, - is_mpi_datatype > { }; - -} } // end namespace boost::mpi - -BOOST_IS_BITWISE_SERIALIZABLE(boost::detail::parallel::maybe_store_property) - -namespace boost { namespace serialization { - -template -struct is_bitwise_serializable > - : is_bitwise_serializable { }; - -template -struct implementation_level > - : mpl::int_ {} ; - -template -struct tracking_level > - : mpl::int_ {} ; - -template -struct is_bitwise_serializable< - boost::detail::parallel::pair_with_property > - : boost::mpl::and_ >, - is_bitwise_serializable > { }; - -template -struct implementation_level< - boost::detail::parallel::pair_with_property > - : mpl::int_ {} ; - -template -struct tracking_level< - boost::detail::parallel::pair_with_property > - : mpl::int_ {} ; - -} } // end namespace boost::serialization - -#endif // BOOST_PARALLEL_DETAIL_PROPERTY_HOLDERS_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/untracked_pair.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/untracked_pair.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/untracked_pair.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/detail/untracked_pair.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -// Copyright (C) 2007 Matthias Troyer -// -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// -// This file contains helper data structures for use in transmitting -// properties. The basic idea is to optimize away any storage for the -// properties when no properties are specified. - -// File moved -#include diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/process_group.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/process_group.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/process_group.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/process_group.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -// Copyright 2004 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -// File moved -#include diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/properties.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/properties.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/properties.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/properties.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -// Copyright 2004 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -#ifndef BOOST_GRAPH_PARALLEL_PROPERTIES_HPP -#define BOOST_GRAPH_PARALLEL_PROPERTIES_HPP - -#ifndef BOOST_GRAPH_USE_MPI -#error "Parallel BGL files should not be included unless has been included" -#endif - -#include -#include - -namespace boost { - /*************************************************************************** - * Property map reduction operations - ***************************************************************************/ - /** - * Metafunction that produces a reduction operation for the given - * property. The default behavior merely forwards to @ref - * basic_reduce, but it is expected that this class template will be - * specified for important properties. - */ - template - struct property_reduce - { - template - class apply : public parallel::basic_reduce {}; - }; - - /** - * Reduction of vertex colors can only darken, not lighten, the - * color. Black cannot turn black, grey can only turn black, and - * white can be changed to either color. The default color is white. - */ - template<> - struct property_reduce - { - template - class apply - { - typedef color_traits traits; - - public: - BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); - - template - Color operator()(const Key&) const { return traits::white(); } - - template - Color operator()(const Key&, Color local, Color remote) const { - if (local == traits::white()) return remote; - else if (remote == traits::black()) return remote; - else return local; - } - }; - }; - - /** - * Reduction of a distance always takes the shorter distance. The - * default distance value is the maximum value for the data type. - */ - template<> - struct property_reduce - { - template - class apply - { - public: - BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); - - template - T operator()(const Key&) const { return (std::numeric_limits::max)(); } - - template - T operator()(const Key&, T x, T y) const { return x < y? x : y; } - }; - }; - - template<> - struct property_reduce - { - template - class apply - { - public: - BOOST_STATIC_CONSTANT(bool, non_default_resolver = true); - - template - T operator()(Key key) const { return key; } - template - T operator()(Key key, T, T y) const { return y; } - }; - }; - - template - inline void set_property_map_role(Property p, PropertyMap pm) - { - typedef typename property_traits::value_type value_type; - typedef property_reduce property_red; - typedef typename property_red::template apply reduce; - - pm.set_reduce(reduce()); - } - -} // end namespace boost -#endif // BOOST_GRAPH_PARALLEL_PROPERTIES_HPP diff -Nru boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/simple_trigger.hpp boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/simple_trigger.hpp --- boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/simple_trigger.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/graph/parallel/simple_trigger.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -// Copyright (C) 2007 Douglas Gregor - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// This file contains a simplification of the "trigger" method for -// process groups. The simple trigger handles the common case where -// the handler associated with a trigger is a member function bound to -// a particular pointer. - -// File moved -#include diff -Nru boost1.81-1.81.0/libs/graph/include/boost/pending/detail/int_iterator.hpp boost1.81-1.81.0/libs/graph/include/boost/pending/detail/int_iterator.hpp --- boost1.81-1.81.0/libs/graph/include/boost/pending/detail/int_iterator.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/pending/detail/int_iterator.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -// (C) Copyright Jeremy Siek 1999. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef BOOST_INT_ITERATOR_H -#define BOOST_INT_ITERATOR_H - -#if !defined BOOST_MSVC -#include -#endif -#include -#include -#include -//using namespace std; - -#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE -namespace boost { -namespace iterators { -#endif - -// this should use random_access_iterator_helper but I've had -// VC++ portablility problems with that. -JGS -template -class int_iterator -{ - typedef int_iterator self; -public: - typedef std::random_access_iterator_tag iterator_category; - typedef IntT value_type; - typedef IntT& reference; - typedef IntT* pointer; - typedef std::ptrdiff_t difference_type; - - inline int_iterator() : _i(0) { } - inline int_iterator(IntT i) : _i(i) { } - inline int_iterator(const self& x) : _i(x._i) { } - inline self& operator=(const self& x) { _i = x._i; return *this; } - inline IntT operator*() { return _i; } - inline IntT operator[](IntT n) { return _i + n; } - inline self& operator++() { ++_i; return *this; } - inline self operator++(int) { self t = *this; ++_i; return t; } - inline self& operator+=(IntT n) { _i += n; return *this; } - inline self operator+(IntT n) { self t = *this; t += n; return t; } - inline self& operator--() { --_i; return *this; } - inline self operator--(int) { self t = *this; --_i; return t; } - inline self& operator-=(IntT n) { _i -= n; return *this; } - inline IntT operator-(const self& x) const { return _i - x._i; } - inline bool operator==(const self& x) const { return _i == x._i; } - // vc++ had a problem finding != in random_access_iterator_helper - // need to look into this... for now implementing everything here -JGS - inline bool operator!=(const self& x) const { return _i != x._i; } - inline bool operator<(const self& x) const { return _i < x._i; } - inline bool operator<=(const self& x) const { return _i <= x._i; } - inline bool operator>(const self& x) const { return _i > x._i; } - inline bool operator>=(const self& x) const { return _i >= x._i; } -protected: - IntT _i; -}; - -template -inline int_iterator -operator+(IntT n, int_iterator t) { t += n; return t; } - -#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE -} /* namespace iterators */ - -using iterators::int_iterator; - -} /* namespace boost */ -#endif - -#ifdef BOOST_NO_OPERATORS_IN_NAMESPACE -namespace boost { -using ::int_iterator; -namespace iterators { -using ::int_iterator; -}} -#endif - - -#endif /* BOOST_INT_ITERATOR_H */ diff -Nru boost1.81-1.81.0/libs/graph/include/boost/pending/integer_log2.hpp boost1.81-1.81.0/libs/graph/include/boost/pending/integer_log2.hpp --- boost1.81-1.81.0/libs/graph/include/boost/pending/integer_log2.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/pending/integer_log2.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -#ifndef BOOST_PENDING_INTEGER_LOG2_HPP -#define BOOST_PENDING_INTEGER_LOG2_HPP - -#include -#include - -BOOST_HEADER_DEPRECATED(""); - -#endif diff -Nru boost1.81-1.81.0/libs/graph/include/boost/pending/iterator_adaptors.hpp boost1.81-1.81.0/libs/graph/include/boost/pending/iterator_adaptors.hpp --- boost1.81-1.81.0/libs/graph/include/boost/pending/iterator_adaptors.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/pending/iterator_adaptors.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -// Copyright David Abrahams 2003. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include diff -Nru boost1.81-1.81.0/libs/graph/include/boost/pending/iterator_tests.hpp boost1.81-1.81.0/libs/graph/include/boost/pending/iterator_tests.hpp --- boost1.81-1.81.0/libs/graph/include/boost/pending/iterator_tests.hpp 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph/include/boost/pending/iterator_tests.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,288 +0,0 @@ -// Copyright David Abrahams and Jeremy Siek 2003. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_ITERATOR_TESTS_HPP -# define BOOST_ITERATOR_TESTS_HPP - -// This is meant to be the beginnings of a comprehensive, generic -// test suite for STL concepts such as iterators and containers. -// -// Revision History: -// 28 Apr 2002 Fixed input iterator requirements. -// For a == b a++ == b++ is no longer required. -// See 24.1.1/3 for details. -// (Thomas Witt) -// 08 Feb 2001 Fixed bidirectional iterator test so that -// --i is no longer a precondition. -// (Jeremy Siek) -// 04 Feb 2001 Added lvalue test, corrected preconditions -// (David Abrahams) - -# include -# include -# include // for detail::dummy_constructor -# include -# include -# include -# include -# include -# include - -namespace boost { - - // use this for the value type -struct dummyT { - dummyT() { } - dummyT(detail::dummy_constructor) { } - dummyT(int x) : m_x(x) { } - int foo() const { return m_x; } - bool operator==(const dummyT& d) const { return m_x == d.m_x; } - int m_x; -}; - -} - -namespace boost { -namespace iterators { - -// Tests whether type Iterator satisfies the requirements for a -// TrivialIterator. -// Preconditions: i != j, *i == val -template -void trivial_iterator_test(const Iterator i, const Iterator j, T val) -{ - Iterator k; - BOOST_TEST(i == i); - BOOST_TEST(j == j); - BOOST_TEST(i != j); -#ifdef BOOST_NO_STD_ITERATOR_TRAITS - T v = *i; -#else - typename std::iterator_traits::value_type v = *i; -#endif - BOOST_TEST(v == val); - boost::ignore_unused(v); -#if 0 - // hmm, this will give a warning for transform_iterator... perhaps - // this should be separated out into a stand-alone test since there - // are several situations where it can't be used, like for - // integer_range::iterator. - BOOST_TEST(v == i->foo()); -#endif - k = i; - BOOST_TEST(k == k); - BOOST_TEST(k == i); - BOOST_TEST(k != j); - BOOST_TEST(*k == val); - boost::ignore_unused(k); -} - - -// Preconditions: i != j -template -void mutable_trivial_iterator_test(const Iterator i, const Iterator j, T val) -{ - *i = val; - trivial_iterator_test(i, j, val); -} - - -// Preconditions: *i == v1, *++i == v2 -template -void input_iterator_test(Iterator i, T v1, T v2) -{ - Iterator i1(i); - - BOOST_TEST(i == i1); - BOOST_TEST(!(i != i1)); - - // I can see no generic way to create an input iterator - // that is in the domain of== of i and != i. - // The following works for istream_iterator but is not - // guaranteed to work for arbitrary input iterators. - // - // Iterator i2; - // - // BOOST_TEST(i != i2); - // BOOST_TEST(!(i == i2)); - - BOOST_TEST(*i1 == v1); - BOOST_TEST(*i == v1); - - // we cannot test for equivalence of (void)++i & (void)i++ - // as i is only guaranteed to be single pass. - BOOST_TEST(*i++ == v1); - boost::ignore_unused(i1); - - i1 = i; - - BOOST_TEST(i == i1); - BOOST_TEST(!(i != i1)); - - BOOST_TEST(*i1 == v2); - BOOST_TEST(*i == v2); - boost::ignore_unused(i1); - - // i is dereferencable, so it must be incrementable. - ++i; - - // how to test for operator-> ? -} - -// how to test output iterator? - - -template struct lvalue_test -{ - template static void check(Iterator) - { -# ifndef BOOST_NO_STD_ITERATOR_TRAITS - typedef typename std::iterator_traits::reference reference; - typedef typename std::iterator_traits::value_type value_type; -# else - typedef typename Iterator::reference reference; - typedef typename Iterator::value_type value_type; -# endif - BOOST_STATIC_ASSERT(boost::is_reference::value); - BOOST_STATIC_ASSERT((boost::is_same::value - || boost::is_same::value - )); - } -}; - -# ifdef BOOST_NO_STD_ITERATOR_TRAITS -template <> struct lvalue_test { - template static void check(T) {} -}; -#endif - -template -void forward_iterator_test(Iterator i, T v1, T v2) -{ - input_iterator_test(i, v1, v2); - - Iterator i1 = i, i2 = i; - - BOOST_TEST(i == i1++); - BOOST_TEST(i != ++i2); - - trivial_iterator_test(i, i1, v1); - trivial_iterator_test(i, i2, v1); - - ++i; - BOOST_TEST(i == i1); - BOOST_TEST(i == i2); - ++i1; - ++i2; - - trivial_iterator_test(i, i1, v2); - trivial_iterator_test(i, i2, v2); - - // borland doesn't allow non-type template parameters -# if !defined(BOOST_BORLANDC) || (BOOST_BORLANDC > 0x551) - lvalue_test<(boost::is_pointer::value)>::check(i); -#endif -} - -// Preconditions: *i == v1, *++i == v2 -template -void bidirectional_iterator_test(Iterator i, T v1, T v2) -{ - forward_iterator_test(i, v1, v2); - ++i; - - Iterator i1 = i, i2 = i; - - BOOST_TEST(i == i1--); - BOOST_TEST(i != --i2); - - trivial_iterator_test(i, i1, v2); - trivial_iterator_test(i, i2, v2); - - --i; - BOOST_TEST(i == i1); - BOOST_TEST(i == i2); - ++i1; - ++i2; - - trivial_iterator_test(i, i1, v1); - trivial_iterator_test(i, i2, v1); -} - -// mutable_bidirectional_iterator_test - -template struct undefined; - -// Preconditions: [i,i+N) is a valid range -template -void random_access_iterator_test(Iterator i, int N, TrueVals vals) -{ - bidirectional_iterator_test(i, vals[0], vals[1]); - const Iterator j = i; - int c; - - typedef typename std::iterator_traits::value_type value_type; - boost::ignore_unused(); - - for (c = 0; c < N-1; ++c) { - BOOST_TEST(i == j + c); - BOOST_TEST(*i == vals[c]); - BOOST_TEST(*i == boost::implicit_cast(j[c])); - BOOST_TEST(*i == *(j + c)); - BOOST_TEST(*i == *(c + j)); - ++i; - BOOST_TEST(i > j); - BOOST_TEST(i >= j); - BOOST_TEST(j <= i); - BOOST_TEST(j < i); - } - - Iterator k = j + N - 1; - for (c = 0; c < N-1; ++c) { - BOOST_TEST(i == k - c); - BOOST_TEST(*i == vals[N - 1 - c]); - BOOST_TEST(*i == boost::implicit_cast(j[N - 1 - c])); - Iterator q = k - c; - boost::ignore_unused(q); - BOOST_TEST(*i == *q); - BOOST_TEST(i > j); - BOOST_TEST(i >= j); - BOOST_TEST(j <= i); - BOOST_TEST(j < i); - --i; - } -} - -// Precondition: i != j -template -void const_nonconst_iterator_test(Iterator i, ConstIterator j) -{ - BOOST_TEST(i != j); - BOOST_TEST(j != i); - - ConstIterator k(i); - BOOST_TEST(k == i); - BOOST_TEST(i == k); - - k = i; - BOOST_TEST(k == i); - BOOST_TEST(i == k); - boost::ignore_unused(k); -} - -} // namespace iterators - -using iterators::undefined; -using iterators::trivial_iterator_test; -using iterators::mutable_trivial_iterator_test; -using iterators::input_iterator_test; -using iterators::lvalue_test; -using iterators::forward_iterator_test; -using iterators::bidirectional_iterator_test; -using iterators::random_access_iterator_test; -using iterators::const_nonconst_iterator_test; - -} // namespace boost - -#endif // BOOST_ITERATOR_TESTS_HPP diff -Nru boost1.81-1.81.0/libs/graph_parallel/.gitattributes boost1.81-1.81.0/libs/graph_parallel/.gitattributes --- boost1.81-1.81.0/libs/graph_parallel/.gitattributes 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/graph_parallel/.gitattributes 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ -* text=auto !eol svneol=native#text/plain -*.gitattributes text svneol=native#text/plain - -# Scriptish formats -*.bat text svneol=native#text/plain -*.bsh text svneol=native#text/x-beanshell -*.cgi text svneol=native#text/plain -*.cmd text svneol=native#text/plain -*.js text svneol=native#text/javascript -*.php text svneol=native#text/x-php -*.pl text svneol=native#text/x-perl -*.pm text svneol=native#text/x-perl -*.py text svneol=native#text/x-python -*.sh eol=lf svneol=LF#text/x-sh -configure eol=lf svneol=LF#text/x-sh - -# Image formats -*.bmp binary svneol=unset#image/bmp -*.gif binary svneol=unset#image/gif -*.ico binary svneol=unset#image/ico -*.jpeg binary svneol=unset#image/jpeg -*.jpg binary svneol=unset#image/jpeg -*.png binary svneol=unset#image/png -*.tif binary svneol=unset#image/tiff -*.tiff binary svneol=unset#image/tiff -*.svg text svneol=native#image/svg%2Bxml - -# Data formats -*.pdf binary svneol=unset#application/pdf -*.avi binary svneol=unset#video/avi -*.doc binary svneol=unset#application/msword -*.dsp text svneol=crlf#text/plain -*.dsw text svneol=crlf#text/plain -*.eps binary svneol=unset#application/postscript -*.gz binary svneol=unset#application/gzip -*.mov binary svneol=unset#video/quicktime -*.mp3 binary svneol=unset#audio/mpeg -*.ppt binary svneol=unset#application/vnd.ms-powerpoint -*.ps binary svneol=unset#application/postscript -*.psd binary svneol=unset#application/photoshop -*.rdf binary svneol=unset#text/rdf -*.rss text svneol=unset#text/xml -*.rtf binary svneol=unset#text/rtf -*.sln text svneol=native#text/plain -*.swf binary svneol=unset#application/x-shockwave-flash -*.tgz binary svneol=unset#application/gzip -*.vcproj text svneol=native#text/xml -*.vcxproj text svneol=native#text/xml -*.vsprops text svneol=native#text/xml -*.wav binary svneol=unset#audio/wav -*.xls binary svneol=unset#application/vnd.ms-excel -*.zip binary svneol=unset#application/zip - -# Text formats -.htaccess text svneol=native#text/plain -*.bbk text svneol=native#text/xml -*.cmake text svneol=native#text/plain -*.css text svneol=native#text/css -*.dtd text svneol=native#text/xml -*.htm text svneol=native#text/html -*.html text svneol=native#text/html -*.ini text svneol=native#text/plain -*.log text svneol=native#text/plain -*.mak text svneol=native#text/plain -*.qbk text svneol=native#text/plain -*.rst text svneol=native#text/plain -*.sql text svneol=native#text/x-sql -*.txt text svneol=native#text/plain -*.xhtml text svneol=native#text/xhtml%2Bxml -*.xml text svneol=native#text/xml -*.xsd text svneol=native#text/xml -*.xsl text svneol=native#text/xml -*.xslt text svneol=native#text/xml -*.xul text svneol=native#text/xul -*.yml text svneol=native#text/plain -boost-no-inspect text svneol=native#text/plain -CHANGES text svneol=native#text/plain -COPYING text svneol=native#text/plain -INSTALL text svneol=native#text/plain -Jamfile text svneol=native#text/plain -Jamroot text svneol=native#text/plain -Jamfile.v2 text svneol=native#text/plain -Jamrules text svneol=native#text/plain -Makefile* text svneol=native#text/plain -README text svneol=native#text/plain -TODO text svneol=native#text/plain - -# Code formats -*.c text svneol=native#text/plain -*.cpp text svneol=native#text/plain -*.h text svneol=native#text/plain -*.hpp text svneol=native#text/plain -*.ipp text svneol=native#text/plain -*.tpp text svneol=native#text/plain -*.jam text svneol=native#text/plain -*.java text svneol=native#text/plain diff -Nru boost1.81-1.81.0/libs/graph_parallel/include/boost/graph/distributed/adjacency_list.hpp boost1.81-1.81.0/libs/graph_parallel/include/boost/graph/distributed/adjacency_list.hpp --- boost1.81-1.81.0/libs/graph_parallel/include/boost/graph/distributed/adjacency_list.hpp 1970-01-01 00:00:00.000000000 +0000 +++ boost1.81-1.81.0/libs/graph_parallel/include/boost/graph/distributed/adjacency_list.hpp 2022-12-24 13:24:10.797562100 +0000 @@ -0,0 +1,3992 @@ +// Copyright (C) 2004-2006 The Trustees of Indiana University. +// Copyright (C) 2007 Douglas Gregor + +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// Authors: Douglas Gregor +// Andrew Lumsdaine + +#ifndef BOOST_GRAPH_DISTRIBUTED_ADJACENCY_LIST_HPP +#define BOOST_GRAPH_DISTRIBUTED_ADJACENCY_LIST_HPP + +#ifndef BOOST_GRAPH_USE_MPI +#error "Parallel BGL files should not be included unless has been included" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Callbacks +#include + +// Serialization +#include +#include +#include +#include + +// Named vertices +#include + +#include + +namespace boost { + + /// The type used to store an identifier that uniquely names a processor. + // NGE: I doubt we'll be running on more than 32768 procs for the time being + typedef /*int*/ short processor_id_type; + + // Tell which processor the target of an edge resides on (for + // directed graphs) or which processor the other end point of the + // edge resides on (for undirected graphs). + enum edge_target_processor_id_t { edge_target_processor_id }; + BOOST_INSTALL_PROPERTY(edge, target_processor_id); + + // For undirected graphs, tells whether the edge is locally owned. + enum edge_locally_owned_t { edge_locally_owned }; + BOOST_INSTALL_PROPERTY(edge, locally_owned); + + // For bidirectional graphs, stores the incoming edges. + enum vertex_in_edges_t { vertex_in_edges }; + BOOST_INSTALL_PROPERTY(vertex, in_edges); + + /// Tag class for directed, distributed adjacency list + struct directed_distributed_adj_list_tag + : public virtual distributed_graph_tag, + public virtual distributed_vertex_list_graph_tag, + public virtual distributed_edge_list_graph_tag, + public virtual incidence_graph_tag, + public virtual adjacency_graph_tag {}; + + /// Tag class for bidirectional, distributed adjacency list + struct bidirectional_distributed_adj_list_tag + : public virtual distributed_graph_tag, + public virtual distributed_vertex_list_graph_tag, + public virtual distributed_edge_list_graph_tag, + public virtual incidence_graph_tag, + public virtual adjacency_graph_tag, + public virtual bidirectional_graph_tag {}; + + /// Tag class for undirected, distributed adjacency list + struct undirected_distributed_adj_list_tag + : public virtual distributed_graph_tag, + public virtual distributed_vertex_list_graph_tag, + public virtual distributed_edge_list_graph_tag, + public virtual incidence_graph_tag, + public virtual adjacency_graph_tag, + public virtual bidirectional_graph_tag {}; + + namespace detail { + template + void + serialize(Archiver& ar, edge_base& e, + const unsigned int /*version*/) + { + ar & unsafe_serialize(e.m_source) + & unsafe_serialize(e.m_target); + } + + template + void + serialize(Archiver& ar, edge_desc_impl& e, + const unsigned int /*version*/) + { + ar & boost::serialization::base_object >(e) + & unsafe_serialize(e.m_eproperty); + } + } + + namespace detail { namespace parallel { + + /** + * A distributed vertex descriptor. These descriptors contain both + * the ID of the processor that owns the vertex and a local vertex + * descriptor that identifies the particular vertex for that + * processor. + */ + template + struct global_descriptor + { + typedef LocalDescriptor local_descriptor_type; + + global_descriptor() : owner(), local() { } + + global_descriptor(processor_id_type owner, LocalDescriptor local) + : owner(owner), local(local) { } + + processor_id_type owner; + LocalDescriptor local; + + /** + * A function object that, given a processor ID, generates + * distributed vertex descriptors from local vertex + * descriptors. This function object is used by the + * vertex_iterator of the distributed adjacency list. + */ + struct generator + { + typedef global_descriptor result_type; + typedef LocalDescriptor argument_type; + + generator() {} + generator(processor_id_type owner) : owner(owner) {} + + result_type operator()(argument_type v) const + { return result_type(owner, v); } + + private: + processor_id_type owner; + }; + + template + void serialize(Archiver& ar, const unsigned int /*version*/) + { + ar & owner & unsafe_serialize(local); + } + }; + + /// Determine the process that owns the given descriptor + template + inline processor_id_type owner(const global_descriptor& v) + { return v.owner; } + + /// Determine the local portion of the given descriptor + template + inline LocalDescriptor local(const global_descriptor& v) + { return v.local; } + + /// Compare distributed vertex descriptors for equality + template + inline bool + operator==(const global_descriptor& u, + const global_descriptor& v) + { + return u.owner == v.owner && u.local == v.local; + } + + /// Compare distributed vertex descriptors for inequality + template + inline bool + operator!=(const global_descriptor& u, + const global_descriptor& v) + { return !(u == v); } + + template + inline bool + operator<(const global_descriptor& u, + const global_descriptor& v) + { + return (u.owner) < v.owner || (u.owner == v.owner && (u.local) < v.local); + } + + template + inline bool + operator<=(const global_descriptor& u, + const global_descriptor& v) + { + return u.owner <= v.owner || (u.owner == v.owner && u.local <= v.local); + } + + template + inline bool + operator>(const global_descriptor& u, + const global_descriptor& v) + { + return v < u; + } + + template + inline bool + operator>=(const global_descriptor& u, + const global_descriptor& v) + { + return v <= u; + } + + // DPG TBD: Add <, <=, >=, > for global descriptors + + /** + * A Readable Property Map that extracts a global descriptor pair + * from a global_descriptor. + */ + template + struct global_descriptor_property_map + { + typedef std::pair value_type; + typedef value_type reference; + typedef global_descriptor key_type; + typedef readable_property_map_tag category; + }; + + template + inline std::pair + get(global_descriptor_property_map, + global_descriptor x) + { + return std::pair(x.owner, x.local); + } + + /** + * A Readable Property Map that extracts the owner of a global + * descriptor. + */ + template + struct owner_property_map + { + typedef processor_id_type value_type; + typedef value_type reference; + typedef global_descriptor key_type; + typedef readable_property_map_tag category; + }; + + template + inline processor_id_type + get(owner_property_map, + global_descriptor x) + { + return x.owner; + } + + /** + * A Readable Property Map that extracts the local descriptor from + * a global descriptor. + */ + template + struct local_descriptor_property_map + { + typedef LocalDescriptor value_type; + typedef value_type reference; + typedef global_descriptor key_type; + typedef readable_property_map_tag category; + }; + + template + inline LocalDescriptor + get(local_descriptor_property_map, + global_descriptor x) + { + return x.local; + } + + /** + * Stores an incoming edge for a bidirectional distributed + * adjacency list. The user does not see this type directly, + * because it is just an implementation detail. + */ + template + struct stored_in_edge + { + stored_in_edge(processor_id_type sp, Edge e) + : source_processor(sp), e(e) {} + + processor_id_type source_processor; + Edge e; + }; + + /** + * A distributed edge descriptor. These descriptors contain the + * underlying edge descriptor, the processor IDs for both the + * source and the target of the edge, and a boolean flag that + * indicates which of the processors actually owns the edge. + */ + template + struct edge_descriptor + { + edge_descriptor(processor_id_type sp = processor_id_type(), + processor_id_type tp = processor_id_type(), + bool owns = false, Edge ld = Edge()) + : source_processor(sp), target_processor(tp), + source_owns_edge(owns), local(ld) {} + + processor_id_type owner() const + { + return source_owns_edge? source_processor : target_processor; + } + + /// The processor that the source vertex resides on + processor_id_type source_processor; + + /// The processor that the target vertex resides on + processor_id_type target_processor; + + /// True when the source processor owns the edge, false when the + /// target processor owns the edge. + bool source_owns_edge; + + /// The local edge descriptor. + Edge local; + + /** + * Function object that generates edge descriptors for the + * out_edge_iterator of the given distributed adjacency list + * from the edge descriptors of the underlying adjacency list. + */ + template + class out_generator + { + typedef typename Graph::directed_selector directed_selector; + + public: + typedef edge_descriptor result_type; + typedef Edge argument_type; + + out_generator() : g(0) {} + explicit out_generator(const Graph& g) : g(&g) {} + + result_type operator()(argument_type e) const + { return map(e, directed_selector()); } + + private: + result_type map(argument_type e, directedS) const + { + return result_type(g->processor(), + get(edge_target_processor_id, g->base(), e), + true, e); + } + + result_type map(argument_type e, bidirectionalS) const + { + return result_type(g->processor(), + get(edge_target_processor_id, g->base(), e), + true, e); + } + + result_type map(argument_type e, undirectedS) const + { + return result_type(g->processor(), + get(edge_target_processor_id, g->base(), e), + get(edge_locally_owned, g->base(), e), + e); + } + + const Graph* g; + }; + + /** + * Function object that generates edge descriptors for the + * in_edge_iterator of the given distributed adjacency list + * from the edge descriptors of the underlying adjacency list. + */ + template + class in_generator + { + typedef typename Graph::directed_selector DirectedS; + + public: + typedef typename boost::mpl::if_, + stored_in_edge, + Edge>::type argument_type; + typedef edge_descriptor result_type; + + in_generator() : g(0) {} + explicit in_generator(const Graph& g) : g(&g) {} + + result_type operator()(argument_type e) const + { return map(e, DirectedS()); } + + private: + /** + * For a bidirectional graph, we just generate the appropriate + * edge. No tricks. + */ + result_type map(argument_type e, bidirectionalS) const + { + return result_type(e.source_processor, + g->processor(), + true, + e.e); + } + + /** + * For an undirected graph, we generate descriptors for the + * incoming edges by swapping the source/target of the + * underlying edge descriptor (a hack). The target processor + * ID on the edge is actually the source processor for this + * edge, and our processor is the target processor. If the + * edge is locally owned, then it is owned by the target (us); + * otherwise it is owned by the source. + */ + result_type map(argument_type e, undirectedS) const + { + typename Graph::local_edge_descriptor local_edge(e); + // TBD: This is a very, VERY lame hack that takes advantage + // of our knowledge of the internals of the BGL + // adjacency_list. There should be a cleaner way to handle + // this... + using std::swap; + swap(local_edge.m_source, local_edge.m_target); + return result_type(get(edge_target_processor_id, g->base(), e), + g->processor(), + !get(edge_locally_owned, g->base(), e), + local_edge); + } + + const Graph* g; + }; + + private: + friend class boost::serialization::access; + + template + void serialize(Archiver& ar, const unsigned int /*version*/) + { + ar + & source_processor + & target_processor + & source_owns_edge + & local; + } + }; + + /// Determine the process that owns this edge + template + inline processor_id_type + owner(const edge_descriptor& e) + { return e.source_owns_edge? e.source_processor : e.target_processor; } + + /// Determine the local descriptor for this edge. + template + inline Edge + local(const edge_descriptor& e) + { return e.local; } + + /** + * A Readable Property Map that extracts the owner and local + * descriptor of an edge descriptor. + */ + template + struct edge_global_property_map + { + typedef std::pair value_type; + typedef value_type reference; + typedef edge_descriptor key_type; + typedef readable_property_map_tag category; + }; + + template + inline std::pair + get(edge_global_property_map, const edge_descriptor& e) + { + typedef std::pair result_type; + return result_type(e.source_owns_edge? e.source_processor + /* target owns edge*/: e.target_processor, + e.local); + } + + /** + * A Readable Property Map that extracts the owner of an edge + * descriptor. + */ + template + struct edge_owner_property_map + { + typedef processor_id_type value_type; + typedef value_type reference; + typedef edge_descriptor key_type; + typedef readable_property_map_tag category; + }; + + template + inline processor_id_type + get(edge_owner_property_map, const edge_descriptor& e) + { + return e.source_owns_edge? e.source_processor : e.target_processor; + } + + /** + * A Readable Property Map that extracts the local descriptor from + * an edge descriptor. + */ + template + struct edge_local_property_map + { + typedef Edge value_type; + typedef value_type reference; + typedef edge_descriptor key_type; + typedef readable_property_map_tag category; + }; + + template + inline Edge + get(edge_local_property_map, + const edge_descriptor& e) + { + return e.local; + } + + /** Compare distributed edge descriptors for equality. + * + * \todo need edge_descriptor to know if it is undirected so we + * can compare both ways. + */ + template + inline bool + operator==(const edge_descriptor& e1, + const edge_descriptor& e2) + { + return (e1.source_processor == e2.source_processor + && e1.target_processor == e2.target_processor + && e1.local == e2.local); + } + + /// Compare distributed edge descriptors for inequality. + template + inline bool + operator!=(const edge_descriptor& e1, + const edge_descriptor& e2) + { return !(e1 == e2); } + + /** + * Configuration for the distributed adjacency list. We use this + * parameter to store all of the configuration details for the + * implementation of the distributed adjacency list, which allows us to + * get at the distribution type in the maybe_named_graph. + */ + template + struct adjacency_list_config + { + typedef typename mpl::if_, + vecS, InVertexListS>::type + VertexListS; + + /// Introduce the target processor ID property for each edge + typedef property edge_property_with_id; + + /// For undirected graphs, introduce the locally-owned property for edges + typedef typename boost::mpl::if_, + property, + edge_property_with_id>::type + base_edge_property_type; + + /// The edge descriptor type for the local subgraph + typedef typename adjacency_list_traits::edge_descriptor + local_edge_descriptor; + + /// For bidirectional graphs, the type of an incoming stored edge + typedef stored_in_edge bidir_stored_edge; + + /// The container type that will store incoming edges for a + /// bidirectional graph. + typedef typename container_gen::type + in_edge_list_type; + + // Bidirectional graphs have an extra vertex property to store + // the incoming edges. + typedef typename boost::mpl::if_, + property, + VertexProperty>::type + base_vertex_property_type; + + // The type of the distributed adjacency list + typedef adjacency_list, + DirectedS, VertexProperty, EdgeProperty, + GraphProperty, EdgeListS> + graph_type; + + // The type of the underlying adjacency list implementation + typedef adjacency_list + inherited; + + typedef InDistribution in_distribution_type; + typedef typename inherited::vertices_size_type vertices_size_type; + + typedef typename ::boost::graph::distributed::select_distribution< + in_distribution_type, VertexProperty, vertices_size_type, + ProcessGroup>::type + base_distribution_type; + + typedef ::boost::graph::distributed::shuffled_distribution< + base_distribution_type> distribution_type; + + typedef VertexProperty vertex_property_type; + typedef EdgeProperty edge_property_type; + typedef ProcessGroup process_group_type; + + typedef VertexListS vertex_list_selector; + typedef OutEdgeListS out_edge_list_selector; + typedef DirectedS directed_selector; + typedef GraphProperty graph_property_type; + typedef EdgeListS edge_list_selector; + }; + + // Maybe initialize the indices of each vertex + template + void + maybe_initialize_vertex_indices(IteratorPair p, VertexIndexMap to_index, + read_write_property_map_tag) + { + typedef typename property_traits::value_type index_t; + index_t next_index = 0; + while (p.first != p.second) + put(to_index, *p.first++, next_index++); + } + + template + inline void + maybe_initialize_vertex_indices(IteratorPair p, VertexIndexMap to_index, + readable_property_map_tag) + { + // Do nothing + } + + template + inline void + maybe_initialize_vertex_indices(IteratorPair p, VertexIndexMap to_index) + { + typedef typename property_traits::category category; + maybe_initialize_vertex_indices(p, to_index, category()); + } + + template + inline void + maybe_initialize_vertex_indices(IteratorPair p, + ::boost::detail::error_property_not_found) + { } + + /*********************************************************************** + * Message Payloads * + ***********************************************************************/ + + /** + * Data stored with a msg_add_edge message, which requests the + * remote addition of an edge. + */ + template + struct msg_add_edge_data + { + msg_add_edge_data() { } + + msg_add_edge_data(Vertex source, Vertex target) + : source(source.local), target(target) { } + + /// The source of the edge; the processor will be the + /// receiving processor. + LocalVertex source; + + /// The target of the edge. + Vertex target; + + template + void serialize(Archiver& ar, const unsigned int /*version*/) + { + ar & unsafe_serialize(source) & target; + } + }; + + /** + * Like @c msg_add_edge_data, but also includes a user-specified + * property value to be attached to the edge. + */ + template + struct msg_add_edge_with_property_data + : msg_add_edge_data, + maybe_store_property + { + private: + typedef msg_add_edge_data inherited_data; + typedef maybe_store_property inherited_property; + + public: + msg_add_edge_with_property_data() { } + + msg_add_edge_with_property_data(Vertex source, + Vertex target, + const EdgeProperty& property) + : inherited_data(source, target), + inherited_property(property) { } + + template + void serialize(Archiver& ar, const unsigned int /*version*/) + { + ar & boost::serialization::base_object(*this) + & boost::serialization::base_object(*this); + } + }; + + //------------------------------------------------------------------------ + // Distributed adjacency list property map details + /** + * Metafunction that extracts the given property from the given + * distributed adjacency list type. This could be implemented much + * more cleanly, but even newer versions of GCC (e.g., 3.2.3) + * cannot properly handle partial specializations involving + * enumerator types. + */ + template + struct get_adj_list_pmap + { + template + struct apply + { + typedef Graph graph_type; + typedef typename graph_type::process_group_type process_group_type; + typedef typename graph_type::inherited base_graph_type; + typedef typename property_map::type + local_pmap; + typedef typename property_map::const_type + local_const_pmap; + + typedef graph_traits traits; + typedef typename graph_type::local_vertex_descriptor local_vertex; + typedef typename property_traits::key_type local_key_type; + + typedef typename property_traits::value_type value_type; + + typedef typename property_map::const_type + vertex_global_map; + typedef typename property_map::const_type + edge_global_map; + + typedef typename mpl::if_c<(is_same::value), + vertex_global_map, edge_global_map>::type + global_map; + + public: + typedef ::boost::parallel::distributed_property_map< + process_group_type, global_map, local_pmap> type; + + typedef ::boost::parallel::distributed_property_map< + process_group_type, global_map, local_const_pmap> const_type; + }; + }; + + /** + * The local vertex index property map is actually a mapping from + * the local vertex descriptors to vertex indices. + */ + template<> + struct get_adj_list_pmap + { + template + struct apply + : ::boost::property_map + { }; + }; + + /** + * The vertex index property map maps from global descriptors + * (e.g., the vertex descriptor of a distributed adjacency list) + * to the underlying local index. It is not valid to use this + * property map with nonlocal descriptors. + */ + template<> + struct get_adj_list_pmap + { + template + struct apply + { + private: + typedef typename property_map::const_type + global_map; + + typedef property_map local; + + public: + typedef local_property_map type; + typedef local_property_map const_type; + }; + }; + + /** + * The vertex owner property map maps from vertex descriptors to + * the processor that owns the vertex. + */ + template<> + struct get_adj_list_pmap + { + template + struct apply + { + private: + typedef typename Graph::local_vertex_descriptor + local_vertex_descriptor; + public: + typedef global_descriptor_property_map type; + typedef type const_type; + }; + }; + + /** + * The vertex owner property map maps from vertex descriptors to + * the processor that owns the vertex. + */ + template<> + struct get_adj_list_pmap + { + template + struct apply + { + private: + typedef typename Graph::local_vertex_descriptor + local_vertex_descriptor; + public: + typedef owner_property_map type; + typedef type const_type; + }; + }; + + /** + * The vertex local property map maps from vertex descriptors to + * the local descriptor for that vertex. + */ + template<> + struct get_adj_list_pmap + { + template + struct apply + { + private: + typedef typename Graph::local_vertex_descriptor + local_vertex_descriptor; + public: + typedef local_descriptor_property_map type; + typedef type const_type; + }; + }; + + /** + * The edge global property map maps from edge descriptors to + * a pair of the owning processor and local descriptor. + */ + template<> + struct get_adj_list_pmap + { + template + struct apply + { + private: + typedef typename Graph::local_edge_descriptor + local_edge_descriptor; + public: + typedef edge_global_property_map type; + typedef type const_type; + }; + }; + + /** + * The edge owner property map maps from edge descriptors to + * the processor that owns the edge. + */ + template<> + struct get_adj_list_pmap + { + template + struct apply + { + private: + typedef typename Graph::local_edge_descriptor + local_edge_descriptor; + public: + typedef edge_owner_property_map type; + typedef type const_type; + }; + }; + + /** + * The edge local property map maps from edge descriptors to + * the local descriptor for that edge. + */ + template<> + struct get_adj_list_pmap + { + template + struct apply + { + private: + typedef typename Graph::local_edge_descriptor + local_edge_descriptor; + public: + typedef edge_local_property_map type; + typedef type const_type; + }; + }; + //------------------------------------------------------------------------ + + // Directed graphs do not have in edges, so this is a no-op + template + inline void + remove_in_edge(typename Graph::edge_descriptor, Graph&, directedS) + { } + + // Bidirectional graphs have in edges stored in the + // vertex_in_edges property. + template + inline void + remove_in_edge(typename Graph::edge_descriptor e, Graph& g, bidirectionalS) + { + typedef typename Graph::in_edge_list_type in_edge_list_type; + in_edge_list_type& in_edges = + get(vertex_in_edges, g.base())[target(e, g).local]; + typename in_edge_list_type::iterator i = in_edges.begin(); + while (i != in_edges.end() + && !(i->source_processor == source(e, g).owner) + && i->e == e.local) + ++i; + + BOOST_ASSERT(i != in_edges.end()); + in_edges.erase(i); + } + + // Undirected graphs have in edges stored as normal edges. + template + inline void + remove_in_edge(typename Graph::edge_descriptor e, Graph& g, undirectedS) + { + typedef typename Graph::inherited base_type; + typedef typename graph_traits::vertex_descriptor vertex_descriptor; + + // TBD: can we make this more efficient? + // Removing edge (v, u). v is local + base_type& bg = g.base(); + vertex_descriptor u = source(e, g); + vertex_descriptor v = target(e, g); + if (v.owner != process_id(g.process_group())) { + using std::swap; + swap(u, v); + } + + typename graph_traits::out_edge_iterator ei, ei_end; + for (boost::tie(ei, ei_end) = out_edges(v.local, bg); ei != ei_end; ++ei) + { + if (target(*ei, g.base()) == u.local + // TBD: deal with parallel edges properly && *ei == e + && get(edge_target_processor_id, bg, *ei) == u.owner) { + remove_edge(ei, bg); + return; + } + } + + if (v.owner == process_id(g.process_group())) { + + } + } + + //------------------------------------------------------------------------ + // Lazy addition of edges + + // Work around the fact that an adjacency_list with vecS vertex + // storage automatically adds edges when the descriptor is + // out-of-range. + template + inline std::pair + add_local_edge(typename Config::vertex_descriptor u, + typename Config::vertex_descriptor v, + const typename Config::edge_property_type& p, + vec_adj_list_impl& g_) + { + adj_list_helper& g = g_; + return add_edge(u, v, p, g); + } + + template + inline std::pair + add_local_edge(typename Config::vertex_descriptor u, + typename Config::vertex_descriptor v, + const typename Config::edge_property_type& p, + boost::adj_list_impl& g) + { + return add_edge(u, v, p, g); + } + + template + struct msg_nonlocal_edge_data + : public detail::parallel::maybe_store_property + { + typedef EdgeProperty edge_property_type; + typedef EdgeDescriptor local_edge_descriptor; + typedef detail::parallel::maybe_store_property + inherited; + + msg_nonlocal_edge_data() {} + msg_nonlocal_edge_data(local_edge_descriptor e, + const edge_property_type& p) + : inherited(p), e(e) { } + + local_edge_descriptor e; + + template + void serialize(Archiver& ar, const unsigned int /*version*/) + { + ar & boost::serialization::base_object(*this) & e; + } + }; + + template + struct msg_remove_edge_data + { + typedef EdgeDescriptor edge_descriptor; + msg_remove_edge_data() {} + explicit msg_remove_edge_data(edge_descriptor e) : e(e) {} + + edge_descriptor e; + + template + void serialize(Archiver& ar, const unsigned int /*version*/) + { + ar & e; + } + }; + + } } // end namespace detail::parallel + + /** + * Adjacency list traits for a distributed adjacency list. Contains + * the vertex and edge descriptors, the directed-ness, and the + * parallel edges typedefs. + */ + template + struct adjacency_list_traits, + DirectedS> + { + private: + typedef typename mpl::if_, + vecS, + InVertexListS>::type VertexListS; + + typedef adjacency_list_traits + base_type; + + public: + typedef typename base_type::vertex_descriptor local_vertex_descriptor; + typedef typename base_type::edge_descriptor local_edge_descriptor; + + typedef typename boost::mpl::if_::type + >::type directed_category; + + typedef typename parallel_edge_traits::type + edge_parallel_category; + + typedef detail::parallel::global_descriptor + vertex_descriptor; + + typedef detail::parallel::edge_descriptor + edge_descriptor; + }; + +#define PBGL_DISTRIB_ADJLIST_TEMPLATE_PARMS \ + typename OutEdgeListS, typename ProcessGroup, typename InVertexListS, \ + typename InDistribution, typename DirectedS, typename VertexProperty, \ + typename EdgeProperty, typename GraphProperty, typename EdgeListS + +#define PBGL_DISTRIB_ADJLIST_TYPE \ + adjacency_list, \ + DirectedS, VertexProperty, EdgeProperty, GraphProperty, \ + EdgeListS> + +#define PBGL_DISTRIB_ADJLIST_TEMPLATE_PARMS_CONFIG \ + typename OutEdgeListS, typename ProcessGroup, typename InVertexListS, \ + typename InDistribution, typename VertexProperty, \ + typename EdgeProperty, typename GraphProperty, typename EdgeListS + +#define PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directed) \ + adjacency_list, \ + directed, VertexProperty, EdgeProperty, GraphProperty, \ + EdgeListS> + + /** A distributed adjacency list. + * + * This class template partial specialization defines a distributed + * (or "partitioned") adjacency list graph. The distributed + * adjacency list is similar to the standard Boost Graph Library + * adjacency list, which stores a list of vertices and for each + * verted the list of edges outgoing from the vertex (and, in some + * cases, also the edges incoming to the vertex). The distributed + * adjacency list differs in that it partitions the graph into + * several subgraphs that are then divided among different + * processors (or nodes within a cluster). The distributed adjacency + * list attempts to maintain a high degree of compatibility with the + * standard, non-distributed adjacency list. + * + * The graph is partitioned by vertex, with each processor storing + * all of the required information for a particular subset of the + * vertices, including vertex properties, outgoing edges, and (for + * bidirectional graphs) incoming edges. This information is + * accessible only on the processor that owns the vertex: for + * instance, if processor 0 owns vertex @c v, no other processor can + * directly access the properties of @c v or enumerate its outgoing + * edges. + * + * Edges in a graph may be entirely local (connecting two local + * vertices), but more often it is the case that edges are + * non-local, meaning that the two vertices they connect reside in + * different processes. Edge properties are stored with the + * originating vertex for directed and bidirectional graphs, and are + * therefore only accessible from the processor that owns the + * originating vertex. Other processors may query the source and + * target of the edge, but cannot access its properties. This is + * particularly interesting when accessing the incoming edges of a + * bidirectional graph, which are not guaranteed to be stored on the + * processor that is able to perform the iteration. For undirected + * graphs the situation is more complicated, since no vertex clearly + * owns the edges: the list of edges incident to a vertex may + * contain a mix of local and non-local edges. + * + * The distributed adjacency list is able to model several of the + * existing Graph concepts. It models the Graph concept because it + * exposes vertex and edge descriptors in the normal way; these + * descriptors model the GlobalDescriptor concept (because they have + * an owner and a local descriptor), and as such the distributed + * adjacency list models the DistributedGraph concept. The adjacency + * list also models the IncidenceGraph and AdjacencyGraph concepts, + * although this is only true so long as the domain of the valid + * expression arguments are restricted to vertices and edges stored + * locally. Likewise, bidirectional and undirected distributed + * adjacency lists model the BidirectionalGraph concept (vertex and + * edge domains must be respectived) and the distributed adjacency + * list models the MutableGraph concept (vertices and edges can only + * be added or removed locally). T he distributed adjacency list + * does not, however, model the VertexListGraph or EdgeListGraph + * concepts, because we can not efficiently enumerate all vertices + * or edges in the graph. Instead, the local subsets of vertices and + * edges can be enumerated (with the same syntax): the distributed + * adjacency list therefore models the DistributedVertexListGraph + * and DistributedEdgeListGraph concepts, because concurrent + * iteration over all of the vertices or edges stored on each + * processor will visit each vertex or edge. + * + * The distributed adjacency list is distinguished from the + * non-distributed version by the vertex list descriptor, which will + * be @c distributedS. Here, + * the VertexListS type plays the same role as the VertexListS type + * in the non-distributed adjacency list: it allows one to select + * the data structure that will be used to store the local + * vertices. The ProcessGroup type, on the other hand, is unique to + * distributed data structures: it is the type that abstracts a + * group of cooperating processes, and it used for process + * identification, communication, and synchronization, among other + * things. Different process group types represent different + * communication mediums (e.g., MPI, PVM, TCP) or different models + * of communication (LogP, CGM, BSP, synchronous, etc.). This + * distributed adjacency list assumes a model based on non-blocking + * sends. + * + * Distribution of vertices across different processors is + * accomplished in two different ways. When initially constructing + * the graph, the user may provide a distribution object (that + * models the Distribution concept), which will determine the + * distribution of vertices to each process. Additionally, the @c + * add_vertex and @c add_edge operations add vertices or edges + * stored on the local processor. For @c add_edge, this is + * accomplished by requiring that the source vertex of the new edge + * be local to the process executing @c add_edge. + * + * Internal properties of a distributed adjacency list are + * accessible in the same manner as internal properties for a + * non-distributed adjacency list for local vertices or + * edges. Access to properties for remote vertices or edges occurs + * with the same syntax, but involve communication with the owner of + * the information: for more information, refer to class template + * @ref distributed_property_map, which manages distributed + * property maps. Note that the distributed property maps created + * for internal properties determine their reduction operation via + * the metafunction @ref property_reduce, which for the vast + * majority of uses is correct behavior. + * + * Communication among the processes coordinating on a particular + * distributed graph relies on non-blocking message passing along + * with synchronization. Local portions of the distributed graph may + * be modified concurrently, including the introduction of non-local + * edges, but prior to accessing the graph it is recommended that + * the @c synchronize free function be invoked on the graph to clear + * up any pending interprocess communication and modifications. All + * processes will then be released from the synchronization barrier + * concurrently. + * + * \todo Determine precisely what we should do with nonlocal edges + * in undirected graphs. Our parallelization of certain algorithms + * relies on the ability to access edge property maps immediately + * (e.g., edge_weight_t), so it may be necessary to duplicate the + * edge properties in both processes (but then we need some form of + * coherence protocol). + * + * \todo What does the user do if @c property_reduce doesn't do the + * right thing? + */ + template + class adjacency_list, + DirectedS, VertexProperty, + EdgeProperty, GraphProperty, EdgeListS> + : // Support for named vertices + public graph::distributed::maybe_named_graph< + adjacency_list, + DirectedS, VertexProperty, + EdgeProperty, GraphProperty, EdgeListS>, + typename adjacency_list_traits, + DirectedS>::vertex_descriptor, + typename adjacency_list_traits, + DirectedS>::edge_descriptor, + detail::parallel::adjacency_list_config > + { + typedef detail::parallel::adjacency_list_config + config_type; + + typedef adjacency_list_traits, + DirectedS> + traits_type; + + typedef typename DirectedS::is_directed_t is_directed; + + typedef EdgeListS edge_list_selector; + + public: + /// The container type that will store incoming edges for a + /// bidirectional graph. + typedef typename config_type::in_edge_list_type in_edge_list_type; +// typedef typename inherited::edge_descriptor edge_descriptor; + + /// The type of the underlying adjacency list implementation + typedef typename config_type::inherited inherited; + + /// The type of properties stored in the local subgraph + /// Bidirectional graphs have an extra vertex property to store + /// the incoming edges. + typedef typename inherited::vertex_property_type + base_vertex_property_type; + + /// The type of the distributed adjacency list (this type) + typedef typename config_type::graph_type graph_type; + + /// Expose graph components and graph category + typedef typename traits_type::local_vertex_descriptor + local_vertex_descriptor; + typedef typename traits_type::local_edge_descriptor + local_edge_descriptor; + typedef typename traits_type::vertex_descriptor vertex_descriptor; + typedef typename traits_type::edge_descriptor edge_descriptor; + + typedef typename traits_type::directed_category directed_category; + typedef typename inherited::edge_parallel_category + edge_parallel_category; + typedef typename inherited::graph_tag graph_tag; + + // Current implementation requires the ability to have parallel + // edges in the underlying adjacency_list. Which processor each + // edge refers to is attached as an internal property. TBD: + // remove this restriction, which may require some rewriting. + BOOST_STATIC_ASSERT((is_same::value)); + + /** Determine the graph traversal category. + * + * A directed distributed adjacency list models the Distributed + * Graph, Incidence Graph, and Adjacency Graph + * concepts. Bidirectional and undirected graphs also model the + * Bidirectional Graph concept. Note that when modeling these + * concepts the domains of certain operations (e.g., in_edges) + * are restricted; see the distributed adjacency_list + * documentation. + */ + typedef typename boost::mpl::if_< + is_same, + directed_distributed_adj_list_tag, + typename boost::mpl::if_, + bidirectional_distributed_adj_list_tag, + undirected_distributed_adj_list_tag>::type> + ::type traversal_category; + + typedef typename inherited::degree_size_type degree_size_type; + typedef typename inherited::vertices_size_type vertices_size_type; + typedef typename inherited::edges_size_type edges_size_type; + typedef VertexProperty vertex_property_type; + typedef EdgeProperty edge_property_type; + typedef typename inherited::graph_property_type graph_property_type; + typedef typename inherited::vertex_bundled vertex_bundled; + typedef typename inherited::edge_bundled edge_bundled; + typedef typename inherited::graph_bundled graph_bundled; + + typedef typename container_gen::type + local_edge_list_type; + + private: + typedef typename boost::mpl::if_, + typename in_edge_list_type::const_iterator, + typename inherited::out_edge_iterator>::type + base_in_edge_iterator; + + typedef typename inherited::out_edge_iterator base_out_edge_iterator; + typedef typename graph_traits::edge_iterator + base_edge_iterator; + typedef typename inherited::edge_property_type base_edge_property_type; + + typedef typename local_edge_list_type::const_iterator + undirected_edge_iterator; + + typedef InDistribution in_distribution_type; + + typedef parallel::trigger_receive_context trigger_receive_context; + + public: + /// Iterator over the (local) vertices of the graph + typedef transform_iterator + vertex_iterator; + + /// Helper for out_edge_iterator + typedef typename edge_descriptor::template out_generator + out_edge_generator; + + /// Iterator over the outgoing edges of a vertex + typedef transform_iterator + out_edge_iterator; + + /// Helper for in_edge_iterator + typedef typename edge_descriptor::template in_generator + in_edge_generator; + + /// Iterator over the incoming edges of a vertex + typedef transform_iterator + in_edge_iterator; + + /// Iterator over the neighbors of a vertex + typedef boost::adjacency_iterator< + adjacency_list, vertex_descriptor, out_edge_iterator, + typename std::iterator_traits + ::difference_type> + adjacency_iterator; + + /// Iterator over the (local) edges in a graph + typedef typename boost::mpl::if_, + undirected_edge_iterator, + transform_iterator + >::type + edge_iterator; + + public: + /// The type of the mixin for named vertices + typedef graph::distributed::maybe_named_graph + named_graph_mixin; + + /// Process group used for communication + typedef ProcessGroup process_group_type; + + /// How to refer to a process + typedef typename process_group_type::process_id_type process_id_type; + + /// Whether this graph is directed, undirected, or bidirectional + typedef DirectedS directed_selector; + + // Structure used for the lazy addition of vertices + struct lazy_add_vertex_with_property; + friend struct lazy_add_vertex_with_property; + + // Structure used for the lazy addition of edges + struct lazy_add_edge; + friend struct lazy_add_edge; + + // Structure used for the lazy addition of edges with properties + struct lazy_add_edge_with_property; + friend struct lazy_add_edge_with_property; + + /// default_distribution_type is the type of the distribution used if the + /// user didn't specify an explicit one + typedef typename graph::distributed::select_distribution< + InDistribution, VertexProperty, vertices_size_type, + ProcessGroup>::default_type + default_distribution_type; + + /// distribution_type is the type of the distribution instance stored in + /// the maybe_named_graph base class + typedef typename graph::distributed::select_distribution< + InDistribution, VertexProperty, vertices_size_type, + ProcessGroup>::type + base_distribution_type; + + typedef graph::distributed::shuffled_distribution< + base_distribution_type> distribution_type; + + private: + // FIXME: the original adjacency_list contained this comment: + // Default copy constructor and copy assignment operators OK??? TBD + // but the adj_list_impl contained these declarations: + adjacency_list(const adjacency_list& other); + adjacency_list& operator=(const adjacency_list& other); + + public: + adjacency_list(const ProcessGroup& pg = ProcessGroup()) + : named_graph_mixin(pg, default_distribution_type(pg, 0)), + m_local_graph(GraphProperty()), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + } + + adjacency_list(const ProcessGroup& pg, + const base_distribution_type& distribution) + : named_graph_mixin(pg, distribution), + m_local_graph(GraphProperty()), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + } + + adjacency_list(const GraphProperty& g, + const ProcessGroup& pg = ProcessGroup()) + : named_graph_mixin(pg, default_distribution_type(pg, 0)), + m_local_graph(g), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + } + + adjacency_list(vertices_size_type n, + const GraphProperty& p, + const ProcessGroup& pg, + const base_distribution_type& distribution) + : named_graph_mixin(pg, distribution), + m_local_graph(distribution.block_size(process_id(pg), n), p), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + + detail::parallel::maybe_initialize_vertex_indices(vertices(base()), + get(vertex_index, base())); + } + + adjacency_list(vertices_size_type n, + const ProcessGroup& pg, + const base_distribution_type& distribution) + : named_graph_mixin(pg, distribution), + m_local_graph(distribution.block_size(process_id(pg), n), GraphProperty()), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + + detail::parallel::maybe_initialize_vertex_indices(vertices(base()), + get(vertex_index, base())); + } + + adjacency_list(vertices_size_type n, + const GraphProperty& p, + const ProcessGroup& pg = ProcessGroup()) + : named_graph_mixin(pg, default_distribution_type(pg, n)), + m_local_graph(this->distribution().block_size(process_id(pg), n), p), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + + detail::parallel::maybe_initialize_vertex_indices(vertices(base()), + get(vertex_index, base())); + } + + adjacency_list(vertices_size_type n, + const ProcessGroup& pg = ProcessGroup()) + : named_graph_mixin(pg, default_distribution_type(pg, n)), + m_local_graph(this->distribution().block_size(process_id(pg), n), + GraphProperty()), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + + detail::parallel::maybe_initialize_vertex_indices(vertices(base()), + get(vertex_index, base())); + } + + /* + * We assume that every processor sees the same list of edges, so + * they skip over any that don't originate from themselves. This + * means that programs switching between a local and a distributed + * graph will keep the same semantics. + */ + template + adjacency_list(EdgeIterator first, EdgeIterator last, + vertices_size_type n, + const ProcessGroup& pg = ProcessGroup(), + const GraphProperty& p = GraphProperty()) + : named_graph_mixin(pg, default_distribution_type(pg, n)), + m_local_graph(this->distribution().block_size(process_id(pg), n), p), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + + typedef typename config_type::VertexListS vertex_list_selector; + initialize(first, last, n, this->distribution(), vertex_list_selector()); + detail::parallel::maybe_initialize_vertex_indices(vertices(base()), + get(vertex_index, base())); + + } + + template + adjacency_list(EdgeIterator first, EdgeIterator last, + EdgePropertyIterator ep_iter, + vertices_size_type n, + const ProcessGroup& pg = ProcessGroup(), + const GraphProperty& p = GraphProperty()) + : named_graph_mixin(pg, default_distribution_type(pg, n)), + m_local_graph(this->distribution().block_size(process_id(pg), n), p), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + + typedef typename config_type::VertexListS vertex_list_selector; + initialize(first, last, ep_iter, n, this->distribution(), + vertex_list_selector()); + detail::parallel::maybe_initialize_vertex_indices(vertices(base()), + get(vertex_index, base())); + + } + + template + adjacency_list(EdgeIterator first, EdgeIterator last, + vertices_size_type n, + const ProcessGroup& pg, + const base_distribution_type& distribution, + const GraphProperty& p = GraphProperty()) + : named_graph_mixin(pg, distribution), + m_local_graph(distribution.block_size(process_id(pg), n), p), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + + typedef typename config_type::VertexListS vertex_list_selector; + initialize(first, last, n, this->distribution(), vertex_list_selector()); + detail::parallel::maybe_initialize_vertex_indices(vertices(base()), + get(vertex_index, base())); + + } + + template + adjacency_list(EdgeIterator first, EdgeIterator last, + EdgePropertyIterator ep_iter, + vertices_size_type n, + const ProcessGroup& pg, + const base_distribution_type& distribution, + const GraphProperty& p = GraphProperty()) + : named_graph_mixin(pg, distribution), + m_local_graph(this->distribution().block_size(process_id(pg), n), p), + process_group_(pg, boost::parallel::attach_distributed_object()) + { + setup_triggers(); + + typedef typename config_type::VertexListS vertex_list_selector; + initialize(first, last, ep_iter, n, distribution, + vertex_list_selector()); + detail::parallel::maybe_initialize_vertex_indices(vertices(base()), + get(vertex_index, base())); + + } + + ~adjacency_list() + { + synchronize(process_group_); + } + + void clear() + { + base().clear(); + local_edges_.clear(); + named_graph_mixin::clearing_graph(); + } + + void swap(adjacency_list& other) + { + using std::swap; + + base().swap(other); + swap(process_group_, other.process_group_); + } + + static vertex_descriptor null_vertex() + { + return vertex_descriptor(processor_id_type(0), + inherited::null_vertex()); + } + + inherited& base() { return m_local_graph; } + const inherited& base() const { return m_local_graph; } + + processor_id_type processor() const { return process_id(process_group_); } + process_group_type process_group() const { return process_group_.base(); } + + local_edge_list_type& local_edges() { return local_edges_; } + const local_edge_list_type& local_edges() const { return local_edges_; } + + // Redistribute the vertices of the graph by placing each vertex + // v on the processor get(vertex_to_processor, v). + template + void redistribute(VertexProcessorMap vertex_to_processor); + + // Directly access a vertex or edge bundle + vertex_bundled& operator[](vertex_descriptor v) + { + BOOST_ASSERT(v.owner == processor()); + return base()[v.local]; + } + + const vertex_bundled& operator[](vertex_descriptor v) const + { + BOOST_ASSERT(v.owner == processor()); + return base()[v.local]; + } + + edge_bundled& operator[](edge_descriptor e) + { + BOOST_ASSERT(e.owner() == processor()); + return base()[e.local]; + } + + const edge_bundled& operator[](edge_descriptor e) const + { + BOOST_ASSERT(e.owner() == processor()); + return base()[e.local]; + } + + graph_bundled& operator[](graph_bundle_t) + { return get_property(*this); } + + graph_bundled const& operator[](graph_bundle_t) const + { return get_property(*this); } + + template + void save(std::string const& filename) const; + + template + void load(std::string const& filename); + + // Callback that will be invoked whenever a new vertex is added locally + boost::function on_add_vertex; + + // Callback that will be invoked whenever a new edge is added locally + boost::function on_add_edge; + + private: + // Request vertex->processor mapping for neighbors + template + void + request_in_neighbors(vertex_descriptor, + VertexProcessorMap, + directedS) { } + + // Request vertex->processor mapping for neighbors + template + void + request_in_neighbors(vertex_descriptor, + VertexProcessorMap, + undirectedS) { } + + // Request vertex->processor mapping for neighbors + template + void + request_in_neighbors(vertex_descriptor v, + VertexProcessorMap vertex_to_processor, + bidirectionalS); + + // Clear the list of in-edges, but don't tell the remote processor + void clear_in_edges_local(vertex_descriptor v, directedS) {} + void clear_in_edges_local(vertex_descriptor v, undirectedS) {} + + void clear_in_edges_local(vertex_descriptor v, bidirectionalS) + { get(vertex_in_edges, base())[v.local].clear(); } + + // Remove in-edges that have migrated + template + void + remove_migrated_in_edges(vertex_descriptor, + VertexProcessorMap, + directedS) { } + + // Remove in-edges that have migrated + template + void + remove_migrated_in_edges(vertex_descriptor, + VertexProcessorMap, + undirectedS) { } + + // Remove in-edges that have migrated + template + void + remove_migrated_in_edges(vertex_descriptor v, + VertexProcessorMap vertex_to_processor, + bidirectionalS); + + // Initialize the graph with the given edge list and vertex + // distribution. This variation works only when + // VertexListS=vecS, and we know how to create remote vertex + // descriptors based solely on the distribution. + template + void + initialize(EdgeIterator first, EdgeIterator last, + vertices_size_type, const base_distribution_type& distribution, + vecS); + + // Initialize the graph with the given edge list, edge + // properties, and vertex distribution. This variation works + // only when VertexListS=vecS, and we know how to create remote + // vertex descriptors based solely on the distribution. + template + void + initialize(EdgeIterator first, EdgeIterator last, + EdgePropertyIterator ep_iter, + vertices_size_type, const base_distribution_type& distribution, + vecS); + + // Initialize the graph with the given edge list, edge + // properties, and vertex distribution. + template + void + initialize(EdgeIterator first, EdgeIterator last, + EdgePropertyIterator ep_iter, + vertices_size_type n, + const base_distribution_type& distribution, + VertexListS); + + // Initialize the graph with the given edge list and vertex + // distribution. This is nearly identical to the one below it, + // for which I should be flogged. However, this version does use + // slightly less memory than the version that accepts an edge + // property iterator. + template + void + initialize(EdgeIterator first, EdgeIterator last, + vertices_size_type n, + const base_distribution_type& distribution, + VertexListS); + + public: + //--------------------------------------------------------------------- + // Build a vertex property instance for the underlying adjacency + // list from the given property instance of the type exposed to + // the user. + base_vertex_property_type + build_vertex_property(const vertex_property_type& p) + { return build_vertex_property(p, directed_selector()); } + + base_vertex_property_type + build_vertex_property(const vertex_property_type& p, directedS) + { + return base_vertex_property_type(p); + } + + base_vertex_property_type + build_vertex_property(const vertex_property_type& p, bidirectionalS) + { + return base_vertex_property_type(in_edge_list_type(), p); + } + + base_vertex_property_type + build_vertex_property(const vertex_property_type& p, undirectedS) + { + return base_vertex_property_type(p); + } + //--------------------------------------------------------------------- + + //--------------------------------------------------------------------- + // Build an edge property instance for the underlying adjacency + // list from the given property instance of the type exposed to + // the user. + base_edge_property_type build_edge_property(const edge_property_type& p) + { return build_edge_property(p, directed_selector()); } + + base_edge_property_type + build_edge_property(const edge_property_type& p, directedS) + { + return base_edge_property_type(0, p); + } + + base_edge_property_type + build_edge_property(const edge_property_type& p, bidirectionalS) + { + return base_edge_property_type(0, p); + } + + base_edge_property_type + build_edge_property(const edge_property_type& p, undirectedS) + { + typedef typename base_edge_property_type::next_type + edge_property_with_id; + return base_edge_property_type(true, edge_property_with_id(0, p)); + } + //--------------------------------------------------------------------- + + //--------------------------------------------------------------------- + // Opposite of above. + edge_property_type split_edge_property(const base_edge_property_type& p) + { return split_edge_property(p, directed_selector()); } + + edge_property_type + split_edge_property(const base_edge_property_type& p, directedS) + { + return p.m_base; + } + + edge_property_type + split_edge_property(const base_edge_property_type& p, bidirectionalS) + { + return p.m_base; + } + + edge_property_type + split_edge_property(const base_edge_property_type& p, undirectedS) + { + return p.m_base.m_base; + } + //--------------------------------------------------------------------- + + /** The set of messages that can be transmitted and received by + * a distributed adjacency list. This list will eventually be + * exhaustive, but is currently quite limited. + */ + enum { + /** + * Request to add or find a vertex with the given vertex + * property. The data will be a vertex_property_type + * structure. + */ + msg_add_vertex_with_property = 0, + + /** + * Request to add or find a vertex with the given vertex + * property, and request that the remote processor return the + * descriptor for the added/found edge. The data will be a + * vertex_property_type structure. + */ + msg_add_vertex_with_property_and_reply, + + /** + * Reply to a msg_add_vertex_* message, containing the local + * vertex descriptor that was added or found. + */ + msg_add_vertex_reply, + + /** + * Request to add an edge remotely. The data will be a + * msg_add_edge_data structure. + */ + msg_add_edge, + + /** + * Request to add an edge remotely. The data will be a + * msg_add_edge_with_property_data structure. + */ + msg_add_edge_with_property, + + /** + * Request to add an edge remotely and reply back with the + * edge descriptor. The data will be a + * msg_add_edge_data structure. + */ + msg_add_edge_with_reply, + + /** + * Request to add an edge remotely and reply back with the + * edge descriptor. The data will be a + * msg_add_edge_with_property_data structure. + */ + msg_add_edge_with_property_and_reply, + + /** + * Reply message responding to an @c msg_add_edge_with_reply + * or @c msg_add_edge_with_property_and_reply messages. The + * data will be a std::pair. + */ + msg_add_edge_reply, + + /** + * Indicates that a nonlocal edge has been created that should + * be added locally. Only valid for bidirectional and + * undirected graphs. The message carries a + * msg_nonlocal_edge_data structure. + */ + msg_nonlocal_edge, + + /** + * Indicates that a remote edge should be removed. This + * message does not exist for directedS graphs but may refer + * to either in-edges or out-edges for undirectedS graphs. + */ + msg_remove_edge, + + /** + * Indicates the number of vertices and edges that will be + * relocated from the source processor to the target + * processor. The data will be a pair. + */ + msg_num_relocated + }; + + typedef detail::parallel::msg_add_edge_data + msg_add_edge_data; + + typedef detail::parallel::msg_add_edge_with_property_data + msg_add_edge_with_property_data; + + typedef boost::detail::parallel::msg_nonlocal_edge_data< + edge_property_type,local_edge_descriptor> msg_nonlocal_edge_data; + + typedef boost::detail::parallel::msg_remove_edge_data + msg_remove_edge_data; + + void send_remove_edge_request(edge_descriptor e) + { + process_id_type dest = e.target_processor; + if (e.target_processor == process_id(process_group_)) + dest = e.source_processor; + send(process_group_, dest, msg_remove_edge, msg_remove_edge_data(e)); + } + + /// Process incoming messages. + void setup_triggers(); + + void + handle_add_vertex_with_property(int source, int tag, + const vertex_property_type&, + trigger_receive_context); + + local_vertex_descriptor + handle_add_vertex_with_property_and_reply(int source, int tag, + const vertex_property_type&, + trigger_receive_context); + + void + handle_add_edge(int source, int tag, const msg_add_edge_data& data, + trigger_receive_context); + + boost::parallel::detail::untracked_pair + handle_add_edge_with_reply(int source, int tag, + const msg_add_edge_data& data, + trigger_receive_context); + + void + handle_add_edge_with_property(int source, int tag, + const msg_add_edge_with_property_data&, + trigger_receive_context); + + boost::parallel::detail::untracked_pair + handle_add_edge_with_property_and_reply + (int source, int tag, const msg_add_edge_with_property_data&, + trigger_receive_context); + + void + handle_nonlocal_edge(int source, int tag, + const msg_nonlocal_edge_data& data, + trigger_receive_context); + + void + handle_remove_edge(int source, int tag, + const msg_remove_edge_data& data, + trigger_receive_context); + + protected: + /** Add an edge (locally) that was received from another + * processor. This operation is a no-op for directed graphs, + * because all edges reside on the local processor. For + * bidirectional graphs, this routine places the edge onto the + * list of incoming edges for the target vertex. For undirected + * graphs, the edge is placed along with all of the other edges + * for the target vertex, but it is marked as a non-local edge + * descriptor. + * + * \todo There is a potential problem here, where we could + * unintentionally allow duplicate edges in undirected graphs + * because the same edge is added on two different processors + * simultaneously. It's not an issue now, because we require + * that the graph allow parallel edges. Once we do support + * containers such as setS or hash_setS that disallow parallel + * edges we will need to deal with this. + */ + void + add_remote_edge(const msg_nonlocal_edge_data&, + processor_id_type, directedS) + { } + + + /** + * \overload + */ + void + add_remote_edge(const msg_nonlocal_edge_data& data, + processor_id_type other_proc, bidirectionalS) + { + typedef detail::parallel::stored_in_edge stored_edge; + + stored_edge edge(other_proc, data.e); + local_vertex_descriptor v = target(data.e, base()); + boost::graph_detail::push(get(vertex_in_edges, base())[v], edge); + } + + /** + * \overload + */ + void + add_remote_edge(const msg_nonlocal_edge_data& data, + processor_id_type other_proc, undirectedS) + { + std::pair edge = + detail::parallel::add_local_edge(target(data.e, base()), + source(data.e, base()), + build_edge_property(data.get_property()), base()); + BOOST_ASSERT(edge.second); + put(edge_target_processor_id, base(), edge.first, other_proc); + + if (edge.second && on_add_edge) + on_add_edge(edge_descriptor(processor(), other_proc, false, + edge.first), + *this); + } + + void + remove_local_edge(const msg_remove_edge_data&, processor_id_type, + directedS) + { } + + void + remove_local_edge(const msg_remove_edge_data& data, + processor_id_type other_proc, bidirectionalS) + { + /* When the source is local, we first check if the edge still + * exists (it may have been deleted locally) and, if so, + * remove it locally. + */ + vertex_descriptor src = source(data.e, *this); + vertex_descriptor tgt = target(data.e, *this); + + if (src.owner == process_id(process_group_)) { + base_out_edge_iterator ei, ei_end; + for (boost::tie(ei, ei_end) = out_edges(src.local, base()); + ei != ei_end; ++ei) { + // TBD: can't check the descriptor here, because it could + // have changed if we're allowing the removal of + // edges. Egads! + if (tgt.local == target(*ei, base()) + && get(edge_target_processor_id, base(), *ei) == other_proc) + break; + } + + if (ei != ei_end) boost::remove_edge(ei, base()); + + remove_local_edge_from_list(src, tgt, undirectedS()); + } else { + BOOST_ASSERT(tgt.owner == process_id(process_group_)); + in_edge_list_type& in_edges = + get(vertex_in_edges, base())[tgt.local]; + typename in_edge_list_type::iterator ei; + for (ei = in_edges.begin(); ei != in_edges.end(); ++ei) { + if (src.local == source(ei->e, base()) + && src.owner == ei->source_processor) + break; + } + + if (ei != in_edges.end()) in_edges.erase(ei); + } + } + + void + remove_local_edge(const msg_remove_edge_data& data, + processor_id_type other_proc, undirectedS) + { + vertex_descriptor local_vertex = source(data.e, *this); + vertex_descriptor remote_vertex = target(data.e, *this); + if (remote_vertex.owner == process_id(process_group_)) { + using std::swap; + swap(local_vertex, remote_vertex); + } + + // Remove the edge from the out-edge list, if it is there + { + base_out_edge_iterator ei, ei_end; + for (boost::tie(ei, ei_end) = out_edges(local_vertex.local, base()); + ei != ei_end; ++ei) { + // TBD: can't check the descriptor here, because it could + // have changed if we're allowing the removal of + // edges. Egads! + if (remote_vertex.local == target(*ei, base()) + && get(edge_target_processor_id, base(), *ei) == other_proc) + break; + } + + if (ei != ei_end) boost::remove_edge(ei, base()); + } + + remove_local_edge_from_list(local_vertex, remote_vertex, undirectedS()); + } + + public: + void + remove_local_edge_from_list(vertex_descriptor, vertex_descriptor, + directedS) + { + } + + void + remove_local_edge_from_list(vertex_descriptor, vertex_descriptor, + bidirectionalS) + { + } + + void + remove_local_edge_from_list(vertex_descriptor src, vertex_descriptor tgt, + undirectedS) + { + // TBD: At some point we'll be able to improve the speed here + // because we'll know when the edge can't be in the local + // list. + { + typename local_edge_list_type::iterator ei; + for (ei = local_edges_.begin(); ei != local_edges_.end(); ++ei) { + if ((source(*ei, *this) == src + && target(*ei, *this) == tgt) + || (source(*ei, *this) == tgt + && target(*ei, *this) == src)) + break; + } + + if (ei != local_edges_.end()) local_edges_.erase(ei); + } + + } + + private: + /// The local subgraph + inherited m_local_graph; + + /// The process group through which this distributed graph + /// communicates. + process_group_type process_group_; + + // TBD: should only be available for undirected graphs, but for + // now it'll just be empty for directed and bidirectional + // graphs. + local_edge_list_type local_edges_; + }; + + //------------------------------------------------------------------------ + // Lazy addition of vertices + template + struct PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_vertex_with_property + { + /// Construct a lazy request to add a vertex + lazy_add_vertex_with_property(adjacency_list& self, + const vertex_property_type& property) + : self(self), property(property), committed(false) { } + + /// Copying a lazy_add_vertex_with_property transfers the + /// responsibility for adding the vertex to the newly-constructed + /// object. + lazy_add_vertex_with_property(const lazy_add_vertex_with_property& other) + : self(other.self), property(other.property), + committed(other.committed) + { + other.committed = true; + } + + /// If the vertex has not yet been added, add the vertex but don't + /// wait for a reply. + ~lazy_add_vertex_with_property(); + + /// Returns commit(). + operator vertex_descriptor() const { return commit(); } + + // Add the vertex. This operation will block if the vertex is + // being added remotely. + vertex_descriptor commit() const; + + protected: + adjacency_list& self; + vertex_property_type property; + mutable bool committed; + + private: + // No copy-assignment semantics + void operator=(lazy_add_vertex_with_property&); + }; + + template + PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_vertex_with_property:: + ~lazy_add_vertex_with_property() + { + /// If this vertex has already been created or will be created by + /// someone else, or if someone threw an exception, we will not + /// create the vertex now. + if (committed || boost::core::uncaught_exceptions() > 0) + return; + + committed = true; + + process_id_type owner + = static_cast(self).owner_by_property(property); + if (owner == self.processor()) { + /// Add the vertex locally. + vertex_descriptor v(owner, + add_vertex(self.build_vertex_property(property), + self.base())); + if (self.on_add_vertex) + self.on_add_vertex(v, self); + } + else + /// Ask the owner of this new vertex to add the vertex. We + /// don't need a reply. + send(self.process_group_, owner, msg_add_vertex_with_property, + property); + } + + template + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor + PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_vertex_with_property:: + commit() const + { + BOOST_ASSERT(!this->committed); + this->committed = true; + + process_id_type owner + = static_cast(self).owner_by_property(property); + local_vertex_descriptor local_v; + if (owner == self.processor()) + /// Add the vertex locally. + local_v = add_vertex(self.build_vertex_property(property), + self.base()); + else { + // Request that the remote process add the vertex immediately + send_oob_with_reply(self.process_group_, owner, + msg_add_vertex_with_property_and_reply, property, + local_v); + } + + vertex_descriptor v(owner, local_v); + if (self.on_add_vertex) + self.on_add_vertex(v, self); + + // Build the full vertex descriptor to return + return v; + } + + + /** + * Data structure returned from add_edge that will "lazily" add + * the edge, either when it is converted to a + * @c pair or when the most recent copy has + * been destroyed. + */ + template + struct PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge + { + /// Construct a lazy request to add an edge + lazy_add_edge(adjacency_list& self, + vertex_descriptor source, vertex_descriptor target) + : self(self), source(source), target(target), committed(false) { } + + /// Copying a lazy_add_edge transfers the responsibility for + /// adding the edge to the newly-constructed object. + lazy_add_edge(const lazy_add_edge& other) + : self(other.self), source(other.source), target(other.target), + committed(other.committed) + { + other.committed = true; + } + + /// If the edge has not yet been added, add the edge but don't + /// wait for a reply. + ~lazy_add_edge(); + + /// Returns commit(). + operator std::pair() const { return commit(); } + + // Add the edge. This operation will block if a remote edge is + // being added. + std::pair commit() const; + + protected: + std::pair + add_local_edge(const edge_property_type& property, directedS) const; + + std::pair + add_local_edge(const edge_property_type& property, bidirectionalS) const; + + std::pair + add_local_edge(const edge_property_type& property, undirectedS) const; + + adjacency_list& self; + vertex_descriptor source; + vertex_descriptor target; + mutable bool committed; + + private: + // No copy-assignment semantics + void operator=(lazy_add_edge&); + }; + + template + PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge::~lazy_add_edge() + { + /// If this edge has already been created or will be created by + /// someone else, or if someone threw an exception, we will not + /// create the edge now. + if (committed || boost::core::uncaught_exceptions() > 0) + return; + + committed = true; + + if (source.owner == self.processor()) + this->add_local_edge(edge_property_type(), DirectedS()); + else + // Request that the remote processor add an edge and, but + // don't wait for a reply. + send(self.process_group_, source.owner, msg_add_edge, + msg_add_edge_data(source, target)); + } + + template + std::pair + PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge::commit() const + { + BOOST_ASSERT(!committed); + committed = true; + + if (source.owner == self.processor()) + return this->add_local_edge(edge_property_type(), DirectedS()); + else { + // Request that the remote processor add an edge + boost::parallel::detail::untracked_pair result; + send_oob_with_reply(self.process_group_, source.owner, + msg_add_edge_with_reply, + msg_add_edge_data(source, target), result); + return result; + } + } + + // Add a local edge into a directed graph + template + std::pair + PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge:: + add_local_edge(const edge_property_type& property, directedS) const + { + // Add the edge to the local part of the graph + std::pair inserted = + detail::parallel::add_local_edge(source.local, target.local, + self.build_edge_property(property), + self.base()); + + if (inserted.second) + // Keep track of the owner of the target + put(edge_target_processor_id, self.base(), inserted.first, + target.owner); + + // Compose the edge descriptor and return the result + edge_descriptor e(source.owner, target.owner, true, inserted.first); + + // Trigger the on_add_edge event + if (inserted.second && self.on_add_edge) + self.on_add_edge(e, self); + + return std::pair(e, inserted.second); + } + + template + std::pair + PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge:: + add_local_edge(const edge_property_type& property, bidirectionalS) const + { + // Add the directed edge. + std::pair result + = this->add_local_edge(property, directedS()); + + if (result.second) { + if (target.owner == self.processor()) { + // Edge is local, so add the stored edge to the in_edges list + typedef detail::parallel::stored_in_edge + stored_edge; + + stored_edge e(self.processor(), result.first.local); + boost::graph_detail::push(get(vertex_in_edges, + self.base())[target.local], e); + } + else { + // Edge is remote, so notify the target's owner that an edge + // has been added. + if (self.process_group_.trigger_context() == boost::parallel::trc_out_of_band) + send_oob(self.process_group_, target.owner, msg_nonlocal_edge, + msg_nonlocal_edge_data(result.first.local, property)); + else + send(self.process_group_, target.owner, msg_nonlocal_edge, + msg_nonlocal_edge_data(result.first.local, property)); + } + } + + return result; + } + + template + std::pair + PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge:: + add_local_edge(const edge_property_type& property, undirectedS) const + { + // Add the directed edge + std::pair result + = this->add_local_edge(property, directedS()); + + if (result.second) { + if (target.owner == self.processor()) { + // Edge is local, so add the new edge to the list + + // TODO: This is not what we want to do for an undirected + // edge, because we haven't linked the source and target's + // representations of those edges. + local_edge_descriptor return_edge = + detail::parallel::add_local_edge(target.local, source.local, + self.build_edge_property(property), + self.base()).first; + + put(edge_target_processor_id, self.base(), return_edge, + source.owner); + } + else { + // Edge is remote, so notify the target's owner that an edge + // has been added. + if (self.process_group_.trigger_context() == boost::parallel::trc_out_of_band) + send_oob(self.process_group_, target.owner, msg_nonlocal_edge, + msg_nonlocal_edge_data(result.first.local, property)); + else + send(self.process_group_, target.owner, msg_nonlocal_edge, + msg_nonlocal_edge_data(result.first.local, property)); + + } + + // Add this edge to the list of local edges + graph_detail::push(self.local_edges(), result.first); + } + + return result; + } + + + /** + * Data structure returned from add_edge that will "lazily" add + * the edge with its property, either when it is converted to a + * pair or when the most recent copy has + * been destroyed. + */ + template + struct PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge_with_property + : lazy_add_edge + { + /// Construct a lazy request to add an edge + lazy_add_edge_with_property(adjacency_list& self, + vertex_descriptor source, + vertex_descriptor target, + const edge_property_type& property) + : lazy_add_edge(self, source, target), property(property) { } + + /// Copying a lazy_add_edge transfers the responsibility for + /// adding the edge to the newly-constructed object. + lazy_add_edge_with_property(const lazy_add_edge& other) + : lazy_add_edge(other), property(other.property) { } + + /// If the edge has not yet been added, add the edge but don't + /// wait for a reply. + ~lazy_add_edge_with_property(); + + /// Returns commit(). + operator std::pair() const { return commit(); } + + // Add the edge. This operation will block if a remote edge is + // being added. + std::pair commit() const; + + private: + // No copy-assignment semantics + void operator=(lazy_add_edge_with_property&); + + edge_property_type property; + }; + + template + PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge_with_property:: + ~lazy_add_edge_with_property() + { + /// If this edge has already been created or will be created by + /// someone else, or if someone threw an exception, we will not + /// create the edge now. + if (this->committed || boost::core::uncaught_exceptions() > 0) + return; + + this->committed = true; + + if (this->source.owner == this->self.processor()) + // Add a local edge + this->add_local_edge(property, DirectedS()); + else + // Request that the remote processor add an edge and, but + // don't wait for a reply. + send(this->self.process_group_, this->source.owner, + msg_add_edge_with_property, + msg_add_edge_with_property_data(this->source, this->target, + property)); + } + + template + std::pair + PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge_with_property:: + commit() const + { + BOOST_ASSERT(!this->committed); + this->committed = true; + + if (this->source.owner == this->self.processor()) + // Add a local edge + return this->add_local_edge(property, DirectedS()); + else { + // Request that the remote processor add an edge + boost::parallel::detail::untracked_pair result; + send_oob_with_reply(this->self.process_group_, this->source.owner, + msg_add_edge_with_property_and_reply, + msg_add_edge_with_property_data(this->source, + this->target, + property), + result); + return result; + } + } + + + /** + * Returns the set of vertices local to this processor. Note that + * although this routine matches a valid expression of a + * VertexListGraph, it does not meet the semantic requirements of + * VertexListGraph because it returns only local vertices (not all + * vertices). + */ + template + std::pair + vertices(const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE + ::vertex_descriptor Vertex; + + typedef typename Vertex::generator generator; + + return std::make_pair(make_transform_iterator(vertices(g.base()).first, + generator(g.processor())), + make_transform_iterator(vertices(g.base()).second, + generator(g.processor()))); + } + + /** + * Returns the number of vertices local to this processor. Note that + * although this routine matches a valid expression of a + * VertexListGraph, it does not meet the semantic requirements of + * VertexListGraph because it returns only a count of local vertices + * (not all vertices). + */ + template + typename PBGL_DISTRIB_ADJLIST_TYPE + ::vertices_size_type + num_vertices(const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + return num_vertices(g.base()); + } + + /*************************************************************************** + * Implementation of Incidence Graph concept + ***************************************************************************/ + /** + * Returns the source of edge @param e in @param g. + */ + template + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor + source(const detail::parallel::edge_descriptor& e, + const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE + ::vertex_descriptor Vertex; + return Vertex(e.source_processor, source(e.local, g.base())); + } + + /** + * Returns the target of edge @param e in @param g. + */ + template + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor + target(const detail::parallel::edge_descriptor& e, + const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE + ::vertex_descriptor Vertex; + return Vertex(e.target_processor, target(e.local, g.base())); + } + + /** + * Return the set of edges outgoing from a particular vertex. The + * vertex @param v must be local to the processor executing this + * routine. + */ + template + std::pair + out_edges(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + BOOST_ASSERT(v.owner == g.processor()); + + typedef PBGL_DISTRIB_ADJLIST_TYPE impl; + typedef typename impl::out_edge_generator generator; + + return std::make_pair( + make_transform_iterator(out_edges(v.local, g.base()).first, + generator(g)), + make_transform_iterator(out_edges(v.local, g.base()).second, + generator(g))); + } + + /** + * Return the number of edges outgoing from a particular vertex. The + * vertex @param v must be local to the processor executing this + * routine. + */ + template + typename PBGL_DISTRIB_ADJLIST_TYPE::degree_size_type + out_degree(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + BOOST_ASSERT(v.owner == g.processor()); + + return out_degree(v.local, g.base()); + } + + /*************************************************************************** + * Implementation of Bidirectional Graph concept + ***************************************************************************/ + /** + * Returns the set of edges incoming to a particular vertex. The + * vertex @param v must be local to the processor executing this + * routine. + */ + template + std::pair + in_edges(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) + ::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) + { + BOOST_ASSERT(v.owner == g.processor()); + + typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) impl; + typedef typename impl::inherited base_graph_type; + typedef typename impl::in_edge_generator generator; + + + typename property_map::const_type + in_edges = get(vertex_in_edges, g.base()); + + return std::make_pair(make_transform_iterator(in_edges[v.local].begin(), + generator(g)), + make_transform_iterator(in_edges[v.local].end(), + generator(g))); + } + + /** + * \overload + */ + template + std::pair + in_edges(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) + ::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) + { + BOOST_ASSERT(v.owner == g.processor()); + + typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) impl; + typedef typename impl::in_edge_generator generator; + + return std::make_pair( + make_transform_iterator(out_edges(v.local, g.base()).first, + generator(g)), + make_transform_iterator(out_edges(v.local, g.base()).second, + generator(g))); + } + + /** + * Returns the number of edges incoming to a particular vertex. The + * vertex @param v must be local to the processor executing this + * routine. + */ + template + typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)::degree_size_type + in_degree(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) + ::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) + { + BOOST_ASSERT(v.owner == g.processor()); + + return get(vertex_in_edges, g.base())[v.local].size(); + } + + /** + * \overload + */ + template + typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)::degree_size_type + in_degree(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) + ::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) + { + BOOST_ASSERT(v.owner == g.processor()); + + return out_degree(v.local, g.base()); + } + + /** + * Returns the number of edges incident on the given vertex. The + * vertex @param v must be local to the processor executing this + * routine. + */ + template + typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) + ::degree_size_type + degree(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) + ::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) + { + BOOST_ASSERT(v.owner == g.processor()); + return out_degree(v.local, g.base()); + } + + /** + * \overload + */ + template + typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) + ::degree_size_type + degree(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) + ::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) + { + BOOST_ASSERT(v.owner == g.processor()); + return out_degree(v, g) + in_degree(v, g); + } + + template + typename PBGL_DISTRIB_ADJLIST_TYPE::edges_size_type + num_edges(const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + return num_edges(g.base()); + } + + template + typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)::edges_size_type + num_edges(const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) + { + return g.local_edges().size(); + } + + template + std::pair< + typename PBGL_DISTRIB_ADJLIST_TYPE::edge_iterator, + typename PBGL_DISTRIB_ADJLIST_TYPE::edge_iterator> + edges(const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE impl; + typedef typename impl::out_edge_generator generator; + + return std::make_pair(make_transform_iterator(edges(g.base()).first, + generator(g)), + make_transform_iterator(edges(g.base()).second, + generator(g))); + } + + template + std::pair< + typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)::edge_iterator, + typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)::edge_iterator> + edges(const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) + { + return std::make_pair(g.local_edges().begin(), g.local_edges().end()); + } + + template + inline + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor + vertex(typename PBGL_DISTRIB_ADJLIST_TYPE::vertices_size_type n, + const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor + vertex_descriptor; + + return vertex_descriptor(g.distribution()(n), g.distribution().local(n)); + } + + /*************************************************************************** + * Access to particular edges + ***************************************************************************/ + template + std::pair< + typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)::edge_descriptor, + bool + > + edge(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)::vertex_descriptor u, + typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS) + ::edge_descriptor edge_descriptor; + + // For directed graphs, u must be local + BOOST_ASSERT(u.owner == process_id(g.process_group())); + + typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS) + ::out_edge_iterator ei, ei_end; + for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) { + if (target(*ei, g) == v) return std::make_pair(*ei, true); + } + return std::make_pair(edge_descriptor(), false); + } + + template + std::pair< + typename PBGL_DISTRIB_ADJLIST_TYPE::edge_descriptor, + bool + > + edge(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE + ::edge_descriptor edge_descriptor; + + // For bidirectional and undirected graphs, u must be local or v + // must be local + if (u.owner == process_id(g.process_group())) { + typename PBGL_DISTRIB_ADJLIST_TYPE::out_edge_iterator ei, ei_end; + for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) { + if (target(*ei, g) == v) return std::make_pair(*ei, true); + } + return std::make_pair(edge_descriptor(), false); + } else if (v.owner == process_id(g.process_group())) { + typename PBGL_DISTRIB_ADJLIST_TYPE::in_edge_iterator ei, ei_end; + for (boost::tie(ei, ei_end) = in_edges(v, g); ei != ei_end; ++ei) { + if (source(*ei, g) == u) return std::make_pair(*ei, true); + } + return std::make_pair(edge_descriptor(), false); + } else { + BOOST_ASSERT(false); + abort(); + } + } + +#if 0 + // TBD: not yet supported + std::pair + edge_range(vertex_descriptor u, vertex_descriptor v, + const adjacency_list& g); +#endif + + /*************************************************************************** + * Implementation of Adjacency Graph concept + ***************************************************************************/ + template + std::pair + adjacent_vertices(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, + const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE::adjacency_iterator iter; + return std::make_pair(iter(out_edges(v, g).first, &g), + iter(out_edges(v, g).second, &g)); + } + + /*************************************************************************** + * Implementation of Mutable Graph concept + ***************************************************************************/ + + /************************************************************************ + * add_edge + ************************************************************************/ + template + typename PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge + add_edge(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, + PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_edge lazy_add_edge; + + return lazy_add_edge(g, u, v); + } + + template + typename PBGL_DISTRIB_ADJLIST_TYPE + ::lazy_add_edge_with_property + add_edge(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, + typename PBGL_DISTRIB_ADJLIST_TYPE::edge_property_type const& p, + PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE + ::lazy_add_edge_with_property lazy_add_edge_with_property; + return lazy_add_edge_with_property(g, u, v, p); + } + + /************************************************************************ + * + * remove_edge + * + ************************************************************************/ + template + void + remove_edge(typename PBGL_DISTRIB_ADJLIST_TYPE::edge_descriptor e, + PBGL_DISTRIB_ADJLIST_TYPE& g) + { + BOOST_ASSERT(source(e, g).owner == g.processor() + || target(e, g).owner == g.processor()); + + if (target(e, g).owner == g.processor()) + detail::parallel::remove_in_edge(e, g, DirectedS()); + if (source(e, g).owner == g.processor()) + remove_edge(e.local, g.base()); + + g.remove_local_edge_from_list(source(e, g), target(e, g), DirectedS()); + + if (source(e, g).owner != g.processor() + || (target(e, g).owner != g.processor() + && !(is_same::value))) { + g.send_remove_edge_request(e); + } + } + + template + void + remove_edge(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v, + PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE + ::edge_descriptor edge_descriptor; + std::pair the_edge = edge(u, v, g); + if (the_edge.second) remove_edge(the_edge.first, g); + } + + template + inline void + remove_edge(typename PBGL_DISTRIB_ADJLIST_TYPE::out_edge_iterator ei, + PBGL_DISTRIB_ADJLIST_TYPE& g) + { + remove_edge(*ei, g); + } + + template + inline void + remove_edge(typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS) + ::out_edge_iterator ei, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)& g) + { + BOOST_ASSERT(source(*ei, g).owner == g.processor()); + remove_edge(ei->local, g.base()); + } + + /************************************************************************ + * + * remove_out_edge_if + * + ************************************************************************/ + namespace parallel { namespace detail { + /** + * Function object that applies the underlying predicate to + * determine if an out-edge should be removed. If so, either + * removes the incoming edge (if it is stored locally) or sends a + * message to the owner of the target requesting that it remove + * the edge. + */ + template + struct remove_out_edge_predicate + { + typedef typename graph_traits::edge_descriptor edge_descriptor; + typedef typename Graph::local_edge_descriptor argument_type; + typedef typename Graph::directed_selector directed_selector; + typedef bool result_type; + + remove_out_edge_predicate(Graph& g, Predicate& predicate) + : g(g), predicate(predicate) { } + + bool operator()(const argument_type& le) + { + typedef typename edge_descriptor::template out_generator + generator; + + edge_descriptor e = generator(g)(le); + + if (predicate(e)) { + if (source(e, g).owner != target(e, g).owner + && !(is_same::value)) + g.send_remove_edge_request(e); + else + ::boost::detail::parallel::remove_in_edge(e, g, + directed_selector()); + + g.remove_local_edge_from_list(source(e, g), target(e, g), + directed_selector()); + return true; + } else return false; + } + + private: + Graph& g; + Predicate predicate; + }; + } } // end namespace parallel::detail + + template + inline void + remove_out_edge_if + (typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, + Predicate predicate, + PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE Graph; + typedef parallel::detail::remove_out_edge_predicate + Pred; + + BOOST_ASSERT(u.owner == g.processor()); + remove_out_edge_if(u.local, Pred(g, predicate), g.base()); + } + + /************************************************************************ + * + * remove_in_edge_if + * + ************************************************************************/ + namespace parallel { namespace detail { + /** + * Function object that applies the underlying predicate to + * determine if an in-edge should be removed. If so, either + * removes the outgoing edge (if it is stored locally) or sends a + * message to the owner of the target requesting that it remove + * the edge. Only required for bidirectional graphs. + */ + template + struct remove_in_edge_predicate + { + typedef typename graph_traits::edge_descriptor edge_descriptor; + typedef bool result_type; + + remove_in_edge_predicate(Graph& g, const Predicate& predicate) + : g(g), predicate(predicate) { } + + template + bool operator()(const StoredEdge& le) + { + typedef typename edge_descriptor::template in_generator + generator; + + edge_descriptor e = generator(g)(le); + + if (predicate(e)) { + if (source(e, g).owner != target(e, g).owner) + g.send_remove_edge_request(e); + else + remove_edge(source(e, g).local, target(e, g).local, g.base()); + return true; + } else return false; + } + + private: + Graph& g; + Predicate predicate; + }; + } } // end namespace parallel::detail + + template + inline void + remove_in_edge_if + (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) + ::vertex_descriptor u, + Predicate predicate, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) Graph; + typedef parallel::detail::remove_in_edge_predicate + Pred; + + BOOST_ASSERT(u.owner == g.processor()); + graph_detail::erase_if(get(vertex_in_edges, g.base())[u.local], + Pred(g, predicate)); + } + + template + inline void + remove_in_edge_if + (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) + ::vertex_descriptor u, + Predicate predicate, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) + { + remove_out_edge_if(u, predicate, g); + } + + /************************************************************************ + * + * remove_edge_if + * + ************************************************************************/ + namespace parallel { namespace detail { + /** + * Function object that applies the underlying predicate to + * determine if a directed edge can be removed. This only applies + * to directed graphs. + */ + template + struct remove_directed_edge_predicate + { + typedef typename Graph::local_edge_descriptor argument_type; + typedef typename graph_traits::edge_descriptor edge_descriptor; + typedef bool result_type; + + remove_directed_edge_predicate(Graph& g, const Predicate& predicate) + : g(g), predicate(predicate) { } + + bool operator()(const argument_type& le) + { + typedef typename edge_descriptor::template out_generator + generator; + + edge_descriptor e = generator(g)(le); + return predicate(e); + } + + private: + Graph& g; + Predicate predicate; + }; + } } // end namespace parallel::detail + + template + inline void + remove_edge_if(Predicate predicate, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS) Graph; + typedef parallel::detail::remove_directed_edge_predicate Pred; + remove_edge_if(Pred(g, predicate), g.base()); + } + + template + inline void + remove_edge_if(Predicate predicate, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) Graph; + typedef parallel::detail::remove_out_edge_predicate Pred; + remove_edge_if(Pred(g, predicate), g.base()); + } + + namespace parallel { namespace detail { + /** + * Function object that applies the underlying predicate to + * determine if an undirected edge should be removed. If so, + * removes the local edges associated with the edge and + * (potentially) sends a message to the remote processor that also + * is removing this edge. + */ + template + struct remove_undirected_edge_predicate + { + typedef typename graph_traits::edge_descriptor argument_type; + typedef bool result_type; + + remove_undirected_edge_predicate(Graph& g, Predicate& predicate) + : g(g), predicate(predicate) { } + + bool operator()(const argument_type& e) + { + if (predicate(e)) { + if (source(e, g).owner != target(e, g).owner) + g.send_remove_edge_request(e); + if (target(e, g).owner == g.processor()) + ::boost::detail::parallel::remove_in_edge(e, g, undirectedS()); + if (source(e, g).owner == g.processor()) + remove_edge(e.local, g.base()); + return true; + } else return false; + } + + private: + Graph& g; + Predicate predicate; + }; + } } // end namespace parallel::detail + + template + inline void + remove_edge_if(Predicate predicate, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) Graph; + typedef parallel::detail::remove_undirected_edge_predicate Pred; + graph_detail::erase_if(g.local_edges(), Pred(g, predicate)); + } + + /************************************************************************ + * + * clear_vertex + * + ************************************************************************/ + namespace parallel { namespace detail { + struct always_true + { + typedef bool result_type; + + template bool operator()(const T&) const { return true; } + }; + } } // end namespace parallel::detail + + template + void + clear_vertex + (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) + ::vertex_descriptor u, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) + { + clear_out_edges(u, g); + clear_in_edges(u, g); + } + + template + void + clear_vertex + (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS) + ::vertex_descriptor u, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(undirectedS)& g) + { + remove_out_edge_if(u, parallel::detail::always_true(), g); + } + + /************************************************************************ + * + * clear_out_edges + * + ************************************************************************/ + template + void + clear_out_edges + (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)::vertex_descriptor u, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(directedS)& g) + { + BOOST_ASSERT(u.owner == g.processor()); + clear_out_edges(u.local, g.base()); + } + + template + void + clear_out_edges + (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) + ::vertex_descriptor u, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) + { + remove_out_edge_if(u, parallel::detail::always_true(), g); + } + + /************************************************************************ + * + * clear_in_edges + * + ************************************************************************/ + template + void + clear_in_edges + (typename PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS) + ::vertex_descriptor u, + PBGL_DISTRIB_ADJLIST_TYPE_CONFIG(bidirectionalS)& g) + { + remove_in_edge_if(u, parallel::detail::always_true(), g); + } + + /************************************************************************ + * + * add_vertex + * + ************************************************************************/ + template + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor + add_vertex(PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE graph_type; + typename graph_type::vertex_property_type p; + return add_vertex(p, g); + } + + template + typename PBGL_DISTRIB_ADJLIST_TYPE::lazy_add_vertex_with_property + add_vertex(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_property_type const& p, + PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE + ::lazy_add_vertex_with_property lazy_add_vertex; + return lazy_add_vertex(g, p); + } + + /************************************************************************ + * + * remove_vertex + * + ************************************************************************/ + template + void + remove_vertex(typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor u, + PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename PBGL_DISTRIB_ADJLIST_TYPE::graph_type graph_type; + typedef typename graph_type::named_graph_mixin named_graph_mixin; + BOOST_ASSERT(u.owner == g.processor()); + static_cast(static_cast(g)) + .removing_vertex(u, boost::graph_detail::iterator_stability(g.base().m_vertices)); + g.distribution().clear(); + remove_vertex(u.local, g.base()); + } + + /*************************************************************************** + * Implementation of Property Graph concept + ***************************************************************************/ + template + struct property_map + : detail::parallel::get_adj_list_pmap + ::template apply + { }; + + template + struct property_map + : boost::detail::parallel::get_adj_list_pmap +// FIXME: in the original code the following was not const + ::template apply + { }; + + template + typename property_map::type + get(Property p, PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE Graph; + typedef typename property_map::type result_type; + typedef typename property_traits::value_type value_type; + typedef typename property_reduce::template apply + reduce; + + typedef typename property_traits::key_type descriptor; + typedef typename graph_traits::vertex_descriptor vertex_descriptor; + typedef typename mpl::if_, + vertex_global_t, edge_global_t>::type + global_map_t; + + return result_type(g.process_group(), get(global_map_t(), g), + get(p, g.base()), reduce()); + } + + template + typename property_map::const_type + get(Property p, const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE Graph; + typedef typename property_map::const_type result_type; + typedef typename property_traits::value_type value_type; + typedef typename property_reduce::template apply + reduce; + + typedef typename property_traits::key_type descriptor; + typedef typename graph_traits::vertex_descriptor vertex_descriptor; + typedef typename mpl::if_, + vertex_global_t, edge_global_t>::type + global_map_t; + + return result_type(g.process_group(), get(global_map_t(), g), + get(p, g.base()), reduce()); + } + + template + typename property_map::type + get(vertex_local_index_t, PBGL_DISTRIB_ADJLIST_TYPE& g) + { + return get(vertex_local_index, g.base()); + } + + template + typename property_map::const_type + get(vertex_local_index_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + return get(vertex_local_index, g.base()); + } + + template + typename property_map::const_type + get(vertex_global_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + vertex_global_t>::const_type result_type; + return result_type(); + } + + template + typename property_map::const_type + get(vertex_global_t, PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + vertex_global_t>::const_type result_type; + return result_type(); + } + + /// Retrieve a property map mapping from a vertex descriptor to its + /// owner. + template + typename property_map::type + get(vertex_owner_t, PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + vertex_owner_t>::type result_type; + return result_type(); + } + + /// Retrieve a property map mapping from a vertex descriptor to its + /// owner. + template + typename property_map::const_type + get(vertex_owner_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + vertex_owner_t>::const_type result_type; + return result_type(); + } + + /// Retrieve the owner of a vertex + template + inline processor_id_type + get(vertex_owner_t, PBGL_DISTRIB_ADJLIST_TYPE&, + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v) + { + return v.owner; + } + + /// Retrieve the owner of a vertex + template + inline processor_id_type + get(vertex_owner_t, const PBGL_DISTRIB_ADJLIST_TYPE&, + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v) + { + return v.owner; + } + + /// Retrieve a property map that maps from a vertex descriptor to + /// its local descriptor. + template + typename property_map::type + get(vertex_local_t, PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + vertex_local_t>::type result_type; + return result_type(); + } + + /// Retrieve a property map that maps from a vertex descriptor to + /// its local descriptor. + template + typename property_map::const_type + get(vertex_local_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + vertex_local_t>::const_type result_type; + return result_type(); + } + + /// Retrieve the local descriptor of a vertex + template + inline typename PBGL_DISTRIB_ADJLIST_TYPE::local_vertex_descriptor + get(vertex_local_t, PBGL_DISTRIB_ADJLIST_TYPE&, + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v) + { + return v.local; + } + + /// Retrieve the local descriptor of a vertex + template + inline typename PBGL_DISTRIB_ADJLIST_TYPE::local_vertex_descriptor + get(vertex_local_t, const PBGL_DISTRIB_ADJLIST_TYPE&, + typename PBGL_DISTRIB_ADJLIST_TYPE::vertex_descriptor v) + { + return v.local; + } + + + template + typename property_map::const_type + get(edge_global_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + edge_global_t>::const_type result_type; + return result_type(); + } + + template + typename property_map::const_type + get(edge_global_t, PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + edge_global_t>::const_type result_type; + return result_type(); + } + + template + typename property_map::type + get(edge_owner_t, PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + edge_owner_t>::type result_type; + return result_type(); + } + + template + typename property_map::const_type + get(edge_owner_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + edge_owner_t>::const_type result_type; + return result_type(); + } + + template + typename property_map::type + get(edge_local_t, PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + edge_local_t>::type result_type; + return result_type(); + } + + template + typename property_map::const_type + get(edge_local_t, const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef typename property_map< + PBGL_DISTRIB_ADJLIST_TYPE, + edge_local_t>::const_type result_type; + return result_type(); + } + + template + inline + typename property_traits::const_type + >::value_type + get(Property p, const PBGL_DISTRIB_ADJLIST_TYPE& g, const Key& key) + { + if (owner(key) == process_id(g.process_group())) + return get(p, g.base(), local(key)); + else + BOOST_ASSERT(false); + } + + template + void + put(Property p, PBGL_DISTRIB_ADJLIST_TYPE& g, const Key& key, const Value& v) + { + if (owner(key) == process_id(g.process_group())) + put(p, g.base(), local(key), v); + else + BOOST_ASSERT(false); + } + + template + typename property_map::type + get(vertex_index_t vi, PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE graph_type; + typedef typename property_map::type + result_type; + return result_type(g.process_group(), get(vertex_global, g), + get(vi, g.base())); + } + + template + typename property_map::const_type + get(vertex_index_t vi, const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE graph_type; + typedef typename property_map::const_type + result_type; + return result_type(g.process_group(), get(vertex_global, g), + get(vi, g.base())); + } + + /*************************************************************************** + * Implementation of bundled properties + ***************************************************************************/ + template + struct property_map + : detail::parallel::get_adj_list_pmap + ::template apply + { }; + + template + struct property_map + : detail::parallel::get_adj_list_pmap + ::template apply + { }; + + template + typename property_map::type + get(T Bundle::* p, PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE Graph; + typedef typename property_map::type result_type; + typedef typename property_traits::value_type value_type; + typedef typename property_reduce::template apply + reduce; + + typedef typename property_traits::key_type descriptor; + typedef typename graph_traits::vertex_descriptor vertex_descriptor; + typedef typename mpl::if_, + vertex_global_t, edge_global_t>::type + global_map_t; + + return result_type(g.process_group(), get(global_map_t(), g), + get(p, g.base()), reduce()); + } + + template + typename property_map::const_type + get(T Bundle::* p, const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + typedef PBGL_DISTRIB_ADJLIST_TYPE Graph; + typedef typename property_map::const_type result_type; + typedef typename property_traits::value_type value_type; + typedef typename property_reduce::template apply + reduce; + + typedef typename property_traits::key_type descriptor; + typedef typename graph_traits::vertex_descriptor vertex_descriptor; + typedef typename mpl::if_, + vertex_global_t, edge_global_t>::type + global_map_t; + + return result_type(g.process_group(), get(global_map_t(), g), + get(p, g.base()), reduce()); + } + + /*************************************************************************** + * Implementation of DistributedGraph concept + ***************************************************************************/ + template + void synchronize(const PBGL_DISTRIB_ADJLIST_TYPE& g) + { + synchronize(g.process_group()); + } + + template + ProcessGroup + process_group(const PBGL_DISTRIB_ADJLIST_TYPE& g) + { return g.process_group(); } + + /*************************************************************************** + * Specializations of is_mpi_datatype for Serializable entities + ***************************************************************************/ + namespace mpi { + template + struct is_mpi_datatype > + : is_mpi_datatype { }; + + template + struct is_mpi_datatype > + : is_mpi_datatype > { }; + + template + struct is_mpi_datatype > + : is_mpi_datatype { }; + + template + struct is_mpi_datatype > + : is_mpi_datatype { }; + + template + struct is_mpi_datatype > + : is_mpi_datatype { }; + + template + struct is_mpi_datatype > + : mpl::and_, is_mpi_datatype > { }; + + + template + struct is_mpi_datatype > + : mpl::and_< + is_mpi_datatype >, + is_mpi_datatype > + {}; + + template + struct is_mpi_datatype< + boost::detail::parallel::msg_remove_edge_data > + : is_mpi_datatype {}; + } + + /*************************************************************************** + * Specializations of is_bitwise_serializable for Serializable entities + ***************************************************************************/ + namespace serialization { + template + struct is_bitwise_serializable > + : is_bitwise_serializable { }; + + template + struct is_bitwise_serializable > + : is_bitwise_serializable > { }; + + template + struct is_bitwise_serializable > + : is_bitwise_serializable { }; + + template + struct is_bitwise_serializable > + : is_bitwise_serializable { }; + + template + struct is_bitwise_serializable > + : is_bitwise_serializable { }; + + template + struct is_bitwise_serializable > + : mpl::and_, + is_bitwise_serializable > { }; + + template + struct is_bitwise_serializable > + : mpl::and_< + is_bitwise_serializable< + boost::detail::parallel::maybe_store_property >, + is_bitwise_serializable > + {}; + + template + struct is_bitwise_serializable< + boost::detail::parallel::msg_remove_edge_data > + : is_bitwise_serializable {}; + + template + struct implementation_level > + : mpl::int_ {}; + + template + struct implementation_level > + : mpl::int_ {}; + + template + struct implementation_level > + : mpl::int_ {}; + + template + struct implementation_level > + : mpl::int_ {}; + + template + struct implementation_level > + : mpl::int_ {}; + + template + struct implementation_level > + : mpl::int_ {}; + + template + struct implementation_level > + : mpl::int_ {}; + + template + struct implementation_level< + boost::detail::parallel::msg_remove_edge_data > + : mpl::int_ {}; + + template + struct tracking_level > + : mpl::int_ {}; + + template + struct tracking_level > + : mpl::int_ {}; + + template + struct tracking_level > + : mpl::int_ {}; + + template + struct tracking_level > + : mpl::int_ {}; + + template + struct tracking_level > + : mpl::int_ {}; + + template + struct tracking_level > + : mpl::int_ {}; + + template + struct tracking_level > + : mpl::int_ {}; + + template + struct tracking_level< + boost::detail::parallel::msg_remove_edge_data > + : mpl::int_ {}; + } + + // Hash function for global descriptors + template + struct hash > + { + typedef detail::parallel::global_descriptor argument_type; + std::size_t operator()(argument_type const& x) const + { + std::size_t hash = hash_value(x.owner); + hash_combine(hash, x.local); + return hash; + } + }; + + // Hash function for parallel edge descriptors + template + struct hash > + { + typedef detail::parallel::edge_descriptor argument_type; + + std::size_t operator()(argument_type const& x) const + { + std::size_t hash = hash_value(x.owner()); + hash_combine(hash, x.local); + return hash; + } + }; + +} // end namespace boost + +#include +#include +#include +#include + +#endif // BOOST_GRAPH_DISTRIBUTED_ADJACENCY_LIST_HPP diff -Nru boost1.81-1.81.0/libs/histogram/doc/reference_pp.xml boost1.81-1.81.0/libs/histogram/doc/reference_pp.xml --- boost1.81-1.81.0/libs/histogram/doc/reference_pp.xml 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/histogram/doc/reference_pp.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,654 +0,0 @@ -
-Includes all standard headers of the Boost.Histogram library. Extra headers not automatically included are: -boost/histogram/ostream.hppboost/histogram/axis/ostream.hppboost/histogram/accumulators/ostream.hppboost/histogram/serialization.hpp
-Includes all accumulator headers of the Boost.Histogram library. Extra header not automatically included: -boost/histogram/accumulators/ostream.hpp
-Includes all algorithm headers of the Boost.Histogram library.
-Includes all axis headers of the Boost.Histogram library. Extra header not automatically included: -boost/histogram/axis/ostream.hpp
-Forward declarations, tag types and type aliases. - - -Another alias for an empty metadata type. null_typeIntegral type for axis indices. intEmpty metadata type. -voidArchive &unsignedReal type for axis indices. doubleDefault storage, optimized for unweighted histograms. unlimited_storage<>Vector-like storage for fast zero-overhead access to cells. storage_adaptor< std::vector< T, A > >Dense storage which tracks means of samples in each cell. dense_storage< accumulators::mean<> > -boost::histogram::utility::binomial_proportion_interval< ValueType >Clopper-Pearson interval. This is the classic frequentist interval obtained with the Neyman construction. It is therefore often called the 'exact' interval. It is guaranteed to have at least the requested confidence level for all values of the fraction.The interval is wider than others that produce coverage closer to the expected confidence level over a random ensemble of factions. The Clopper-Pearson interval essentially always overcovers for such a random ensemble, which is undesirable in practice. The Clopper-Pearson interval is recommended when it is important to be conservative, but the Wilson interval should be preferred in most applications.C. Clopper, E.S. Pearson (1934), Biometrika 26 (4): 404-413. doi:10.1093/biomet/26.4.404. -interval_typevalue_typeNumber of successful trials. value_typeNumber of failed trials. Compute interval for given number of successes and failures. -confidence_leveldeviation{1}Confidence level for the interval. The default value produces a confidence level of 68 % equivalent to one standard deviation. Both deviation andconfidence_level objects can be used to initialize the interval.Construct Clopper-Pearson interval computer. -boost::histogram::utility::binomial_proportion_interval< ValueType >Jeffreys interval. This is the Bayesian credible interval with a Jeffreys prior. Although it has a Bayesian derivation, it has good coverage. The interval boundaries are close to the Wilson interval. A special property of this interval is that it is equal-tailed; the probability of the true value to be above or below the interval is approximately equal.To avoid coverage probability tending to zero when the fraction approaches 0 or 1, this implementation uses a modification described in section 4.1.2 of the paper by L.D. Brown, T.T. Cai, A. DasGupta, Statistical Science 16 (2001) 101-133, doi:10.1214/ss/1009213286. -interval_typevalue_typeNumber of successful trials. value_typeNumber of failed trials. Compute interval for given number of successes and failures. -confidence_leveldeviation{1}Confidence level for the interval. The default value produces a confidence level of 68 % equivalent to one standard deviation. Both deviation andconfidence_level objects can be used to initialize the interval.Construct Jeffreys interval computer. -boost::histogram::utility::binomial_proportion_interval< ValueType >Wald interval or normal approximation interval. The Wald interval is a symmetric interval. It is simple to compute, but has poor statistical properties and is universally rejected by statisticians. It should always be replaced by another iternal, for example, the Wilson interval.The Wald interval can be derived easily using the plug-in estimate of the variance for the binomial distribution, which is likely a reason for its omnipresence. Without further insight into statistical theory, it is not obvious that this derivation is flawed and that better alternatives exist.The Wald interval undercovers on average. It is unsuitable when the sample size is small or when the fraction is close to 0 or 1. e. Its limits are not naturally bounded by 0 or 1. It produces empty intervals if the number of successes or failures is zero.For a critique of the Wald interval, see (a selection):L.D. Brown, T.T. Cai, A. DasGupta, Statistical Science 16 (2001) 101-133. R. D. Cousins, K. E. Hymes, J. Tucker, Nucl. Instrum. Meth. A 612 (2010) 388-398. -interval_typevalue_typeNumber of successful trials. value_typeNumber of failed trials. Compute interval for given number of successes and failures. -deviationdeviation{1.0}Number of standard deviations for the interval. The default value 1 corresponds to a confidence level of 68 %. Both deviation andconfidence_level objects can be used to initialize the interval.Construct Wald interval computer. -boost::histogram::utility::binomial_proportion_interval< ValueType >Wilson interval. The Wilson score interval is simple to compute, has good coverage. Intervals are automatically bounded between 0 and 1 and never empty. The interval is asymmetric.Wilson, E. B. (1927). "Probable inference, the law of succession, and statistical -inference". Journal of the American Statistical Association. 22 (158): 209-212. doi:10.1080/01621459.1927.10502953. JSTOR 2276774.The coverage probability for a random ensemble of fractions is close to the nominal value. Unlike the Clopper-Pearson interval, the Wilson score interval is not conservative. For some values of the fractions, the interval undercovers and overcovers for neighboring values. This is a shared property of all alternatives to the Clopper-Pearson interval.The Wilson score intervals is widely recommended for general use in the literature. For a review of the literature, see R. D. Cousins, K. E. Hymes, J. Tucker, Nucl. Instrum. Meth. A 612 (2010) 388-398. -interval_typevalue_typeNumber of successful trials. value_typeNumber of failed trials. Compute interval for given number of successes and failures. -deviationdeviation{1.0}Number of standard deviations for the interval. The default value 1 corresponds to a confidence level of 68 %. Both deviation andconfidence_level objects can be used to initialize the interval.Construct Wilson interval computer. -Dense storage which tracks sums of weights and a variance estimate. dense_storage< accumulators::weighted_sum<> >Dense storage which tracks means of weighted samples in each cell. dense_storage< accumulators::weighted_mean<> >
- - -Central class of the histogram library. Histogram uses the call operator to insert data, like the Boost.Accumulators.Use factory functions (see make_histogram.hpp andmake_profile.hpp) to conveniently create histograms rather than calling the ctors directly.Use the indexed range generator to iterate over filled histograms, which is convenient and faster than hand-written loops for multi-dimensional histograms. -AxesStoragetypename storage_type::value_typetypename storage_type::iteratortypename storage_type::const_iteratorunspecified -constexpr unsignedNumber of axes (dimensions). std::size_tTotal number of bins (including underflow/overflow). voidReset all bins to default initialized values. decltype(auto)std::integral_constant< unsigned, N >{}Get N-th axis using a compile-time number. This version is more efficient than the one accepting a run-time number. decltype(auto)unsignedGet N-th axis with run-time number. Prefer the version that accepts a compile-time number, if you can use it. autoUnary &&Apply unary functor/function to each axis. iteratorconst T0 &const Ts &...Fill histogram with values, an optional weight, and/or a sample. Returns iterator to located cell.Arguments are passed in order to the axis objects. Passing an argument type that is not convertible to the value type accepted by the axis or passing the wrong number of arguments causes a throw of std::invalid_argument.Optional weightAn optional weight can be passed as the first or last argument with the weight helper function. Compilation fails if the storage elements do not support weights.SamplesIf the storage elements accept samples, pass them with the sample helper function in addition to the axis arguments, which can be the first or last argument. The sample helper function can pass one or more arguments to the storage element. If samples and weights are used together, they can be passed in any order at the beginning or end of the argument list.Axis with multiple argumentsIf the histogram contains an axis which accepts a std::tuple of arguments, the arguments for that axis need to be passed as astd::tuple, for example,std::make_tuple(1.2, 2.3). If the histogram contains only this axis and no other, the arguments can be passed directly.iteratorconst std::tuple< Ts... > &Fill histogram with values, an optional weight, and/or a sample from a std::tuple.voidconst Iterable &iterable as explained in the long description. Fill histogram with several values at once. The argument must be an iterable with a size that matches the rank of the histogram. The element of an iterable may be 1) a value or 2) an iterable over a contiguous sequence of values or 3) a variant of 1) and 2). Sub-iterables must have the same length.Warning: std::vector<bool> is not a contiguous sequence over boolean values because of the infamous vector specialization for booleans. It cannot be used as an argument, but any truely contiguous sequence of boolean values can (std::array<bool, N> orstd::valarray<bool>, for example).Values are passed to the corresponding histogram axis in order. If a single value is passed together with an iterable of values, the single value is treated like an iterable with matching length of copies of this value.If the histogram has only one axis, an iterable of values may be passed directly. -voidconst Iterable &iterable of values. const weight_type< T > &single weight or an iterable of weights. Fill histogram with several values and weights at once. -voidconst weight_type< T > &single weight or an iterable of weights. const Iterable &iterable of values. Fill histogram with several values and weights at once. -voidconst Iterable &iterable of values. const sample_type< std::tuple< Ts... >> &single sample or an iterable of samples. Fill histogram with several values and samples at once. -voidconst sample_type< T > &single sample or an iterable of samples. const Iterable &iterable of values. Fill histogram with several values and samples at once. -voidconst Iterable &const weight_type< T > &const sample_type< std::tuple< Ts... >> &voidconst sample_type< T > &const weight_type< U > &const Iterable &voidconst weight_type< T > &const sample_type< U > &const Iterable &voidconst Iterable &const sample_type< T > &const weight_type< U > &decltype(auto)axis::index_typeindex of first axis. Is...indices of second, third, ... axes. Access cell value at integral indices. You can pass indices as individual arguments, as a std::tuple of integers, or as an interable range of integers. Passing the wrong number of arguments causes a throw of std::invalid_argument. Passing an index which is out of bounds causes a throw of std::out_of_range. - -reference to cell value. decltype(auto)axis::index_typeIs...Access cell value at integral indices (read-only). decltype(auto)const multi_index_type &Access cell value at integral indices stored in iterable. decltype(auto)const multi_index_type &Access cell value at integral indices stored in iterable (read-only). decltype(auto)axis::index_typeAccess value at index (for rank = 1). decltype(auto)axis::index_typeAccess value at index (for rank = 1, read-only). decltype(auto)const multi_index_type &Access value at index tuple. decltype(auto)const multi_index_type &Access value at index tuple (read-only). boolconst histogram< A, S > &Equality operator, tests equality for all axes and the storage. boolconst histogram< A, S > &Negation of the equality operator. histogram &const histogram< A, S > &Add values of another histogram. This operator is only available if the value_type supports operator+=.Both histograms must be compatible to be addable. The histograms are compatible, if the axes are either all identical. If the axes only differ in the states of their discrete growing axis types, then they are also compatible. The discrete growing axes are merged in this case. histogram &const histogram< axes_type, S > &histogram &const histogram< A, S > &Subtract values of another histogram. This operator is only available if the value_type supports operator-=. histogram &const histogram< A, S > &Multiply by values of another histogram. This operator is only available if the value_type supports operator*=. histogram &const histogram< A, S > &Divide by values of another histogram. This operator is only available if the value_type supports operator/=. histogram &const doubleMultiply all values with a scalar. This operator is only available if the value_type supports operator*=. histogram &const doubleDivide all values by a scalar. This operator is only available if operator*= is available. iteratorReturn value iterator to the beginning of the histogram. iteratorReturn value iterator to the end in the histogram. const_iteratorReturn value iterator to the beginning of the histogram (read-only). const_iteratorReturn value iterator to the end in the histogram (read-only). const_iteratorReturn value iterator to the beginning of the histogram (read-only). const_iteratorReturn value iterator to the end in the histogram (read-only). voidArchive &unsignedhistogram< A, S > &&const histogram< A, S > &histogram &histogram< A, S > &&histogram &const histogram< A, S > &A &&StorageAxesAs &&...autoconst histogram< A1, S1 > &const histogram< A2, S2 > &Pairwise multiply cells of two histograms and return histogram with the product. For notes on the returned histogram type, see operator+. autoconst histogram< A, S > &doubleMultiply all cells of the histogram by a number and return a new histogram. If the original histogram has integer cells, the result has double cells. autodoubleconst histogram< A, S > &Multiply all cells of the histogram by a number and return a new histogram. If the original histogram has integer cells, the result has double cells. autoconst histogram< A1, S1 > &const histogram< A2, S2 > &Pairwise add cells of two histograms and return histogram with the sum. The returned histogram type is the most efficient and safest one constructible from the inputs, if they are not the same type. If one histogram has a tuple axis, the result has a tuple axis. The chosen storage is the one with the larger dynamic range. autoconst histogram< A1, S1 > &const histogram< A2, S2 > &Pairwise subtract cells of two histograms and return histogram with the difference. For notes on the returned histogram type, see operator+. autoconst histogram< A1, S1 > &const histogram< A2, S2 > &Pairwise divide cells of two histograms and return histogram with the quotient. For notes on the returned histogram type, see operator+. autoconst histogram< A, S > &doubleDivide all cells of the histogram by a number and return a new histogram. If the original histogram has integer cells, the result has double cells.
- - -iterate over inner bins, exclude underflow and overflow iterate over all bins, including underflow and overflow Coverage mode of the indexed range generator. Defines options for the iteration strategy. autoHistogram &&Reference to the histogram. coveragecoverage::innerIterate over all or only inner bins (optional, default: inner). Generates an indexed range of forward iterators over the histogram cells.Use this in a range-based for loop:for (auto&& x : indexed(hist)) { ... } -This generates an optimized loop which is nearly always faster than a hand-written loop over the histogram cells. The iterators dereference to an indexed_range::accessor, which has methods to query the current indices and bins and acts like a pointer to the cell value. The returned iterators are forward iterators. They can be stored in a container, but may not be used after the life-time of the histogram ends. - -indexed_rangeautoHistogram &&Reference to the histogram. Iterable &&Iterable over items with two axis::index_type values, which mark the begin and end index of each axis. The length of the iterable must be equal to the rank of the histogram. The begin index must be smaller than the end index. Index ranges wider than the actual range are reduced to the actual range including underflow and overflow indices. Generates and indexed range forward iterators over a rectangular region of histogram cells.Use this in a range-based for loop. Example: auto hist = make_histogram(axis::integer<>(0, 4), axis::integer<>(2, 6)); -axis::index_type range[2] = {{1, 3}, {0, 2}}; -for (auto&& x : indexed(hist, range)) { ... } - This skips the first and last index of the first axis, and the last two indices of the second. - -indexed_rangeInput iterator range over histogram bins with multi-dimensional index. The iterator returned by begin() can only be incremented. If several copies of the input iterators exist, the other copies become invalid if one of them is incremented. Lightweight view to access value and index of current cell. The methods provide access to the current cell indices and bins. It acts like a pointer to the cell value, and in a limited way also like a reference. To interoperate with the algorithms of the standard library, the accessor is implicitly convertible to a cell value. Assignments and comparisons are passed through to the cell. An accessor is coupled to its parent indexed_range::iterator. Moving the parent iterator forward also updates the linked accessor. Accessors are not copyable. They cannot be stored in containers, butindexed_range::iterator can be stored.Array-like view into the current multi-dimensional index. unspecifiedconst axis::index_type & -const_iteratorconst_iteratorstd::size_tconst_referenceunsignedconst_referenceunsigned -value_referenceReturns the cell reference. value_referenceReturns the cell reference. value_iteratorAccess fields and methods of the cell object. axis::index_typeunsigned0axis dimension. Access current index. -index_viewAccess indices as an iterable range. decltype(auto)std::integral_constant< unsigned, N >{}Access current bin. -decltype(auto)unsignedaxis dimension. Access current bin. -doubleComputes density in current cell. The density is computed as the cell value divided by the product of bin widths. Axes without bin widths, like axis::category, are treated as having unit bin with.boolconst accessor &boolconst accessor &boolconst accessor &boolconst accessor &boolconst accessor &boolconst accessor &boolconst U &boolconst U &boolconst U &boolconst U &boolconst U &boolconst U &value_typeaccessor &const accessor &accessor &const T &iterator &const accessor &unspecifiedunspecifiedunspecifiedunspecified -iteratoriteratorhistogram_type &coveragehistogram_type &Iterable &&
- - - -autoSuffix operator to generate literal compile-time numbers, 0_c, 12_c, etc.
-Collection of factory functions to conveniently create histograms. - - - - - - - - - -autoAxis &&First axis instance. Axes &&...Other axis instances. Make histogram from compile-time axis configuration and default storage. -autoIterable &&Iterable range of axis objects. Make histogram from iterable range and default storage. -autoIteratorIterator to range of axis objects. IteratorIterator to range of axis objects. Make histogram from iterator interval and default storage. -autoStorage &&Storage or container with standard interface (any vector, array, or map). Axis &&First axis instance. Axes &&...Other axis instances. Make histogram from compile-time axis configuration and custom storage. -autoStorage &&Storage or container with standard interface (any vector, array, or map). Iterable &&Iterable range of axis objects. Make histogram from iterable range and custom storage. -autoStorage &&Storage or container with standard interface (any vector, array, or map). IteratorIterator to range of axis objects. IteratorIterator to range of axis objects. Make histogram from iterator interval and custom storage. -autoAxis &&First axis instance. Axes &&...Other axis instances. Make histogram from compile-time axis configuration and weight-counting storage. -autoIterable &&Iterable range of axis objects. Make histogram from iterable range and weight-counting storage. -autoIteratorIterator to range of axis objects. IteratorIterator to range of axis objects. Make histogram from iterator interval and weight-counting storage. -
-Collection of factory functions to conveniently create profiles. Profiles are histograms which accept an additional sample and compute the mean of the sample in each cell. - - - -autoAxis &&First axis instance. Axes &&...Other axis instances. Make profle from compile-time axis configuration. -autoIterable &&Iterable range of axis objects. Make profile from iterable range. -autoIteratorIterator to range of axis objects. IteratorIterator to range of axis objects. Make profile from iterator interval. -autoAxis &&First axis instance. Axes &&...Other axis instances. Make profle from compile-time axis configuration which accepts weights. -autoIterable &&Iterable range of axis objects. Make profile from iterable range which accepts weights. -autoIteratorIterator to range of axis objects. IteratorIterator to range of axis objects. Make profile from iterator interval which accepts weights. -
- - -Holder for multiple axis indices. Adapts external iterable, tuple, or explicit list of indices to the same representation. axis::index_typevalue_type *const value_type * -multi_indexstd::size_tconstexpr std::size_t -iteratoriteratorconst_iteratorconst_iteratoraxis::index_typeIs...const std::tuple< axis::index_type, Is... > &const Iterable &priv_tagconst T &mp11::index_sequence< Is... >static_cast< std::size_t >(-1)axis::index_typevalue_type *const value_type * -multi_indexstd::size_t -iteratoriteratorconst_iteratorconst_iteratorstd::size_taxis::index_typeIs...const std::tuple< axis::index_type, Is... > &const Iterable &priv_tagstd::size_tconst T &mp11::index_sequence< Ns... >
-A simple streaming operator for the histogram type. The text representation is rudimentary and not guaranteed to be stable between versions of Boost.Histogram. This header is not included by any other header and must be explicitly included to use the streaming operator.To use your own, simply include your own implementation instead of this header. - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -autoTs &&...arguments to be forwarded to the accumulator. Helper function to mark arguments as sample. -Sample holder and type envelope. You should not construct these directly, use the sample() helper function. -T
-Headers from Boost.Serialization needed to serialize STL types that are used internally by the Boost.Histogram classes.
- - -Turns any vector-like, array-like, and map-like container into a storage type. -boolconst U &voidArchive &unsignedstorage_adaptor &&const storage_adaptor &storage_adaptor &storage_adaptor &&storage_adaptor &const storage_adaptor &Ts &&...storage_adaptor &U &&
- - -Memory-efficient storage for integral counters which cannot overflow. This storage provides a no-overflow-guarantee if the counters are incremented with integer weights. It maintains a contiguous array of elemental counters, one for each cell. If an operation is requested which would overflow a counter, the array is replaced with another of a wider integral type, then the operation is executed. The storage uses integers of 8, 16, 32, 64 bits, and then switches to a multiprecision integral type, similar to those in Boost.Multiprecision.A scaling operation or adding a floating point number triggers a conversion of the elemental counters into doubles, which voids the no-overflow-guarantee. unspecifiedunspecifiedAllocatordoubleunspecifiedunspecifiedunspecifiedconstexpr bool -allocator_typevoidstd::size_tstd::size_treferencestd::size_tconst_referencestd::size_tboolconst unlimited_storage &boolconst Iterable &unlimited_storage &const doubleiteratoriteratorconst_iteratorconst_iteratorvoidArchive &unsignedconst allocator_type &{}const unlimited_storage &unlimited_storage &const unlimited_storage &unlimited_storage &&unlimited_storage &unlimited_storage &&const Iterable &unlimited_storage &const Iterable &
- - -Unsafe read/write access to private data that potentially breaks consistency. This struct enables access to private data of some classes. It is intended for library developers who need this to implement algorithms efficiently, for example, serialization. Users should not use this. If you are a user who absolutely needs this to get a specific effect, please submit an issue on Github. Perhaps the public interface is insufficient and should be extended for your use case.Unlike the normal interface, the unsafe_access interface may change between versions. If your code relies onunsafe_access, it may or may not break when you update Boost. This is another reason to not use it unless you are ok with these conditions. -auto &Histogram &histogram. Get axes. -const auto &const Histogram &histogram. Get axes. -decltype(auto)Histogram &histogram. std::integral_constant< unsigned, I >{}Get mutable axis reference with compile-time number. - -decltype(auto)Histogram &histogram. unsignedaxis index. Get mutable axis reference with run-time number. -auto &Histogram &histogram. Get storage. -const auto &const Histogram &histogram. Get storage. -auto &Histogram &histogram Get index offset. -const auto &const Histogram &histogram Get index offset. -constexpr auto &unlimited_storage< Allocator > &instance of unlimited_storage.Get buffer of unlimited_storage. -constexpr auto &storage_adaptor< T > &instance of storage_adaptor.Get implementation of storage_adaptor. -
- - -autoT &&argument to be forward to the histogram. Helper function to mark argument as weight. -Weight holder and type envelope. You should not construct these directly, use the weight() helper function. -TAccess underlying value. -weight_type< U >Allow implicit conversions of types when the underlying value type allows them.
- - - -Wraps a C++ arithmetic type with optionally thread-safe increments and adds. This adaptor optionally uses atomic operations to make concurrent increments and additions thread-safe for the stored arithmetic value, which can be integral or floating point. For small histograms, the performance will still be poor because of False Sharing, see https://en.wikipedia.org/wiki/False_sharing for details.Warning: Assignment is not thread-safe in this implementation, so don't assign concurrently.This wrapper class can be used as a base class by users to add arbitrary metadata to each bin of a histogram.When weighted samples are accumulated and high precision is required, use accumulators::sum instead (at the cost of lower performance). If a local variance estimate for the weight distribution should be computed as well (generally needed for a detailed statistical analysis), useaccumulators::weighted_sum. -ValueTypeconst value_type & -count &Increment count by one. count &const_referenceIncrement count by value. count &const count &Add another count. count &const_referenceScale by value. boolconst count &boolconst count &value_typeReturn count. value_typevoidArchive &unsignedcount &const count &countconst count &count &const count &countconst count &boolconst count &boolconst count &boolconst count &boolconst count &const_referenceInitialize count to value and allow implicit conversion. const count< T, B > &Allow implicit conversion from other count. -constexpr bool
- - - -Accumulate boolean samples and compute the fraction of true samples. This accumulator should be used to calculate the efficiency or success fraction of a random process as a function of process parameters. It returns the fraction of successes, the variance of this fraction, and a two-sided confidence interval with 68.3 % confidence level for this fraction.There is no unique way to compute an interval for a success fraction. This class returns the Wilson score interval, because it is widely recommended in the literature for general use. More interval computers can be found in boost/histogram/utility, which can be used to compute intervals for other confidence levels.ValueTypeconst value_type &typename std::conditional< std::is_floating_point< value_type >::value, value_type, double >::typetypename utility::wilson_interval< real_type >::interval_type -voidboolInsert boolean sample x. fraction &const fraction &Add another accumulator. const_referenceReturn number of boolean samples that were true. const_referenceReturn number of boolean samples that were false. value_typeReturn total number of boolean samples. real_typeReturn success fraction of boolean samples. real_typeReturn variance of the success fraction. interval_typeReturn standard interval with 68.3 % confidence level (Wilson score interval). boolconst fraction &boolconst fraction &voidArchive &unsignedconst_referenceconst_referenceInitialize to external successes and failures. const fraction< T > &Allow implicit conversion from fraction with a different value type.
- - - -
- - - -Calculates mean and variance of sample. Uses Welfords's incremental algorithm to improve the numerical stability of mean and variance computation. ValueTypeconst value_type & -voidconst_referenceInsert sample x. voidconst weight_type< value_type > &const_referenceInsert sample x with weight w. mean &const mean &Add another mean accumulator. mean &const_referenceScale by value. This acts as if all samples were scaled by the value. boolconst mean &boolconst mean &const_referenceReturn how many samples were accumulated. count() should be used to check whether value() and variance() are defined, see documentation of value() and variance(). count() can be used to compute the variance of the mean by dividing variance() by count(). const_referenceReturn mean value of accumulated samples. The result is undefined, if count() < 1.value_typeReturn variance of accumulated samples. The result is undefined, if count() < 2.voidArchive &unsignedconst mean< T > &Allow implicit conversion from mean<T>. const_referenceconst_referenceconst_referenceInitialize to external count, mean, and variance.
-Simple streaming operators for the builtin accumulator types. The text representation is not guaranteed to be stable between versions of Boost.Histogram. This header is only included by boost/histogram/ostream.hpp. To use your own, include your own implementation instead of this header and do not includeboost/histogram/ostream.hpp.
- - - -Uses Neumaier algorithm to compute accurate sums of floats. The algorithm is an improved Kahan algorithm (https://en.wikipedia.org/wiki/Kahan_summation_algorithm). The algorithm uses memory for two numbers and is three to five times slower compared to using a single number to accumulate a sum, but the relative error of the sum is at the level of the machine precision, independent of the number of samples.A. Neumaier, Zeitschrift fuer Angewandte Mathematik und Mechanik 54 (1974) 39-51. ValueTypeconst value_type & -sum &Increment sum by one. sum &const_referenceIncrement sum by value. sum &const sum &Add another sum. sum &const_referenceScale by value. boolconst sum &boolconst sum &value_typeReturn value of the sum. const_referenceReturn large part of the sum. const_referenceReturn small part of the sum. value_typevoidArchive &unsignedsum &const sum &sumconst sum &sum &const sum &sumconst sum &boolconst sum &boolconst sum &boolconst sum &boolconst sum &const_referenceInitialize sum to value and allow implicit conversion. const sum< T > &Allow implicit conversion from sum<T> const_referenceconst_referenceInitialize sum explicitly with large and small parts.
- - - -Calculates mean and variance of weighted sample. Uses West's incremental algorithm to improve numerical stability of mean and variance computation. ValueTypeconst value_type & -voidconst_referenceInsert sample x. voidconst weight_type< value_type > &const_referenceInsert sample x with weight w. weighted_mean &const weighted_mean &Add another weighted_mean.weighted_mean &const_referenceScale by value. This acts as if all samples were scaled by the value. boolconst weighted_mean &boolconst weighted_mean &const_referenceReturn sum of weights. const_referenceReturn sum of weights squared (variance of weight distribution). value_typeReturn effective counts. This corresponds to the equivalent number of unweighted samples that would have the same variance as this sample. count() should be used to check whether value() and variance() are defined, see documentation of value() and variance(). count() can be used to compute the variance of the mean by dividing variance() by count(). const_referenceReturn mean value of accumulated weighted samples. The result is undefined, if count() == 0. value_typeReturn variance of accumulated weighted samples. The result is undefined, if count() == 0 or count() == 1. voidArchive &unsignedconst weighted_mean< T > &Allow implicit conversion from other weighted_means. const_referenceconst_referenceconst_referenceconst_referenceInitialize to external sum of weights, sum of weights squared, mean, and variance.
- - - -Holds sum of weights and its variance estimate. ValueTypeconst value_type & -weighted_sum &Increment by one. weighted_sum &const weight_type< value_type > &Increment by weight. weighted_sum &const weighted_sum &Added another weighted sum. weighted_sum &const weighted_sum &Divide by another weighted sum. weighted_sum &const_referenceScale by value. boolconst weighted_sum &boolconst weighted_sum &const_referenceReturn value of the sum. const_referenceReturn estimated variance of the sum. const_referencevoidArchive &unsignedconst_referenceInitialize sum to value and allow implicit conversion. const weighted_sum< T > &Allow implicit conversion from sum<T> const_referenceconst_referenceInitialize sum to value and variance.
- - - - - - - - - - - - - - - - - - - - - - -autoconst histogram< A, S > &coverageCheck to see if all histogram cells are empty. Use coverage to include or exclude the underflow/overflow bins.This algorithm has O(N) complexity, where N is the number of cells.Returns true if all cells are empty, and false otherwise.
- - - - - - - - - - - - - - - - - - - - -autoconst histogram< A, S > &std::integral_constant< unsigned, N >Ns...Returns a lower-dimensional histogram, summing over removed axes. Arguments are the source histogram and compile-time numbers, the remaining indices of the axes. Returns a new histogram which only contains the subset of axes. The source histogram is summed over the removed axes. autoconst histogram< A, S > &const Iterable &Returns a lower-dimensional histogram, summing over removed axes. This version accepts a source histogram and an iterable range containing the remaining indices.
- - - -reduce_commandunsignedwhich axis to operate on. doublebin which contains lower is first to be kept. doublebin which contains upper is last to be kept, except if upper is equal to the lower edge. Crop command to be used in reduce.Command is applied to axis with given index.Works like shrink (see shrink documentation for details), but counts in removed bins are always discarded, whether underflow and overflow bins are present or not. -reduce_commanddoublebin which contains lower is first to be kept. doublebin which contains upper is last to be kept, except if upper is equal to the lower edge. Crop command to be used in reduce.Command is applied to corresponding axis in order of reduce arguments.Works like shrink (see shrink documentation for details), but counts in removed bins are discarded, whether underflow and overflow bins are present or not. If the cropped range goes beyond the axis range, then the content of the underflow or overflow bin which overlaps with the range is kept.If the counts in an existing underflow or overflow bin are discared by the crop, the corresponding memory cells are not physically removed. Only their contents are set to zero. This technical limitation may be lifted in the future, then crop may completely remove the cropped memory cells. -reduce_commandunsignedwhich axis to operate on. doublelowest bound that should be kept. doublehighest bound that should be kept. If upper is inside bin interval, the whole interval is removed. unsignedhow many adjacent bins to merge into one. Crop and rebin command to be used in reduce.Command is applied to axis with given index.To crop andrebin in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis toreduce. -reduce_commanddoublelowest bound that should be kept. doublehighest bound that should be kept. If upper is inside bin interval, the whole interval is removed. unsignedhow many adjacent bins to merge into one. Crop and rebin command to be used in reduce.Command is applied to corresponding axis in order of reduce arguments.To crop andrebin in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis toreduce. -reduce_commandunsignedwhich axis to operate on. unsignedhow many adjacent bins to merge into one. Rebin command to be used in reduce.Command is applied to axis with given index.The command merges N adjacent bins into one. This makes the axis coarser and the bins wider. The original number of bins is divided by N. If there is a rest to this devision, the axis is implicitly shrunk at the upper end by that rest. -reduce_commandunsignedhow many adjacent bins to merge into one. Rebin command to be used in reduce.Command is applied to corresponding axis in order of reduce arguments.The command merges N adjacent bins into one. This makes the axis coarser and the bins wider. The original number of bins is divided by N. If there is a rest to this devision, the axis is implicitly shrunk at the upper end by that rest. -Histogramconst Histogram &original histogram. const Iterable &iterable sequence of reduce commands: shrink,slice,rebin,shrink_and_rebin, orslice_and_rebin. The element type of the iterable should bereduce_command.Shrink, crop, slice, and/or rebin axes of a histogram. Returns a new reduced histogram and leaves the original histogram untouched.The commands rebin andshrink orslice for the same axis are automatically combined, this is not an error. Passing ashrink and aslice command for the same axis or tworebin commands triggers aninvalid_argument exception. Trying to reducing a non-reducible axis triggers aninvalid_argument exception. Histograms with non-reducible axes can still be reduced along the other axes that are reducible.An overload allows one to pass reduce_command as positional arguments. -Histogramconst Histogram &original histogram. const reduce_command &first reduce command; one of shrink,slice,rebin,shrink_and_rebin, orslice_or_rebin.const Ts &...more reduce commands. Shrink, slice, and/or rebin axes of a histogram. Returns a new reduced histogram and leaves the original histogram untouched.The commands rebin andshrink orslice for the same axis are automatically combined, this is not an error. Passing ashrink and aslice command for the same axis or tworebin commands triggers an invalid_argument exception. It is safe to reduce histograms with some axis that are not reducible along the other axes. Trying to reducing a non-reducible axis triggers an invalid_argument exception.An overload allows one to pass an iterable of reduce_command. -Holder for a reduce command. Use this type to store reduce commands in a container. The internals of this type are an implementation detail. unspecifiedreduce_commandunsignedwhich axis to operate on. doublebin which contains lower is first to be kept. doublebin which contains upper is last to be kept, except if upper is equal to the lower edge. Shrink command to be used in reduce.Command is applied to axis with given index.Shrinking is based on an inclusive value interval. The bin which contains the first value starts the range of bins to keep. The bin which contains the second value is the last included in that range. When the second value is exactly equal to a lower bin edge, then the previous bin is the last in the range.The counts in removed bins are added to the corresponding underflow and overflow bins, if they are present. If they are not present, the counts are discarded. Also see crop, which always discards the counts. -reduce_commanddoublebin which contains lower is first to be kept. doublebin which contains upper is last to be kept, except if upper is equal to the lower edge. Shrink command to be used in reduce.Command is applied to corresponding axis in order of reduce arguments.Shrinking is based on an inclusive value interval. The bin which contains the first value starts the range of bins to keep. The bin which contains the second value is the last included in that range. When the second value is exactly equal to a lower bin edge, then the previous bin is the last in the range.The counts in removed bins are added to the corresponding underflow and overflow bins, if they are present. If they are not present, the counts are discarded. Also see crop, which always discards the counts. -reduce_commandunsignedwhich axis to operate on. doublelowest bound that should be kept. doublehighest bound that should be kept. If upper is inside bin interval, the whole interval is removed. unsignedhow many adjacent bins to merge into one. Shrink and rebin command to be used in reduce.Command is applied to corresponding axis in order of reduce arguments.To shrink(unsigned, double, double) and rebin(unsigned, unsigned) in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis to reduce. -reduce_commanddoublelowest bound that should be kept. doublehighest bound that should be kept. If upper is inside bin interval, the whole interval is removed. unsignedhow many adjacent bins to merge into one. Shrink and rebin command to be used in reduce.Command is applied to corresponding axis in order of reduce arguments.To shrink andrebin in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis toreduce. -reduce_commandunsignedwhich axis to operate on. axis::index_typefirst index that should be kept. axis::index_typeone past the last index that should be kept. slice_modeslice_mode::shrinkwhether to behave like shrink orcrop regarding removed bins.Slice command to be used in reduce.Command is applied to axis with given index.Slicing works like shrink orcrop, but uses bin indices instead of values. -reduce_commandaxis::index_typefirst index that should be kept. axis::index_typeone past the last index that should be kept. slice_modeslice_mode::shrinkwhether to behave like shrink orcrop regarding removed bins.Slice command to be used in reduce.Command is applied to corresponding axis in order of reduce arguments.Slicing works like shrink orcrop, but uses bin indices instead of values. -reduce_commandunsignedwhich axis to operate on. axis::index_typefirst index that should be kept. axis::index_typeone past the last index that should be kept. unsignedhow many adjacent bins to merge into one. slice_modeslice_mode::shrinkslice mode, see slice_mode. Slice and rebin command to be used in reduce.Command is applied to axis with given index.To slice andrebin in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis toreduce. -reduce_commandaxis::index_typefirst index that should be kept. axis::index_typeone past the last index that should be kept. unsignedhow many adjacent bins to merge into one. slice_modeslice_mode::shrinkslice mode, see slice_mode. Slice and rebin command to be used in reduce.Command is applied to corresponding axis in order of reduce arguments.To slice andrebin in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis toreduce. -Whether to behave like shrink orcrop regarding removed bins.
- - - -autoconst histogram< A, S > &Const reference to the histogram. const coveragecoverage::allIterate over all or only inner bins (optional, default: all). Compute the sum over all histogram cells (underflow/overflow included by default). The implementation favors accuracy and protection against overflow over speed. If the value type of the histogram is an integral or floating point type, accumulators::sum<double> is used to compute the sum, else the original value type is used. Compilation fails, if the value type does not support operator+=. The return type is double if the value type of the histogram is integral or floating point, and the original value type otherwise.If you need a different trade-off, you can write your own loop or use std::accumulate:// iterate over all bins -auto sum_all = std::accumulate(hist.begin(), hist.end(), 0.0); - -// skip underflow/overflow bins -double sum = 0; -for (auto&& x : indexed(hist)) - sum += *x; // dereference accessor - -// or: -// auto ind = boost::histogram::indexed(hist); -// auto sum = std::accumulate(ind.begin(), ind.end(), 0.0); - - -accumulator type or double
- - - -boost::histogram::axis::iterator_mixin< boolean< MetaData > >metadata_base_t< MetaData >Discrete axis for boolean data. Binning is a pass-though operation with zero cost, making this the fastest possible axis. The axis has no internal state apart from the optional metadata state. The axis has no under- and overflow bins. It cannot grow and cannot be reduced. - -index_typevalue_typeReturn index for value argument. value_typeindex_typeReturn value for index argument. value_typeindex_typeReturn bin for index argument. index_typeReturns the number of bins, without over- or underflow. boolconst boolean< M > &boolconst boolean< M > &voidArchive &unsignedmetadata_type{}description of the axis. Construct a boolean axis. - -constexpr boolWhether the axis is inclusive (see axis::traits::is_inclusive).constexpr unsignedReturns the options.
- - - -boost::histogram::axis::iterator_mixin< category< Value, MetaData, Options, Allocator > >metadata_base_t< MetaData >Maps at a set of unique values to bin indices. The axis maps a set of values to bins, following the order of arguments in the constructor. The optional overflow bin for this axis counts input values that are not part of the set. Binning has O(N) complexity, but with a very small factor. For small N (the typical use case) it beats other kinds of lookup. -The options underflow andcircular are not allowed. The optionsgrowth andoverflow are mutually exclusive. -index_typeconst value_type &Return index for value argument. std::pair< index_type, index_type >const value_type &Returns index and shift (if axis has grown) for the passed argument. autoindex_typeReturn value for index argument. Throws std::out_of_range if the index is out of bounds.decltype(auto)index_typeReturn value for index argument; alias for value(...). index_typeReturns the number of bins, without over- or underflow. boolconst category< V, M, O, A > &boolconst category< V, M, O, A > &allocator_typevoidArchive &unsignedallocator_typeItbegin of category range of unique values. Itend of category range of unique values. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use (optional). Construct from iterator range of unique values. -ItItmetadata_typeallocator_typeconst C &sequence of unique values. metadata_type{}description of the axis. options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use. Construct axis from iterable sequence of unique values. -const C &metadata_typeallocator_typestd::initializer_list< U >std::initializer_list of unique values.metadata_type{}description of the axis. options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use. Construct axis from an initializer list of unique values. -std::initializer_list< U >metadata_typeallocator_typeconst category &index_typeindex_typeunsignedConstructor used by algorithm::reduce to shrink and rebin (not for users). -constexpr unsignedReturns the options. constexpr boolWhether the axis is inclusive (see axis::traits::is_inclusive).constexpr boolIndicate that the axis is not ordered.
- - - -boost::histogram::axis::iterator_mixin< integer< Value, MetaData, Options > >metadata_base_t< MetaData >Axis for an interval of integer values with unit steps. Binning is a O(1) operation. This axis bins faster than a regular axis. - -index_typevalue_typeReturn index for value argument. autovalue_typeReturns index and shift (if axis has grown) for the passed argument. value_typelocal_index_typeReturn value for index argument. decltype(auto)index_typeReturn bin for index argument. index_typeReturns the number of bins, without over- or underflow. boolconst integer< V, M, O > &boolconst integer< V, M, O > &voidArchive &unsignedvalue_typefirst integer of covered range. value_typeone past last integer of covered range. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). Construct over semi-open integer interval [start, stop). -const integer &index_typeindex_typeunsignedConstructor used by algorithm::reduce to shrink and rebin. -constexpr unsignedReturns the options. constexpr boolWhether the axis is inclusive (see axis::traits::is_inclusive).
- - - -Lightweight bin view. Represents the current bin interval. -decltype(auto)Return lower edge of bin. decltype(auto)Return upper edge of bin. decltype(auto)Return center of bin. decltype(auto)Return width of bin. boolconst BinType &boolconst BinType &const Axis &index_typeAxis &&index_type
- - - -Uses CRTP to inject iterator logic into Derived. iterator< Derived >std::reverse_iterator< const_iterator > -const_iteratorBin iterator to beginning of the axis (read-only). const_iteratorBin iterator to the end of the axis (read-only). const_reverse_iteratorReverse bin iterator to the last entry of the axis (read-only). const_reverse_iteratorReverse bin iterator to the end (read-only).
- - - -Meta data holder with space optimization for empty meta data types. Allows write-access to metadata even if const. - -const metadata_base &metadata_base &const metadata_base &metadata_base &&metadata_type &&metadata_base &metadata_base && -metadata_type &Returns reference to metadata. metadata_type &Returns reference to mutable metadata from const axis.
-Options for builtin axis types. Options circular andgrowth are mutually exclusive. Optionscircular andunderflow are mutually exclusive. - - - -Single option flag. -std::integral_constant< unsigned, Bits >Holder of axis options. -constexpr autobitset< B >Returns true if all option flags in the argument are set and false otherwise. constexpr circular_tInstance of circular_t.Axis is circular. Mutually exclusive with growth andunderflow.bit< 2 >constexpr growth_tInstance of growth_t.Axis can grow. Mutually exclusive with circular.bit< 3 >constexpr none_tInstance of none_t.All options off. bitset< 0 >constexpr autobitset< B1 >bitset< B2 >Set intersection of the option arguments. constexpr autobitset< B1 >bitset< B2 >Set difference of the option arguments. constexpr autobitset< B1 >bitset< B2 >Set union of the axis option arguments. constexpr overflow_tInstance of overflow_t.Axis has overflow bin. bit< 1 >constexpr underflow_tInstance of underflow_t.Axis has an underflow bin. Mutually exclusive with circular.bit< 0 >
-Simple streaming operators for the builtin axis types. The text representation is not guaranteed to be stable between versions of Boost.Histogram. This header is only included by boost/histogram/ostream.hpp. To use your own, include your own implementation instead of this header and do not includeboost/histogram/ostream.hpp.
- - - -Holds the bin data of an axis::variant.The interface is a superset of the axis::interval_view class. In addition, the object is implicitly convertible to the value type, returning the equivalent of a call to lower(). For discrete axes, lower() == upper(), and width() returns zero.This is not a view like axis::interval_view for two reasons. -Sequential calls to lower() and upper() would have to each loop through the variant types. This is likely to be slower than filling all the data in one loop.polymorphic_bin may be created from a temporary instance ofaxis::variant, like in the call histogram::axis(0). Storing a reference to the axis would result in a dangling reference. Rather than specialing the code to handle this, it seems easier to just use a value instead of a view. -const value_type &Implicitly convert to bin value (for axis with discrete values). value_typeReturn lower edge of bin. value_typeReturn upper edge of bin. value_typeReturn center of bin. value_typeReturn width of bin. boolconst BinType &boolconst BinType &boolReturn true if bin is discrete. value_typevalue_type
- - - -Regular axis with circular option already set. boost::histogram::axis::iterator_mixin< regular< Value, Transform, MetaData, Options > >metadata_base_t< MetaData >Axis for equidistant intervals on the real line. The most common binning strategy. Very fast. Binning is a O(1) operation.If the axis has an overflow bin (the default), a value on the upper edge of the last bin is put in the overflow bin. The axis range represents a semi-open interval.If the overflow bin is deactivated, then a value on the upper edge of the last bin is still counted towards the last bin. The axis range represents a closed interval. This is the desired behavior for random numbers drawn from a bounded interval, which is usually closed. - -const transform_type &Return instance of the transform type. index_typevalue_typeReturn index for value argument. std::pair< index_type, index_type >value_typeReturns index and shift (if axis has grown) for the passed argument. value_typereal_index_typeReturn value for fractional index argument. decltype(auto)index_typeReturn bin for index argument. index_typeReturns the number of bins, without over- or underflow. boolconst regular< V, T, M, O > &boolconst regular< V, T, M, O > &voidArchive &unsignedtransform_typetransform instance to use. unsignednumber of bins. value_typelow edge of first bin. value_typehigh edge of last bin. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). Construct n bins over real transformed range [start, stop). -unsignednumber of bins. value_typelow edge of first bin. value_typehigh edge of last bin. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). Construct n bins over real range [start, stop). -transform_typetransform instance to use. step_type< T >width of a single bin. value_typelow edge of first bin. value_typeupper limit of high edge of last bin (see below). metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional).Construct bins with the given step size over real transformed range [start, stop). -The axis computes the number of bins as n = abs(stop - start) / step, rounded down. This means that stop is an upper limit to the actual value (start + n * step). step_type< T >width of a single bin. value_typelow edge of first bin. value_typeupper limit of high edge of last bin (see below). metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional).Construct bins with the given step size over real range [start, stop). -The axis computes the number of bins as n = abs(stop - start) / step, rounded down. This means that stop is an upper limit to the actual value (start + n * step). const regular &index_typeindex_typeunsignedConstructor used by algorithm::reduce to shrink and rebin (not for users). -constexpr unsignedReturns the options. step_type< T >THelper function to mark argument as step size. -Identity transform for equidistant bins. -TT &&Pass-through. TT &&Pass-through. -voidArchive &unsignedLog transform for equidistant bins in log-space. -TTReturns log(x) of external value x. TTReturns exp(x) for internal value x. -voidArchive &unsignedPow transform for equidistant bins in pow-space. doublepower index -autoTReturns pow(x, power) of external value x. autoTReturns pow(x, 1/power) of external value x. boolconst pow &voidArchive &unsigneddoubleMake transform with index p. Sqrt transform for equidistant bins in sqrt-space. -TTReturns sqrt(x) of external value x. TTReturns x^2 of internal value x. -voidArchive &unsigned
- - - - -constexpr boolconst Axis &any axis instance Returns true if axis is continuous or false. See is_continuous for details. -index_typeconst Axis &any axis instance Returns axis size plus any extra bins for under- and overflow. -Get axis options for axis type. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and returns the boost::histogram::axis::option::bitset.If Axis::options() is valid and constexpr, get_options is the corresponding option type. Otherwise, it is boost::histogram::axis::option::growth_t, if the axis has a methodupdate, else boost::histogram::axis::option::none_t. -constexpr boolconst Axis &any axis instance Returns true if axis is inclusive or false. See is_inclusive for details. -axis::index_typeconst Axis &any axis instance const U &argument to be passed to index methodReturns axis index for value. Throws std::invalid_argument if the value argument is not implicitly convertible. -Whether axis is continuous or discrete. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and returns a compile-time boolean.If the boolean is true, the axis is continuous (covers a continuous range of values). Otherwise it is discrete (covers discrete values). Meta-function to detect whether an axis is inclusive. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and represents compile-time boolean which is true or false, depending on whether the axis is inclusive or not.An inclusive axis has a bin for every possible input value. In other words, all possible input values always end up in a valid cell and there is no need to keep track of input tuples that need to be discarded. A histogram which consists entirely of inclusive axes can be filled more efficiently, which can be a factor 2 faster.An axis with underflow and overflow bins is always inclusive, but an axis may be inclusive under other conditions. The meta-function checks for the method constexpr static bool inclusive(), and uses the result. If this method is not present, it uses get_options<Axis> and checks whether the underflow and overflow bits are present. -Meta-function to detect whether an axis is ordered. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and returns a compile-time boolean. If the boolean is true, the axis is ordered.The meta-function checks for the method constexpr static bool ordered(), and uses the result. If this method is not present, it returns true if the value type of the Axis is arithmetic and false otherwise.An ordered axis has a value type that is ordered, which means that indices i < j < k implies either value(i) < value(j) < value(k) or value(i) > value(j) > value(k) for all i,j,k. For example, the integer axis is ordered, but the category axis is not. Axis which are not ordered must not have underflow bins, because they only have an "other" category, which is identified with the overflow bin if it is available. -Meta-function to detect whether an axis is reducible. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and represents compile-time boolean which is true or false, depending on whether the axis can be reduced with boost::histogram::algorithm::reduce().An axis can be made reducible by adding a special constructor, see Axis concept for details. -decltype(auto)Axis &&any axis instance Returns reference to metadata of an axis. If the expression x.metadata() for an axis instance x (maybe const) is valid, return the result. Otherwise, return a reference to a static instance ofboost::histogram::axis::null_type. -constexpr unsignedconst Axis &any axis instance Returns axis options as unsigned integer. See get_options for details. -constexpr boolconst Axis &any axis instance Returns true if axis is ordered or false. See is_ordered for details. -constexpr unsigned intconst Axis &any axis instance Return axis rank (how many arguments it processes). -std::pair< index_type, index_type >Axis &any axis instance const U &argument to be passed to update orindex methodReturns pair of axis index and shift for the value argument. Throws std::invalid_argument if the value argument is not implicitly convertible to the argument expected by theindex method. If the result of boost::histogram::axis::traits::get_options<decltype(axis)> has the growth flag set, callupdate method with the argument and return the result. Otherwise, callindex and return the pair of the result and a zero shift. -decltype(auto)const Axis &any axis instance real_index_typefloating point axis index Returns axis value for index. If the axis has no value method, throw std::runtime_error. If the method exists and accepts a floating point index, pass the index and return the result. If the method exists but accepts only integer indices, cast the floating point index to int, pass this index and return the result. -Resultconst Axis &any axis instance real_index_typefloating point axis index Returns axis value for index if it is convertible to target type or throws. Like boost::histogram::axis::traits::value, but converts the result into the requested return type. If the conversion is not possible, throws std::runtime_error. - -Value type for axis type. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and returns the value type.The value type is deduced from the argument of the Axis::index method. Const references are decayed to the their value types, for example, the type deduced forAxis::index(const int&) isint.The deduction always succeeds if the axis type models the Axis concept correctly. Errors come from violations of the concept, in particular, an index method that is templated or overloaded is not allowed. -decltype(auto)const Axis &any axis instance index_typebin index Returns bin width at axis index. If the axis has no value method, throw std::runtime_error. If the method exists and accepts a floating point index, return the result ofaxis.value(index + 1) - axis.value(index). If the method exists but accepts only integer indices, return 0. -Resultconst Axis &any axis instance index_typebin index Returns bin width at axis index. Like boost::histogram::axis::traits::width, but converts the result into the requested return type. If the conversion is not possible, throw std::runtime_error. -
- - - -boost::histogram::axis::iterator_mixin< variable< Value, MetaData, Options, Allocator > >metadata_base_t< MetaData >Axis for non-equidistant bins on the real line. Binning is a O(log(N)) operation. If speed matters and the problem domain allows it, prefer a regular axis, possibly with a transform.If the axis has an overflow bin (the default), a value on the upper edge of the last bin is put in the overflow bin. The axis range represents a semi-open interval.If the overflow bin is deactivated, then a value on the upper edge of the last bin is still counted towards the last bin. The axis range represents a closed interval. This is the desired behavior for random numbers drawn from a bounded interval, which is usually closed. - -index_typevalue_typeReturn index for value argument. std::pair< index_type, index_type >value_typevalue_typereal_index_typeReturn value for fractional index argument. autoindex_typeReturn bin for index argument. index_typeReturns the number of bins, without over- or underflow. boolconst variable< V, M, O, A > &boolconst variable< V, M, O, A > &autoReturn allocator instance. voidArchive &unsignedallocator_typeItbegin of edge sequence. Itend of edge sequence. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use (optional). Construct from iterator range of bin edges. -ItItmetadata_typeallocator_typeconst U &iterable range of bin edges. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use (optional). Construct variable axis from iterable range of bin edges. -const U &metadata_typeallocator_typestd::initializer_list< U >std::initializer_list of bin edges.metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use (optional). Construct variable axis from initializer list of bin edges. -std::initializer_list< U >metadata_typeallocator_typeconst variable &index_typeindex_typeunsignedConstructor used by algorithm::reduce to shrink and rebin (not for users). -constexpr unsignedReturns the options.
- - - -decltype(auto)variant< Us... > &Return reference to T, throws std::runtime_error if type does not match. decltype(auto)variant< Us... > &&Return movable reference to T, throws unspecified exception if type does not match. decltype(auto)const variant< Us... > &Return const reference to T, throws unspecified exception if type does not match. autovariant< Us... > *Returns pointer to T in variant or null pointer if type does not match. autoconst variant< Us... > *Returns pointer to const T in variant or null pointer if type does not match. boolconst variant< Us... > &const variant< Ts... > &The negation of operator==. boolconst variant< Us... > &const T &The negation of operator==. boolconst T &const variant< Us... > &The negation of operator==. boolconst variant< Us... > &const variant< Vs... > &Compare two variants. Return true if the variants point to the same concrete axis type and the types compare equal. Otherwise return false. boolconst variant< Us... > &const T &Compare variant with a concrete axis type. Return true if the variant point to the same concrete axis type and the types compare equal. Otherwise return false. boost::histogram::axis::iterator_mixin< variant< Ts... > >Polymorphic axis type. -index_typeReturn size of axis. unsignedReturn options of axis or option::none_t if axis has no options. boolReturns true if the axis is inclusive or false. boolReturns true if the axis is ordered or false. boolReturns true if the axis is continuous or false. metadata_type &Return reference to const metadata or instance of null_type if axis has no metadata.metadata_type &Return reference to metadata or instance of null_type if axis has no metadata.index_typeconst U &Return index for value argument. Throws std::invalid_argument if axis has incompatible call signature. doublereal_index_typeReturn value for index argument. Only works for axes with value method that returns something convertible to double and will throw a runtime_error otherwise, see axis::traits::value(). autoindex_typeReturn bin for index argument. Only works for axes with value method that returns something convertible to double and will throw a runtime_error otherwise, see axis::traits::value(). voidArchive &unsignedconst variant &variant &const variant &variant &&variant &variant &&T &&variant &T &&const variant< Us... > &variant &const variant< Us... > &decltype(auto)Visitor &&variant< Us... > &Apply visitor to variant (reference). decltype(auto)Visitor &&variant< Us... > &&Apply visitor to variant (movable reference). decltype(auto)Visitor &&const variant< Us... > &Apply visitor to variant (const reference).
- - - -Common base class for interval calculators. ValueTypestd::pair< value_type, value_type > -interval_typevalue_typeNumber of successful trials. value_typeNumber of failed trials. Compute interval for given number of successes and failures. -interval_typeconst accumulators::fraction< T > &Fraction accumulator. Compute interval for a fraction accumulator. -Confidence level for intervals. Intervals become wider as the deviation value increases. -Texplicit conversion to numerical confidence level deviationimplicit conversion to units of standard deviation doubleconstructor from confidence level (a probability) Confidence level in units of deviations for intervals. Intervals become wider as the deviation value increases. The standard deviation corresponds to a value of 1 and corresponds to 68.3 % confidence level. The conversion between confidence level and deviations is based on a two-sided interval on the normal distribution. -Texplicit conversion to units of standard deviations confidence_levelimplicit conversion to confidence level doubleconstructor from units of standard deviations
- - - -
- - - -
- - - -
- - - -
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/histogram/doc/reference.xml boost1.81-1.81.0/libs/histogram/doc/reference.xml --- boost1.81-1.81.0/libs/histogram/doc/reference.xml 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/histogram/doc/reference.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,3368 +0,0 @@ - -
-Includes all standard headers of the Boost.Histogram library. Extra headers not automatically included are: -boost/histogram/ostream.hpp -boost/histogram/axis/ostream.hpp -boost/histogram/accumulators/ostream.hpp -boost/histogram/serialization.hpp - -
-
- - -Central class of the histogram library. Histogram uses the call operator to insert data, like the Boost.Accumulators.Use factory functions (see make_histogram.hpp and make_profile.hpp) to conveniently create histograms rather than calling the ctors directly.Use the indexed range generator to iterate over filled histograms, which is convenient and faster than hand-written loops for multi-dimensional histograms. -Axes -Storage -typename storage_type::value_type -typename storage_type::iterator -typename storage_type::const_iterator -unspecified - -constexpr unsignedNumber of axes (dimensions). -std::size_tTotal number of bins (including underflow/overflow). -voidReset all bins to default initialized values. -decltype(auto)std::integral_constant< unsigned, N >{}Get N-th axis using a compile-time number. This version is more efficient than the one accepting a run-time number. -decltype(auto)unsignedGet N-th axis with run-time number. Prefer the version that accepts a compile-time number, if you can use it. -autoUnary &&Apply unary functor/function to each axis. -iteratorconst T0 &const Ts &...Fill histogram with values, an optional weight, and/or a sample. Returns iterator to located cell.Arguments are passed in order to the axis objects. Passing an argument type that is not convertible to the value type accepted by the axis or passing the wrong number of arguments causes a throw of std::invalid_argument.Optional weightAn optional weight can be passed as the first or last argument with the weight helper function. Compilation fails if the storage elements do not support weights.SamplesIf the storage elements accept samples, pass them with the sample helper function in addition to the axis arguments, which can be the first or last argument. The sample helper function can pass one or more arguments to the storage element. If samples and weights are used together, they can be passed in any order at the beginning or end of the argument list.Axis with multiple argumentsIf the histogram contains an axis which accepts a std::tuple of arguments, the arguments for that axis need to be passed as a std::tuple, for example, std::make_tuple(1.2, 2.3). If the histogram contains only this axis and no other, the arguments can be passed directly. -iteratorconst std::tuple< Ts... > &Fill histogram with values, an optional weight, and/or a sample from a std::tuple. -voidconst Iterable &iterable as explained in the long description. Fill histogram with several values at once. The argument must be an iterable with a size that matches the rank of the histogram. The element of an iterable may be 1) a value or 2) an iterable over a contiguous sequence of values or 3) a variant of 1) and 2). Sub-iterables must have the same length.Warning: std::vector<bool> is not a contiguous sequence over boolean values because of the infamous vector specialization for booleans. It cannot be used as an argument, but any truely contiguous sequence of boolean values can (std::array<bool, N> or std::valarray<bool>, for example).Values are passed to the corresponding histogram axis in order. If a single value is passed together with an iterable of values, the single value is treated like an iterable with matching length of copies of this value.If the histogram has only one axis, an iterable of values may be passed directly. - -voidconst Iterable &iterable of values. const weight_type< T > &single weight or an iterable of weights. Fill histogram with several values and weights at once. - -voidconst weight_type< T > &single weight or an iterable of weights. const Iterable &iterable of values. Fill histogram with several values and weights at once. - -voidconst Iterable &iterable of values. const sample_type< std::tuple< Ts... >> &single sample or an iterable of samples. Fill histogram with several values and samples at once. - -voidconst sample_type< T > &single sample or an iterable of samples. const Iterable &iterable of values. Fill histogram with several values and samples at once. - -voidconst Iterable &const weight_type< T > &const sample_type< std::tuple< Ts... >> & -voidconst sample_type< T > &const weight_type< U > &const Iterable & -voidconst weight_type< T > &const sample_type< U > &const Iterable & -voidconst Iterable &const sample_type< T > &const weight_type< U > & -decltype(auto)axis::index_typeindex of first axis. Is...indices of second, third, ... axes. Access cell value at integral indices. You can pass indices as individual arguments, as a std::tuple of integers, or as an interable range of integers. Passing the wrong number of arguments causes a throw of std::invalid_argument. Passing an index which is out of bounds causes a throw of std::out_of_range. - -reference to cell value. - -decltype(auto)axis::index_typeIs...Access cell value at integral indices (read-only). -decltype(auto)const multi_index_type &Access cell value at integral indices stored in iterable. -decltype(auto)const multi_index_type &Access cell value at integral indices stored in iterable (read-only). -decltype(auto)axis::index_typeAccess value at index (for rank = 1). -decltype(auto)axis::index_typeAccess value at index (for rank = 1, read-only). -decltype(auto)const multi_index_type &Access value at index tuple. -decltype(auto)const multi_index_type &Access value at index tuple (read-only). -boolconst histogram< A, S > &Equality operator, tests equality for all axes and the storage. -boolconst histogram< A, S > &Negation of the equality operator. -histogram &const histogram< A, S > &Add values of another histogram. This operator is only available if the value_type supports operator+=.Both histograms must be compatible to be addable. The histograms are compatible, if the axes are either all identical. If the axes only differ in the states of their discrete growing axis types, then they are also compatible. The discrete growing axes are merged in this case. -histogram &const histogram< axes_type, S > & -histogram &const histogram< A, S > &Subtract values of another histogram. This operator is only available if the value_type supports operator-=. -histogram &const histogram< A, S > &Multiply by values of another histogram. This operator is only available if the value_type supports operator*=. -histogram &const histogram< A, S > &Divide by values of another histogram. This operator is only available if the value_type supports operator/=. -histogram &const doubleMultiply all values with a scalar. This operator is only available if the value_type supports operator*=. -histogram &const doubleDivide all values by a scalar. This operator is only available if operator*= is available. -iteratorReturn value iterator to the beginning of the histogram. -iteratorReturn value iterator to the end in the histogram. -const_iteratorReturn value iterator to the beginning of the histogram (read-only). -const_iteratorReturn value iterator to the end in the histogram (read-only). -const_iteratorReturn value iterator to the beginning of the histogram (read-only). -const_iteratorReturn value iterator to the end in the histogram (read-only). -voidArchive &unsigned - - -histogram< A, S > && -const histogram< A, S > & -histogram &histogram< A, S > && -histogram &const histogram< A, S > & -A &&Storage -Axes -As &&... - - - - - - - - - - - - - - - - - - - -autoconst histogram< A1, S1 > &const histogram< A2, S2 > &Pairwise add cells of two histograms and return histogram with the sum. The returned histogram type is the most efficient and safest one constructible from the inputs, if they are not the same type. If one histogram has a tuple axis, the result has a tuple axis. The chosen storage is the one with the larger dynamic range. -autoconst histogram< A1, S1 > &const histogram< A2, S2 > &Pairwise multiply cells of two histograms and return histogram with the product. For notes on the returned histogram type, see operator+. -autoconst histogram< A1, S1 > &const histogram< A2, S2 > &Pairwise subtract cells of two histograms and return histogram with the difference. For notes on the returned histogram type, see operator+. -autoconst histogram< A1, S1 > &const histogram< A2, S2 > &Pairwise divide cells of two histograms and return histogram with the quotient. For notes on the returned histogram type, see operator+. -autoconst histogram< A, S > &doubleMultiply all cells of the histogram by a number and return a new histogram. If the original histogram has integer cells, the result has double cells. -autodoubleconst histogram< A, S > &Multiply all cells of the histogram by a number and return a new histogram. If the original histogram has integer cells, the result has double cells. -autoconst histogram< A, S > &doubleDivide all cells of the histogram by a number and return a new histogram. If the original histogram has integer cells, the result has double cells. - - -
-
-Includes all accumulator headers of the Boost.Histogram library. Extra header not automatically included: -boost/histogram/accumulators/ostream.hpp - -
-
- - - -Wraps a C++ arithmetic type with optionally thread-safe increments and adds. This adaptor optionally uses atomic operations to make concurrent increments and additions thread-safe for the stored arithmetic value, which can be integral or floating point. For small histograms, the performance will still be poor because of False Sharing, see https://en.wikipedia.org/wiki/False_sharing for details.Warning: Assignment is not thread-safe in this implementation, so don't assign concurrently.This wrapper class can be used as a base class by users to add arbitrary metadata to each bin of a histogram.When weighted samples are accumulated and high precision is required, use accumulators::sum instead (at the cost of lower performance). If a local variance estimate for the weight distribution should be computed as well (generally needed for a detailed statistical analysis), use accumulators::weighted_sum. -ValueType -const value_type & - -count &Increment count by one. -count &const_referenceIncrement count by value. -count &const count &Add another count. -count &const_referenceScale by value. -boolconst count & -boolconst count & -value_typeReturn count. -value_type -voidArchive &unsigned -count &const count & -countconst count & -count &const count & -countconst count & -boolconst count & -boolconst count & -boolconst count & -boolconst count & - - -const_referenceInitialize count to value and allow implicit conversion. -const count< T, B > &Allow implicit conversion from other count. - -constexpr bool - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Accumulate boolean samples and compute the fraction of true samples. This accumulator should be used to calculate the efficiency or success fraction of a random process as a function of process parameters. It returns the fraction of successes, the variance of this fraction, and a two-sided confidence interval with 68.3 % confidence level for this fraction.There is no unique way to compute an interval for a success fraction. This class returns the Wilson score interval, because it is widely recommended in the literature for general use. More interval computers can be found in boost/histogram/utility, which can be used to compute intervals for other confidence levels. ValueType -const value_type & -typename std::conditional< std::is_floating_point< value_type >::value, value_type, double >::type -typename utility::wilson_interval< real_type >::interval_type - -voidboolInsert boolean sample x. -fraction &const fraction &Add another accumulator. -const_referenceReturn number of boolean samples that were true. -const_referenceReturn number of boolean samples that were false. -value_typeReturn total number of boolean samples. -real_typeReturn success fraction of boolean samples. -real_typeReturn variance of the success fraction. -interval_typeReturn standard interval with 68.3 % confidence level (Wilson score interval). -boolconst fraction & -boolconst fraction & -voidArchive &unsigned - - -const_referenceconst_referenceInitialize to external successes and failures. -const fraction< T > &Allow implicit conversion from fraction with a different value type. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Calculates mean and variance of sample. Uses Welfords's incremental algorithm to improve the numerical stability of mean and variance computation. ValueType -const value_type & - -voidconst_referenceInsert sample x. -voidconst weight_type< value_type > &const_referenceInsert sample x with weight w. -mean &const mean &Add another mean accumulator. -mean &const_referenceScale by value. This acts as if all samples were scaled by the value. -boolconst mean & -boolconst mean & -const_referenceReturn how many samples were accumulated. count() should be used to check whether value() and variance() are defined, see documentation of value() and variance(). count() can be used to compute the variance of the mean by dividing variance() by count(). -const_referenceReturn mean value of accumulated samples. The result is undefined, if count() < 1. -value_typeReturn variance of accumulated samples. The result is undefined, if count() < 2. -voidArchive &unsigned - - -const mean< T > &Allow implicit conversion from mean<T>. -const_referenceconst_referenceconst_referenceInitialize to external count, mean, and variance. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Uses Neumaier algorithm to compute accurate sums of floats. The algorithm is an improved Kahan algorithm (https://en.wikipedia.org/wiki/Kahan_summation_algorithm). The algorithm uses memory for two numbers and is three to five times slower compared to using a single number to accumulate a sum, but the relative error of the sum is at the level of the machine precision, independent of the number of samples.A. Neumaier, Zeitschrift fuer Angewandte Mathematik und Mechanik 54 (1974) 39-51. ValueType -const value_type & - -sum &Increment sum by one. -sum &const_referenceIncrement sum by value. -sum &const sum &Add another sum. -sum &const_referenceScale by value. -boolconst sum & -boolconst sum & -value_typeReturn value of the sum. -const_referenceReturn large part of the sum. -const_referenceReturn small part of the sum. -value_type -voidArchive &unsigned -sum &const sum & -sumconst sum & -sum &const sum & -sumconst sum & -boolconst sum & -boolconst sum & -boolconst sum & -boolconst sum & - - -const_referenceInitialize sum to value and allow implicit conversion. -const sum< T > &Allow implicit conversion from sum<T> -const_referenceconst_referenceInitialize sum explicitly with large and small parts. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -autoconst histogram< A, S > &Const reference to the histogram. const coveragecoverage::allIterate over all or only inner bins (optional, default: all). Compute the sum over all histogram cells (underflow/overflow included by default). The implementation favors accuracy and protection against overflow over speed. If the value type of the histogram is an integral or floating point type, accumulators::sum<double> is used to compute the sum, else the original value type is used. Compilation fails, if the value type does not support operator+=. The return type is double if the value type of the histogram is integral or floating point, and the original value type otherwise.If you need a different trade-off, you can write your own loop or use std::accumulate: // iterate over all bins -auto sum_all = std::accumulate(hist.begin(), hist.end(), 0.0); - -// skip underflow/overflow bins -double sum = 0; -for (auto&& x : indexed(hist)) - sum += *x; // dereference accessor - -// or: -// auto ind = boost::histogram::indexed(hist); -// auto sum = std::accumulate(ind.begin(), ind.end(), 0.0); - - -accumulator type or double - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Calculates mean and variance of weighted sample. Uses West's incremental algorithm to improve numerical stability of mean and variance computation. ValueType -const value_type & - -voidconst_referenceInsert sample x. -voidconst weight_type< value_type > &const_referenceInsert sample x with weight w. -weighted_mean &const weighted_mean &Add another weighted_mean. -weighted_mean &const_referenceScale by value. This acts as if all samples were scaled by the value. -boolconst weighted_mean & -boolconst weighted_mean & -const_referenceReturn sum of weights. -const_referenceReturn sum of weights squared (variance of weight distribution). -value_typeReturn effective counts. This corresponds to the equivalent number of unweighted samples that would have the same variance as this sample. count() should be used to check whether value() and variance() are defined, see documentation of value() and variance(). count() can be used to compute the variance of the mean by dividing variance() by count(). -const_referenceReturn mean value of accumulated weighted samples. The result is undefined, if count() == 0. -value_typeReturn variance of accumulated weighted samples. The result is undefined, if count() == 0 or count() == 1. -voidArchive &unsigned - - -const weighted_mean< T > &Allow implicit conversion from other weighted_means. -const_referenceconst_referenceconst_referenceconst_referenceInitialize to external sum of weights, sum of weights squared, mean, and variance. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Holds sum of weights and its variance estimate. ValueType -const value_type & - -weighted_sum &Increment by one. -weighted_sum &const weight_type< value_type > &Increment by weight. -weighted_sum &const weighted_sum &Added another weighted sum. -weighted_sum &const weighted_sum &Divide by another weighted sum. -weighted_sum &const_referenceScale by value. -boolconst weighted_sum & -boolconst weighted_sum & -const_referenceReturn value of the sum. -const_referenceReturn estimated variance of the sum. -const_reference -voidArchive &unsigned - - -const_referenceInitialize sum to value and allow implicit conversion. -const weighted_sum< T > &Allow implicit conversion from sum<T> -const_referenceconst_referenceInitialize sum to value and variance. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Includes all algorithm headers of the Boost.Histogram library.
-
- - - - - - - - - - - - - - - - - - - - - - -autoconst histogram< A, S > &coverageCheck to see if all histogram cells are empty. Use coverage to include or exclude the underflow/overflow bins.This algorithm has O(N) complexity, where N is the number of cells.Returns true if all cells are empty, and false otherwise. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - -autoconst histogram< A, S > &std::integral_constant< unsigned, N >Ns...Returns a lower-dimensional histogram, summing over removed axes. Arguments are the source histogram and compile-time numbers, the remaining indices of the axes. Returns a new histogram which only contains the subset of axes. The source histogram is summed over the removed axes. -autoconst histogram< A, S > &const Iterable &Returns a lower-dimensional histogram, summing over removed axes. This version accepts a source histogram and an iterable range containing the remaining indices. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Whether to behave like shrink or crop regarding removed bins. -Holder for a reduce command. Use this type to store reduce commands in a container. The internals of this type are an implementation detail. unspecified - -reduce_commandunsignedwhich axis to operate on. doublebin which contains lower is first to be kept. doublebin which contains upper is last to be kept, except if upper is equal to the lower edge. Shrink command to be used in reduce. Command is applied to axis with given index.Shrinking is based on an inclusive value interval. The bin which contains the first value starts the range of bins to keep. The bin which contains the second value is the last included in that range. When the second value is exactly equal to a lower bin edge, then the previous bin is the last in the range.The counts in removed bins are added to the corresponding underflow and overflow bins, if they are present. If they are not present, the counts are discarded. Also see crop, which always discards the counts. - -reduce_commanddoublebin which contains lower is first to be kept. doublebin which contains upper is last to be kept, except if upper is equal to the lower edge. Shrink command to be used in reduce. Command is applied to corresponding axis in order of reduce arguments.Shrinking is based on an inclusive value interval. The bin which contains the first value starts the range of bins to keep. The bin which contains the second value is the last included in that range. When the second value is exactly equal to a lower bin edge, then the previous bin is the last in the range.The counts in removed bins are added to the corresponding underflow and overflow bins, if they are present. If they are not present, the counts are discarded. Also see crop, which always discards the counts. - -reduce_commandunsignedwhich axis to operate on. doublebin which contains lower is first to be kept. doublebin which contains upper is last to be kept, except if upper is equal to the lower edge. Crop command to be used in reduce. Command is applied to axis with given index.Works like shrink (see shrink documentation for details), but counts in removed bins are always discarded, whether underflow and overflow bins are present or not. - -reduce_commanddoublebin which contains lower is first to be kept. doublebin which contains upper is last to be kept, except if upper is equal to the lower edge. Crop command to be used in reduce. Command is applied to corresponding axis in order of reduce arguments.Works like shrink (see shrink documentation for details), but counts in removed bins are discarded, whether underflow and overflow bins are present or not. If the cropped range goes beyond the axis range, then the content of the underflow or overflow bin which overlaps with the range is kept.If the counts in an existing underflow or overflow bin are discared by the crop, the corresponding memory cells are not physically removed. Only their contents are set to zero. This technical limitation may be lifted in the future, then crop may completely remove the cropped memory cells. - -reduce_commandunsignedwhich axis to operate on. axis::index_typefirst index that should be kept. axis::index_typeone past the last index that should be kept. slice_modeslice_mode::shrinkwhether to behave like shrink or crop regarding removed bins. Slice command to be used in reduce. Command is applied to axis with given index.Slicing works like shrink or crop, but uses bin indices instead of values. - -reduce_commandaxis::index_typefirst index that should be kept. axis::index_typeone past the last index that should be kept. slice_modeslice_mode::shrinkwhether to behave like shrink or crop regarding removed bins. Slice command to be used in reduce. Command is applied to corresponding axis in order of reduce arguments.Slicing works like shrink or crop, but uses bin indices instead of values. - -reduce_commandunsignedwhich axis to operate on. unsignedhow many adjacent bins to merge into one. Rebin command to be used in reduce. Command is applied to axis with given index.The command merges N adjacent bins into one. This makes the axis coarser and the bins wider. The original number of bins is divided by N. If there is a rest to this devision, the axis is implicitly shrunk at the upper end by that rest. - -reduce_commandunsignedhow many adjacent bins to merge into one. Rebin command to be used in reduce. Command is applied to corresponding axis in order of reduce arguments.The command merges N adjacent bins into one. This makes the axis coarser and the bins wider. The original number of bins is divided by N. If there is a rest to this devision, the axis is implicitly shrunk at the upper end by that rest. - -reduce_commandunsignedwhich axis to operate on. doublelowest bound that should be kept. doublehighest bound that should be kept. If upper is inside bin interval, the whole interval is removed. unsignedhow many adjacent bins to merge into one. Shrink and rebin command to be used in reduce. Command is applied to corresponding axis in order of reduce arguments.To shrink(unsigned, double, double) and rebin(unsigned, unsigned) in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis to reduce. - -reduce_commanddoublelowest bound that should be kept. doublehighest bound that should be kept. If upper is inside bin interval, the whole interval is removed. unsignedhow many adjacent bins to merge into one. Shrink and rebin command to be used in reduce. Command is applied to corresponding axis in order of reduce arguments.To shrink and rebin in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis to reduce. - -reduce_commandunsignedwhich axis to operate on. doublelowest bound that should be kept. doublehighest bound that should be kept. If upper is inside bin interval, the whole interval is removed. unsignedhow many adjacent bins to merge into one. Crop and rebin command to be used in reduce. Command is applied to axis with given index.To crop and rebin in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis to reduce. - -reduce_commanddoublelowest bound that should be kept. doublehighest bound that should be kept. If upper is inside bin interval, the whole interval is removed. unsignedhow many adjacent bins to merge into one. Crop and rebin command to be used in reduce. Command is applied to corresponding axis in order of reduce arguments.To crop and rebin in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis to reduce. - -reduce_commandunsignedwhich axis to operate on. axis::index_typefirst index that should be kept. axis::index_typeone past the last index that should be kept. unsignedhow many adjacent bins to merge into one. slice_modeslice_mode::shrinkslice mode, see slice_mode. Slice and rebin command to be used in reduce. Command is applied to axis with given index.To slice and rebin in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis to reduce. - -reduce_commandaxis::index_typefirst index that should be kept. axis::index_typeone past the last index that should be kept. unsignedhow many adjacent bins to merge into one. slice_modeslice_mode::shrinkslice mode, see slice_mode. Slice and rebin command to be used in reduce. Command is applied to corresponding axis in order of reduce arguments.To slice and rebin in one command (see the respective commands for more details). Equivalent to passing both commands for the same axis to reduce. - -Histogramconst Histogram &original histogram. const Iterable &iterable sequence of reduce commands: shrink, slice, rebin, shrink_and_rebin, or slice_and_rebin. The element type of the iterable should be reduce_command. Shrink, crop, slice, and/or rebin axes of a histogram. Returns a new reduced histogram and leaves the original histogram untouched.The commands rebin and shrink or slice for the same axis are automatically combined, this is not an error. Passing a shrink and a slice command for the same axis or two rebin commands triggers an invalid_argument exception. Trying to reducing a non-reducible axis triggers an invalid_argument exception. Histograms with non-reducible axes can still be reduced along the other axes that are reducible.An overload allows one to pass reduce_command as positional arguments. - -Histogramconst Histogram &original histogram. const reduce_command &first reduce command; one of shrink, slice, rebin, shrink_and_rebin, or slice_or_rebin. const Ts &...more reduce commands. Shrink, slice, and/or rebin axes of a histogram. Returns a new reduced histogram and leaves the original histogram untouched.The commands rebin and shrink or slice for the same axis are automatically combined, this is not an error. Passing a shrink and a slice command for the same axis or two rebin commands triggers an invalid_argument exception. It is safe to reduce histograms with some axis that are not reducible along the other axes. Trying to reducing a non-reducible axis triggers an invalid_argument exception.An overload allows one to pass an iterable of reduce_command. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Includes all axis headers of the Boost.Histogram library. Extra header not automatically included: -boost/histogram/axis/ostream.hpp - -
-
- - - -boost::histogram::axis::iterator_mixin< boolean< MetaData > >metadata_base_t< MetaData >Discrete axis for boolean data. Binning is a pass-though operation with zero cost, making this the fastest possible axis. The axis has no internal state apart from the optional metadata state. The axis has no under- and overflow bins. It cannot grow and cannot be reduced. - -index_typevalue_typeReturn index for value argument. -value_typeindex_typeReturn value for index argument. -value_typeindex_typeReturn bin for index argument. -index_typeReturns the number of bins, without over- or underflow. -boolconst boolean< M > & -boolconst boolean< M > & -voidArchive &unsigned - -metadata_type{}description of the axis. Construct a boolean axis. - - -constexpr boolWhether the axis is inclusive (see axis::traits::is_inclusive). -constexpr unsignedReturns the options. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -boost::histogram::axis::iterator_mixin< category< Value, MetaData, Options, Allocator > >metadata_base_t< MetaData >Maps at a set of unique values to bin indices. The axis maps a set of values to bins, following the order of arguments in the constructor. The optional overflow bin for this axis counts input values that are not part of the set. Binning has O(N) complexity, but with a very small factor. For small N (the typical use case) it beats other kinds of lookup. -The options underflow and circular are not allowed. The options growth and overflow are mutually exclusive. -index_typeconst value_type &Return index for value argument. -std::pair< index_type, index_type >const value_type &Returns index and shift (if axis has grown) for the passed argument. -autoindex_typeReturn value for index argument. Throws std::out_of_range if the index is out of bounds. -decltype(auto)index_typeReturn value for index argument; alias for value(...). -index_typeReturns the number of bins, without over- or underflow. -boolconst category< V, M, O, A > & -boolconst category< V, M, O, A > & -allocator_type -voidArchive &unsigned - - -allocator_type -Itbegin of category range of unique values. Itend of category range of unique values. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use (optional). Construct from iterator range of unique values. - -ItItmetadata_typeallocator_type -const C &sequence of unique values. metadata_type{}description of the axis. options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use. Construct axis from iterable sequence of unique values. - -const C &metadata_typeallocator_type -std::initializer_list< U >std::initializer_list of unique values. metadata_type{}description of the axis. options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use. Construct axis from an initializer list of unique values. - -std::initializer_list< U >metadata_typeallocator_type -const category &index_typeindex_typeunsignedConstructor used by algorithm::reduce to shrink and rebin (not for users). - -constexpr unsignedReturns the options. -constexpr boolWhether the axis is inclusive (see axis::traits::is_inclusive). -constexpr boolIndicate that the axis is not ordered. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -boost::histogram::axis::iterator_mixin< integer< Value, MetaData, Options > >metadata_base_t< MetaData >Axis for an interval of integer values with unit steps. Binning is a O(1) operation. This axis bins faster than a regular axis. - -index_typevalue_typeReturn index for value argument. -autovalue_typeReturns index and shift (if axis has grown) for the passed argument. -value_typelocal_index_typeReturn value for index argument. -decltype(auto)index_typeReturn bin for index argument. -index_typeReturns the number of bins, without over- or underflow. -boolconst integer< V, M, O > & -boolconst integer< V, M, O > & -voidArchive &unsigned - - -value_typefirst integer of covered range. value_typeone past last integer of covered range. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). Construct over semi-open integer interval [start, stop). - -const integer &index_typeindex_typeunsignedConstructor used by algorithm::reduce to shrink and rebin. - -constexpr unsignedReturns the options. -constexpr boolWhether the axis is inclusive (see axis::traits::is_inclusive). - - -index_typestd::false_typeBdouble -index_typestd::true_typestd::false_typedouble -index_typestd::true_typestd::true_typedouble - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Lightweight bin view. Represents the current bin interval. -decltype(auto)Return lower edge of bin. -decltype(auto)Return upper edge of bin. -decltype(auto)Return center of bin. -decltype(auto)Return width of bin. -boolconst BinType & -boolconst BinType & - -const Axis &index_type -Axis &&index_type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -typename iterator::iterator_adaptor_::reference - -referenceReturn current bin object. - -const Axis &index_typeMake iterator from axis and index. -Uses CRTP to inject iterator logic into Derived. iterator< Derived > -std::reverse_iterator< const_iterator > - -const_iteratorBin iterator to beginning of the axis (read-only). -const_iteratorBin iterator to the end of the axis (read-only). -const_reverse_iteratorReverse bin iterator to the last entry of the axis (read-only). -const_reverse_iteratorReverse bin iterator to the end (read-only). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Meta data holder with space optimization for empty meta data types. Allows write-access to metadata even if const. - - - -const metadata_base & -metadata_base &const metadata_base & -metadata_base && -metadata_type && -metadata_base &metadata_base && - -metadata_type &Returns reference to metadata. -metadata_type &Returns reference to mutable metadata from const axis. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Options for builtin axis types. Options circular and growth are mutually exclusive. Options circular and underflow are mutually exclusive. - - - -Single option flag. -std::integral_constant< unsigned, Bits >Holder of axis options. -constexpr autobitset< B >Returns true if all option flags in the argument are set and false otherwise. - -All options off. bitset< 0 > -Axis has an underflow bin. Mutually exclusive with circular. bit< 0 > -Axis has overflow bin. bit< 1 > -Axis is circular. Mutually exclusive with growth and underflow. bit< 2 > -Axis can grow. Mutually exclusive with circular. bit< 3 > -constexpr none_tInstance of none_t. -constexpr underflow_tInstance of underflow_t. -constexpr overflow_tInstance of overflow_t. -constexpr circular_tInstance of circular_t. -constexpr growth_tInstance of growth_t. -constexpr autobitset< B1 >bitset< B2 >Set union of the axis option arguments. -constexpr autobitset< B1 >bitset< B2 >Set intersection of the option arguments. -constexpr autobitset< B1 >bitset< B2 >Set difference of the option arguments. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Holds the bin data of an axis::variant. The interface is a superset of the axis::interval_view class. In addition, the object is implicitly convertible to the value type, returning the equivalent of a call to lower(). For discrete axes, lower() == upper(), and width() returns zero.This is not a view like axis::interval_view for two reasons. -Sequential calls to lower() and upper() would have to each loop through the variant types. This is likely to be slower than filling all the data in one loop. -polymorphic_bin may be created from a temporary instance of axis::variant, like in the call histogram::axis(0). Storing a reference to the axis would result in a dangling reference. Rather than specialing the code to handle this, it seems easier to just use a value instead of a view. - - -const value_type &Implicitly convert to bin value (for axis with discrete values). -value_typeReturn lower edge of bin. -value_typeReturn upper edge of bin. -value_typeReturn center of bin. -value_typeReturn width of bin. -boolconst BinType & -boolconst BinType & -boolReturn true if bin is discrete. - -value_typevalue_type - -boolconst polymorphic_bin &int -autoconst BinType &decltype(rhs.lower(), 0) -boolconst BinType &float - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Regular axis with circular option already set. boost::histogram::axis::iterator_mixin< regular< Value, Transform, MetaData, Options > >metadata_base_t< MetaData >Axis for equidistant intervals on the real line. The most common binning strategy. Very fast. Binning is a O(1) operation.If the axis has an overflow bin (the default), a value on the upper edge of the last bin is put in the overflow bin. The axis range represents a semi-open interval.If the overflow bin is deactivated, then a value on the upper edge of the last bin is still counted towards the last bin. The axis range represents a closed interval. This is the desired behavior for random numbers drawn from a bounded interval, which is usually closed. - -const transform_type &Return instance of the transform type. -index_typevalue_typeReturn index for value argument. -std::pair< index_type, index_type >value_typeReturns index and shift (if axis has grown) for the passed argument. -value_typereal_index_typeReturn value for fractional index argument. -decltype(auto)index_typeReturn bin for index argument. -index_typeReturns the number of bins, without over- or underflow. -boolconst regular< V, T, M, O > & -boolconst regular< V, T, M, O > & -voidArchive &unsigned - - -transform_typetransform instance to use. unsignednumber of bins. value_typelow edge of first bin. value_typehigh edge of last bin. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). Construct n bins over real transformed range [start, stop). - -unsignednumber of bins. value_typelow edge of first bin. value_typehigh edge of last bin. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). Construct n bins over real range [start, stop). - -transform_typetransform instance to use. step_type< T >width of a single bin. value_typelow edge of first bin. value_typeupper limit of high edge of last bin (see below). metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional).Construct bins with the given step size over real transformed range [start, stop). -The axis computes the number of bins as n = abs(stop - start) / step, rounded down. This means that stop is an upper limit to the actual value (start + n * step). -step_type< T >width of a single bin. value_typelow edge of first bin. value_typeupper limit of high edge of last bin (see below). metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional).Construct bins with the given step size over real range [start, stop). -The axis computes the number of bins as n = abs(stop - start) / step, rounded down. This means that stop is an upper limit to the actual value (start + n * step). -const regular &index_typeindex_typeunsignedConstructor used by algorithm::reduce to shrink and rebin (not for users). - -constexpr unsignedReturns the options. - - -Identity transform for equidistant bins. -TT &&Pass-through. -TT &&Pass-through. - - -voidArchive &unsigned - -Log transform for equidistant bins in log-space. -TTReturns log(x) of external value x. -TTReturns exp(x) for internal value x. - - -voidArchive &unsigned - -Pow transform for equidistant bins in pow-space. doublepower index - -autoTReturns pow(x, power) of external value x. -autoTReturns pow(x, 1/power) of external value x. -boolconst pow & -voidArchive &unsigned - -doubleMake transform with index p. - -Sqrt transform for equidistant bins in sqrt-space. -TTReturns sqrt(x) of external value x. -TTReturns x^2 of internal value x. - - -voidArchive &unsigned - - - - - - - - - - - - - - - - - - - - -step_type< T >THelper function to mark argument as step size. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -Get axis options for axis type. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and returns the boost::histogram::axis::option::bitset.If Axis::options() is valid and constexpr, get_options is the corresponding option type. Otherwise, it is boost::histogram::axis::option::growth_t, if the axis has a method update, else boost::histogram::axis::option::none_t. -Whether axis is continuous or discrete. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and returns a compile-time boolean.If the boolean is true, the axis is continuous (covers a continuous range of values). Otherwise it is discrete (covers discrete values). Meta-function to detect whether an axis is inclusive. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and represents compile-time boolean which is true or false, depending on whether the axis is inclusive or not.An inclusive axis has a bin for every possible input value. In other words, all possible input values always end up in a valid cell and there is no need to keep track of input tuples that need to be discarded. A histogram which consists entirely of inclusive axes can be filled more efficiently, which can be a factor 2 faster.An axis with underflow and overflow bins is always inclusive, but an axis may be inclusive under other conditions. The meta-function checks for the method constexpr static bool inclusive(), and uses the result. If this method is not present, it uses get_options<Axis> and checks whether the underflow and overflow bits are present. -Meta-function to detect whether an axis is ordered. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and returns a compile-time boolean. If the boolean is true, the axis is ordered.The meta-function checks for the method constexpr static bool ordered(), and uses the result. If this method is not present, it returns true if the value type of the Axis is arithmetic and false otherwise.An ordered axis has a value type that is ordered, which means that indices i < j < k implies either value(i) < value(j) < value(k) or value(i) > value(j) > value(k) for all i,j,k. For example, the integer axis is ordered, but the category axis is not. Axis which are not ordered must not have underflow bins, because they only have an "other" category, which is identified with the overflow bin if it is available. -Meta-function to detect whether an axis is reducible. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and represents compile-time boolean which is true or false, depending on whether the axis can be reduced with boost::histogram::algorithm::reduce().An axis can be made reducible by adding a special constructor, see Axis concept for details. -Value type for axis type. Doxygen does not render this well. This is a meta-function (template alias), it accepts an axis type and returns the value type.The value type is deduced from the argument of the Axis::index method. Const references are decayed to the their value types, for example, the type deduced for Axis::index(const int&) is int.The deduction always succeeds if the axis type models the Axis concept correctly. Errors come from violations of the concept, in particular, an index method that is templated or overloaded is not allowed. -constexpr unsignedconst Axis &any axis instance Returns axis options as unsigned integer. See get_options for details. - -unsignedconst variant< Ts... > & -constexpr boolconst Axis &any axis instance Returns true if axis is inclusive or false. See is_inclusive for details. - -boolconst variant< Ts... > & -constexpr boolconst Axis &any axis instance Returns true if axis is ordered or false. See is_ordered for details. - -boolconst variant< Ts... > & -constexpr boolconst Axis &any axis instance Returns true if axis is continuous or false. See is_continuous for details. - -boolconst variant< Ts... > & -index_typeconst Axis &any axis instance Returns axis size plus any extra bins for under- and overflow. - -decltype(auto)Axis &&any axis instance Returns reference to metadata of an axis. If the expression x.metadata() for an axis instance x (maybe const) is valid, return the result. Otherwise, return a reference to a static instance of boost::histogram::axis::null_type. - -decltype(auto)const Axis &any axis instance real_index_typefloating point axis index Returns axis value for index. If the axis has no value method, throw std::runtime_error. If the method exists and accepts a floating point index, pass the index and return the result. If the method exists but accepts only integer indices, cast the floating point index to int, pass this index and return the result. - -Resultconst Axis &any axis instance real_index_typefloating point axis index Returns axis value for index if it is convertible to target type or throws. Like boost::histogram::axis::traits::value, but converts the result into the requested return type. If the conversion is not possible, throws std::runtime_error. - - -axis::index_typeconst Axis &any axis instance const U &argument to be passed to index method Returns axis index for value. Throws std::invalid_argument if the value argument is not implicitly convertible. - -axis::index_typeconst variant< Ts... > &const U & -constexpr unsigned intconst Axis &any axis instance Return axis rank (how many arguments it processes). - -unsigned intconst axis::variant< Ts... > & -std::pair< index_type, index_type >Axis &any axis instance const U &argument to be passed to update or index method Returns pair of axis index and shift for the value argument. Throws std::invalid_argument if the value argument is not implicitly convertible to the argument expected by the index method. If the result of boost::histogram::axis::traits::get_options<decltype(axis)> has the growth flag set, call update method with the argument and return the result. Otherwise, call index and return the pair of the result and a zero shift. - -std::pair< index_type, index_type >variant< Ts... > &const U & -decltype(auto)const Axis &any axis instance index_typebin index Returns bin width at axis index. If the axis has no value method, throw std::runtime_error. If the method exists and accepts a floating point index, return the result of axis.value(index + 1) - axis.value(index). If the method exists but accepts only integer indices, return 0. - -Resultconst Axis &any axis instance index_typebin index Returns bin width at axis index. Like boost::histogram::axis::traits::width, but converts the result into the requested return type. If the conversion is not possible, throw std::runtime_error. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -boost::histogram::axis::iterator_mixin< variable< Value, MetaData, Options, Allocator > >metadata_base_t< MetaData >Axis for non-equidistant bins on the real line. Binning is a O(log(N)) operation. If speed matters and the problem domain allows it, prefer a regular axis, possibly with a transform.If the axis has an overflow bin (the default), a value on the upper edge of the last bin is put in the overflow bin. The axis range represents a semi-open interval.If the overflow bin is deactivated, then a value on the upper edge of the last bin is still counted towards the last bin. The axis range represents a closed interval. This is the desired behavior for random numbers drawn from a bounded interval, which is usually closed. - -index_typevalue_typeReturn index for value argument. -std::pair< index_type, index_type >value_type -value_typereal_index_typeReturn value for fractional index argument. -autoindex_typeReturn bin for index argument. -index_typeReturns the number of bins, without over- or underflow. -boolconst variable< V, M, O, A > & -boolconst variable< V, M, O, A > & -autoReturn allocator instance. -voidArchive &unsigned - - -allocator_type -Itbegin of edge sequence. Itend of edge sequence. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use (optional). Construct from iterator range of bin edges. - -ItItmetadata_typeallocator_type -const U &iterable range of bin edges. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use (optional). Construct variable axis from iterable range of bin edges. - -const U &metadata_typeallocator_type -std::initializer_list< U >std::initializer_list of bin edges. metadata_type{}description of the axis (optional). options_type{}see boost::histogram::axis::option (optional). allocator_type{}allocator instance to use (optional). Construct variable axis from initializer list of bin edges. - -std::initializer_list< U >metadata_typeallocator_type -const variable &index_typeindex_typeunsignedConstructor used by algorithm::reduce to shrink and rebin (not for users). - -constexpr unsignedReturns the options. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -boost::histogram::axis::iterator_mixin< variant< Ts... > >Polymorphic axis type. -index_typeReturn size of axis. -unsignedReturn options of axis or option::none_t if axis has no options. -boolReturns true if the axis is inclusive or false. -boolReturns true if the axis is ordered or false. -boolReturns true if the axis is continuous or false. -metadata_type &Return reference to const metadata or instance of null_type if axis has no metadata. -metadata_type &Return reference to metadata or instance of null_type if axis has no metadata. -index_typeconst U &Return index for value argument. Throws std::invalid_argument if axis has incompatible call signature. -doublereal_index_typeReturn value for index argument. Only works for axes with value method that returns something convertible to double and will throw a runtime_error otherwise, see axis::traits::value(). -autoindex_typeReturn bin for index argument. Only works for axes with value method that returns something convertible to double and will throw a runtime_error otherwise, see axis::traits::value(). -voidArchive &unsigned - - -const variant & -variant &const variant & -variant && -variant &variant && -T && -variant &T && -const variant< Us... > & -variant &const variant< Us... > & -decltype(auto)Visitor &&variant< Us... > &Apply visitor to variant (reference). -decltype(auto)Visitor &&variant< Us... > &&Apply visitor to variant (movable reference). -decltype(auto)Visitor &&const variant< Us... > &Apply visitor to variant (const reference). -autovariant< Us... > *Returns pointer to T in variant or null pointer if type does not match. -autoconst variant< Us... > *Returns pointer to const T in variant or null pointer if type does not match. -decltype(auto)variant< Us... > &Return reference to T, throws std::runtime_error if type does not match. -decltype(auto)variant< Us... > &&Return movable reference to T, throws unspecified exception if type does not match. -decltype(auto)const variant< Us... > &Return const reference to T, throws unspecified exception if type does not match. -decltype(auto)Visitor &&T && -decltype(auto)U && -autoU * -autoconst U * -boolconst variant< Us... > &const variant< Vs... > &Compare two variants. Return true if the variants point to the same concrete axis type and the types compare equal. Otherwise return false. -boolconst variant< Us... > &const T &Compare variant with a concrete axis type. Return true if the variant point to the same concrete axis type and the types compare equal. Otherwise return false. -boolconst T &const variant< Us... > & -boolconst variant< Us... > &const variant< Ts... > &The negation of operator==. -boolconst variant< Us... > &const T &The negation of operator==. -boolconst T &const variant< Us... > &The negation of operator==. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Forward declarations, tag types and type aliases. - - -Empty metadata type. -voidArchive &unsigned - -Integral type for axis indices. int -Real type for axis indices. double -Another alias for an empty metadata type. null_type - - - - - - - - - - - - - - - - - - - - - -boost::histogram::utility::binomial_proportion_interval< ValueType >Clopper-Pearson interval. This is the classic frequentist interval obtained with the Neyman construction. It is therefore often called the 'exact' interval. It is guaranteed to have at least the requested confidence level for all values of the fraction.The interval is wider than others that produce coverage closer to the expected confidence level over a random ensemble of factions. The Clopper-Pearson interval essentially always overcovers for such a random ensemble, which is undesirable in practice. The Clopper-Pearson interval is recommended when it is important to be conservative, but the Wilson interval should be preferred in most applications.C. Clopper, E.S. Pearson (1934), Biometrika 26 (4): 404-413. doi:10.1093/biomet/26.4.404. -interval_typevalue_typeNumber of successful trials. value_typeNumber of failed trials. Compute interval for given number of successes and failures. - - -confidence_leveldeviation{1}Confidence level for the interval. The default value produces a confidence level of 68 % equivalent to one standard deviation. Both deviation and confidence_level objects can be used to initialize the interval. Construct Clopper-Pearson interval computer. - -boost::histogram::utility::binomial_proportion_interval< ValueType >Jeffreys interval. This is the Bayesian credible interval with a Jeffreys prior. Although it has a Bayesian derivation, it has good coverage. The interval boundaries are close to the Wilson interval. A special property of this interval is that it is equal-tailed; the probability of the true value to be above or below the interval is approximately equal.To avoid coverage probability tending to zero when the fraction approaches 0 or 1, this implementation uses a modification described in section 4.1.2 of the paper by L.D. Brown, T.T. Cai, A. DasGupta, Statistical Science 16 (2001) 101-133, doi:10.1214/ss/1009213286. -interval_typevalue_typeNumber of successful trials. value_typeNumber of failed trials. Compute interval for given number of successes and failures. - - -confidence_leveldeviation{1}Confidence level for the interval. The default value produces a confidence level of 68 % equivalent to one standard deviation. Both deviation and confidence_level objects can be used to initialize the interval. Construct Jeffreys interval computer. - -boost::histogram::utility::binomial_proportion_interval< ValueType >Wald interval or normal approximation interval. The Wald interval is a symmetric interval. It is simple to compute, but has poor statistical properties and is universally rejected by statisticians. It should always be replaced by another iternal, for example, the Wilson interval.The Wald interval can be derived easily using the plug-in estimate of the variance for the binomial distribution, which is likely a reason for its omnipresence. Without further insight into statistical theory, it is not obvious that this derivation is flawed and that better alternatives exist.The Wald interval undercovers on average. It is unsuitable when the sample size is small or when the fraction is close to 0 or 1. e. Its limits are not naturally bounded by 0 or 1. It produces empty intervals if the number of successes or failures is zero.For a critique of the Wald interval, see (a selection):L.D. Brown, T.T. Cai, A. DasGupta, Statistical Science 16 (2001) 101-133. R. D. Cousins, K. E. Hymes, J. Tucker, Nucl. Instrum. Meth. A 612 (2010) 388-398. -interval_typevalue_typeNumber of successful trials. value_typeNumber of failed trials. Compute interval for given number of successes and failures. - - -deviationdeviation{1.0}Number of standard deviations for the interval. The default value 1 corresponds to a confidence level of 68 %. Both deviation and confidence_level objects can be used to initialize the interval. Construct Wald interval computer. - -boost::histogram::utility::binomial_proportion_interval< ValueType >Wilson interval. The Wilson score interval is simple to compute, has good coverage. Intervals are automatically bounded between 0 and 1 and never empty. The interval is asymmetric.Wilson, E. B. (1927). "Probable inference, the law of succession, and statistical -inference". Journal of the American Statistical Association. 22 (158): 209-212. doi:10.1080/01621459.1927.10502953. JSTOR 2276774.The coverage probability for a random ensemble of fractions is close to the nominal value. Unlike the Clopper-Pearson interval, the Wilson score interval is not conservative. For some values of the fractions, the interval undercovers and overcovers for neighboring values. This is a shared property of all alternatives to the Clopper-Pearson interval.The Wilson score intervals is widely recommended for general use in the literature. For a review of the literature, see R. D. Cousins, K. E. Hymes, J. Tucker, Nucl. Instrum. Meth. A 612 (2010) 388-398. -interval_typevalue_typeNumber of successful trials. value_typeNumber of failed trials. Compute interval for given number of successes and failures. - - -deviationdeviation{1.0}Number of standard deviations for the interval. The default value 1 corresponds to a confidence level of 68 %. Both deviation and confidence_level objects can be used to initialize the interval. Construct Wilson interval computer. - - -Vector-like storage for fast zero-overhead access to cells. storage_adaptor< std::vector< T, A > > -Default storage, optimized for unweighted histograms. unlimited_storage<> -Dense storage which tracks sums of weights and a variance estimate. dense_storage< accumulators::weighted_sum<> > -Dense storage which tracks means of samples in each cell. dense_storage< accumulators::mean<> > -Dense storage which tracks means of weighted samples in each cell. dense_storage< accumulators::weighted_mean<> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Input iterator range over histogram bins with multi-dimensional index. The iterator returned by begin() can only be incremented. If several copies of the input iterators exist, the other copies become invalid if one of them is incremented. Lightweight view to access value and index of current cell. The methods provide access to the current cell indices and bins. It acts like a pointer to the cell value, and in a limited way also like a reference. To interoperate with the algorithms of the standard library, the accessor is implicitly convertible to a cell value. Assignments and comparisons are passed through to the cell. An accessor is coupled to its parent indexed_range::iterator. Moving the parent iterator forward also updates the linked accessor. Accessors are not copyable. They cannot be stored in containers, but indexed_range::iterator can be stored. Array-like view into the current multi-dimensional index. implementation detail -const_reference - - - -index_pointer -const axis::index_type & - -const_iterator -const_iterator -std::size_t -const_referenceunsigned -const_referenceunsigned - - - -index_pointerindex_pointerimplementation detail - -value_referenceReturns the cell reference. -value_referenceReturns the cell reference. -value_iteratorAccess fields and methods of the cell object. -axis::index_typeunsigned0axis dimension. Access current index. - -index_viewAccess indices as an iterable range. -decltype(auto)std::integral_constant< unsigned, N >{}Access current bin. - -decltype(auto)unsignedaxis dimension. Access current bin. - -doubleComputes density in current cell. The density is computed as the cell value divided by the product of bin widths. Axes without bin widths, like axis::category, are treated as having unit bin with. -boolconst accessor & -boolconst accessor & -boolconst accessor & -boolconst accessor & -boolconst accessor & -boolconst accessor & -boolconst U & -boolconst U & -boolconst U & -boolconst U & -boolconst U & -boolconst U & -value_type - -accessor &const accessor & -accessor &const T & - - -iterator & -const accessor & -implementation detail axis::index_type -axis::index_type -axis::index_type -std::size_t -std::size_t -std::array< index_data, buffer_size >std::array< index_data, buffer_size > -index_data * -const index_data * -histogram_type * - -unsigned -pointer -const_pointer -pointer -const_pointer - -histogram_type * -reference - -reference * - -typename indexed_range::value_type -accessor -pointer_proxy -std::ptrdiff_t -std::forward_iterator_tag - -reference -pointer -iterator & -iteratorint -boolconst iterator & -boolconst iterator & -boolconst value_iterator & -boolconst value_iterator & -std::size_t - - - -value_iteratorhistogram_type & -implementation detail std::conditional_t< std::is_const< histogram_type >::value, typename histogram_type::const_iterator, typename histogram_type::iterator > -implementation detail typename std::iterator_traits< value_iterator >::reference -implementation detail typename std::iterator_traits< value_iterator >::value_type - -iterator -iterator - -histogram_type &coverage -histogram_type &Iterable && - -autohistogram_type &coverage - -iterate over inner bins, exclude underflow and overflow iterate over all bins, including underflow and overflow Coverage mode of the indexed range generator. Defines options for the iteration strategy. - - - - - - - - - - - - - - - - - -autoHistogram &&Reference to the histogram. coveragecoverage::innerIterate over all or only inner bins (optional, default: inner). Generates an indexed range of forward iterators over the histogram cells. Use this in a range-based for loop:for (auto&& x : indexed(hist)) { ... } -This generates an optimized loop which is nearly always faster than a hand-written loop over the histogram cells. The iterators dereference to an indexed_range::accessor, which has methods to query the current indices and bins and acts like a pointer to the cell value. The returned iterators are forward iterators. They can be stored in a container, but may not be used after the life-time of the histogram ends. - -indexed_range - -autoHistogram &&Reference to the histogram. Iterable &&Iterable over items with two axis::index_type values, which mark the begin and end index of each axis. The length of the iterable must be equal to the rank of the histogram. The begin index must be smaller than the end index. Index ranges wider than the actual range are reduced to the actual range including underflow and overflow indices. Generates and indexed range forward iterators over a rectangular region of histogram cells. Use this in a range-based for loop. Example: auto hist = make_histogram(axis::integer<>(0, 4), axis::integer<>(2, 6)); -axis::index_type range[2] = {{1, 3}, {0, 2}}; -for (auto&& x : indexed(hist, range)) { ... } - This skips the first and last index of the first axis, and the last two indices of the second. - -indexed_range - - - - - - - - - - -
-
- - - -autoSuffix operator to generate literal compile-time numbers, 0_c, 12_c, etc. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Collection of factory functions to conveniently create histograms. - - - - - - - - - -autoStorage &&Storage or container with standard interface (any vector, array, or map). Axis &&First axis instance. Axes &&...Other axis instances. Make histogram from compile-time axis configuration and custom storage. - -autoAxis &&First axis instance. Axes &&...Other axis instances. Make histogram from compile-time axis configuration and default storage. - -autoAxis &&First axis instance. Axes &&...Other axis instances. Make histogram from compile-time axis configuration and weight-counting storage. - -autoStorage &&Storage or container with standard interface (any vector, array, or map). Iterable &&Iterable range of axis objects. Make histogram from iterable range and custom storage. - -autoIterable &&Iterable range of axis objects. Make histogram from iterable range and default storage. - -autoIterable &&Iterable range of axis objects. Make histogram from iterable range and weight-counting storage. - -autoStorage &&Storage or container with standard interface (any vector, array, or map). IteratorIterator to range of axis objects. IteratorIterator to range of axis objects. Make histogram from iterator interval and custom storage. - -autoIteratorIterator to range of axis objects. IteratorIterator to range of axis objects. Make histogram from iterator interval and default storage. - -autoIteratorIterator to range of axis objects. IteratorIterator to range of axis objects. Make histogram from iterator interval and weight-counting storage. - - - - - - - - - - - - -
-
-Collection of factory functions to conveniently create profiles. Profiles are histograms which accept an additional sample and compute the mean of the sample in each cell. - - - -autoAxis &&First axis instance. Axes &&...Other axis instances. Make profle from compile-time axis configuration. - -autoAxis &&First axis instance. Axes &&...Other axis instances. Make profle from compile-time axis configuration which accepts weights. - -autoIterable &&Iterable range of axis objects. Make profile from iterable range. - -autoIterable &&Iterable range of axis objects. Make profile from iterable range which accepts weights. - -autoIteratorIterator to range of axis objects. IteratorIterator to range of axis objects. Make profile from iterator interval. - -autoIteratorIterator to range of axis objects. IteratorIterator to range of axis objects. Make profile from iterator interval which accepts weights. - - - - - - - - - - - - - - - - - - - - - -
-
- - -Holder for multiple axis indices. Adapts external iterable, tuple, or explicit list of indices to the same representation. axis::index_type -value_type * -const value_type * - -multi_indexstd::size_t -constexpr std::size_t - - -iterator -iterator -const_iterator -const_iterator - -axis::index_typeIs... -const std::tuple< axis::index_type, Is... > & -const Iterable & - - -priv_tag -const T &mp11::index_sequence< Is... > -static_cast< std::size_t >(-1)axis::index_type -value_type * -const value_type * - -multi_indexstd::size_t - - -iterator -iterator -const_iterator -const_iterator -std::size_t - -axis::index_typeIs... -const std::tuple< axis::index_type, Is... > & -const Iterable & - - -priv_tagstd::size_t -const T &mp11::index_sequence< Ns... > - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-A simple streaming operator for the histogram type. The text representation is rudimentary and not guaranteed to be stable between versions of Boost.Histogram. This header is not included by any other header and must be explicitly included to use the streaming operator.To use your own, simply include your own implementation instead of this header. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Simple streaming operators for the builtin accumulator types. The text representation is not guaranteed to be stable between versions of Boost.Histogram. This header is only included by boost/histogram/ostream.hpp. To use your own, include your own implementation instead of this header and do not include boost/histogram/ostream.hpp.
-
-Simple streaming operators for the builtin axis types. The text representation is not guaranteed to be stable between versions of Boost.Histogram. This header is only included by boost/histogram/ostream.hpp. To use your own, include your own implementation instead of this header and do not include boost/histogram/ostream.hpp.
-
- - -Sample holder and type envelope. You should not construct these directly, use the sample() helper function. -T - -autoTs &&...arguments to be forwarded to the accumulator. Helper function to mark arguments as sample. - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Headers from Boost.Serialization needed to serialize STL types that are used internally by the Boost.Histogram classes.
-
- - -Turns any vector-like, array-like, and map-like container into a storage type. -boolconst U & -voidArchive &unsigned - -storage_adaptor && -const storage_adaptor & -storage_adaptor &storage_adaptor && -storage_adaptor &const storage_adaptor & -Ts &&... -storage_adaptor &U && - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Memory-efficient storage for integral counters which cannot overflow. This storage provides a no-overflow-guarantee if the counters are incremented with integer weights. It maintains a contiguous array of elemental counters, one for each cell. If an operation is requested which would overflow a counter, the array is replaced with another of a wider integral type, then the operation is executed. The storage uses integers of 8, 16, 32, 64 bits, and then switches to a multiprecision integral type, similar to those in Boost.Multiprecision.A scaling operation or adding a floating point number triggers a conversion of the elemental counters into doubles, which voids the no-overflow-guarantee. -voiddouble *buffer_type &std::size_tconst U & -voidlarge_int *buffer_type &std::size_tconst large_int & -voidT *buffer_type &std::size_tconst U & -voidstd::false_typeT *buffer_type &std::size_tconst U & -voidstd::false_typeT *buffer_type &std::size_tconst large_int & -voidstd::true_typeT *buffer_type &std::size_tconst U & -voidstd::false_typeT *buffer_type &std::size_tconst U & -voidstd::true_typeT *buffer_type &std::size_tconst U & -voidstd::true_typelarge_int *buffer_type &std::size_tconst U & - -mp11::mp_list< U8, U16, U32, U64, large_int, double > -allocator_type -std::size_t -unsigned -void * - -constexpr unsigned - - -decltype(auto)F &&Ts &&... -void -voidstd::size_t -voidstd::size_tU - -const allocator_type &{} -buffer_type && -buffer_type &buffer_type && -const buffer_type & -buffer_type &const buffer_type & - -implementation detail -double -boolconst const_reference & -boolconst const_reference & -unspecifiedconst U & -unspecifiedconst U & -unspecifiedconst U & - -buffer_type &std::size_t -const const_reference & -const_reference &const const_reference & -const_reference &const_reference && - -boolconst const_reference & -boolconst U & - - -voidT *buffer_type &std::size_t -voidlarge_int *buffer_type &std::size_t -voiddouble *buffer_type &std::size_t - - -Reference - - -const iterator_impl< V, R > & -buffer_type *std::size_t - -voidT *buffer_type &const double -voiddouble *buffer_type &const double -voidT *buffer_type &std::size_tconst double -voiddouble *buffer_type &std::size_tconst double - -boost::histogram::unlimited_storage< Allocator >::const_referenceimplementation detail -boolconst reference & -boolconst reference & -unspecifiedconst U & -unspecifiedconst U & -unspecifiedconst U & -reference &const const_reference & -unspecifiedconst U & -reference &const double -reference &const double -reference &const double -reference & - -buffer_type &std::size_t -const reference & -reference &const reference & -reference &const const_reference & -unspecifiedconst U & -Allocator -double -unspecified -iterator_impl< const value_type, const_reference > -iterator_impl< value_type, reference > -constexpr bool - -allocator_type -voidstd::size_t -std::size_t -referencestd::size_t -const_referencestd::size_t -boolconst unlimited_storage & -boolconst Iterable & -unlimited_storage &const double -iterator -iterator -const_iterator -const_iterator -voidArchive &unsigned - -const allocator_type &{} -const unlimited_storage & -unlimited_storage &const unlimited_storage & -unlimited_storage && -unlimited_storage &unlimited_storage && -const Iterable & -unlimited_storage &const Iterable & -std::size_tconst T *const allocator_type &{}implementation detail; used by unit tests, not part of generic storage interface - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Unsafe read/write access to private data that potentially breaks consistency. This struct enables access to private data of some classes. It is intended for library developers who need this to implement algorithms efficiently, for example, serialization. Users should not use this. If you are a user who absolutely needs this to get a specific effect, please submit an issue on Github. Perhaps the public interface is insufficient and should be extended for your use case.Unlike the normal interface, the unsafe_access interface may change between versions. If your code relies on unsafe_access, it may or may not break when you update Boost. This is another reason to not use it unless you are ok with these conditions. -auto &Histogram &histogram. Get axes. - -const auto &const Histogram &histogram. Get axes. - -decltype(auto)Histogram &histogram. std::integral_constant< unsigned, I >{}Get mutable axis reference with compile-time number. - - -decltype(auto)Histogram &histogram. unsignedaxis index. Get mutable axis reference with run-time number. - -auto &Histogram &histogram. Get storage. - -const auto &const Histogram &histogram. Get storage. - -auto &Histogram &histogram Get index offset. - -const auto &const Histogram &histogram Get index offset. - -constexpr auto &unlimited_storage< Allocator > &instance of unlimited_storage. Get buffer of unlimited_storage. - -constexpr auto &storage_adaptor< T > &instance of storage_adaptor. Get implementation of storage_adaptor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Common base class for interval calculators. ValueType -std::pair< value_type, value_type > - -interval_typevalue_typeNumber of successful trials. value_typeNumber of failed trials. Compute interval for given number of successes and failures. - -interval_typeconst accumulators::fraction< T > &Fraction accumulator. Compute interval for a fraction accumulator. - - -Confidence level for intervals. Intervals become wider as the deviation value increases. -Texplicit conversion to numerical confidence level -deviationimplicit conversion to units of standard deviation - -doubleconstructor from confidence level (a probability) -Confidence level in units of deviations for intervals. Intervals become wider as the deviation value increases. The standard deviation corresponds to a value of 1 and corresponds to 68.3 % confidence level. The conversion between confidence level and deviations is based on a two-sided interval on the normal distribution. -Texplicit conversion to units of standard deviations -confidence_levelimplicit conversion to confidence level - -doubleconstructor from units of standard deviations - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -Weight holder and type envelope. You should not construct these directly, use the weight() helper function. -TAccess underlying value. - -weight_type< U >Allow implicit conversions of types when the underlying value type allows them. - -autoT &&argument to be forward to the histogram. Helper function to mark argument as weight. - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/hof/doc/src/js/configure.js boost1.81-1.81.0/libs/hof/doc/src/js/configure.js --- boost1.81-1.81.0/libs/hof/doc/src/js/configure.js 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/hof/doc/src/js/configure.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -if (typeof $ === "function"){ - $( document ).ready(function() { - console.log("Configure hljs"); - hljs.configure({languages:['cpp']}); - }); -} diff -Nru boost1.81-1.81.0/libs/index.html boost1.81-1.81.0/libs/index.html --- boost1.81-1.81.0/libs/index.html 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ - - - - - -Automatic redirection failed, please go to -libraries.htm. -
-

© Copyright Beman Dawes, 2001

-

Distributed under the Boost Software -License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -www.boost.org/LICENSE_1_0.txt)

- - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/json/bench/data/update-center.json boost1.81-1.81.0/libs/json/bench/data/update-center.json --- boost1.81-1.81.0/libs/json/bench/data/update-center.json 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/json/bench/data/update-center.json 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -{"connectionCheckUrl":"http://www.google.com/","core":{"buildDate":"Jan 07, 2013","name":"core","sha1":"BOXijYYVSuxWoki+9fV0FLU4df0=","url":"http://updates.jenkins-ci.org/download/war/1.498/jenkins.war","version":"1.498"},"id":"default","plugins":{"AdaptivePlugin":{"buildDate":"Mar 03, 2011","dependencies":[],"developers":[{"developerId":"magnayn","email":"nigel.magnay@gmail.com","name":"Nigel Magnay"}],"excerpt":"This (experimental) plug-in exposes the jenkins build extension points (SCM, Build, Publish) to a groovy scripting environment that has some DSL-style extensions for ease of development.","gav":"jenkins:AdaptivePlugin:0.1","labels":["misc","buildwrapper"],"name":"AdaptivePlugin","releaseTimestamp":"2011-03-03T16:49:24.00Z","requiredCore":"1.398","scm":"github.com","sha1":"il8z91iDnqVMu78Ghj8q2swCpdk=","title":"Jenkins Adaptive Plugin","url":"http://updates.jenkins-ci.org/download/plugins/AdaptivePlugin/0.1/AdaptivePlugin.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Adaptive+Plugin"},"AnchorChain":{"buildDate":"Mar 11, 2012","dependencies":[],"developers":[{"developerId":"direvius","email":"direvius@gmail.com","name":"Alexey Lavrenuke"}],"excerpt":"This plugin allows you to add some links from a text file to the sidebar at every build. ","gav":"org.jenkins-ci.plugins:AnchorChain:1.0","labels":["report"],"name":"AnchorChain","releaseTimestamp":"2012-03-11T21:59:06.00Z","requiredCore":"1.398","scm":"github.com","sha1":"rY1W96ad9TJI1F3phFG8X4LE26Q=","title":"AnchorChain plugin","url":"http://updates.jenkins-ci.org/download/plugins/AnchorChain/1.0/AnchorChain.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/AnchorChain+plugin"},"BlameSubversion":{"buildDate":"Jan 04, 2013","dependencies":[],"developers":[{"developerId":"tangjinou","email":"tangjinou@gmail.com","name":"Developer Guy"}],"excerpt":"This plug-in provides utilities for getting svn info from upstream job to downstream job","gav":"org.jvnet.hudson.plugins:BlameSubversion:1.200","labels":["scm"],"name":"BlameSubversion","previousTimestamp":"2010-11-02T00:15:06.00Z","previousVersion":"1.25","releaseTimestamp":"2013-01-04T22:34:40.00Z","requiredCore":"1.355","scm":"github.com","sha1":"9tDzZ/EpFwOi4aKFTyhF4UqQU/Y=","title":"BlameSubversion","url":"http://updates.jenkins-ci.org/download/plugins/BlameSubversion/1.200/BlameSubversion.hpi","version":"1.200","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/BlameSubversion"},"BlazeMeterJenkinsPlugin":{"buildDate":"Oct 30, 2012","dependencies":[],"developers":[{"developerId":"doron-bloch","name":"Doron Bloch"}],"excerpt":"This plugin allows you to load test your site using BlazeMeter<\/a>. Jenkins will show a report generated by the test. It includes the feature of setting the final build status as good, unstable or failed, based on the reported error percentage, and response time.","gav":"com.blazemeter.plugins:BlazeMeterJenkinsPlugin:1.02-beta-3","labels":["post-build"],"name":"BlazeMeterJenkinsPlugin","previousTimestamp":"2012-10-16T21:10:04.00Z","previousVersion":"1.01-beta-2","releaseTimestamp":"2012-10-30T15:27:40.00Z","requiredCore":"1.424","scm":"github.com","sha1":"JAuWkRs53ZmU/PZTOGrXzjIq1z4=","title":"BlazeMeter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/BlazeMeterJenkinsPlugin/1.02-beta-3/BlazeMeterJenkinsPlugin.hpi","version":"1.02-beta-3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/BlazeMeter+Plugin"},"ColumnPack-plugin":{"buildDate":"Dec 21, 2012","dependencies":[],"developers":[{"developerId":"hanabi","email":"jenkins@hanabi.se","name":"Marcus Jacobsson"}],"excerpt":"","gav":"ColumnPack:ColumnPack-plugin:1.0.3","name":"ColumnPack-plugin","releaseTimestamp":"2012-12-21T19:19:32.00Z","requiredCore":"1.466","scm":"github.com","sha1":"RoNLlUKA0CSwNQY14gEGKnmu9s4=","title":"ColumnPack-plugin","url":"http://updates.jenkins-ci.org/download/plugins/ColumnPack-plugin/1.0.3/ColumnPack-plugin.hpi","version":"1.0.3"},"ColumnsPlugin":{"buildDate":"Dec 21, 2012","dependencies":[],"developers":[{"developerId":"hanabi","email":"jenkins@hanabi.se","name":"Marcus Jacobsson"}],"excerpt":"","gav":"org.jenkins-ci.plugins:ColumnsPlugin:1.0","name":"ColumnsPlugin","releaseTimestamp":"2012-12-21T20:34:38.00Z","requiredCore":"1.466","scm":"github.com","sha1":"NGboN/IG0e5vCYmKoFlaHEK+Dc8=","title":"Columns Pack","url":"http://updates.jenkins-ci.org/download/plugins/ColumnsPlugin/1.0/ColumnsPlugin.hpi","version":"1.0"},"Exclusion":{"buildDate":"Nov 08, 2012","dependencies":[],"developers":[{"developerId":"anthonyRoux","email":"m.roux.a@gmail.com","name":"Anthony Roux"}],"excerpt":"This plugin manages exclusion between jobs. ","gav":"org.jenkins-ci.plugins:Exclusion:0.8","labels":["builder"],"name":"Exclusion","previousTimestamp":"2012-07-07T23:26:36.00Z","previousVersion":"0.7","releaseTimestamp":"2012-11-08T06:08:50.00Z","requiredCore":"1.489","scm":"github.com","sha1":"yaw61kkbvMqaYk/LymokK75LZf4=","title":"Exclusion-Plugin","url":"http://updates.jenkins-ci.org/download/plugins/Exclusion/0.8/Exclusion.hpi","version":"0.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin"},"LavaLampNotifier":{"buildDate":"Nov 13, 2010","dependencies":[],"developers":[{"developerId":"edrandall","name":"Ed Randall"}],"excerpt":"Indicate Job status using a Lava Lamp","gav":"org.jvnet.hudson.plugins.lavalamp:LavaLampNotifier:1.4","labels":["notifier"],"name":"LavaLampNotifier","previousTimestamp":"2010-11-13T17:40:26.00Z","previousVersion":"1.3","releaseTimestamp":"2010-11-14T02:04:48.00Z","requiredCore":"1.355","scm":"svn.dev.java.net","sha1":"gvAVSXpI34jKS8l9229JA/CR9/g=","title":"Lava Lamp Notifier","url":"http://updates.jenkins-ci.org/download/plugins/LavaLampNotifier/1.4/LavaLampNotifier.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Lava+Lamp+Notifier"},"Matrix-sorter-plugin":{"buildDate":"May 31, 2012","dependencies":[],"developers":[{"developerId":"lvotypko","email":"lvotypko@redhat.com","name":"Lucie Votypkova"}],"excerpt":"This plugin enable sorting the matrix configurations ","gav":"org.jenkins-ci.plugins:Matrix-sorter-plugin:1.1","labels":[],"name":"Matrix-sorter-plugin","previousTimestamp":"2012-04-12T11:27:22.00Z","previousVersion":"1.0","releaseTimestamp":"2012-05-31T19:52:34.00Z","requiredCore":"1.439","scm":"github.com","sha1":"dArbofexSr5aGpw2Ojq7N6Psblc=","title":"Matrix configuration sorter plugin","url":"http://updates.jenkins-ci.org/download/plugins/Matrix-sorter-plugin/1.1/Matrix-sorter-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Matrix+configuration+sorter+plugin"},"PrioritySorter":{"buildDate":"May 24, 2011","dependencies":[],"developers":[{"developerId":"bklarson","email":"bklarson@gmail.com","name":"Brad Larson"}],"excerpt":"This plugin allows for the build queue to be sorted based on pre-assigned priorities for each job.","gav":"hudson.queueSorter:PrioritySorter:1.3","labels":["misc","listview-column"],"name":"PrioritySorter","previousTimestamp":"2011-02-05T21:48:26.00Z","previousVersion":"1.2","releaseTimestamp":"2011-05-25T02:58:28.00Z","requiredCore":"1.343","scm":"github.com","sha1":"OrRqNLQvKOlxhhCowddAxxDOIVQ=","title":"Priority Sorter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/PrioritySorter/1.3/PrioritySorter.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Priority+Sorter+Plugin"},"SCTMExecutor":{"buildDate":"Mar 06, 2010","dependencies":[],"developers":[{"developerId":"tofuAtjava","email":"tfuerer.javanet@googlemail.com","name":"Thomas Fuerer"}],"excerpt":"This plugin will let users use Borland's SilkCentral Test Manager 2008 R2 or later.","gav":"hudson.plugins.sctmexecutor:SCTMExecutor:1.5.1","labels":["builder"],"name":"SCTMExecutor","previousTimestamp":"2010-03-02T04:15:34.00Z","previousVersion":"1.5","releaseTimestamp":"2010-03-07T01:47:22.00Z","requiredCore":"1.345","scm":"svn.dev.java.net","sha1":"AGNsn4d8rgDz5CgMkVLpdNpdQRo=","title":"SCTMExecutor","url":"http://updates.jenkins-ci.org/download/plugins/SCTMExecutor/1.5.1/SCTMExecutor.hpi","version":"1.5.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SCTMExecutor"},"SSSCM":{"buildDate":"Sep 08, 2011","dependencies":[],"developers":[{"developerId":"richscze"}],"excerpt":"","gav":"ssscm:SSSCM:1.0","name":"SSSCM","releaseTimestamp":"2011-09-08T20:30:30.00Z","requiredCore":"1.323","scm":"github.com","sha1":"2AFol0miyOne08ZFgYzjRkz1ktw=","title":"SSSCM","url":"http://updates.jenkins-ci.org/download/plugins/SSSCM/1.0/SSSCM.hpi","version":"1.0"},"Schmant":{"buildDate":"Dec 15, 2009","dependencies":[],"developers":[{"developerId":"kalle"}],"excerpt":"The Schmant plugin enables Hudson to run Schmant<\/a> build scripts.","gav":"org.schmant.hudson:Schmant:1.1.4","labels":["builder"],"name":"Schmant","previousTimestamp":"2009-04-01T15:28:56.00Z","previousVersion":"1.0","releaseTimestamp":"2009-12-15T16:01:08.00Z","requiredCore":"1.337","scm":"svn.dev.java.net","sha1":"WGFojc2aUe6CNQQGIWlKC+lbW4o=","title":"Schmant Plugin","url":"http://updates.jenkins-ci.org/download/plugins/Schmant/1.1.4/Schmant.hpi","version":"1.1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Schmant+Plugin"},"Surround-SCM-plugin":{"buildDate":"Oct 26, 2011","dependencies":[],"developers":[{"email":"klimad@seapine.com","name":"Dan Klima"}],"excerpt":"This plugin integrates with Seapine <\/a>Software's Surround SCM<\/a>. ","gav":"org.jvnet.hudson.plugins:Surround-SCM-plugin:1.1","labels":["scm"],"name":"Surround-SCM-plugin","previousTimestamp":"2011-06-07T15:50:06.00Z","previousVersion":"1.0","releaseTimestamp":"2011-10-26T19:57:06.00Z","requiredCore":"1.377","scm":"github.com","sha1":"olohjjuefWCDLF+Lv/89wBC/l4c=","title":"Surround SCM Plugin","url":"http://updates.jenkins-ci.org/download/plugins/Surround-SCM-plugin/1.1/Surround-SCM-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Surround+SCM+Plugin"},"TwilioNotifier":{"buildDate":"Dec 27, 2011","dependencies":[],"developers":[{"developerId":"christer","email":"christer.fahlgren@gmail.com","name":"Christer Fahlgren"}],"excerpt":"The Twilio Notifier Plugin is a plugin that can send build status notifications as Text messages and phone calls using Twilio<\/a>. ","gav":"com.twilio.jenkins:TwilioNotifier:0.2.1","labels":[],"name":"TwilioNotifier","previousTimestamp":"2011-12-27T15:57:30.00Z","previousVersion":"0.2.0","releaseTimestamp":"2011-12-27T16:01:44.00Z","requiredCore":"1.409","scm":"github.com","sha1":"H1vq0/9tFtMVw8+kUlL2W8TkSjE=","title":"Twilio Notifier Plugin","url":"http://updates.jenkins-ci.org/download/plugins/TwilioNotifier/0.2.1/TwilioNotifier.hpi","version":"0.2.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Twilio+Notifier+Plugin"},"URLSCM":{"buildDate":"Nov 02, 2011","dependencies":[],"developers":[{"developerId":"mdonohue","name":"Michael Donohue"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin allows the use of URLs as an SCM.","gav":"org.jvnet.hudson.plugins:URLSCM:1.6","labels":["scm"],"name":"URLSCM","previousTimestamp":"2010-01-27T14:48:14.00Z","previousVersion":"1.5","releaseTimestamp":"2011-11-02T14:15:14.00Z","requiredCore":"1.392","scm":"github.com","sha1":"aglxMDptHgY5Xk31EXgB8NafzKU=","title":"URL SCM","url":"http://updates.jenkins-ci.org/download/plugins/URLSCM/1.6/URLSCM.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/URL+SCM"},"WebSVN2":{"buildDate":"Sep 23, 2010","dependencies":[{"name":"subversion","optional":false,"version":"1.11"}],"developers":[{"name":"Andreas Mandel"}],"excerpt":"This plugin integrates WebSVN<\/a> Version 2 browser interface for Subversion with Hudson.","gav":"org.jvnet.hudson.plugins:WebSVN2:0.9","labels":[],"name":"WebSVN2","releaseTimestamp":"2010-09-23T10:08:16.00Z","requiredCore":"1.376","scm":"svn.dev.java.net","sha1":"X/gdcrPYhTMObY3tJ6kRRQpO0vk=","title":"WebSVN2 Plugin","url":"http://updates.jenkins-ci.org/download/plugins/WebSVN2/0.9/WebSVN2.hpi","version":"0.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/WebSVN2+Plugin"},"accurev":{"buildDate":"Aug 19, 2011","dependencies":[],"developers":[{"developerId":"statler","name":"Scott Tatum"},{"developerId":"helterscelter","name":"Clint Martin"}],"excerpt":"This plugin allows you to use AccuRev<\/a> as a SCM.","gav":"org.jvnet.hudson.plugins:accurev:0.6.18","labels":["scm"],"name":"accurev","previousTimestamp":"2011-08-19T15:50:38.00Z","previousVersion":"0.6.17","releaseTimestamp":"2011-08-19T16:36:10.00Z","requiredCore":"1.345","scm":"github.com","sha1":"uW5HHPyxF/XfUW0RDoFk2NDVx/A=","title":"Accurev Plugin","url":"http://updates.jenkins-ci.org/download/plugins/accurev/0.6.18/accurev.hpi","version":"0.6.18","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Accurev+Plugin"},"active-directory":{"buildDate":"Nov 06, 2012","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"With this plugin, you can configure Jenkins to authenticate the username and the password through Active Directory.","gav":"org.jenkins-ci.plugins:active-directory:1.30","labels":["user"],"name":"active-directory","previousTimestamp":"2012-06-06T22:52:54.00Z","previousVersion":"1.29","releaseTimestamp":"2012-11-06T14:38:54.00Z","requiredCore":"1.424","scm":"github.com","sha1":"m5fljiln7rWMSG2fOYgEZVrwh2M=","title":"Active Directory plugin","url":"http://updates.jenkins-ci.org/download/plugins/active-directory/1.30/active-directory.hpi","version":"1.30","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Active+Directory+plugin"},"additional-identities-plugin":{"buildDate":"Sep 27, 2012","dependencies":[],"developers":[{"developerId":"nicolas"}],"excerpt":"","gav":"com.cloudbees.jenkins.plugins:additional-identities-plugin:1.0","name":"additional-identities-plugin","releaseTimestamp":"2012-09-27T19:51:54.00Z","requiredCore":"1.480","scm":"github.com","sha1":"BVh9AQHpW+BU5fPRaOvpB6pnh00=","title":"additional-identities-plugin","url":"http://updates.jenkins-ci.org/download/plugins/additional-identities-plugin/1.0/additional-identities-plugin.hpi","version":"1.0"},"all-changes":{"buildDate":"Sep 18, 2011","dependencies":[{"name":"token-macro","optional":true,"version":"1.4"},{"name":"parameterized-trigger","optional":true,"version":"2.10"},{"name":"email-ext","optional":true,"version":"2.14"},{"name":"maven-plugin","optional":false,"version":"1.417"},{"name":"git","optional":true,"version":"1.1.11"},{"name":"subversion","optional":true,"version":"1.31"}],"developers":[{"developerId":"wolfs","name":"Stefan Wolf"}],"excerpt":"Shows all changes which influenced the builds of a project.","gav":"org.jenkins-ci.plugins:all-changes:1.3","labels":["ui","report"],"name":"all-changes","previousTimestamp":"2011-08-31T02:22:42.00Z","previousVersion":"1.2","releaseTimestamp":"2011-09-18T22:15:30.00Z","requiredCore":"1.417","scm":"github.com","sha1":"vMtuVcwKCzI9FTuYX2zrW60m2dI=","title":"All Changes Plugin","url":"http://updates.jenkins-ci.org/download/plugins/all-changes/1.3/all-changes.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/All+Changes+Plugin"},"analysis-collector":{"buildDate":"Oct 05, 2012","dependencies":[{"name":"dashboard-view","optional":true,"version":"2.2"},{"name":"analysis-core","optional":false,"version":"1.48"},{"name":"tasks","optional":true,"version":"4.33"},{"name":"token-macro","optional":true,"version":"1.5.1"},{"name":"dry","optional":true,"version":"2.31"},{"name":"checkstyle","optional":true,"version":"3.30"},{"name":"warnings","optional":true,"version":"4.15"},{"name":"maven-plugin","optional":true,"version":"1.409"},{"name":"pmd","optional":true,"version":"3.31"},{"name":"findbugs","optional":true,"version":"4.43"}],"developers":[{"developerId":"drulli","email":"ullrich.hafner@gmail.com","name":"Ulli Hafner"}],"excerpt":"This plug-in is an add-on for the plug-ins Checkstyle<\/a>, Dry<\/a>, FindBugs<\/a>, PMD<\/a>, Task Scanner<\/a>, and Warnings<\/a>: the plug-in collects the different analysis results and shows the results in a combined trend graph. Additionally, the plug-in provides health reporting and build stability based on these combined results. ","gav":"org.jvnet.hudson.plugins:analysis-collector:1.34","labels":["maven","report"],"name":"analysis-collector","previousTimestamp":"2012-09-10T23:02:18.00Z","previousVersion":"1.33","releaseTimestamp":"2012-10-05T16:13:42.00Z","requiredCore":"1.409","scm":"github.com","sha1":"GlfzWsS93EsrHKywcepSk+wHccQ=","title":"Analysis Collector Plugin","url":"http://updates.jenkins-ci.org/download/plugins/analysis-collector/1.34/analysis-collector.hpi","version":"1.34","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Analysis+Collector+Plugin"},"analysis-core":{"buildDate":"Oct 05, 2012","dependencies":[{"name":"dashboard-view","optional":true,"version":"2.2"},{"name":"token-macro","optional":true,"version":"1.5.1"},{"name":"maven-plugin","optional":true,"version":"1.409"}],"developers":[{"developerId":"drulli","email":"ullrich.hafner@gmail.com","name":"Ulli Hafner"}],"excerpt":"This plug-in provides utilities for the static code analysis plug-ins.","gav":"org.jvnet.hudson.plugins:analysis-core:1.48","labels":["maven","report"],"name":"analysis-core","previousTimestamp":"2012-09-10T22:54:40.00Z","previousVersion":"1.47","releaseTimestamp":"2012-10-05T15:42:42.00Z","requiredCore":"1.409","scm":"github.com","sha1":"YcAMz4Dr+s6d1OIlRguLwJtZPBk=","title":"Static Code Analysis Plug-ins","url":"http://updates.jenkins-ci.org/download/plugins/analysis-core/1.48/analysis-core.hpi","version":"1.48","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Static+Code+Analysis+Plug-ins"},"android-emulator":{"buildDate":"Nov 29, 2012","dependencies":[{"name":"port-allocator","optional":false,"version":"1.5"}],"developers":[{"developerId":"orrc","email":"chris@orr.me.uk","name":"Christopher Orr"}],"excerpt":"Lets you automatically generate, launch and interact with an Android<\/a> emulator during a build, with the emulator logs being captured as artifacts. ","gav":"org.jvnet.hudson.plugins:android-emulator:2.7.1","labels":["buildwrapper","android"],"name":"android-emulator","previousTimestamp":"2012-11-27T02:31:42.00Z","previousVersion":"2.7","releaseTimestamp":"2012-11-29T06:24:06.00Z","requiredCore":"1.377","scm":"github.com","sha1":"yLCL6sRrqqyQI9oUh5wuClQc3tE=","title":"Android Emulator Plugin","url":"http://updates.jenkins-ci.org/download/plugins/android-emulator/2.7.1/android-emulator.hpi","version":"2.7.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Android+Emulator+Plugin"},"android-lint":{"buildDate":"Dec 30, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.409"},{"name":"token-macro","optional":true,"version":"1.1"},{"name":"dashboard-view","optional":true,"version":"1.8.1"},{"name":"analysis-core","optional":false,"version":"1.43"}],"developers":[{"developerId":"orrc","email":"chris@orr.me.uk","name":"Christopher Orr"}],"excerpt":"Parses output from the Android lint tool and displays the results for analysis.","gav":"org.jvnet.hudson.plugins:android-lint:2.0.2","labels":["report","android"],"name":"android-lint","previousTimestamp":"2012-11-14T05:33:38.00Z","previousVersion":"2.0.1","releaseTimestamp":"2012-12-30T18:29:38.00Z","requiredCore":"1.409","scm":"github.com","sha1":"fvpV8ArgbCX6f7HtPtB3HJ81SA8=","title":"Android Lint Plugin","url":"http://updates.jenkins-ci.org/download/plugins/android-lint/2.0.2/android-lint.hpi","version":"2.0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Android+Lint+Plugin"},"ansicolor":{"buildDate":"Jun 07, 2012","dependencies":[],"developers":[{"developerId":"dblock","email":"dblock@dblock.org","name":"Daniel Doubrovkine"}],"excerpt":"This plugin adds support for ANSI escape sequences, including color, to Console Output.","gav":"org.jvnet.hudson.plugins:ansicolor:0.3.1","labels":["misc"],"name":"ansicolor","previousTimestamp":"2012-06-05T00:44:00.00Z","previousVersion":"0.3.0","releaseTimestamp":"2012-06-07T15:06:24.00Z","requiredCore":"1.374","scm":"github.com","sha1":"Jy6C6rKHdLexkR1WGLhr28jsQvY=","title":"AnsiColor Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ansicolor/0.3.1/ansicolor.hpi","version":"0.3.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/AnsiColor+Plugin"},"ant":{"buildDate":"Sep 19, 2011","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin adds Apache Ant<\/a> support to Jenkins.","gav":"org.jenkins-ci.plugins:ant:1.1","labels":["builder"],"name":"ant","previousTimestamp":"2011-09-19T13:40:12.00Z","previousVersion":"1.0","releaseTimestamp":"2011-09-19T16:52:24.00Z","requiredCore":"1.431","scm":"github.com","sha1":"VZ8Zs0wp22C/HbhU0ZWEvA9RgCw=","title":"Ant Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ant/1.1/ant.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Ant+Plugin"},"antexec":{"buildDate":"Aug 28, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"}],"developers":[{"developerId":"svasek","email":"svasek@gmail.com","name":"Milos Svasek"}],"excerpt":"This plugin makes it possible to run Apache Ant code directly from Jenkins-CI. ","gav":"org.jenkins-ci.plugins:antexec:1.6","labels":[],"name":"antexec","previousTimestamp":"2012-06-21T13:04:44.00Z","previousVersion":"1.5","releaseTimestamp":"2012-08-28T20:59:38.00Z","requiredCore":"1.424","scm":"github.com","sha1":"cIl0WIHedkip9awfovx4k6Y5YPQ=","title":"AntExec plugin","url":"http://updates.jenkins-ci.org/download/plugins/antexec/1.6/antexec.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/AntExec+plugin"},"any-buildstep":{"buildDate":"Nov 14, 2011","dependencies":[{"name":"token-macro","optional":false,"version":"1.4"},{"name":"run-condition","optional":false,"version":"0.5"},{"name":"conditional-buildstep","optional":false,"version":"0.2"},{"name":"flexible-publish","optional":false,"version":"0.7"}],"developers":[{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"}],"excerpt":"Use publishers as builders and builders as publishers. Adds builders to the actions available in the [Flexible Publish Plugin] and publishers to the list of builders available in the [Conditional BuildStep Plugin]. ","gav":"org.jenkins-ci.plugins:any-buildstep:0.1","labels":["builder","post-build"],"name":"any-buildstep","releaseTimestamp":"2011-11-14T23:43:44.00Z","requiredCore":"1.408","scm":"github.com","sha1":"46R/wmiCUngBl8Zrt4cRwvGbJuI=","title":"Any Build Step Plugin","url":"http://updates.jenkins-ci.org/download/plugins/any-buildstep/0.1/any-buildstep.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Any+Build+Step+Plugin"},"anything-goes-formatter":{"buildDate":"Mar 14, 2012","dependencies":[],"developers":[{"developerId":"kohsuke","email":"kk@kohsuke.org","name":"Kohsuke Kawaguchi"}],"excerpt":"","gav":"org.jenkins-ci.plugins:anything-goes-formatter:1.0","name":"anything-goes-formatter","releaseTimestamp":"2012-03-14T15:50:52.00Z","requiredCore":"1.424","scm":"github.com","sha1":"P+91IIgNJvsFUhaxCZLaZPG0VI0=","title":"anything-goes-formatter","url":"http://updates.jenkins-ci.org/download/plugins/anything-goes-formatter/1.0/anything-goes-formatter.hpi","version":"1.0"},"appaloosa-plugin":{"buildDate":"Aug 01, 2012","dependencies":[{"name":"promoted-builds","optional":true,"version":"2.4"},{"name":"maven-plugin","optional":false,"version":"1.399"}],"developers":[{"developerId":"aheritier","email":"aheritier@apache.org","name":"Arnaud Heritier"},{"developerId":"joel1di1","email":"joel1di1@gmail.com","name":"Benoit Lafontaine"}],"excerpt":"Publish your mobile applications (Android, iOS, ...) to the appaloosa-store.com<\/a> platform.","gav":"org.jenkins-ci.plugins:appaloosa-plugin:1.3.1","labels":["upload","ios","android"],"name":"appaloosa-plugin","previousTimestamp":"2012-05-05T23:56:14.00Z","previousVersion":"1.3.0","releaseTimestamp":"2012-08-01T17:55:32.00Z","requiredCore":"1.398","scm":"github.com","sha1":"CFNh6itZKYm47esb9BloMyltpRo=","title":"Appaloosa Plugin","url":"http://updates.jenkins-ci.org/download/plugins/appaloosa-plugin/1.3.1/appaloosa-plugin.hpi","version":"1.3.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Appaloosa+Plugin"},"application-director-plugin":{"buildDate":"Nov 25, 2012","dependencies":[],"developers":[{"developerId":"jfullam","email":"jonathanfullam@gmail.com","name":"Jonathan Fullam"}],"excerpt":"Integrates Jenkins to vFabric Application Director","gav":"org.jenkins-ci.plugins:application-director-plugin:1.3","labels":["buildwrapper"],"name":"application-director-plugin","previousTimestamp":"2012-11-25T00:48:32.00Z","previousVersion":"1.2","releaseTimestamp":"2012-11-25T23:15:18.00Z","requiredCore":"1.466","scm":"github.com","sha1":"RnI/LBtk2Inxndos34t6fY4I+mE=","title":"vFabric Application Director Plugin","url":"http://updates.jenkins-ci.org/download/plugins/application-director-plugin/1.3/application-director-plugin.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/vFabric+Application+Director+Plugin"},"artifact-diff-plugin":{"buildDate":"Nov 06, 2012","dependencies":[],"developers":[{"developerId":"olivergondza","name":"Oliver Gondža"}],"excerpt":"Plugin can compare content of an artifact identified by its relative path among different builds. ","gav":"org.jenkins-ci.plugins:artifact-diff-plugin:1.1","labels":[],"name":"artifact-diff-plugin","previousTimestamp":"2012-09-10T17:16:56.00Z","previousVersion":"1.0","releaseTimestamp":"2012-11-06T18:51:56.00Z","requiredCore":"1.461","scm":"github.com","sha1":"e7dRUwgfc/oqzgrkVu/LslKQrpU=","title":"Artifact Diff Plugin","url":"http://updates.jenkins-ci.org/download/plugins/artifact-diff-plugin/1.1/artifact-diff-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Artifact+Diff+Plugin"},"artifactdeployer":{"buildDate":"Dec 23, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"}],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to copy artifacts to remote locations.","gav":"org.jenkins-ci.plugins:artifactdeployer:0.26","labels":["upload"],"name":"artifactdeployer","previousTimestamp":"2012-11-04T04:53:00.00Z","previousVersion":"0.25","releaseTimestamp":"2012-12-23T05:51:30.00Z","requiredCore":"1.424","scm":"github.com","sha1":"iBCrmNqQriqPcRgUy1Ccuxp4iEA=","title":"ArtifactDeployer Plugin","url":"http://updates.jenkins-ci.org/download/plugins/artifactdeployer/0.26/artifactdeployer.hpi","version":"0.26","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ArtifactDeployer+Plugin"},"artifactory":{"buildDate":"Oct 15, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.428"},{"name":"jira","optional":true,"version":"1.29"},{"name":"subversion","optional":false,"version":"1.37"},{"name":"git","optional":true,"version":"1.1.14"},{"name":"ivy","optional":true,"version":"1.17"},{"name":"perforce","optional":true,"version":"1.3.7"},{"name":"gradle","optional":true,"version":"1.15"}],"developers":[{"developerId":"yossis","email":"yossis@jfrog.org","name":"Yossi Shaul"}],"excerpt":"This plugin allows deploying Maven 2, Maven 3, Ivy and Gradle artifacts and build info to the Artifactory artifacts manager.","gav":"org.jenkins-ci.plugins:artifactory:2.1.3","labels":["upload","report","buildwrapper"],"name":"artifactory","previousTimestamp":"2012-08-08T11:26:10.00Z","previousVersion":"2.1.2","releaseTimestamp":"2012-10-15T23:38:30.00Z","requiredCore":"1.428","scm":"github.com","sha1":"iyHLJMtt3AgT+Ut9BDlfzcP3Nhk=","title":"Artifactory Plugin","url":"http://updates.jenkins-ci.org/download/plugins/artifactory/2.1.3/artifactory.hpi","version":"2.1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Artifactory+Plugin"},"asakusa-satellite-plugin":{"buildDate":"Oct 23, 2012","dependencies":[],"developers":[{"developerId":"suer","email":"suetsugu.r@gmail.com","name":"Ryo SUETSUGU"}],"excerpt":"This plugin notifies AsakusaSatellite<\/a> of build results. ","gav":"org.codefirst.jenkins.asakusasatellite:asakusa-satellite-plugin:0.1.1","labels":["notifier"],"name":"asakusa-satellite-plugin","previousTimestamp":"2012-10-23T04:22:24.00Z","previousVersion":"0.1","releaseTimestamp":"2012-10-23T20:35:50.00Z","requiredCore":"1.398","scm":"github.com","sha1":"UQMnOOD1ObzOU2XNOoTAExRKx3U=","title":"AsakusaSatellite Plugin","url":"http://updates.jenkins-ci.org/download/plugins/asakusa-satellite-plugin/0.1.1/asakusa-satellite-plugin.hpi","version":"0.1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/AsakusaSatellite+Plugin"},"assembla":{"buildDate":"Oct 07, 2011","dependencies":[],"developers":[{"developerId":"droidev82","email":"simon@lmitsoftware.com","name":"Simone Ardissone"}],"excerpt":"This plugin integrates Assembla<\/a> to Jenkins.","gav":"org.jenkins-ci.plugins:assembla:1.2","labels":["external"],"name":"assembla","releaseTimestamp":"2011-10-07T21:02:02.00Z","requiredCore":"1.427","scm":"github.com","sha1":"ewKkpcS8nXxQaAVQ/nRuYvr0oTs=","title":"Assembla plugin","url":"http://updates.jenkins-ci.org/download/plugins/assembla/1.2/assembla.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Assembla+plugin"},"assembla-auth":{"buildDate":"Nov 22, 2012","compatibleSinceVersion":"0.3","dependencies":[],"developers":[{"developerId":"www.assembla.com","name":"Assembla"},{"developerId":"damir_assembla","name":"Damir Milovic"},{"developerId":"titas","name":"Titas Norkunas"},{"developerId":"mpchlets","name":"Michael Chletsos"}],"excerpt":"A Jenkins authentication plugin that delegates to Assembla oAuth","gav":"org.jenkins-ci.plugins:assembla-auth:1.03","labels":["external","user"],"name":"assembla-auth","previousTimestamp":"2012-11-19T11:04:56.00Z","previousVersion":"1.02","releaseTimestamp":"2012-11-22T16:10:18.00Z","requiredCore":"1.431","scm":"git.assembla.com","sha1":"MAJwcTAVXdFnXMkTy82gG6WVM4c=","title":"Assembla Auth Plugin","url":"http://updates.jenkins-ci.org/download/plugins/assembla-auth/1.03/assembla-auth.hpi","version":"1.03","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Assembla+Auth+Plugin"},"associated-files":{"buildDate":"Aug 27, 2012","dependencies":[],"developers":[],"excerpt":"This plugin allows for marking files or directories outside of Jenkins as related to a build.","gav":"org.jenkinsci.plugins:associated-files:0.2.1","labels":["post-build"],"name":"associated-files","previousTimestamp":"2012-03-23T17:51:00.00Z","previousVersion":"0.2.0","releaseTimestamp":"2012-08-27T12:36:20.00Z","requiredCore":"1.420","scm":"github.com","sha1":"TXHl3auAG4wvX6g1vuwpxX6rtu8=","title":"Associated Files Plugin","url":"http://updates.jenkins-ci.org/download/plugins/associated-files/0.2.1/associated-files.hpi","version":"0.2.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Associated+Files+Plugin"},"async-http-client":{"buildDate":"Dec 18, 2012","dependencies":[],"developers":[{"developerId":"stephenc","name":"Stephen Connolly"}],"excerpt":"This plugin provides a shared dependency on the ning.com async-http-client library so that other plugins can co-operate when using this library. ","gav":"org.jenkins-ci.plugins:async-http-client:1.7.8","labels":["library"],"name":"async-http-client","previousTimestamp":"2012-05-11T16:04:24.00Z","previousVersion":"1.7.4-1","releaseTimestamp":"2012-12-18T15:44:54.00Z","requiredCore":"1.424","scm":"github.com","sha1":"U4lhSsu4ufgFkujWE4P5ZfWGOxk=","title":"Async Http Client Plugin","url":"http://updates.jenkins-ci.org/download/plugins/async-http-client/1.7.8/async-http-client.hpi","version":"1.7.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Async+Http+Client+Plugin"},"async-job":{"buildDate":"Nov 21, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"Library plugin for custom job types that model external asynchronous processes","gav":"org.jenkins-ci.plugins:async-job:1.3","labels":[],"name":"async-job","previousTimestamp":"2012-11-21T16:09:58.00Z","previousVersion":"1.2","releaseTimestamp":"2012-11-21T16:33:36.00Z","requiredCore":"1.466","scm":"github.com","sha1":"WaHABPk+pZbS91vn/A9MxuA4CwU=","title":"Async Job Plugin","url":"http://updates.jenkins-ci.org/download/plugins/async-job/1.3/async-job.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Async+Job+Plugin"},"audit-trail":{"buildDate":"Aug 03, 2011","dependencies":[],"developers":[{"developerId":"mindless","name":"Alan Harder"}],"excerpt":"Keep a log of who performed particular Jenkins operations, such as configuring jobs.","gav":"org.jenkins-ci.plugins:audit-trail:1.7","labels":["user"],"name":"audit-trail","previousTimestamp":"2011-02-24T23:32:28.00Z","previousVersion":"1.6","releaseTimestamp":"2011-08-03T12:01:06.00Z","requiredCore":"1.398","scm":"github.com","sha1":"HppBhEA8cfWIFnPtMA0iJrwwO28=","title":"Audit Trail Plugin","url":"http://updates.jenkins-ci.org/download/plugins/audit-trail/1.7/audit-trail.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Audit+Trail+Plugin"},"avatar":{"buildDate":"May 24, 2012","dependencies":[],"developers":[{"developerId":"oxcafebabe","email":"edward@hurst-frost.net","name":"Edward Hurst-Frost"}],"excerpt":"This plugin allows avatar images to be uploaded and associated with Jenkins users.","gav":"net.hurstfrost.jenkins:avatar:1.1","labels":["user"],"name":"avatar","previousTimestamp":"2011-08-07T21:10:34.00Z","previousVersion":"1.0","releaseTimestamp":"2012-05-24T16:22:40.00Z","requiredCore":"1.434","scm":"svn.jenkins-ci.org","sha1":"o56/TYEopv5tUQQNZRN4muuvxKo=","title":"Avatar Plugin","url":"http://updates.jenkins-ci.org/download/plugins/avatar/1.1/avatar.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Avatar+Plugin"},"backlog":{"buildDate":"Sep 06, 2012","dependencies":[{"name":"subversion","optional":false,"version":"1.11"},{"name":"git","optional":true,"version":"1.1.22"}],"developers":[{"developerId":"dragon3","name":"Ryuzo Yamamoto"},{"developerId":"ikikko","name":"Tomonari Nakamura"}],"excerpt":"This plugin integrates Backlog<\/a> to Jenkins.","gav":"org.jenkins-ci.plugins:backlog:1.8","labels":["notifier","external","user","upload"],"name":"backlog","previousTimestamp":"2012-03-09T05:04:36.00Z","previousVersion":"1.7","releaseTimestamp":"2012-09-06T04:05:00.00Z","requiredCore":"1.398","scm":"github.com","sha1":"Exu7kLnh8YpWULrAPmIZf4n5bV0=","title":"Backlog Plugin","url":"http://updates.jenkins-ci.org/download/plugins/backlog/1.8/backlog.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Backlog+Plugin"},"backup":{"buildDate":"Aug 04, 2011","dependencies":[],"developers":[{"developerId":"vsellier","name":"Vincent Sellier"},{"developerId":"rseguy","name":"Romain Seguy"}],"excerpt":"Backup plugin allows archiving and restoring your Jenkins (and Hudson) home directory.","gav":"org.jvnet.hudson.plugins:backup:1.6.1","labels":["misc"],"name":"backup","previousTimestamp":"2010-12-10T20:48:50.00Z","previousVersion":"1.6","releaseTimestamp":"2011-08-04T15:53:04.00Z","requiredCore":"1.375","scm":"svn.jenkins-ci.org","sha1":"qoj8AeHUNaQvgISsEiJ5SkIPX70=","title":"Backup Plugin","url":"http://updates.jenkins-ci.org/download/plugins/backup/1.6.1/backup.hpi","version":"1.6.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Backup+Plugin"},"bamboo-notifier":{"buildDate":"Apr 22, 2010","dependencies":[],"developers":[{"developerId":"asgeirn","email":"asgeir@twingine.no","name":"Asgeir Storesund Nilsen"}],"excerpt":"Trigger a Bamboo build upon successful completion of a Hudson job.","gav":"hudson.plugins.bamboo:bamboo-notifier:1.1","labels":["notifier"],"name":"bamboo-notifier","previousTimestamp":"2009-12-30T21:05:20.00Z","previousVersion":"1.0","releaseTimestamp":"2010-04-23T03:49:02.00Z","requiredCore":"1.355","scm":"svn.dev.java.net","sha1":"6B/9qHkLC0818IeGfLOo+TAo3I0=","title":"Bamboo Notifier","url":"http://updates.jenkins-ci.org/download/plugins/bamboo-notifier/1.1/bamboo-notifier.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Bamboo+Notifier"},"batch-task":{"buildDate":"May 01, 2012","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"mindless","name":"Alan Harder"}],"excerpt":"This plugin adds batch tasks that are not regularly executed to projects, such as releases, integration, archiving, etc.","gav":"org.jenkins-ci.plugins:batch-task:1.16","labels":["post-build","builder"],"name":"batch-task","previousTimestamp":"2012-04-06T01:06:12.00Z","previousVersion":"1.15","releaseTimestamp":"2012-05-01T23:10:38.00Z","requiredCore":"1.424","scm":"github.com","sha1":"/oqANM4r4lIsmZ4QJ94MhE5WmhE=","title":"Batch Task Plugin","url":"http://updates.jenkins-ci.org/download/plugins/batch-task/1.16/batch-task.hpi","version":"1.16","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Batch+Task+Plugin"},"bazaar":{"buildDate":"Oct 12, 2012","dependencies":[],"developers":[{"developerId":"stewart","email":"stewart@flamingspork.com","name":"Stewart Smith"}],"excerpt":"This plugin integrates Bazaar<\/a> version control system to Jenkins. The plugin requires the Bazaar binary (bzr) to be installed on the target machine.","gav":"org.jenkins-ci.plugins:bazaar:1.21","labels":["scm"],"name":"bazaar","previousTimestamp":"2012-08-27T16:26:30.00Z","previousVersion":"1.20","releaseTimestamp":"2012-10-12T22:34:24.00Z","requiredCore":"1.413","scm":"github.com","sha1":"RAHlxZYARNBQ/VUr/zVFTrJiIeI=","title":"Bazaar Plugin","url":"http://updates.jenkins-ci.org/download/plugins/bazaar/1.21/bazaar.hpi","version":"1.21","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Bazaar+Plugin"},"beer":{"buildDate":"Mar 21, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"We all need beer from time to time","gav":"org.jenkins-ci.plugins:beer:1.2","labels":[],"name":"beer","previousTimestamp":"2012-01-04T14:43:28.00Z","previousVersion":"1.1","releaseTimestamp":"2012-03-21T13:59:58.00Z","requiredCore":"1.409","scm":"github.com","sha1":"FLwF/QynS4lSxqG3eBrGBSkiYxw=","title":"Beer Plugin","url":"http://updates.jenkins-ci.org/download/plugins/beer/1.2/beer.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Beer+Plugin"},"bitkeeper":{"buildDate":"Oct 11, 2011","dependencies":[],"developers":[{"developerId":"mdonohue","email":"michael.donohue@gmail.com","name":"Michael Donohue"}],"excerpt":"Add BitKeeper support to Jenkins","gav":"org.jenkins-ci.plugins:bitkeeper:1.7","labels":["scm"],"name":"bitkeeper","previousTimestamp":"2011-10-09T20:17:14.00Z","previousVersion":"1.6","releaseTimestamp":"2011-10-11T06:26:58.00Z","requiredCore":"1.409","scm":"github.com","sha1":"08+AUEZVP8/7EgiNj5zTH1jQJHI=","title":"BitKeeper Plugin","url":"http://updates.jenkins-ci.org/download/plugins/bitkeeper/1.7/bitkeeper.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/BitKeeper+Plugin"},"blame-upstream-commiters":{"buildDate":"Sep 15, 2010","dependencies":[],"developers":[{"developerId":"taksan","email":"g.takeuchi@gmail.com","name":"Gabriel Takeuchi"},{"developerId":"willemv","name":"Willem Verstraeten"}],"excerpt":"This is a simple plugin that adds a post build action to mail upstream committers when a build fails.","gav":"hudson.plugins:blame-upstream-commiters:1.2","labels":["notifier"],"name":"blame-upstream-commiters","previousTimestamp":"2010-01-21T17:26:24.00Z","previousVersion":"1.1","releaseTimestamp":"2010-09-16T01:37:02.00Z","requiredCore":"1.375","scm":"svn.dev.java.net","sha1":"kZeGWhk47OJBs9OJWnGBmnF23yE=","title":"Blame Upstream Committers Plugin","url":"http://updates.jenkins-ci.org/download/plugins/blame-upstream-commiters/1.2/blame-upstream-commiters.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Blame+Upstream+Committers+Plugin"},"blink1":{"buildDate":"Dec 20, 2012","dependencies":[],"developers":[{"developerId":"maripo","email":"goda.mariko@gmail.com","name":"Maripo GODA"}],"excerpt":"","gav":"org.jenkins-ci.plugins:blink1:1.1","labels":["notifier"],"name":"blink1","previousTimestamp":"2012-12-17T05:07:30.00Z","previousVersion":"1.0","releaseTimestamp":"2012-12-21T03:46:06.00Z","requiredCore":"1.466","scm":"github.com","sha1":"Ga4ZFkUrbwosjuvCmnNSvxG2/oc=","title":"Blink1 Plugin","url":"http://updates.jenkins-ci.org/download/plugins/blink1/1.1/blink1.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Blink1+Plugin"},"blitz_io-jenkins":{"buildDate":"Jun 05, 2012","dependencies":[],"developers":[{"developerId":"jeffli","email":"jeff.li@spirent.com","name":"Jeff Li"}],"excerpt":"This plugin allows you to run web load tests from the cloud using Blitz.io<\/a>.  ","gav":"io.blitz:blitz_io-jenkins:1.04","labels":["external"],"name":"blitz_io-jenkins","previousTimestamp":"2012-06-04T17:08:32.00Z","previousVersion":"1.03","releaseTimestamp":"2012-06-05T17:33:34.00Z","requiredCore":"1.424","scm":"github.com","sha1":"N6OPL25lUyGUWNHcBbf0FebR2Ao=","title":"Blitz_io","url":"http://updates.jenkins-ci.org/download/plugins/blitz_io-jenkins/1.04/blitz_io-jenkins.hpi","version":"1.04","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Blitz_io"},"brakeman":{"buildDate":"Mar 21, 2012","dependencies":[{"name":"analysis-core","optional":false,"version":"1.38"},{"name":"maven-plugin","optional":false,"version":"1.409"}],"developers":[{"developerId":"presidentbeef","name":"Justin Collins"}],"excerpt":"This plugin reads output from Brakeman<\/a>, a static analysis security vulnerability scanner for Ruby on Rails. ","gav":"org.jenkins-ci.plugins:brakeman:0.7","labels":["report","ruby"],"name":"brakeman","previousTimestamp":"2011-10-20T19:47:38.00Z","previousVersion":"0.5","releaseTimestamp":"2012-03-21T21:45:02.00Z","requiredCore":"1.409","scm":"github.com","sha1":"SiRIW5mFnaSzEEFmNL76bsbC5hg=","title":"Brakeman Plugin","url":"http://updates.jenkins-ci.org/download/plugins/brakeman/0.7/brakeman.hpi","version":"0.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Brakeman+Plugin"},"browser-axis-plugin":{"buildDate":"Apr 02, 2012","dependencies":[],"developers":[{"developerId":"lvotypko","email":"lvotypko@redhat.com","name":"Lucie Votypkova"}],"excerpt":"This plugin add browser axis to matrix job ","gav":"org.jenkins-ci.plugins:browser-axis-plugin:1.0","labels":[],"name":"browser-axis-plugin","releaseTimestamp":"2012-04-02T17:33:00.00Z","requiredCore":"1.409","scm":"github.com","sha1":"JQIsqTmj+FpviQ315kyNHWhtuUg=","title":"Browser axis plugin","url":"http://updates.jenkins-ci.org/download/plugins/browser-axis-plugin/1.0/browser-axis-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Browser+axis+plugin"},"bruceschneier":{"buildDate":"Oct 15, 2009","dependencies":[],"developers":[{"developerId":"dinomite","email":"dstephens@genius.com","name":"Drew Stephens"}],"excerpt":"Displays a picture of Bruce Schneier (instead of Jenkins the butler) and a random Bruce Schneier fact on each build page. ","gav":"org.jvnet.hudson.plugins:bruceschneier:0.1","labels":["ui"],"name":"bruceschneier","releaseTimestamp":"2009-10-15T20:24:54.00Z","requiredCore":"1.328","scm":"svn.dev.java.net","sha1":"8bQawVNxgl+tjz3BCkELvxZpFuc=","title":"BruceSchneier Plugin","url":"http://updates.jenkins-ci.org/download/plugins/bruceschneier/0.1/bruceschneier.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/BruceSchneier+Plugin"},"buckminster":{"buildDate":"Apr 01, 2011","dependencies":[],"developers":[{"developerId":"jutzig","email":"mail@jutzig.de","name":"Johannes Utzig"}],"excerpt":"This PlugIn integrates Eclipse Buckminster<\/a> as a new build step into hudson.","gav":"org.jvnet.hudson.plugins:buckminster:1.1.0","labels":["builder"],"name":"buckminster","previousTimestamp":"2011-01-15T05:59:02.00Z","previousVersion":"1.0.8","releaseTimestamp":"2011-04-01T04:30:56.00Z","requiredCore":"1.391","scm":"svn.jenkins-ci.org","sha1":"cQkGNBqaDceKiVpP1udlH0ubzMk=","title":"Buckminster PlugIn","url":"http://updates.jenkins-ci.org/download/plugins/buckminster/1.1.0/buckminster.hpi","version":"1.1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Buckminster+PlugIn"},"buddycloud":{"buildDate":"Aug 04, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.10"},{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"lloyd"}],"excerpt":"Sends build notifications to a buddycloud instance.","gav":"org.jenkins-ci.ruby-plugins:buddycloud:0.2.3","labels":["notifier"],"name":"buddycloud","previousTimestamp":"2012-08-04T16:29:44.00Z","previousVersion":"0.2.2","releaseTimestamp":"2012-08-04T16:48:12.00Z","requiredCore":"1.432","scm":"github.com","sha1":"ySjScOdtVhNyxVBUTjdXtRvR1o4=","title":"Buddycloud Plugin","url":"http://updates.jenkins-ci.org/download/plugins/buddycloud/0.2.3/buddycloud.hpi","version":"0.2.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Buddycloud+Plugin"},"bugzilla":{"buildDate":"Nov 04, 2011","dependencies":[],"developers":[{"name":"New Maintainer Needed"},{"developerId":"mdonohue","name":"mdonohue"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin integrates Bugzilla<\/a> into Hudson.","gav":"org.jvnet.hudson.plugins:bugzilla:1.5","labels":["external"],"name":"bugzilla","previousTimestamp":"2010-01-30T22:33:34.00Z","previousVersion":"1.4","releaseTimestamp":"2011-11-04T15:27:08.00Z","requiredCore":"1.392","scm":"github.com","sha1":"I4ZhiTbY4Qm0Vfxb3I23I7ZVHyM=","title":"Bugzilla Plugin","url":"http://updates.jenkins-ci.org/download/plugins/bugzilla/1.5/bugzilla.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Bugzilla+Plugin"},"build-blocker-plugin":{"buildDate":"Jun 25, 2012","dependencies":[],"developers":[{"developerId":"ffromm","email":"frederik.fromm@gmail.com","name":"Frederik Fromm"}],"excerpt":"This plugin keeps the actual job in the queue if at least one name of currently running jobs is matching with one of the given regular expressions.","gav":"org.jenkins-ci.plugins:build-blocker-plugin:1.2","labels":["misc"],"name":"build-blocker-plugin","previousTimestamp":"2012-06-25T01:36:10.00Z","previousVersion":"1.1","releaseTimestamp":"2012-06-25T17:34:08.00Z","requiredCore":"1.447","scm":"github.com","sha1":"EYsOQkHe/oRz0Jwa6eoqG298bfs=","title":"Build Blocker Plugin","url":"http://updates.jenkins-ci.org/download/plugins/build-blocker-plugin/1.2/build-blocker-plugin.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+Blocker+Plugin"},"build-cause-run-condition":{"buildDate":"Jul 25, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"},{"name":"run-condition","optional":false,"version":"0.10"}],"developers":[{"developerId":"cjo9900","email":"cjo.johnson@gmail.com","name":"Chris Johnson"}],"excerpt":"Build Cause Run condition to select whether to execute a build step or publisher. Used by the [Run Condition Plugin]. ","gav":"org.jenkins-ci.plugins:build-cause-run-condition:0.1","labels":["runcondition"],"name":"build-cause-run-condition","releaseTimestamp":"2012-07-25T21:43:24.00Z","requiredCore":"1.424","scm":"github.com","sha1":"my5PF28k9N0wVDymOp7LwHbeDQM=","title":"Build Cause Run Condition","url":"http://updates.jenkins-ci.org/download/plugins/build-cause-run-condition/0.1/build-cause-run-condition.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+Cause+Run+Condition"},"build-failure-analyzer":{"buildDate":"Dec 06, 2012","dependencies":[{"name":"gerrit-trigger","optional":true,"version":"2.7.0"},{"name":"git","optional":false,"version":"1.1.10"}],"developers":[{"developerId":"rsandell","email":"robert.sandell@sonymobile.com","name":"Robert Sandell"},{"developerId":"t_westling","email":"tomas.westling@sonymobile.com","name":"Tomas Westling"}],"excerpt":"This plugin analyzes the causes of failed builds and presents the causes on the build page. It does this by using a knowledge base of build failure causes that is built up from scratch. Saving statistics about failure causes is also possible. ","gav":"com.sonyericsson.jenkins.plugins.bfa:build-failure-analyzer:1.3.0","labels":["post-build","report"],"name":"build-failure-analyzer","previousTimestamp":"2012-11-22T21:22:04.00Z","previousVersion":"1.2.0","releaseTimestamp":"2012-12-06T17:47:40.00Z","requiredCore":"1.424","scm":"github.com","sha1":"m0VjdEwVPB8jHZwXs/wkJIfqWSw=","title":"Build Failure Analyzer","url":"http://updates.jenkins-ci.org/download/plugins/build-failure-analyzer/1.3.0/build-failure-analyzer.hpi","version":"1.3.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+Failure+Analyzer"},"build-flow-plugin":{"buildDate":"Nov 24, 2012","dependencies":[],"developers":[{"developerId":"ndeloof","name":"Nicolas De Loof"},{"developerId":"henryju","name":"Julien Henry"},{"developerId":"mathieuancelin","name":"Mathieu Ancelin"}],"excerpt":"This plugin allows managing Jenkins jobs orchestration using a dedicated DSL, extracting the flow logic from jobs. ","gav":"com.cloudbees.plugins:build-flow-plugin:0.6","labels":["misc","trigger"],"name":"build-flow-plugin","previousTimestamp":"2012-09-03T16:14:56.00Z","previousVersion":"0.5","releaseTimestamp":"2012-11-24T16:44:52.00Z","requiredCore":"1.466","scm":"github.com","sha1":"ob/TMcG9ZgkS0v6JuilFmKgnpXI=","title":"Build Flow Plugin","url":"http://updates.jenkins-ci.org/download/plugins/build-flow-plugin/0.6/build-flow-plugin.hpi","version":"0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin"},"build-keeper-plugin":{"buildDate":"Apr 16, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"},{"name":"run-condition","optional":false,"version":"0.8"}],"developers":[{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"}],"excerpt":"Select a policy for automatically marking builds as \"keep forever\" to enable long term analysis trending when discarding old builds - or use to protect logs and artifacts from certain builds ","gav":"org.jenkins-ci.plugins:build-keeper-plugin:1.3","labels":["buildwrapper"],"name":"build-keeper-plugin","previousTimestamp":"2012-01-12T04:07:56.00Z","previousVersion":"1.2","releaseTimestamp":"2012-04-17T03:10:06.00Z","requiredCore":"1.408","scm":"github.com","sha1":"OqMzcGSJtV6erzuvU28ebESw114=","title":"Build Keeper Plugin","url":"http://updates.jenkins-ci.org/download/plugins/build-keeper-plugin/1.3/build-keeper-plugin.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+Keeper+Plugin"},"build-metrics":{"buildDate":"Feb 17, 2012","dependencies":[{"name":"global-build-stats","optional":false,"version":"1.2"}],"developers":[{"developerId":"javamllama","email":"madeline.goss@gmail.com","name":"Maddy Goss"}],"excerpt":"This plugin uses the results from the Global Build Stats Plugin<\/a> to generate some basic build metrics.  It is really useful in combination with the sidebar links plugin<\/a>. ","gav":"org.jenkins-ci.plugins:build-metrics:1.0","labels":["report"],"name":"build-metrics","releaseTimestamp":"2012-02-17T18:56:44.00Z","requiredCore":"1.398","scm":"github.com","sha1":"dZBa2mOxEpW+IQgaG+g5holrW3k=","title":"build-metrics-plugin","url":"http://updates.jenkins-ci.org/download/plugins/build-metrics/1.0/build-metrics.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/build-metrics-plugin"},"build-name-setter":{"buildDate":"Aug 02, 2011","dependencies":[{"name":"token-macro","optional":false,"version":"1.0"}],"developers":[{"developerId":"kohsuke","email":"kkawaguchi@cloudbees.com","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin sets the display name of a build to something other than #1, #2, #3, ...","gav":"org.jenkins-ci.plugins:build-name-setter:1.3","labels":["buildwrapper"],"name":"build-name-setter","previousTimestamp":"2011-05-23T17:41:42.00Z","previousVersion":"1.2","releaseTimestamp":"2011-08-02T21:46:14.00Z","requiredCore":"1.398","scm":"github.com","sha1":"yXpAu0/uO8qZJG6prT/DUy0DKl0=","title":"Build Name Setter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/build-name-setter/1.3/build-name-setter.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+Name+Setter+Plugin"},"build-node-column":{"buildDate":"Nov 26, 2011","dependencies":[],"developers":[{"developerId":"wadatka","name":"Takahisa Wada"}],"excerpt":"","gav":"org.jenkins-ci.plugins:build-node-column:0.1","labels":["listview-column"],"name":"build-node-column","releaseTimestamp":"2011-11-26T07:39:56.00Z","requiredCore":"1.409","scm":"github.com","sha1":"WHf29XsvkD/YKxLQt2CYG+4fmL4=","title":"Build Node Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/build-node-column/0.1/build-node-column.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+Node+Column+Plugin"},"build-pipeline-plugin":{"buildDate":"Jul 13, 2012","dependencies":[{"name":"dashboard-view","optional":true,"version":"2.2"},{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.457"}],"developers":[{"developerId":"centrum","email":"plugins@centrumsystems.com.au","name":"Centrum Systems"}],"excerpt":"This plugin provides build pipeline functionality to Hudson and Jenkins. This allows a chain of jobs to be visualised in a new view. Manual jobs in the pipeline can be triggered by a user with the appropriate permissions manually confirming.","gav":"org.jenkins-ci.plugins:build-pipeline-plugin:1.3.3","name":"build-pipeline-plugin","previousTimestamp":"2012-07-13T14:04:38.00Z","previousVersion":"1.3.2","releaseTimestamp":"2012-07-13T15:36:10.00Z","requiredCore":"1.457","scm":"build-pipeline-plugin.googlecode.com","sha1":"ztqNXLLRO3CdiFzWW9YC8zPszOw=","title":"Build Pipeline Plugin","url":"http://updates.jenkins-ci.org/download/plugins/build-pipeline-plugin/1.3.3/build-pipeline-plugin.hpi","version":"1.3.3"},"build-publisher":{"buildDate":"Sep 05, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"}],"developers":[{"developerId":"vjuranek","name":"Vojtech Juranek"}],"excerpt":"This plugin allows records from one Jenkins to be published on another Jenkins.","gav":"org.jenkins-ci.plugins:build-publisher:1.13","labels":["upload"],"name":"build-publisher","previousTimestamp":"2012-03-28T14:54:48.00Z","previousVersion":"1.12","releaseTimestamp":"2012-09-06T03:04:36.00Z","requiredCore":"1.424","scm":"github.com","sha1":"qZ9xH2rI+RA4B2K6YQWQLa5YSts=","title":"Build Publisher Plugin","url":"http://updates.jenkins-ci.org/download/plugins/build-publisher/1.13/build-publisher.hpi","version":"1.13","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+Publisher+Plugin"},"build-timeout":{"buildDate":"Oct 28, 2012","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin allows you to automatically abort a build if it's taking too long.","gav":"org.jenkins-ci.plugins:build-timeout:1.11","labels":["buildwrapper"],"name":"build-timeout","previousTimestamp":"2012-06-17T16:01:42.00Z","previousVersion":"1.10","releaseTimestamp":"2012-10-28T20:24:46.00Z","requiredCore":"1.447","scm":"github.com","sha1":"HQQhUtzuI7j9kIKgs9Wb+nIUdDE=","title":"Build-timeout Plugin","url":"http://updates.jenkins-ci.org/download/plugins/build-timeout/1.11/build-timeout.hpi","version":"1.11","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build-timeout+Plugin"},"build-user-vars-plugin":{"buildDate":"Feb 18, 2012","dependencies":[],"developers":[{"developerId":"gkonovalenko","email":"gkonovalenko@gmail.com","name":"Gavriil Konovalenko"}],"excerpt":"This plugin is used to set user build variables. ","gav":"org.jenkins-ci.plugins:build-user-vars-plugin:1.1","labels":["buildwrapper"],"name":"build-user-vars-plugin","previousTimestamp":"2012-02-16T07:57:44.00Z","previousVersion":"1.0","releaseTimestamp":"2012-02-19T01:21:18.00Z","requiredCore":"1.450","scm":"github.com","sha1":"aMQEGn+BqNScvCv7B98MQSZ4ROw=","title":"Build User Vars Plugin","url":"http://updates.jenkins-ci.org/download/plugins/build-user-vars-plugin/1.1/build-user-vars-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+User+Vars+Plugin"},"buildcoin-plugin":{"buildDate":"Sep 05, 2012","dependencies":[],"developers":[{"developerId":"webandtech","email":"asevers@gmail.com","name":"Aaron Severs"}],"excerpt":"Sends build info to Buildcoin<\/a>, a CI game that rewards users for committing often, keeping the build stable, and using pull requests for code reviews.","gav":"com.buildcoin.plugins.jenkins:buildcoin-plugin:1.4","labels":["notifier","external","misc"],"name":"buildcoin-plugin","previousTimestamp":"2012-05-24T12:24:06.00Z","previousVersion":"1.3","releaseTimestamp":"2012-09-06T00:21:18.00Z","requiredCore":"1.428","scm":"github.com","sha1":"nkkwtFaAUM7r1XRpXTNBhb1PkGA=","title":"Buildcoin Plugin","url":"http://updates.jenkins-ci.org/download/plugins/buildcoin-plugin/1.4/buildcoin-plugin.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Buildcoin+Plugin"},"buildcontext-capture":{"buildDate":"Aug 15, 2012","dependencies":[],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to capture the build context to ensure traceability and auditability.","gav":"org.jenkins-ci.plugins:buildcontext-capture:0.6","labels":["misc"],"name":"buildcontext-capture","previousTimestamp":"2012-05-01T03:06:58.00Z","previousVersion":"0.5","releaseTimestamp":"2012-08-15T16:34:40.00Z","requiredCore":"1.410","scm":"github.com","sha1":"WyAqcNQbOPchin307zamdFGjx48=","title":"BuildContextCapture Plugin","url":"http://updates.jenkins-ci.org/download/plugins/buildcontext-capture/0.6/buildcontext-capture.hpi","version":"0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/BuildContextCapture+Plugin"},"buildresult-trigger":{"buildDate":"Aug 06, 2012","dependencies":[],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"BuildResultTrigger makes it possible to monitor the build results of other jobs. ","gav":"org.jenkins-ci.plugins:buildresult-trigger:0.9","labels":["trigger"],"name":"buildresult-trigger","previousTimestamp":"2012-06-22T04:18:56.00Z","previousVersion":"0.8","releaseTimestamp":"2012-08-07T01:54:42.00Z","requiredCore":"1.461","scm":"github.com","sha1":"o4l6mF2EvrB+4YhWBWMbHGT7GWU=","title":"BuildResultTrigger Plugin","url":"http://updates.jenkins-ci.org/download/plugins/buildresult-trigger/0.9/buildresult-trigger.hpi","version":"0.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/BuildResultTrigger+Plugin"},"buildtriggerbadge":{"buildDate":"Oct 16, 2012","dependencies":[],"developers":[{"developerId":"mpapo","email":"mpapo.dev@gmail.com","name":"Michael Pailloncy"},{"developerId":"batmat","email":"batmat@batmat.net","name":"Baptiste Mathus"}],"excerpt":"This plugin displays icon(s) representing the cause(s) of a build directly in the build history. It lets you quickly know which cause triggered a build. ","gav":"org.jenkins-ci.plugins:buildtriggerbadge:0.9","labels":["ui"],"name":"buildtriggerbadge","previousTimestamp":"2012-09-27T01:29:22.00Z","previousVersion":"0.8","releaseTimestamp":"2012-10-16T11:29:08.00Z","requiredCore":"1.466","scm":"github.com","sha1":"G+L/F2a6qp+MKhEN8bDG9RwOxIM=","title":"Build Trigger Badge Plugin","url":"http://updates.jenkins-ci.org/download/plugins/buildtriggerbadge/0.9/buildtriggerbadge.hpi","version":"0.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+Trigger+Badge+Plugin"},"built-on-column":{"buildDate":"Jul 26, 2011","dependencies":[],"developers":[{"developerId":"voorth","email":"voorth@xs4all.nl","name":"Henk van Voorthuijsen"}],"excerpt":"Adds a column that shows the actual node the last build was run on. ","gav":"org.jenkins-ci.plugins:built-on-column:1.1","labels":["listview-column"],"name":"built-on-column","previousTimestamp":"2011-05-01T20:10:02.00Z","previousVersion":"1.0","releaseTimestamp":"2011-07-26T14:53:14.00Z","requiredCore":"1.398","scm":"github.com","sha1":"qmhau75igj9lfUb/Qf205PJL/3c=","title":"Built-on Column","url":"http://updates.jenkins-ci.org/download/plugins/built-on-column/1.1/built-on-column.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Built-on+Column"},"bulk-builder":{"buildDate":"Mar 04, 2012","dependencies":[],"developers":[{"developerId":"swestcott","email":"swestcott@gmail.com","name":"Simon Westcott"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse farinacci"}],"excerpt":"Trigger multiple builds with ease. Designed for users with many jobs.","gav":"org.jvnet.hudson.plugins:bulk-builder:1.5","labels":["builder","misc"],"name":"bulk-builder","previousTimestamp":"2011-11-13T17:56:38.00Z","previousVersion":"1.4","releaseTimestamp":"2012-03-05T03:15:32.00Z","requiredCore":"1.388","scm":"github.com","sha1":"oxuygc8GHIZWT3EG/OUvZhApg3A=","title":"Bulk Builder Plugin","url":"http://updates.jenkins-ci.org/download/plugins/bulk-builder/1.5/bulk-builder.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Bulk+Builder+Plugin"},"caliper-ci":{"buildDate":"Nov 09, 2012","dependencies":[],"developers":[{"developerId":"brianfromoregon","email":"brianfromoregon@gmail.com","name":"Brian Harris"}],"excerpt":"","gav":"com.brianfromoregon:caliper-ci:2.3","name":"caliper-ci","previousTimestamp":"2012-04-01T01:33:56.00Z","previousVersion":"2.2","releaseTimestamp":"2012-11-09T16:46:10.00Z","requiredCore":"1.466","scm":"github.com","sha1":"UEeRgDZYzJr3/UbkJSDyzKrP+kU=","title":"Caliper CI Plugin","url":"http://updates.jenkins-ci.org/download/plugins/caliper-ci/2.3/caliper-ci.hpi","version":"2.3"},"campfire":{"buildDate":"Dec 01, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"}],"developers":[{"developerId":"jenslukowski","email":"jens.lukowski@softwareschneiderei.de","name":"Jens Lukowski"},{"developerId":"thickpaddy","name":"Mark Woods"},{"developerId":"jkrall","name":"Joshua Krall"},{"developerId":"bgreenlee","name":"Brad Greenlee"},{"developerId":"hpoydar","name":"Henry Poydar"},{"developerId":"mortice","name":"Tom Stuart"},{"developerId":"dbriones","name":"Dante Briones"}],"excerpt":"This plugin allows your team to setup build notifications to be sent to Campfire rooms.","gav":"org.jenkins-ci.plugins:campfire:2.6","labels":["notifier"],"name":"campfire","previousTimestamp":"2010-06-30T18:41:34.00Z","previousVersion":"2.1","releaseTimestamp":"2012-12-02T03:28:14.00Z","requiredCore":"1.424","scm":"github.com","sha1":"9vgRW9ecP0yH8Rm5XxOhSV02824=","title":"Campfire Plugin","url":"http://updates.jenkins-ci.org/download/plugins/campfire/2.6/campfire.hpi","version":"2.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Campfire+Plugin"},"caroline":{"buildDate":"Nov 02, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","email":"kk@kohsuke.org","name":"Kohsuke Kawaguchi"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Interfaces with Project Caroline<\/a>.","gav":"org.jvnet.hudson.plugins:caroline:1.0","labels":[],"name":"caroline","releaseTimestamp":"2011-11-02T23:47:16.00Z","requiredCore":"1.392","scm":"github.com","sha1":"upVunUBtgb5H5g74tsO1EdIPiRk=","title":"Caroline Plugin","url":"http://updates.jenkins-ci.org/download/plugins/caroline/1.0/caroline.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Caroline+Plugin"},"cas-plugin":{"buildDate":"Nov 10, 2012","dependencies":[],"developers":[{"developerId":"fcrespel","email":"fabien@crespel.net","name":"Fabien Crespel"}],"excerpt":"This plugin enables use of Jasig CAS<\/a> as an authentication source, for single sign-on and single sign-out support.","gav":"org.jenkins-ci.plugins:cas-plugin:1.1.1","labels":["user"],"name":"cas-plugin","previousTimestamp":"2012-09-07T05:09:28.00Z","previousVersion":"1.1.0","releaseTimestamp":"2012-11-10T06:09:34.00Z","requiredCore":"1.470","scm":"github.com","sha1":"669qS+eHM/zlJsrOQu4avVD1aR0=","title":"CAS Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cas-plugin/1.1.1/cas-plugin.hpi","version":"1.1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CAS+Plugin"},"cas1":{"buildDate":"Mar 09, 2010","dependencies":[],"developers":[{"developerId":"david_beutel","email":"jbeutel@hawaii.edu","name":"J. David Beutel"}],"excerpt":"This plugin lets Hudson authenticate users via your organization's Central Authentication Service (CAS<\/a>), for single-sign-on. ","gav":"org.jvnet.hudson.plugins:cas1:1.0.1","labels":["user"],"name":"cas1","previousTimestamp":"2010-03-05T17:23:56.00Z","previousVersion":"1.0","releaseTimestamp":"2010-03-09T14:55:46.00Z","requiredCore":"1.349","scm":"svn.dev.java.net","sha1":"4HqufRisxkuZQLp7fjix5jMNmgk=","title":"CAS1 Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cas1/1.0.1/cas1.hpi","version":"1.0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CAS1+Plugin"},"cccc":{"buildDate":"Nov 24, 2011","dependencies":[],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"This plugin generates the trend report for CCCC<\/a> (C and C+\\+ Code Counter).","gav":"com.thalesgroup.jenkins-ci.plugins:cccc:0.6","labels":["report"],"name":"cccc","previousTimestamp":"2011-08-14T03:57:30.00Z","previousVersion":"0.5","releaseTimestamp":"2011-11-25T04:29:22.00Z","requiredCore":"1.410","scm":"github.com","sha1":"dkJsiKHW6rmqQ0VAEUqlB8kwFls=","title":"CCCC Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cccc/0.6/cccc.hpi","version":"0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CCCC+Plugin"},"ccm":{"buildDate":"Apr 06, 2012","dependencies":[{"name":"analysis-core","optional":false,"version":"1.38"},{"name":"token-macro","optional":true,"version":"1.1"},{"name":"dashboard-view","optional":true,"version":"1.8.1"},{"name":"maven-plugin","optional":false,"version":"1.409"}],"developers":[{"developerId":"kinow","email":"brunodepaulak@yahoo.com.br","name":"Bruno P. Kinoshita"},{"developerId":"cesar1983","email":"cesar.fa@gmail.com","name":"Cesar Fernandes de Almeida"}],"excerpt":"This plug-in generates reports on cyclomatic complexity for .NET code. ","gav":"org.jvnet.hudson.plugins:ccm:3.0","labels":["report","maven"],"name":"ccm","previousTimestamp":"2011-03-12T04:33:58.00Z","previousVersion":"2.6.1","releaseTimestamp":"2012-04-06T08:45:34.00Z","requiredCore":"1.409","scm":"github.com","sha1":"Vu27BHx+0u5DW/jIHSW+gaxQ2J8=","title":"CCM Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ccm/3.0/ccm.hpi","version":"3.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CCM+Plugin"},"changelog-history":{"buildDate":"Mar 29, 2011","dependencies":[{"name":"subversion","optional":false,"version":"1.23"}],"developers":[{"developerId":"mindless","name":"Alan Harder"}],"excerpt":"This plugin copies change log data to a later build when a build is deleted.","gav":"org.jenkins-ci.plugins:changelog-history:1.3","labels":["misc"],"name":"changelog-history","previousTimestamp":"2011-01-17T13:40:12.00Z","previousVersion":"1.2","releaseTimestamp":"2011-03-30T03:09:10.00Z","requiredCore":"1.398","scm":"github.com","sha1":"CTD4Qebxb82/kxZ1w5ksSQBZ40s=","title":"Change Log History Plugin","url":"http://updates.jenkins-ci.org/download/plugins/changelog-history/1.3/changelog-history.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Change+Log+History+Plugin"},"changes-since-last-success":{"buildDate":"Jul 04, 2012","dependencies":[],"developers":[{"developerId":"ndeloof","name":"Nicolas De Loof"}],"excerpt":"generate changelog for a range of builds","gav":"org.jenkins-ci.plugins:changes-since-last-success:0.3","labels":[],"name":"changes-since-last-success","previousTimestamp":"2012-06-29T16:03:20.00Z","previousVersion":"0.2","releaseTimestamp":"2012-07-04T16:41:58.00Z","requiredCore":"1.424","scm":"github.com","sha1":"+eNLN76x4awD9aChl71tmYkFj8E=","title":"Changes Since Last Success Plugin","url":"http://updates.jenkins-ci.org/download/plugins/changes-since-last-success/0.3/changes-since-last-success.hpi","version":"0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Changes+Since+Last+Success+Plugin"},"checkstyle":{"buildDate":"Oct 05, 2012","dependencies":[{"name":"maven-plugin","optional":true,"version":"1.409"},{"name":"analysis-core","optional":false,"version":"1.48"},{"name":"token-macro","optional":true,"version":"1.5.1"},{"name":"dashboard-view","optional":true,"version":"2.2"}],"developers":[{"developerId":"drulli","email":"ullrich.hafner@gmail.com","name":"Ulli Hafner"}],"excerpt":"This plugin generates the trend report for Checkstyle<\/a>, an open source static code analysis program.  ","gav":"org.jvnet.hudson.plugins:checkstyle:3.32","labels":["maven","report"],"name":"checkstyle","previousTimestamp":"2012-09-04T14:41:10.00Z","previousVersion":"3.31","releaseTimestamp":"2012-10-05T15:49:06.00Z","requiredCore":"1.409","scm":"github.com","sha1":"pXcn/yt6Wlc14FV/OhgrpF/tJTU=","title":"Checkstyle Plugin","url":"http://updates.jenkins-ci.org/download/plugins/checkstyle/3.32/checkstyle.hpi","version":"3.32","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Checkstyle+Plugin"},"chosen":{"buildDate":"Dec 31, 2012","dependencies":[{"name":"ui-samples-plugin","optional":true,"version":"1.488"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin packages JavaScript Chosen<\/a> library as a Jenkins plugin","gav":"org.jenkins-ci.plugins:chosen:1.0","labels":[],"name":"chosen","releaseTimestamp":"2012-12-31T18:02:50.00Z","requiredCore":"1.488","scm":"github.com","sha1":"OWXmtS3vpshYI6XG9TSpNph7A8Y=","title":"Chosen plugin","url":"http://updates.jenkins-ci.org/download/plugins/chosen/1.0/chosen.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Chosen+plugin"},"chrome-frame-plugin":{"buildDate":"Sep 23, 2011","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provides Google Chrome Frame<\/a> request for all pages.","gav":"org.jenkins-ci.plugins:chrome-frame-plugin:1.1","labels":["page-decorator"],"name":"chrome-frame-plugin","previousTimestamp":"2011-09-22T20:38:12.00Z","previousVersion":"1.0","releaseTimestamp":"2011-09-23T19:48:58.00Z","requiredCore":"1.429","scm":"github.com","sha1":"cU9qJp/rTvNJ3onkEN9RmHBniqQ=","title":"Chrome Frame Plugin","url":"http://updates.jenkins-ci.org/download/plugins/chrome-frame-plugin/1.1/chrome-frame-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Chrome+Frame+Plugin"},"chromedriver":{"buildDate":"Dec 21, 2011","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin auto-installs ChromeDriver<\/a> to every slave.","gav":"org.jenkins-ci.plugins:chromedriver:1.0","labels":[],"name":"chromedriver","releaseTimestamp":"2011-12-21T19:21:00.00Z","requiredCore":"1.433","scm":"github.com","sha1":"ltZBEi1nMA5WkPTXoXut6QmNVCM=","title":"ChromeDriver plugin","url":"http://updates.jenkins-ci.org/download/plugins/chromedriver/1.0/chromedriver.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ChromeDriver+plugin"},"chucknorris":{"buildDate":"Jan 21, 2010","dependencies":[],"developers":[{"developerId":"cliffano"}],"excerpt":"Displays a picture of Chuck Norris (instead of Jenkins the butler) and a random Chuck Norris 'The Programmer' fact on each build page.","gav":"org.jvnet.hudson.plugins:chucknorris:0.4","labels":["ui"],"name":"chucknorris","previousTimestamp":"2009-12-31T19:59:00.00Z","previousVersion":"0.3","releaseTimestamp":"2010-01-22T03:36:38.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"AL8IQTlgtNuHdIa/y2nSlQJOoy4=","title":"ChuckNorris Plugin","url":"http://updates.jenkins-ci.org/download/plugins/chucknorris/0.4/chucknorris.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ChuckNorris+Plugin"},"ci-game":{"buildDate":"Sep 17, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.395"},{"name":"checkstyle","optional":true,"version":"3.1"},{"name":"findbugs","optional":true,"version":"4.0"},{"name":"violations","optional":true,"version":"0.5.4"},{"name":"tasks","optional":true,"version":"4.0"},{"name":"pmd","optional":true,"version":"3.1"},{"name":"warnings","optional":true,"version":"3.0"},{"name":"analysis-core","optional":false,"version":"1.0"}],"developers":[{"developerId":"redsolo","email":"eramfelt@gmail.com","name":"Erik Ramfelt"},{"developerId":"kutzi","email":"kutzi@gmx.de","name":"Christoph Kutzinski"}],"excerpt":"This plugin introduces a game where users gets point on improving the builds.","gav":"org.jvnet.hudson.plugins:ci-game:1.19","labels":["misc","maven"],"name":"ci-game","previousTimestamp":"2011-02-18T04:10:04.00Z","previousVersion":"1.18","releaseTimestamp":"2012-09-17T14:20:18.00Z","requiredCore":"1.398","scm":"github.com","sha1":"JllQaoS6IxXdyfkm9xEv8+0juBQ=","title":"The Continuous Integration Game plugin","url":"http://updates.jenkins-ci.org/download/plugins/ci-game/1.19/ci-game.hpi","version":"1.19","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/The+Continuous+Integration+Game+plugin"},"claim":{"buildDate":"May 04, 2010","dependencies":[],"developers":[{"developerId":"AWPYV"}],"excerpt":"This plugin allows users to claim failed builds","gav":"org.jvnet.hudson.plugins:claim:1.7","labels":["misc"],"name":"claim","previousTimestamp":"2009-11-29T03:34:58.00Z","previousVersion":"1.6","releaseTimestamp":"2010-05-04T12:32:14.00Z","requiredCore":"1.347","scm":"svn.dev.java.net","sha1":"dtq8TgVz2r+hTSELtwpZ0YtOPKs=","title":"Claim plugin","url":"http://updates.jenkins-ci.org/download/plugins/claim/1.7/claim.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Claim+plugin"},"clamav":{"buildDate":"Sep 06, 2012","dependencies":[],"developers":[{"developerId":"ssogabe","name":"Seiji Sogabe"}],"excerpt":"This plugin allows you to check the artifacts with ClamAV<\/a>, which is an open source (GPL) antivirus engine designed for detecting Trojans, viruses, malware and other malicious threats. ","gav":"org.jenkins-ci.plugins:clamav:0.2.1","labels":["external"],"name":"clamav","previousTimestamp":"2011-10-17T03:48:48.00Z","previousVersion":"0.2","releaseTimestamp":"2012-09-07T00:43:34.00Z","requiredCore":"1.466","scm":"github.com","sha1":"cKPlJQcxk9cMtCRMfnBimFtztGs=","title":"ClamAV Plugin","url":"http://updates.jenkins-ci.org/download/plugins/clamav/0.2.1/clamav.hpi","version":"0.2.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ClamAV+Plugin"},"clang-scanbuild-plugin":{"buildDate":"Feb 11, 2012","dependencies":[],"developers":[{"developerId":"jkennedy1980","email":"josh@thosekennedys.com","name":"Joshua Kennedy"}],"excerpt":"This plugin allows you to execute Clang scan-build against Mac or iPhone XCode projects. ","gav":"jenkins.plugins.clangscanbuild:clang-scanbuild-plugin:1.3.1","labels":["report","ios"],"name":"clang-scanbuild-plugin","previousTimestamp":"2012-02-11T07:07:16.00Z","previousVersion":"1.3.0","releaseTimestamp":"2012-02-11T18:00:58.00Z","requiredCore":"1.403","scm":"github.com","sha1":"/M0djdCDKqkcLYYbuFezPrkj4Kw=","title":"Clang Scan-Build Plugin","url":"http://updates.jenkins-ci.org/download/plugins/clang-scanbuild-plugin/1.3.1/clang-scanbuild-plugin.hpi","version":"1.3.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Clang+Scan-Build+Plugin"},"clearcase":{"buildDate":"Jan 03, 2013","compatibleSinceVersion":"1.0","dependencies":[],"developers":[{"developerId":"vlatombe","email":"vincent.latombe@gmail.com","name":"Vincent Latombe"}],"excerpt":"Integrates Jenkins with ClearCase<\/a>.","gav":"org.jenkins-ci.plugins:clearcase:1.3.12","labels":["scm"],"name":"clearcase","previousTimestamp":"2012-10-23T14:01:52.00Z","previousVersion":"1.3.11","releaseTimestamp":"2013-01-03T16:10:04.00Z","requiredCore":"1.424","scm":"github.com","sha1":"1qqoUnZC9xEI4T+LS5h6du/TLA4=","title":"ClearCase Plugin","url":"http://updates.jenkins-ci.org/download/plugins/clearcase/1.3.12/clearcase.hpi","version":"1.3.12","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ClearCase+Plugin"},"clearcase-release":{"buildDate":"Feb 17, 2011","dependencies":[{"name":"clearcase","optional":false,"version":"1.3.5"}],"developers":[{"developerId":"gbois","email":"gbois@dev.java.net","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to promote composite baselines or latest baselines to RELEASED promotion level for Clearcase UCM. ","gav":"org.jvnet.hudson.plugins:clearcase-release:0.3","labels":["buildwrapper"],"name":"clearcase-release","previousTimestamp":"2009-12-07T05:39:28.00Z","previousVersion":"0.1","releaseTimestamp":"2011-02-17T18:36:32.00Z","requiredCore":"1.358","scm":"svn.jenkins-ci.org","sha1":"wJ5JCXLgN+2LYyJM83A+dfmsIUk=","title":"ClearCase Release Plugin","url":"http://updates.jenkins-ci.org/download/plugins/clearcase-release/0.3/clearcase-release.hpi","version":"0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ClearCase+Release+Plugin"},"clearcase-ucm-baseline":{"buildDate":"Sep 19, 2011","dependencies":[{"name":"clearcase","optional":false,"version":"1.3"}],"developers":[{"developerId":"rseguy","email":"romain.seguy@gmail.com","name":"Romain Seguy"}],"excerpt":"Allows using ClearCase UCM baselines as the input of builds: When using this SCM, users will be asked at build-time to select the baseline on which the job has to work.","gav":"org.jvnet.hudson.plugins:clearcase-ucm-baseline:1.7.4","labels":["scm"],"name":"clearcase-ucm-baseline","previousTimestamp":"2011-02-21T03:35:22.00Z","previousVersion":"1.7.3","releaseTimestamp":"2011-09-19T22:59:28.00Z","requiredCore":"1.375","scm":"svn.jenkins-ci.org","sha1":"M096rg4dK3BO7jdZAvungMCIqhs=","title":"ClearCase UCM Baseline Plugin","url":"http://updates.jenkins-ci.org/download/plugins/clearcase-ucm-baseline/1.7.4/clearcase-ucm-baseline.hpi","version":"1.7.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ClearCase+UCM+Baseline+Plugin"},"clearcase-ucm-plugin":{"buildDate":"Dec 12, 2012","dependencies":[],"developers":[{"developerId":"jes-struck","name":"Jes Struck"},{"developerId":"wolfgarnet","name":"Christian Wolfgang"},{"developerId":"les-praqma","name":"Leif Soerensen"},{"developerId":"lak-praqma","email":"support@praqma.net","name":"Lars Kruse"}],"excerpt":"A Praqmatic integration to ClearCase UCM, simplifying continuous integration with Jenkins. ","gav":"org.jenkins-ci.plugins:clearcase-ucm-plugin:1.3.1","labels":["scm"],"name":"clearcase-ucm-plugin","previousTimestamp":"2012-12-03T15:49:32.00Z","previousVersion":"1.3.0","releaseTimestamp":"2012-12-12T13:54:06.00Z","requiredCore":"1.456","scm":"github.com","sha1":"c/tRCv3O0/2zzGJR1lhM/ELzmV4=","title":"ClearCase UCM Plugin","url":"http://updates.jenkins-ci.org/download/plugins/clearcase-ucm-plugin/1.3.1/clearcase-ucm-plugin.hpi","version":"1.3.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ClearCase+UCM+Plugin"},"clone-workspace-scm":{"buildDate":"Aug 17, 2012","dependencies":[],"developers":[{"developerId":"abayer","email":"andrew.bayer@gmail.com","name":"Andrew Bayer"}],"excerpt":"This plugin makes it possible to archive the workspace from builds of one project and reuse them as the SCM source for another project.","gav":"org.jenkins-ci.plugins:clone-workspace-scm:0.5","labels":["scm"],"name":"clone-workspace-scm","previousTimestamp":"2012-02-03T18:05:26.00Z","previousVersion":"0.4","releaseTimestamp":"2012-08-17T14:42:58.00Z","requiredCore":"1.463","scm":"github.com","sha1":"dnoWGl79y5CQKBYaom02inxJJTU=","title":"Clone Workspace SCM Plugin","url":"http://updates.jenkins-ci.org/download/plugins/clone-workspace-scm/0.5/clone-workspace-scm.hpi","version":"0.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Clone+Workspace+SCM+Plugin"},"cloudbees-deployer-plugin":{"buildDate":"Feb 27, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.409"}],"developers":[{"developerId":"olamy","name":"Olivier Lamy"}],"excerpt":"Automatically deploys your application to CloudBees<\/a> RUN@Cloud at the end of your build.","gav":"org.jenkins-ci.plugins:cloudbees-deployer-plugin:1.7","labels":["maven","external"],"name":"cloudbees-deployer-plugin","previousTimestamp":"2011-08-25T04:43:40.00Z","previousVersion":"1.6","releaseTimestamp":"2012-02-27T18:09:48.00Z","requiredCore":"1.409","scm":"github.com","sha1":"cCeEIiSkWv7ER6kHfYk1RvI/6dQ=","title":"Cloudbees Deployer Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cloudbees-deployer-plugin/1.7/cloudbees-deployer-plugin.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Cloudbees+Deployer+Plugin"},"cloudbees-plugin-gateway":{"buildDate":"Jul 18, 2012","dependencies":[{"name":"async-http-client","optional":false,"version":"1.7.2-1"},{"name":"credentials","optional":false,"version":"1.3"}],"developers":[{"developerId":"stephenconnolly","name":"Stephen Connolly"}],"excerpt":"This plugin installs free enterprise plugins from CloudBees. The following plugins are automatically installed: * *Folders:* easily organize your jobs * *Backup to Cloud:* backup your Jenkins into CloudBees cloud * *Wasted Minutes:* find out if you are short of slaves and need to add capacity to speed up builds * *CloudBees Status:* find out how much of the free CloudBees Jenkins capacity in the cloud is available for your use *Note:* You will be asked to register for a free CloudBees account to use these plugins (This plugin was formerly known as the CloudBees Plugin Gateway plugin) ","gav":"org.jenkins-ci.plugins:cloudbees-plugin-gateway:1.10","labels":["misc"],"name":"cloudbees-plugin-gateway","previousTimestamp":"2012-07-16T16:56:42.00Z","previousVersion":"1.9","releaseTimestamp":"2012-07-18T13:20:30.00Z","requiredCore":"1.424","scm":"github.com","sha1":"+EMel1ej+vgtxaGy5kb/VlGAr6k=","title":"CloudBees Free Enterprise Plugins","url":"http://updates.jenkins-ci.org/download/plugins/cloudbees-plugin-gateway/1.10/cloudbees-plugin-gateway.hpi","version":"1.10","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Free+Enterprise+Plugins"},"clover":{"buildDate":"May 13, 2012","dependencies":[],"developers":[{"developerId":"npellow","name":"Nick Pellow"},{"developerId":"olamy","name":"Olivier Lamy"}],"excerpt":"This plugin allows you to capture code coverage reports from Clover<\/a>. Hudson will generate and track code coverage across time. This plugin can be used without the need to modify your build.xml. ","gav":"org.jenkins-ci.plugins:clover:4.0.6","labels":["report"],"name":"clover","previousTimestamp":"2012-01-19T02:56:58.00Z","previousVersion":"4.0.5","releaseTimestamp":"2012-05-13T04:29:48.00Z","requiredCore":"1.412","scm":"github.com","sha1":"2P1RWOzhjulyRm9BU0GAxCUEIF8=","title":"Clover Plugin","url":"http://updates.jenkins-ci.org/download/plugins/clover/4.0.6/clover.hpi","version":"4.0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Clover+Plugin"},"cloverphp":{"buildDate":"Oct 21, 2011","dependencies":[],"developers":[{"developerId":"ssogabe","name":"Seiji Sogabe"}],"excerpt":"This plugin allows you to capture code coverage reports from *PHPUnit*. For more information on how to set up PHP projects with Jenkins have a look at the Template for Jenkins Jobs for PHP Projects<\/a>. ","gav":"org.jenkins-ci.plugins:cloverphp:0.3.2","labels":["report"],"name":"cloverphp","previousTimestamp":"2011-07-29T01:12:48.00Z","previousVersion":"0.3.1","releaseTimestamp":"2011-10-22T01:53:46.00Z","requiredCore":"1.408","scm":"github.com","sha1":"m9x+Aop7tK6oA8cdnsRpepTZE8s=","title":"Clover PHP Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cloverphp/0.3.2/cloverphp.hpi","version":"0.3.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Clover+PHP+Plugin"},"cmakebuilder":{"buildDate":"Apr 17, 2011","dependencies":[],"developers":[{"developerId":"vvk"}],"excerpt":"This plugin can be used to build cmake<\/a> based projects within Hudson.","gav":"hudson.plugins.cmake:cmakebuilder:1.9","labels":["builder"],"name":"cmakebuilder","previousTimestamp":"2011-04-16T21:23:58.00Z","previousVersion":"1.8.1","releaseTimestamp":"2011-04-17T16:50:34.00Z","requiredCore":"1.343","scm":"svn.jenkins-ci.org","sha1":"YdlZ3Z0nIP5nSVr0l+uorqH5fVA=","title":"cmakebuilder Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cmakebuilder/1.9/cmakebuilder.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/cmakebuilder+Plugin"},"cmvc":{"buildDate":"Aug 27, 2011","dependencies":[],"developers":[{"developerId":"gawab","email":"fuechi@ciandt.com","name":"Fábio Franco Uechi"}],"excerpt":"This plugin integrates CMVC<\/a> to Hudson. ","gav":"org.jenkins-ci.plugins:cmvc:0.4","labels":["scm"],"name":"cmvc","previousTimestamp":"2009-12-29T20:19:14.00Z","previousVersion":"0.3","releaseTimestamp":"2011-08-27T13:08:28.00Z","requiredCore":"1.398","scm":"github.com","sha1":"IwFWF5TxVmre5/uPpUsJ4wR9xks=","title":"CMVC Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cmvc/0.4/cmvc.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CMVC+Plugin"},"cobertura":{"buildDate":"Dec 15, 2012","dependencies":[{"name":"dashboard-view","optional":true,"version":"2.4"},{"name":"maven-plugin","optional":false,"version":"1.424"}],"developers":[{"developerId":"stephenconnolly","email":"stephenconnolly@dev.java.net","name":"Stephen Connolly"},{"developerId":"manuel_carrasco","email":"manolo@apache","name":"Manuel Carrasco Monino"},{"developerId":"ssogabe","email":"s.sogabe@gmail.com","name":"Seiji Sogabe"}],"excerpt":"This plugin allows you to capture code coverage report from Cobertura<\/a>. Jenkins will generate the trend report of coverage. ","gav":"org.jenkins-ci.plugins:cobertura:1.8","labels":["maven","report"],"name":"cobertura","previousTimestamp":"2012-10-17T13:36:12.00Z","previousVersion":"1.7.1","releaseTimestamp":"2012-12-15T17:36:08.00Z","requiredCore":"1.424","scm":"github.com","sha1":"uCY6nfLUB0U5qH+AvWy6i/vwFnY=","title":"Cobertura Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cobertura/1.8/cobertura.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Cobertura+Plugin"},"cocoapods-integration":{"buildDate":"Nov 16, 2012","dependencies":[],"developers":[{"developerId":"ljanzik","email":"leif.janzik@gmail.com","name":"Leif Janzik"}],"excerpt":"A plugin for the Jenkins Continous Integration Server to excecute CocoaPods goals during a build","gav":"com.thoughtsonmobile:cocoapods-integration:0.2.0","name":"cocoapods-integration","previousTimestamp":"2012-11-09T00:00:44.00Z","previousVersion":"0.1.1","releaseTimestamp":"2012-11-16T17:04:32.00Z","requiredCore":"1.480","scm":"github.com","sha1":"GzH3wqVWk+Sceu7aaJCjCmd5G5k=","title":"CocoaPods Jenkins Integration","url":"http://updates.jenkins-ci.org/download/plugins/cocoapods-integration/0.2.0/cocoapods-integration.hpi","version":"0.2.0"},"codecover":{"buildDate":"Nov 04, 2011","dependencies":[{"name":"dashboard-view","optional":true,"version":"2.1"},{"name":"maven-plugin","optional":false,"version":"1.400"}],"developers":[{"developerId":"kbonnette","email":"kane.bonnette@paperhost.com","name":"Kane Bonnette"}],"excerpt":"This plugin allows you to capture code coverage report from CodeCover<\/a>. Jenkins will generate the trend report of coverage. ","gav":"org.jenkins-ci.plugins:codecover:1.1","labels":["report"],"name":"codecover","releaseTimestamp":"2011-11-04T15:32:48.00Z","requiredCore":"1.398","scm":"github.com","sha1":"a4YmbqXIiaEQtD2oQvQB1AsP21E=","title":"CodeCover Plugin","url":"http://updates.jenkins-ci.org/download/plugins/codecover/1.1/codecover.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CodeCover+Plugin"},"codescanner":{"buildDate":"Jan 03, 2011","dependencies":[{"name":"analysis-core","optional":false,"version":"1.10"},{"name":"maven-plugin","optional":false,"version":"1.357"}],"developers":[{"developerId":"lkz633","name":"Maximilian Odendahl"}],"excerpt":"This plugin generates the trend report for Codescanner<\/a>, a tool which uses static analysis to look for bugs, hints and other useful information in Symbian C++ source code. ","gav":"org.jvnet.hudson.plugins:codescanner:0.11","labels":["report"],"name":"codescanner","previousTimestamp":"2010-03-18T21:26:20.00Z","previousVersion":"0.10","releaseTimestamp":"2011-01-03T16:15:00.00Z","requiredCore":"1.357","scm":"svn.java.net","sha1":"NGNsgXJAt3bJzHTeT/UZRtXVffs=","title":"CodeScanner Plugin","url":"http://updates.jenkins-ci.org/download/plugins/codescanner/0.11/codescanner.hpi","version":"0.11","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CodeScanner+Plugin"},"collabnet":{"buildDate":"Mar 12, 2011","dependencies":[{"name":"promoted-builds","optional":false,"version":"1.11"},{"name":"maven-plugin","optional":false,"version":"1.363"},{"name":"subversion","optional":false,"version":"1.23"}],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"The CollabNet Plugin is an integration with CollabNet TeamForge<\/a>.","gav":"org.jenkins-ci.plugins:collabnet:1.1.6","labels":["external"],"name":"collabnet","previousTimestamp":"2010-04-22T13:23:52.00Z","previousVersion":"1.1.5","releaseTimestamp":"2011-03-12T14:43:40.00Z","requiredCore":"1.397","scm":"github.com","sha1":"hHH49XM2bW5GG6W6OqbIrkD2KM8=","title":"CollabNet Plugin","url":"http://updates.jenkins-ci.org/download/plugins/collabnet/1.1.6/collabnet.hpi","version":"1.1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CollabNet+Plugin"},"collapsing-console-sections":{"buildDate":"Nov 11, 2010","dependencies":[],"developers":[{"developerId":"dty","name":"Dean Yu"}],"excerpt":"This plugin allows the creation of sections in build consoles.","gav":"org.jvnet.hudson.plugins:collapsing-console-sections:1.3","labels":["ui"],"name":"collapsing-console-sections","previousTimestamp":"2010-11-05T05:33:20.00Z","previousVersion":"1.2","releaseTimestamp":"2010-11-12T04:38:22.00Z","requiredCore":"1.381","scm":"svn.dev.java.net","sha1":"mWd2RIBwl4VIVwJ+JX+thbwv7TM=","title":"Collapsing Console Sections Plugin","url":"http://updates.jenkins-ci.org/download/plugins/collapsing-console-sections/1.3/collapsing-console-sections.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Collapsing+Console+Sections+Plugin"},"compact-columns":{"buildDate":"Sep 17, 2011","dependencies":[],"developers":[{"developerId":"jacob_robertson","email":"jacob.robertson.work@gmail.com","name":"Jacob Robertson"}],"excerpt":"More compact columns for showing last success and failure. Easier to understand, and takes less room in your view. ","gav":"org.jvnet.hudson.plugins:compact-columns:1.9","labels":["ui","listview-column"],"name":"compact-columns","previousTimestamp":"2011-08-06T18:40:32.00Z","previousVersion":"1.8","releaseTimestamp":"2011-09-18T00:30:30.00Z","requiredCore":"1.349","scm":"svn.jenkins-ci.org","sha1":"ZahBoJCogVQYxrcuAnfGhVzTxfc=","title":"Compact Columns","url":"http://updates.jenkins-ci.org/download/plugins/compact-columns/1.9/compact-columns.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Compact+Columns"},"computer-queue-plugin":{"buildDate":"Sep 20, 2012","dependencies":[],"developers":[{"developerId":"lvotypko","email":"lvotypko@redhat.com","name":"Lucie Votypkova"}],"excerpt":"This plug-in display the queue for given computer in it's page ","gav":"jenkins.ci.plugins.computerqueue:computer-queue-plugin:1.3","labels":[],"name":"computer-queue-plugin","previousTimestamp":"2012-08-20T18:30:20.00Z","previousVersion":"1.2","releaseTimestamp":"2012-09-20T16:52:06.00Z","requiredCore":"1.437","scm":"github.com","sha1":"t00aW+6JqVnfjYtQTKvNfUPS3x0=","title":"Computer queue plugin","url":"http://updates.jenkins-ci.org/download/plugins/computer-queue-plugin/1.3/computer-queue-plugin.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Computer+queue+plugin"},"concordionpresenter":{"buildDate":"Aug 13, 2011","dependencies":[],"developers":[{"developerId":"rjohnst","email":"rob@rjohnst.com","name":"Rob Johnston"}],"excerpt":"This plugin publishes Concordion<\/a> test reports for each build","gav":"org.jenkins-ci.plugins:concordionpresenter:0.7","labels":["report"],"name":"concordionpresenter","previousTimestamp":"2010-07-07T02:45:38.00Z","previousVersion":"0.6","releaseTimestamp":"2011-08-13T12:22:30.00Z","requiredCore":"1.398","scm":"github.com","sha1":"PIqeFs0L9RLWPIRYRc8xzbVJoNA=","title":"Concordion Presenter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/concordionpresenter/0.7/concordionpresenter.hpi","version":"0.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Concordion+Presenter+Plugin"},"conditional-buildstep":{"buildDate":"Nov 01, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"},{"name":"run-condition","optional":false,"version":"0.10"}],"developers":[{"developerId":"imod","name":"Dominik Bartholdi"},{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"}],"excerpt":"A buildstep wrapping any number of other buildsteps, controlling there execution based on a defined condition. ","gav":"org.jenkins-ci.plugins:conditional-buildstep:1.2.1","labels":["builder"],"name":"conditional-buildstep","previousTimestamp":"2012-10-11T23:31:38.00Z","previousVersion":"1.2","releaseTimestamp":"2012-11-01T17:54:18.00Z","requiredCore":"1.420","scm":"github.com","sha1":"gixu91mUWEHKBLtxaFjrHMqfvek=","title":"Conditional BuildStep Plugin","url":"http://updates.jenkins-ci.org/download/plugins/conditional-buildstep/1.2.1/conditional-buildstep.hpi","version":"1.2.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin"},"config-autorefresh-plugin":{"buildDate":"Jun 23, 2011","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provide a way to configure the auto-refresh rate from the Jenkins UI.","gav":"org.jenkins-ci.plugins:config-autorefresh-plugin:1.0","labels":["misc"],"name":"config-autorefresh-plugin","releaseTimestamp":"2011-06-23T13:29:04.00Z","requiredCore":"1.398","scm":"github.com","sha1":"B3XzainxaQsI5zqnsBCanQSFxW8=","title":"Config AutoRefresh Plugin","url":"http://updates.jenkins-ci.org/download/plugins/config-autorefresh-plugin/1.0/config-autorefresh-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Config+AutoRefresh+Plugin"},"config-file-provider":{"buildDate":"Dec 12, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"olamy","name":"Olivier Lamy"},{"developerId":"imod","name":"Dominik Bartholdi"}],"excerpt":"Ability to provide configuration files (e.g. settings.xml for maven, XML, groovy, custom files,...) loaded trough the UI which will be copy to the job workspace","gav":"org.jenkins-ci.plugins:config-file-provider:2.4","labels":["maven","external","groovy-related"],"name":"config-file-provider","previousTimestamp":"2012-11-20T00:28:42.00Z","previousVersion":"2.3","releaseTimestamp":"2012-12-13T00:43:22.00Z","requiredCore":"1.491","scm":"github.com","sha1":"MDgFT6QME4d/6hAAZ6Z1M7VmzMo=","title":"Config File Provider Plugin","url":"http://updates.jenkins-ci.org/download/plugins/config-file-provider/2.4/config-file-provider.hpi","version":"2.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Config+File+Provider+Plugin"},"config-rotator":{"buildDate":"Dec 13, 2012","dependencies":[],"developers":[{"developerId":"wolfgarnet","email":"support@praqma.net","name":"Christian Wolfgang"},{"developerId":"buep","email":"support@praqma.net","name":"Bue Petersen"},{"developerId":"MadsNielsen","email":"support@praqma.net","name":"Mads Nielsen"}],"excerpt":"Automatic try-out of possible configurations. Monitors the SCM for newer versions of components and tests if compliant. Only available using ClearCaseUCM as SCM","gav":"net.praqma:config-rotator:1.0.2","labels":[],"name":"config-rotator","previousTimestamp":"2012-07-18T15:57:02.00Z","previousVersion":"1.0.1","releaseTimestamp":"2012-12-13T16:16:42.00Z","requiredCore":"1.456","scm":"github.com","sha1":"3MJqyTd/TRleYLLblbEuKjcw34M=","title":"Config Rotator Plugin","url":"http://updates.jenkins-ci.org/download/plugins/config-rotator/1.0.2/config-rotator.hpi","version":"1.0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Config+Rotator+Plugin"},"configurationslicing":{"buildDate":"Oct 28, 2012","dependencies":[{"name":"maven-plugin","optional":true,"version":"1.395"},{"name":"ant","optional":true,"version":"1.1"},{"name":"groovy","optional":true,"version":"1.9"},{"name":"email-ext","optional":true,"version":"2.7"},{"name":"build-timeout","optional":true,"version":"1.6"},{"name":"PrioritySorter","optional":true,"version":"1.3"},{"name":"timestamper","optional":true,"version":"1.2.2"},{"name":"jython","optional":true,"version":"1.9"},{"name":"python","optional":true,"version":"1.2"},{"name":"gradle","optional":true,"version":"1.12"},{"name":"ws-cleanup","optional":true,"version":"0.10"}],"developers":[{"developerId":"jacob_robertson","email":"jacob.robertson.work@gmail.com","name":"Jacob Robertson"}],"excerpt":"Perform mass configuration of select project properties, including email, timer, discard old builds, and Maven configuration. ","gav":"org.jvnet.hudson.plugins:configurationslicing:1.36","labels":["misc","builder"],"name":"configurationslicing","previousTimestamp":"2012-10-27T12:06:50.00Z","previousVersion":"1.35","releaseTimestamp":"2012-10-28T12:33:58.00Z","requiredCore":"1.398","scm":"svn.jenkins-ci.org","sha1":"aiVonFh41txd21kiQSkhktEs49M=","title":"Configuration Slicing Plugin","url":"http://updates.jenkins-ci.org/download/plugins/configurationslicing/1.36/configurationslicing.hpi","version":"1.36","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Configuration+Slicing+Plugin"},"configure-job-column-plugin":{"buildDate":"May 30, 2012","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provide a fast-path configure job link available for views.","gav":"org.jenkins-ci.plugins:configure-job-column-plugin:1.0","labels":["listview-column","ui","misc"],"name":"configure-job-column-plugin","releaseTimestamp":"2012-05-31T02:36:24.00Z","requiredCore":"1.447","scm":"github.com","sha1":"p8yOFqsuzF0mA9Qu5fGYtl1EfXo=","title":"Configure Job Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/configure-job-column-plugin/1.0/configure-job-column-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Configure+Job+Column+Plugin"},"confluence-publisher":{"buildDate":"Jun 25, 2012","dependencies":[],"developers":[{"developerId":"jhansche","email":"jhansche@myyearbook.com","name":"Joe Hansche"}],"excerpt":"This plugin allows you to publish build artifacts as attachments to an Atlassian<\/a> Confluence<\/a> wiki page. ","gav":"org.jenkins-ci.plugins:confluence-publisher:1.7.1","labels":["upload","external"],"name":"confluence-publisher","previousTimestamp":"2012-05-29T18:29:34.00Z","previousVersion":"1.6","releaseTimestamp":"2012-06-25T16:57:18.00Z","requiredCore":"1.409","scm":"github.com","sha1":"FWUL+NS8LS2IDlMOjlKne1kj7N0=","title":"Confluence Publisher Plugin","url":"http://updates.jenkins-ci.org/download/plugins/confluence-publisher/1.7.1/confluence-publisher.hpi","version":"1.7.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Confluence+Publisher+Plugin"},"console-column-plugin":{"buildDate":"Oct 15, 2011","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provide a fast-path console link available for views.","gav":"org.jenkins-ci.plugins:console-column-plugin:1.5","labels":["listview-column","ui"],"name":"console-column-plugin","previousTimestamp":"2011-10-12T11:56:20.00Z","previousVersion":"1.4","releaseTimestamp":"2011-10-15T18:52:30.00Z","requiredCore":"1.420","scm":"github.com","sha1":"mtd/5cTNMwFDXjDLSl3GeRdwyZY=","title":"Console Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/console-column-plugin/1.5/console-column-plugin.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Console+Column+Plugin"},"copy-data-to-workspace-plugin":{"buildDate":"Feb 24, 2011","dependencies":[],"developers":[{"developerId":"nzhelyakov","email":"nzhelyakov@gmail.com","name":"Nikita Zhelyakov"}],"excerpt":"Copies data to workspace directory for each project build. ","gav":"org.jvnet.hudson.plugins:copy-data-to-workspace-plugin:1.0","labels":["buildwrapper"],"name":"copy-data-to-workspace-plugin","releaseTimestamp":"2011-02-25T00:46:20.00Z","requiredCore":"1.366","scm":"svn.jenkins-ci.org","sha1":"o1H9UdRKji2M3qV9S15s84tGq3g=","title":"Copy Data To Workspace Plugin","url":"http://updates.jenkins-ci.org/download/plugins/copy-data-to-workspace-plugin/1.0/copy-data-to-workspace-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Copy+Data+To+Workspace+Plugin"},"copy-project-link":{"buildDate":"Feb 10, 2011","dependencies":[],"developers":[{"developerId":"vjuranek","name":"Vojtech Juranek"}],"excerpt":"This plugin adds the \"Copy project\" link into left side panel in the main project page.","gav":"hudson.plugins.copyProjectLink:copy-project-link:1.0","labels":["ui"],"name":"copy-project-link","releaseTimestamp":"2011-02-10T19:18:08.00Z","requiredCore":"1.391","scm":"github.com","sha1":"GXTRqgVz2HJiE+07wnBaMQnL5I0=","title":"Copy project link plugin","url":"http://updates.jenkins-ci.org/download/plugins/copy-project-link/1.0/copy-project-link.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Copy+project+link+plugin"},"copy-to-slave":{"buildDate":"Jan 17, 2012","dependencies":[],"developers":[{"developerId":"rseguy","email":"romain.seguy@gmail.com","name":"Romain Seguy"}],"excerpt":"This plugin allows to copy a set of files, from a location somewhere on the master node, to jobs' workspaces. It also allows to copy files back from the workspaces of jobs located on a slave node to their workspaces on the master one.","gav":"org.jenkins-ci.plugins:copy-to-slave:1.4","labels":["slaves","notifier","buildwrapper"],"name":"copy-to-slave","previousTimestamp":"2011-03-02T23:57:58.00Z","previousVersion":"1.3","releaseTimestamp":"2012-01-17T22:48:28.00Z","requiredCore":"1.409","scm":"svn.jenkins-ci.org","sha1":"8v72Qrok05cnSLV39Jb1PZTWhfo=","title":"Copy To Slave Plugin","url":"http://updates.jenkins-ci.org/download/plugins/copy-to-slave/1.4/copy-to-slave.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Copy+To+Slave+Plugin"},"copyartifact":{"buildDate":"Nov 06, 2012","dependencies":[{"name":"maven-plugin","optional":true,"version":"1.424"}],"developers":[{"developerId":"mindless","name":"Alan Harder"}],"excerpt":"Adds a build step to copy artifacts from another project.","gav":"org.jenkins-ci.plugins:copyartifact:1.25","labels":["builder","parameter"],"name":"copyartifact","previousTimestamp":"2012-10-03T20:31:38.00Z","previousVersion":"1.24","releaseTimestamp":"2012-11-06T14:49:58.00Z","requiredCore":"1.424","scm":"github.com","sha1":"TxuAEhVAoTnx0lxJ6VaisoHRlmw=","title":"Copy Artifact Plugin","url":"http://updates.jenkins-ci.org/download/plugins/copyartifact/1.25/copyartifact.hpi","version":"1.25","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin"},"countjobs-viewstabbar":{"buildDate":"Jan 11, 2012","dependencies":[],"developers":[{"developerId":"ilbors","name":"Ignacio Albors"}],"excerpt":"This plugin shows a Views TabBar like the original one but it adds how many jobs has each view in every tab title.","gav":"ws.albors:countjobs-viewstabbar:1.0.0","labels":["misc","ui"],"name":"countjobs-viewstabbar","releaseTimestamp":"2012-01-11T05:27:16.00Z","requiredCore":"1.428","scm":"github.com","sha1":"RnukVLYGfy/xyENjvUUxckTu2Jc=","title":"Countjobs Viewstabbar","url":"http://updates.jenkins-ci.org/download/plugins/countjobs-viewstabbar/1.0.0/countjobs-viewstabbar.hpi","version":"1.0.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Countjobs+Viewstabbar"},"covcomplplot":{"buildDate":"Aug 13, 2011","dependencies":[],"developers":[{"developerId":"junoyoon","email":"junoyoon@gmail.com","name":"JunHo Yoon"}],"excerpt":"This plugin shows the coverage/complexity scatter plot from Clover or Cobertura plugin results.","gav":"org.jenkins-ci.plugins:covcomplplot:1.1.1","labels":["report"],"name":"covcomplplot","previousTimestamp":"2010-10-21T15:20:02.00Z","previousVersion":"1.1.0","releaseTimestamp":"2011-08-13T14:21:10.00Z","requiredCore":"1.398","scm":"github.com","sha1":"CboIlIImnrdoYnYhXgihm8zyL6o=","title":"Coverage Complexity Scatter Plot PlugIn","url":"http://updates.jenkins-ci.org/download/plugins/covcomplplot/1.1.1/covcomplplot.hpi","version":"1.1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Coverage+Complexity+Scatter+Plot+PlugIn"},"coverity":{"buildDate":"May 24, 2012","dependencies":[],"developers":[{"developerId":"joshvinson","name":"Josh Vinson"}],"excerpt":"This plugin integrates Jenkins with the Coverity Integrity Manager<\/a> and Coverity Static Analysis<\/a> tools. Official build located at: https://jenkins.ci.cloudbees.com/job/plugins/job/coverity/<\/a> ","gav":"org.jenkins-ci.plugins:coverity:1.1.3","labels":["buildwrapper","report"],"name":"coverity","previousTimestamp":"2012-04-02T20:16:18.00Z","previousVersion":"1.1.2","releaseTimestamp":"2012-05-24T15:02:20.00Z","requiredCore":"1.409.2","scm":"github.com","sha1":"fBoPftbhucx3aWNWcLO3wAu4Qv0=","title":"Coverity Plugin","url":"http://updates.jenkins-ci.org/download/plugins/coverity/1.1.3/coverity.hpi","version":"1.1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Coverity+Plugin"},"cppcheck":{"buildDate":"Dec 19, 2012","dependencies":[{"name":"ivy","optional":true,"version":"1.19"},{"name":"maven-plugin","optional":false,"version":"1.410"}],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"This plugin records CppCheck<\/a> reports in Jenkins.","gav":"org.jenkins-ci.plugins:cppcheck:1.13","labels":["report"],"name":"cppcheck","previousTimestamp":"2012-11-23T03:01:08.00Z","previousVersion":"1.12","releaseTimestamp":"2012-12-20T04:27:18.00Z","requiredCore":"1.410","scm":"github.com","sha1":"wAWZgiAE5L8+EHDEj6SQxpxBE9A=","title":"Cppcheck Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cppcheck/1.13/cppcheck.hpi","version":"1.13","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Cppcheck+Plugin"},"cppncss":{"buildDate":"Feb 18, 2011","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.358"}],"developers":[{"developerId":"holywen","email":"shaohua-holy.wen@nsn.com","name":"Shaohua Wen"}],"excerpt":"This plugin allows you to use CppNCSS<\/a> build reporting tool.","gav":"org.jvnet.hudson.plugins:cppncss:1.1","labels":["report"],"name":"cppncss","previousTimestamp":"2010-06-03T20:44:40.00Z","previousVersion":"1.0","releaseTimestamp":"2011-02-18T17:17:08.00Z","requiredCore":"1.358","scm":"svn.jenkins-ci.org","sha1":"ASJbOA48B7oGDuDIi+kn8WNFMp0=","title":"CPPNCSS Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cppncss/1.1/cppncss.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CPPNCSS+Plugin"},"cpptest":{"buildDate":"May 29, 2011","dependencies":[{"name":"xunit","optional":false,"version":"1.17"},{"name":"analysis-core","optional":false,"version":"1.21"},{"name":"maven-plugin","optional":false,"version":"1.410"},{"name":"maven-plugin","optional":false,"version":"1.395"}],"developers":[{"developerId":"gbois","email":"gbois@dev.java.net","name":"Gregory Boissinot"},{"developerId":"NQH","email":"quanghuycvut@yahoo.com","name":"N. Q. Huy"}],"excerpt":"This plugin allows you publish Parasoft C++test<\/a> test results. This plugin makes it possible to import Parasoft C++test reports from each build into Hudson so they are displayed with a trend graph and details about which tests that failed. ","gav":"com.thalesgroup.jenkins-ci.plugins:cpptest:0.9","labels":["report"],"name":"cpptest","previousTimestamp":"2010-10-12T07:25:48.00Z","previousVersion":"0.8","releaseTimestamp":"2011-05-29T20:27:58.00Z","requiredCore":"1.410","scm":"github.com","sha1":"Mux1eV/aMsRoShdxLsmLKgMRbng=","title":"Cpptest Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cpptest/0.9/cpptest.hpi","version":"0.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Cpptest+Plugin"},"crap4j":{"buildDate":"Aug 01, 2010","dependencies":[],"developers":[{"developerId":"dlindner","name":"Daniel Lindner"}],"excerpt":"This plugin reads the \"crappy methods\" report from Crap4J<\/a>. Hudson will generate the trend report of crap percentage and provide detailed information about changes.","gav":"org.jvnet.hudson.plugins:crap4j:0.8","labels":["report"],"name":"crap4j","previousTimestamp":"2009-12-30T14:49:48.00Z","previousVersion":"0.7","releaseTimestamp":"2010-08-02T01:32:16.00Z","requiredCore":"1.368","scm":"svn.dev.java.net","sha1":"lXwrGF5f94qHOX7doKwrGyiLWoc=","title":"Crap4J Plugin","url":"http://updates.jenkins-ci.org/download/plugins/crap4j/0.8/crap4j.hpi","version":"0.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Crap4J+Plugin"},"create-fingerprint":{"buildDate":"Dec 31, 2011","dependencies":[],"developers":[{"developerId":"marcsanfacon","email":"marc.sanfacon@gmail.com","name":"Marc Sanfacon"}],"excerpt":"Adds the ability to generate fingerprints as build steps instead of waiting for a build to complete. ","gav":"org.jenkins-ci.plugins:create-fingerprint:1.2","labels":["builder"],"name":"create-fingerprint","previousTimestamp":"2011-11-26T21:11:58.00Z","previousVersion":"1.1","releaseTimestamp":"2011-12-31T15:02:48.00Z","requiredCore":"1.440","scm":"github.com","sha1":"eTmOEC36FyDg0co1ceOp9C0Z7WI=","title":"Fingerprint Plugin","url":"http://updates.jenkins-ci.org/download/plugins/create-fingerprint/1.2/create-fingerprint.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Fingerprint+Plugin"},"create-fingerprint-plugin":{"buildDate":"Nov 26, 2011","dependencies":[],"developers":[{"developerId":"marcsanfacon","email":"marc.sanfacon@gmail.com","name":"Marc Sanfacon"}],"excerpt":"Adds the ability to generate fingerprints as build steps instead of waiting for a build to complete. ","gav":"org.jenkins-ci.plugins:create-fingerprint-plugin:1.0","labels":["builder"],"name":"create-fingerprint-plugin","releaseTimestamp":"2011-11-26T15:46:06.00Z","requiredCore":"1.440","scm":"github.com","sha1":"09eL9WB6NSobjvWfic5rU056WMA=","title":"Fingerprint Plugin","url":"http://updates.jenkins-ci.org/download/plugins/create-fingerprint-plugin/1.0/create-fingerprint-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Fingerprint+Plugin"},"createjobadvanced":{"buildDate":"Oct 07, 2012","dependencies":[{"name":"maven-plugin","optional":true,"version":"1.420"}],"developers":[{"developerId":"bertrandgressier","email":"bertrand.gressier@gmail.com","name":"Bertrand Gressier"}],"excerpt":"This plugin extends creating job. When you create a job, it automatically adds all permissions for the creator. ","gav":"org.jenkins-ci.plugins:createjobadvanced:1.7","labels":["user"],"name":"createjobadvanced","previousTimestamp":"2011-08-05T18:08:52.00Z","previousVersion":"1.6","releaseTimestamp":"2012-10-07T14:39:16.00Z","requiredCore":"1.420","scm":"github.com","sha1":"Sfk97M5W+nQKQQROgots6FY1K/o=","title":"Create Job Advanced Plugin","url":"http://updates.jenkins-ci.org/download/plugins/createjobadvanced/1.7/createjobadvanced.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Create+Job+Advanced+Plugin"},"credentials":{"buildDate":"May 11, 2012","dependencies":[],"developers":[{"developerId":"stephenconnolly","name":"Stephen Connolly"}],"excerpt":"This plugin allows you to store credentials in Jenkins.","gav":"org.jenkins-ci.plugins:credentials:1.3.1","labels":[],"name":"credentials","previousTimestamp":"2012-02-27T20:39:48.00Z","previousVersion":"1.3","releaseTimestamp":"2012-05-11T16:10:18.00Z","requiredCore":"1.398","scm":"github.com","sha1":"TbBn+BpyQTS8Fhoeyj3D7NTZWBc=","title":"Credentials Plugin","url":"http://updates.jenkins-ci.org/download/plugins/credentials/1.3.1/credentials.hpi","version":"1.3.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Plugin"},"cron_column":{"buildDate":"Jul 06, 2010","dependencies":[],"developers":[{"developerId":"eelco_de_vlieger","email":"eelcodevlieger@hotmail.com","name":"Eelco de Vlieger"}],"excerpt":"View column showing the cron trigger expressions that can be configured on a job (Subversion, Scheduled Builds, etc.)","gav":"org.jvnet.hudson.plugins:cron_column:1.003","labels":["listview-column"],"name":"cron_column","previousTimestamp":"2010-04-16T19:51:28.00Z","previousVersion":"1.002","releaseTimestamp":"2010-07-06T15:26:34.00Z","requiredCore":"1.350","scm":"svn.dev.java.net","sha1":"wxeNGb6yQzX6gzcYSzC08CJ65II=","title":"Cron Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cron_column/1.003/cron_column.hpi","version":"1.003","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Cron+Column+Plugin"},"crowd":{"buildDate":"Aug 05, 2011","dependencies":[],"developers":[{"developerId":"nbudin","name":"Nat Budin"},{"developerId":"justinedelson","name":"Justin Edelson"}],"excerpt":"This plugin enables use of Atlassian Crowd<\/a> as an authentication source.","gav":"com.ds.tools.hudson:crowd:1.2","labels":["user"],"name":"crowd","previousTimestamp":"2010-01-30T22:58:06.00Z","previousVersion":"1.1","releaseTimestamp":"2011-08-05T12:14:24.00Z","requiredCore":"1.398","scm":"github.com","sha1":"FlNYLD4WehRNrWrkmte84TBWlaY=","title":"Crowd Plugin","url":"http://updates.jenkins-ci.org/download/plugins/crowd/1.2/crowd.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Crowd+Plugin"},"crowd2":{"buildDate":"Aug 23, 2012","dependencies":[],"developers":[{"developerId":"theit","email":"theit@gmx.de","name":"Thorsten Heit"}],"excerpt":"This plugin enables use of Atlassian Crowd<\/a> >= 2.1.x as an authentication source.","gav":"org.jenkins-ci.plugins:crowd2:1.5","labels":["user"],"name":"crowd2","previousTimestamp":"2011-11-25T20:23:32.00Z","previousVersion":"1.4","releaseTimestamp":"2012-08-23T17:48:24.00Z","requiredCore":"1.398","scm":"github.com","sha1":"zSXuGYjDGUWO9qDveBTj+S9jxH8=","title":"Crowd 2 Plugin","url":"http://updates.jenkins-ci.org/download/plugins/crowd2/1.5/crowd2.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Crowd+2+Plugin"},"custom-job-icon":{"buildDate":"Oct 22, 2012","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.447"},{"name":"dashboard-view","optional":true,"version":"2.3"}],"developers":[{"developerId":"jcsirot","email":"sirot@chelonix.com","name":"Jean-Christophe Sirot"}],"excerpt":"This plugin allows to configure a custom icon for each job in order to improve the job visibility on the dashboard.","gav":"org.jenkins-ci.plugins:custom-job-icon:0.2","labels":["ui","listview-column"],"name":"custom-job-icon","previousTimestamp":"2012-08-10T03:24:46.00Z","previousVersion":"0.1","releaseTimestamp":"2012-10-22T15:01:06.00Z","requiredCore":"1.447","scm":"github.com","sha1":"zLYzRNQZmAwAkHgRyQ5GccxmVUA=","title":"Custom Job Icon Plugin","url":"http://updates.jenkins-ci.org/download/plugins/custom-job-icon/0.2/custom-job-icon.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Custom+Job+Icon+Plugin"},"custom-tools-plugin":{"buildDate":"Feb 13, 2012","dependencies":[],"developers":[{"developerId":"recampbell","email":"ryan.campbell@gmail.com","name":"Ryan Campbell"}],"excerpt":"A generic tool installer. You define how tools get installed, and the plugin will automatically install them when needed. ","gav":"com.cloudbees.jenkins.plugins:custom-tools-plugin:0.1","labels":["buildwrapper"],"name":"custom-tools-plugin","releaseTimestamp":"2012-02-13T18:54:48.00Z","requiredCore":"1.398","scm":"github.com","sha1":"C1mOyP2Hfq7k7nf/ycLz/iJx4Mo=","title":"Custom Tools Plugin","url":"http://updates.jenkins-ci.org/download/plugins/custom-tools-plugin/0.1/custom-tools-plugin.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Custom+Tools+Plugin"},"cvs":{"buildDate":"Nov 05, 2012","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"mc1arke","name":"Michael Clarke"}],"excerpt":"This bundled plugin integrates Jenkins with CVS version control system.","gav":"org.jenkins-ci.plugins:cvs:2.7","labels":["scm"],"name":"cvs","previousTimestamp":"2012-09-22T23:19:36.00Z","previousVersion":"2.6","releaseTimestamp":"2012-11-06T00:45:30.00Z","requiredCore":"1.424","scm":"github.com","sha1":"zTpvXtAiby+IYc0XvNXs1y4dOJg=","title":"CVS Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cvs/2.7/cvs.hpi","version":"2.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CVS+Plugin"},"cvs-tag":{"buildDate":"Nov 03, 2011","dependencies":[{"name":"cvs","optional":false,"version":"1.3"}],"developers":[{"developerId":"btrim","email":"trimbybj@gmail.com","name":"Brad Trimby"},{"developerId":"draco2k8","email":"draco2k4@yahoo.com","name":"Brendt Lucas"},{"developerId":"derekmahar","email":"derek@derekmahar.ca","name":"Derek Mahar"}],"excerpt":"This plugin will perform CVS tagging (cvs rtag when possible) after a job has been built successfully.","gav":"org.jenkins-ci.plugins:cvs-tag:1.7","labels":["post-build","scm-related"],"name":"cvs-tag","previousTimestamp":"2011-04-30T04:36:18.00Z","previousVersion":"1.6","releaseTimestamp":"2011-11-04T02:40:52.00Z","requiredCore":"1.421","scm":"github.com","sha1":"xU34I1C6YcpwlR0j5exvWMiRfmI=","title":"CVS Tagging Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cvs-tag/1.7/cvs-tag.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/CVS+Tagging+Plugin"},"cygpath":{"buildDate":"Nov 07, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin performs Cygwin path conversion before forking new processes","gav":"org.jenkins-ci.plugins:cygpath:1.5","labels":["misc"],"name":"cygpath","previousTimestamp":"2011-11-08T03:05:32.00Z","previousVersion":"1.4","releaseTimestamp":"2011-11-08T03:33:34.00Z","requiredCore":"1.418","scm":"github.com","sha1":"OvtjQn0IRxNBlg+kG9XXc3Io2Is=","title":"Cygpath Plugin","url":"http://updates.jenkins-ci.org/download/plugins/cygpath/1.5/cygpath.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Cygpath+Plugin"},"darcs":{"buildDate":"Apr 19, 2011","dependencies":[],"developers":[{"developerId":"weltraumschaf","email":"ich@weltraumschaf.de","name":"Sven Strittmatter"},{"developerId":"ralphlange","email":"ralph.lange@gmx.de","name":"Ralph Lange"}],"excerpt":"This plugin integrates Darcs<\/a> version control system to Jenkins. The plugin requires the Darcs binary (darcs) to be installed on the target machine. ","gav":"org.jenkins-ci.plugins:darcs:0.3.5","labels":["scm"],"name":"darcs","previousTimestamp":"2011-03-30T04:21:54.00Z","previousVersion":"0.3.4","releaseTimestamp":"2011-04-20T01:42:42.00Z","requiredCore":"1.398","scm":"github.com","sha1":"WgdqpfwTKOMMnc58HQb6vHoVmn0=","title":"Darcs Plugin","url":"http://updates.jenkins-ci.org/download/plugins/darcs/0.3.5/darcs.hpi","version":"0.3.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Darcs+Plugin"},"dashboard-view":{"buildDate":"Nov 12, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"}],"developers":[{"developerId":"petehayes","email":"petehayes@gmail.com","name":"Peter Hayes"},{"developerId":"mambu","email":"marco.ambu+jenkins@gmail.com","name":"Marco Ambu"}],"excerpt":"This plugin contributes a new view implementation that provides a dashboard / portal-like view for your Jenkins instance. ","gav":"org.jenkins-ci.plugins:dashboard-view:2.4","labels":["ui"],"name":"dashboard-view","previousTimestamp":"2012-07-17T18:33:16.00Z","previousVersion":"2.3","releaseTimestamp":"2012-11-13T00:51:46.00Z","requiredCore":"1.424","scm":"github.com","sha1":"WjHl1hx5+lzl0XSDjonpuBxhwPM=","title":"Dashboard View","url":"http://updates.jenkins-ci.org/download/plugins/dashboard-view/2.4/dashboard-view.hpi","version":"2.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Dashboard+View"},"database":{"buildDate":"Dec 14, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This library plugin allows other plugins to connect to RDBMS in an uniform fashion.","gav":"org.jenkins-ci.plugins:database:1.1","labels":["database","library"],"name":"database","previousTimestamp":"2012-12-15T00:06:48.00Z","previousVersion":"1.0","releaseTimestamp":"2012-12-15T00:31:42.00Z","requiredCore":"1.466","scm":"github.com","sha1":"bdoV5TGNY4E4l25PyoAJygU2JqQ=","title":"Database Plugin","url":"http://updates.jenkins-ci.org/download/plugins/database/1.1/database.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Database+Plugin"},"database-drizzle":{"buildDate":"Dec 17, 2012","dependencies":[{"name":"database","optional":false,"version":"1.1"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"","gav":"org.jenkins-ci.plugins:database-drizzle:1.0","name":"database-drizzle","releaseTimestamp":"2012-12-17T15:47:20.00Z","requiredCore":"1.466","scm":"github.com","sha1":"SANSCQjImmlkjeipIbAQTgxKBIc=","title":"database-drizzle","url":"http://updates.jenkins-ci.org/download/plugins/database-drizzle/1.0/database-drizzle.hpi","version":"1.0"},"database-h2":{"buildDate":"Dec 14, 2012","dependencies":[{"name":"database","optional":false,"version":"1.0"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"This is a driver plugin for [Database plugin] that adds H2 database<\/a> driver","gav":"org.jenkins-ci.plugins:database-h2:1.0","labels":["library","database"],"name":"database-h2","releaseTimestamp":"2012-12-15T00:18:30.00Z","requiredCore":"1.466","scm":"github.com","sha1":"a4gdunjcpVi1o4DhoO99cCAZ/bs=","title":"H2 Database Plugin","url":"http://updates.jenkins-ci.org/download/plugins/database-h2/1.0/database-h2.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/H2+Database+Plugin"},"database-mysql":{"buildDate":"Dec 14, 2012","dependencies":[{"name":"database","optional":false,"version":"1.1"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"This is a driver plugin for [Database plugin] that adds MySQL database<\/a> driver","gav":"org.jenkins-ci.plugins:database-mysql:1.0","labels":["database","library"],"name":"database-mysql","releaseTimestamp":"2012-12-15T00:32:58.00Z","requiredCore":"1.466","scm":"github.com","sha1":"Klx+BS7DgwWtV6NHTNuye1UoOAo=","title":"MySQL Database Plugin","url":"http://updates.jenkins-ci.org/download/plugins/database-mysql/1.0/database-mysql.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/MySQL+Database+Plugin"},"database-postgresql":{"buildDate":"Dec 14, 2012","dependencies":[{"name":"database","optional":false,"version":"1.1"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"This is a driver plugin for [Database plugin] that adds PostgreSQL database<\/a> driver","gav":"org.jenkins-ci.plugins:database-postgresql:1.0","labels":["library","database"],"name":"database-postgresql","releaseTimestamp":"2012-12-15T00:34:34.00Z","requiredCore":"1.466","scm":"github.com","sha1":"nsz1kPOIJRUPNKcQBysTHEEECn8=","title":"PostgreSQL Database Plugin","url":"http://updates.jenkins-ci.org/download/plugins/database-postgresql/1.0/database-postgresql.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PostgreSQL+Database+Plugin"},"dbCharts":{"buildDate":"Feb 17, 2011","dependencies":[],"developers":[{"developerId":"ptab","email":"piotr.tabor@gmail.com","name":"Piotr Tabor"}],"excerpt":"Add charts based on JDBC database data series.","gav":"org.jvnet.hudson.plugins:dbCharts:0.4","labels":["ui","report"],"name":"dbCharts","previousTimestamp":"2010-03-15T21:07:28.00Z","previousVersion":"0.3","releaseTimestamp":"2011-02-17T16:30:02.00Z","requiredCore":"1.358","scm":"svn.jenkins-ci.org","sha1":"V+rZd9ht1z8SbGmaTjZ2Hge65aQ=","title":"dbCharts Plugin","url":"http://updates.jenkins-ci.org/download/plugins/dbCharts/0.4/dbCharts.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/dbCharts+Plugin"},"debian-package-builder":{"buildDate":"Nov 30, 2012","dependencies":[{"name":"subversion","optional":false,"version":"1.42"}],"developers":[{"developerId":"pupssman","email":"pupssman@yandex-team.ru","name":"Ivan Kalinin"},{"developerId":"mavlyutov","email":"mavlyutov@yandex-team.ru","name":"Marat Mavlyutov"}],"excerpt":"This plugin helps building debian (.deb) packages ","gav":"ru.yandex.jenkins.plugins.debuilder:debian-package-builder:1.4.1","labels":["builder","post-build"],"name":"debian-package-builder","previousTimestamp":"2012-11-07T17:30:30.00Z","previousVersion":"1.4","releaseTimestamp":"2012-12-01T00:49:28.00Z","requiredCore":"1.486","scm":"github.com","sha1":"sw2Uu123MczuZ1VVlVF5xN2XeW8=","title":"Debian Package Builder Plugin","url":"http://updates.jenkins-ci.org/download/plugins/debian-package-builder/1.4.1/debian-package-builder.hpi","version":"1.4.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Debian+Package+Builder+Plugin"},"delete-log-plugin":{"buildDate":"Apr 30, 2012","dependencies":[],"developers":[{"developerId":"lvotypko","email":"lvotypko@redhat.com","name":"Lucie Votypkova"}],"excerpt":"Delele log of a build ","gav":"org.jenkins-ci.plugins:delete-log-plugin:1.0","labels":[],"name":"delete-log-plugin","releaseTimestamp":"2012-04-30T09:19:08.00Z","requiredCore":"1.461","scm":"github.com","sha1":"LpyHRmwF80Ok48m9xkvd7vF1bps=","title":"Delete log plugin","url":"http://updates.jenkins-ci.org/download/plugins/delete-log-plugin/1.0/delete-log-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Delete+log+plugin"},"delta-cloud":{"buildDate":"Sep 20, 2011","dependencies":[],"developers":[{"developerId":"vjuranek"}],"excerpt":"This plugin allows to use Delta Cloud API<\/a> for provisioning new slaves and therefore allows you to decouple your Jenkins instance from cloud provider","gav":"org.jenkins-ci.plugins:delta-cloud:1.0.1","labels":["cluster"],"name":"delta-cloud","previousTimestamp":"2011-09-19T19:15:48.00Z","previousVersion":"1.0","releaseTimestamp":"2011-09-20T15:15:32.00Z","requiredCore":"1.409","scm":"github.com","sha1":"lLVnoLOfAOB0ldDUL0v2T1CXtBc=","title":"Delta Cloud API plugin","url":"http://updates.jenkins-ci.org/download/plugins/delta-cloud/1.0.1/delta-cloud.hpi","version":"1.0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Delta+Cloud+API+plugin"},"dependency-queue-plugin":{"buildDate":"Jul 20, 2012","dependencies":[],"developers":[{"developerId":"lshatzer","email":"larrys@gmail.com","name":"Larry Shatzer, Jr."}],"excerpt":"This plugin will make sure the order of dependencies is honored in the build queue.","gav":"org.jenkins-ci.plugins:dependency-queue-plugin:1.1","labels":["misc"],"name":"dependency-queue-plugin","previousTimestamp":"2012-05-18T16:46:30.00Z","previousVersion":"1.0","releaseTimestamp":"2012-07-20T11:37:14.00Z","requiredCore":"1.427","scm":"github.com","sha1":"O3CVdrVAqxETlPT3Z8SiAiHWvuc=","title":"Dependency Queue Plugin","url":"http://updates.jenkins-ci.org/download/plugins/dependency-queue-plugin/1.1/dependency-queue-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Dependency+Queue+Plugin"},"dependencyanalyzer":{"buildDate":"Feb 14, 2011","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.377"}],"developers":[{"developerId":"vsellier","name":"Vincent Sellier"}],"excerpt":"This plugin parses dependency:analyze goal from maven build logs and generates a dependency report","gav":"org.jvnet.hudson.plugins:dependencyanalyzer:0.6","labels":["maven","report"],"name":"dependencyanalyzer","previousTimestamp":"2010-02-15T14:23:26.00Z","previousVersion":"0.5","releaseTimestamp":"2011-02-14T21:18:36.00Z","requiredCore":"1.377","scm":"svn.jenkins-ci.org","sha1":"YqhhubcDUAU1Sd9KxRAZm3zez1Q=","title":"Dependency Analyzer Plugin","url":"http://updates.jenkins-ci.org/download/plugins/dependencyanalyzer/0.6/dependencyanalyzer.hpi","version":"0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Dependency+Analyzer+Plugin"},"depgraph-view":{"buildDate":"Dec 01, 2012","dependencies":[{"name":"copyartifact","optional":true,"version":"1.18"},{"name":"jquery","optional":false,"version":"1.7.2-1"},{"name":"parameterized-trigger","optional":true,"version":"2.11"},{"name":"jquery-ui","optional":false,"version":"1.0.2"}],"developers":[{"developerId":"wolfs","name":"Stefan Wolf"}],"excerpt":"Shows a dependency graph of the projects using graphviz. Requires a graphviz installation on the server.","gav":"org.jenkins-ci.plugins:depgraph-view:0.10","labels":["report","ui","misc"],"name":"depgraph-view","previousTimestamp":"2012-11-22T18:22:54.00Z","previousVersion":"0.9","releaseTimestamp":"2012-12-02T03:51:30.00Z","requiredCore":"1.480","scm":"github.com","sha1":"o9SnofNhqhVQB29O1xkxc1EAunM=","title":"Dependency Graph View Plugin","url":"http://updates.jenkins-ci.org/download/plugins/depgraph-view/0.10/depgraph-view.hpi","version":"0.10","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Dependency+Graph+View+Plugin"},"deploy":{"buildDate":"Jun 11, 2012","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"edobm","name":"Meikel Bode"}],"excerpt":"This plugin takes a war/ear file and deploys that to a running remote application server at the end of a build","gav":"org.jenkins-ci.plugins:deploy:1.9","labels":["upload"],"name":"deploy","previousTimestamp":"2011-06-28T21:46:48.00Z","previousVersion":"1.8","releaseTimestamp":"2012-06-11T13:26:30.00Z","requiredCore":"1.409","scm":"github.com","sha1":"dyTzLnkvj4lR66qGOUjdYdqbIhE=","title":"Deploy Plugin","url":"http://updates.jenkins-ci.org/download/plugins/deploy/1.9/deploy.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Deploy+Plugin"},"deploy-websphere":{"buildDate":"Jun 02, 2010","dependencies":[{"name":"deploy","optional":false,"version":"1.5"}],"developers":[{"developerId":"asanso","name":"Antonio Sanso"}],"excerpt":"This plugin is an extension of the Deploy Plugin<\/a>. It takes a war/ear file and deploys that to a running remote WebSphere Application Server at the end of a build.","gav":"org.jvnet.hudson.plugins:deploy-websphere:1.0","labels":["upload"],"name":"deploy-websphere","releaseTimestamp":"2010-06-03T02:39:10.00Z","requiredCore":"1.343","scm":"svn.dev.java.net","sha1":"PAhTdc2WHUet0ZfHOj9DhcFeKK8=","title":"Deploy WebSphere Plugin","url":"http://updates.jenkins-ci.org/download/plugins/deploy-websphere/1.0/deploy-websphere.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Deploy+WebSphere+Plugin"},"deployed-on-column":{"buildDate":"Dec 17, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"}],"developers":[{"developerId":"stephenconnolly","name":"Stephen Connolly"}],"excerpt":"This plugin provides a column that acts as a container for build actions that record deployment of build artifacts to remote servers, such as deployment of web applications to servers, etc. The plugin also provides an extension point for other plugins to contribute their build actions. ","gav":"org.jenkins-ci.plugins:deployed-on-column:1.5","labels":[],"name":"deployed-on-column","previousTimestamp":"2012-12-17T22:32:16.00Z","previousVersion":"1.4","releaseTimestamp":"2012-12-17T22:40:44.00Z","requiredCore":"1.424","scm":"github.com","sha1":"6ZZtcFiB7sRvQxMi43Rjj4s3Ofk=","title":"Deployed on Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/deployed-on-column/1.5/deployed-on-column.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Deployed+on+Column+Plugin"},"deploygate-plugin":{"buildDate":"Jan 06, 2013","dependencies":[],"developers":[{"developerId":"bols-blue","email":"bols-blue@lnc.jp","name":"Hisayoshi Suehiro"}],"excerpt":"","gav":"org.jenkins-ci.plugins.deploygate:deploygate-plugin:1.2","name":"deploygate-plugin","releaseTimestamp":"2013-01-06T21:50:56.00Z","requiredCore":"1.480","scm":"github.com","sha1":"OmU2a19P0H/8FMpeQGLlsvgnDxo=","title":"deploygate-plugin","url":"http://updates.jenkins-ci.org/download/plugins/deploygate-plugin/1.2/deploygate-plugin.hpi","version":"1.2"},"description-column-plugin":{"buildDate":"Aug 26, 2011","dependencies":[],"developers":[{"developerId":"noirbizarre","email":"noirbizarre+jenkins@gmail.com","name":"Axel Haustant"}],"excerpt":"Provide job description column for views.","gav":"org.jenkins-ci.plugins:description-column-plugin:1.3","labels":["listview-column"],"name":"description-column-plugin","previousTimestamp":"2011-08-20T19:12:16.00Z","previousVersion":"1.2","releaseTimestamp":"2011-08-27T01:56:50.00Z","requiredCore":"1.398","scm":"github.com","sha1":"snbs4E4kUVEwJzqfbDqW23fM1Vg=","title":"Description Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/description-column-plugin/1.3/description-column-plugin.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Description+Column+Plugin"},"description-setter":{"buildDate":"Mar 26, 2011","dependencies":[],"developers":[{"developerId":"huybrechts","name":"Tom Huybrechts"}],"excerpt":"This plugin sets the description for each build, based upon a RegEx<\/a> test of the build log file.","gav":"org.jenkins-ci.plugins:description-setter:1.8","labels":["post-build"],"name":"description-setter","previousTimestamp":"2011-01-01T03:55:32.00Z","previousVersion":"1.7","releaseTimestamp":"2011-03-27T02:12:18.00Z","requiredCore":"1.398","scm":"github.com","sha1":"1Yuo/8dwApgCXtrV1awg0LW7B9U=","title":"Description Setter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/description-setter/1.8/description-setter.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Description+Setter+Plugin"},"devstack":{"buildDate":"Sep 17, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.10"},{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"tim"}],"excerpt":"Deploys Devstack Onto OpenStack","gav":"org.jenkins-ci.ruby-plugins:devstack:0.0.6","name":"devstack","releaseTimestamp":"2012-09-18T02:14:48.00Z","requiredCore":"1.432","scm":"github.com","sha1":"6g2yigG70T2w6ZPnBHw/cGEGDgY=","title":"DevStack Plugin","url":"http://updates.jenkins-ci.org/download/plugins/devstack/0.0.6/devstack.hpi","version":"0.0.6"},"dimensionsscm":{"buildDate":"Mar 09, 2011","dependencies":[],"developers":[{"developerId":"TPayne","email":"tpayne@serena.com","name":"Tim Payne"}],"excerpt":"This plugin integrates Hudson with Dimensions<\/a>, the Serena CM solution. *{_}Please note - the maintainer for this plugin is no longer myself (TPayne), but is being changed. Until it has been updated, please forward any issues to Paul Caruana (pcaruana@serena.com)._* ","gav":"org.jenkins-ci.plugins:dimensionsscm:0.8.1","labels":["post-build","upload","notifier","scm"],"name":"dimensionsscm","previousTimestamp":"2011-03-03T02:22:14.00Z","previousVersion":"0.7.11","releaseTimestamp":"2011-03-10T01:54:12.00Z","requiredCore":"1.398","scm":"github.com","sha1":"mJoMpT6n4z13TnSRgJOWOjEK/HY=","title":"Dimensions Plugin","url":"http://updates.jenkins-ci.org/download/plugins/dimensionsscm/0.8.1/dimensionsscm.hpi","version":"0.8.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Dimensions+Plugin"},"disk-usage":{"buildDate":"Sep 04, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.409"}],"developers":[{"developerId":"vjuranek","name":"Vojtech Juranek"}],"excerpt":"This plugin records disk usage. ","gav":"org.jenkins-ci.plugins:disk-usage:0.18","labels":["report"],"name":"disk-usage","previousTimestamp":"2012-05-24T14:51:34.00Z","previousVersion":"0.17","releaseTimestamp":"2012-09-04T21:37:26.00Z","requiredCore":"1.409","scm":"github.com","sha1":"jYREXyuRByP47xXGVp+p7mT+Qfw=","title":"Disk Usage Plugin","url":"http://updates.jenkins-ci.org/download/plugins/disk-usage/0.18/disk-usage.hpi","version":"0.18","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Disk+Usage+Plugin"},"display-upstream-changes":{"buildDate":"Mar 29, 2012","dependencies":[],"developers":[{"developerId":"rpetti","name":"Rob Petti"}],"excerpt":"Displays all upstream changes on a build's summary page.","gav":"org.jvnet.hudson.plugins:display-upstream-changes:0.1","labels":[],"name":"display-upstream-changes","releaseTimestamp":"2012-03-29T18:04:46.00Z","requiredCore":"1.398","scm":"github.com","sha1":"jBpY0c6s+JYHa/5ZUgfA+pSjvBA=","title":"Display Upstream Changes Plugin","url":"http://updates.jenkins-ci.org/download/plugins/display-upstream-changes/0.1/display-upstream-changes.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Display+Upstream+Changes+Plugin"},"distTest":{"buildDate":"Jan 20, 2011","dependencies":[],"developers":[{"developerId":"mnovak","email":"novak.miroslav95@gmail.com","name":"Miroslav Novak"}],"excerpt":"This plugin allows distribute JUnit tests to all slaves in a specified label for a project.","gav":"org.jvnet.hudson.plugins:distTest:1.0","labels":["builder"],"name":"distTest","releaseTimestamp":"2011-01-20T16:20:14.00Z","requiredCore":"1.350","scm":"svn.java.net","sha1":"khlRX3YLAm9vVzflVYoZM+YOzj4=","title":"DistTest Plugin","url":"http://updates.jenkins-ci.org/download/plugins/distTest/1.0/distTest.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/DistTest+Plugin"},"distfork":{"buildDate":"Feb 25, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"Turns a Jenkins cluster into a general purpose batch job execution environment through an SSH-like CLI.","gav":"org.jenkins-ci.plugins:distfork:1.3","labels":["cluster","cli"],"name":"distfork","previousTimestamp":"2011-02-22T11:50:32.00Z","previousVersion":"1.2","releaseTimestamp":"2011-02-25T21:40:32.00Z","requiredCore":"1.398","scm":"github.com","sha1":"B4MetviGPmQnbROeeKQVHQiaenI=","title":"DistFork Plugin","url":"http://updates.jenkins-ci.org/download/plugins/distfork/1.3/distfork.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/DistFork+Plugin"},"doclinks":{"buildDate":"Oct 19, 2011","dependencies":[{"name":"maven-plugin","optional":true,"version":"1.319"}],"developers":[{"developerId":"jesse"}],"excerpt":"This plugin allows you to publish your documents that are created in the build steps.","gav":"org.jenkinsci.plugins:doclinks:0.5","labels":["ui","post-build"],"name":"doclinks","previousTimestamp":"2011-01-15T18:02:06.00Z","previousVersion":"0.4","releaseTimestamp":"2011-10-19T13:17:14.00Z","requiredCore":"1.319","scm":"github.com","sha1":"2W+ANdUpsnfiOEQIymMk3f4dHw4=","title":"DocLinks Plugin","url":"http://updates.jenkins-ci.org/download/plugins/doclinks/0.5/doclinks.hpi","version":"0.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/DocLinks+Plugin"},"dos-trigger":{"buildDate":"Aug 20, 2011","dependencies":[],"developers":[{"developerId":"pellet","email":"benpettit@digimulti.com","name":"Ben Pettit"},{"developerId":"tombrus","email":"tombrus@gmail.com","name":"Tom Brus"}],"excerpt":"This plugin allows to trigger a build with a DOS script.","gav":"org.jenkins-ci.plugins:dos-trigger:1.23","labels":["trigger"],"name":"dos-trigger","previousTimestamp":"2011-06-02T21:41:26.00Z","previousVersion":"1.21","releaseTimestamp":"2011-08-20T14:45:52.00Z","requiredCore":"1.398","scm":"github.com","sha1":"snUuDMD0Djp+KIkiskFF5DK5qkY=","title":"DOS Trigger","url":"http://updates.jenkins-ci.org/download/plugins/dos-trigger/1.23/dos-trigger.hpi","version":"1.23","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/DOS+Trigger"},"downstream-buildview":{"buildDate":"Aug 02, 2012","dependencies":[],"developers":[{"developerId":"shinodkm","email":"shinodkm@gmail.com","name":"Shinod Mohandas"},{"email":"rajesh.nair.mit@gmail.com","name":"Rajesh Nair"}],"excerpt":"This plugin allows you to view the full status all the downstream builds so that we can graphically see that everything for this build has been completed successfully.","gav":"org.jvnet.hudson.plugins:downstream-buildview:1.8","labels":["report","ui","misc"],"name":"downstream-buildview","previousTimestamp":"2012-04-03T01:50:50.00Z","previousVersion":"1.7","releaseTimestamp":"2012-08-02T16:28:06.00Z","requiredCore":"1.424.3","scm":"github.com","sha1":"ZQLMDEhMEelhf2v2zZop4DNsHFc=","title":"Downstream buildview plugin","url":"http://updates.jenkins-ci.org/download/plugins/downstream-buildview/1.8/downstream-buildview.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Downstream+buildview+plugin"},"downstream-ext":{"buildDate":"Feb 09, 2012","dependencies":[],"developers":[{"developerId":"kutzi","email":"kutzi@gmx.de","name":"Christoph Kutzinski"}],"excerpt":"This plugin supports extended configuration for triggering downstream builds: * trigger build only if downstream job has SCM changes * trigger build if upstream build result is better/equal/worse than any given result (SUCCESS, UNSTABLE, FAILURE, ABORTED) * for Matrix (alias multi-configuration) jobs you can decide which part of the job should trigger the downstream job: parent only, configurations only or both ","gav":"org.jenkins-ci.plugins:downstream-ext:1.7","labels":["trigger"],"name":"downstream-ext","previousTimestamp":"2010-03-28T17:08:36.00Z","previousVersion":"1.6","releaseTimestamp":"2012-02-09T21:51:36.00Z","requiredCore":"1.424","scm":"github.com","sha1":"eg2/YiPf3qXLYoRZGfoK5oDHB1o=","title":"Downstream-Ext Plugin","url":"http://updates.jenkins-ci.org/download/plugins/downstream-ext/1.7/downstream-ext.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Downstream-Ext+Plugin"},"doxygen":{"buildDate":"Apr 27, 2012","dependencies":[],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"This plugin publishes HTML reports generated by the Doxygen<\/a> tool. ","gav":"org.jenkins-ci.plugins:doxygen:0.11","labels":["report","maven"],"name":"doxygen","previousTimestamp":"2012-02-27T06:57:46.00Z","previousVersion":"0.10","releaseTimestamp":"2012-04-27T04:52:16.00Z","requiredCore":"1.398","scm":"github.com","sha1":"UScLSyRpdoOXgulkNUVXpn+NVfg=","title":"Doxygen Plugin","url":"http://updates.jenkins-ci.org/download/plugins/doxygen/0.11/doxygen.hpi","version":"0.11","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Doxygen+Plugin"},"drmemory-plugin":{"buildDate":"Feb 25, 2012","dependencies":[],"developers":[{"developerId":"wolfgarnet","email":"coolers@praqma.net","name":"Christian Wolfgang"}],"excerpt":"Integrates Dr. Memory with Jenkins","gav":"net.praqma:drmemory-plugin:0.1.1","labels":["report","builder","post-build"],"name":"drmemory-plugin","previousTimestamp":"2012-02-24T10:30:14.00Z","previousVersion":"0.1.0","releaseTimestamp":"2012-02-25T12:34:06.00Z","requiredCore":"1.450","scm":"github.com","sha1":"o8Kb8rqKP2IXH5k1dsfc0oLY5zg=","title":"drmemory plugin","url":"http://updates.jenkins-ci.org/download/plugins/drmemory-plugin/0.1.1/drmemory-plugin.hpi","version":"0.1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/drmemory+plugin"},"dropdown-viewstabbar-plugin":{"buildDate":"Jul 22, 2012","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin provides an alternate rendering of the Views bar which runs along the top of all views. This plugin is useful for instances which have a very large number of views and want a compact rendering.","gav":"org.jenkins-ci.plugins:dropdown-viewstabbar-plugin:1.6","labels":["misc","ui"],"name":"dropdown-viewstabbar-plugin","previousTimestamp":"2012-04-28T00:43:22.00Z","previousVersion":"1.5","releaseTimestamp":"2012-07-22T22:19:06.00Z","requiredCore":"1.455","scm":"github.com","sha1":"yMgx12Xj5P+kmzu8rf5hZBU2OC4=","title":"DropDown ViewsTabBar Plugin","url":"http://updates.jenkins-ci.org/download/plugins/dropdown-viewstabbar-plugin/1.6/dropdown-viewstabbar-plugin.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/DropDown+ViewsTabBar+Plugin"},"dry":{"buildDate":"Oct 05, 2012","dependencies":[{"name":"analysis-core","optional":false,"version":"1.48"},{"name":"maven-plugin","optional":true,"version":"1.409"},{"name":"dashboard-view","optional":true,"version":"2.2"},{"name":"token-macro","optional":true,"version":"1.5.1"}],"developers":[{"developerId":"drulli","email":"ullrich.hafner@gmail.com","name":"Ulli Hafner"}],"excerpt":"This plugin generates the trend report for duplicate code checkers like CPD<\/a> or Simian<\/a>. ","gav":"org.jvnet.hudson.plugins:dry:2.33","labels":["maven","report"],"name":"dry","previousTimestamp":"2012-09-04T14:57:46.00Z","previousVersion":"2.32","releaseTimestamp":"2012-10-05T15:51:54.00Z","requiredCore":"1.409","scm":"github.com","sha1":"w+LArI2XClTzB0XUDam57c+qhLA=","title":"DRY Plugin","url":"http://updates.jenkins-ci.org/download/plugins/dry/2.33/dry.hpi","version":"2.33","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/DRY+Plugin"},"dry-run":{"buildDate":"Sep 16, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.410"}],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"This plug-in makes it possible to show all the job tasks (builders, publishers, ...) to be executed as part of a build job. ","gav":"org.jenkins-ci.plugins:dry-run:0.9","labels":[],"name":"dry-run","previousTimestamp":"2012-02-06T22:21:26.00Z","previousVersion":"0.8","releaseTimestamp":"2012-09-17T02:42:54.00Z","requiredCore":"1.410","scm":"github.com","sha1":"4BuqvLI+ZnTPD/TKFZvglOTOcr8=","title":"DryRun Plugin","url":"http://updates.jenkins-ci.org/download/plugins/dry-run/0.9/dry-run.hpi","version":"0.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/DryRun+Plugin"},"dtkit":{"buildDate":"Dec 08, 2012","dependencies":[],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to convert outputs from the metric tools execution into unified outputs.","gav":"org.jenkins-ci.plugins:dtkit:1.9","labels":["builder"],"name":"dtkit","previousTimestamp":"2012-11-27T02:50:18.00Z","previousVersion":"1.8","releaseTimestamp":"2012-12-08T15:25:52.00Z","requiredCore":"1.409","scm":"github.com","sha1":"wq8cNe3yYv/17dv1iT63gHq0YCc=","title":"DTKit Plugin","url":"http://updates.jenkins-ci.org/download/plugins/dtkit/1.9/dtkit.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/DTKit+Plugin"},"dumpinfo-buildwrapper-plugin":{"buildDate":"Jan 30, 2011","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Dumps vital information about the Hudson instance into the job log. This plugin is useful for historical and audit purposes, where you can see what versions of Hudson, slaves, and plugins were around at the time of a build.","gav":"org.jvnet.hudson.plugins:dumpinfo-buildwrapper-plugin:1.1","labels":["buildwrapper","misc"],"name":"dumpinfo-buildwrapper-plugin","previousTimestamp":"2011-01-28T01:02:24.00Z","previousVersion":"1.0","releaseTimestamp":"2011-01-30T14:41:14.00Z","requiredCore":"1.398","scm":"github.com","sha1":"92iZEr3drLGGGRUKgrRjVdExraQ=","title":"DumpInfo BuildWrapper Plugin","url":"http://updates.jenkins-ci.org/download/plugins/dumpinfo-buildwrapper-plugin/1.1/dumpinfo-buildwrapper-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/DumpInfo+BuildWrapper+Plugin"},"dynamic-axis":{"buildDate":"Nov 13, 2012","dependencies":[],"developers":[{"developerId":"kckane","email":"kckane@silvermaplesolutions.ca","name":"Kevin Kane"}],"excerpt":"This plugin allows you to define a matrix build axis that is dynamically populated from an environment variable: ","gav":"org.jenkins-ci.plugins:dynamic-axis:1.0.1","labels":["buildwrapper"],"name":"dynamic-axis","releaseTimestamp":"2012-11-13T20:41:20.00Z","requiredCore":"1.477","scm":"github.com","sha1":"iPcyG43BojcgM4oSNayqxfIbvnM=","title":"DynamicAxis Plugin","url":"http://updates.jenkins-ci.org/download/plugins/dynamic-axis/1.0.1/dynamic-axis.hpi","version":"1.0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/DynamicAxis+Plugin"},"dynamicparameter":{"buildDate":"Oct 01, 2012","dependencies":[{"name":"scriptler","optional":false,"version":"2.2"},{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"dimitarp","name":"Dimitar Popov"},{"developerId":"baranowski","name":"Christian Baranowski"}],"excerpt":"This plugin allows dynamic generation of default build parameter values.","gav":"com.seitenbau.jenkins.plugins:dynamicparameter:0.2.0","labels":["parameter"],"name":"dynamicparameter","previousTimestamp":"2012-04-03T20:52:50.00Z","previousVersion":"0.1.1","releaseTimestamp":"2012-10-01T21:05:18.00Z","requiredCore":"1.447","scm":"github.com","sha1":"PvBopa8m/P/nVU6N75KiDVj3kOU=","title":"Jenkins Dynamic Parameter Plug-in","url":"http://updates.jenkins-ci.org/download/plugins/dynamicparameter/0.2.0/dynamicparameter.hpi","version":"0.2.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Dynamic+Parameter+Plug-in"},"easyant":{"buildDate":"Jan 31, 2010","dependencies":[],"developers":[{"developerId":"jboudart","name":"Jean Louis Boudart"}],"excerpt":"This plugin allows Hudson to invoke EasyAnt<\/a> build script as the main build step.","gav":"org.jvnet.hudson.plugins:easyant:1.1","labels":["builder"],"name":"easyant","previousTimestamp":"2009-03-30T12:22:08.00Z","previousVersion":"1.0","releaseTimestamp":"2010-01-31T13:49:56.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"w2JIOKAlcG3bQIMrSJJXKtgvddM=","title":"EasyAnt Plugin","url":"http://updates.jenkins-ci.org/download/plugins/easyant/1.1/easyant.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/EasyAnt+Plugin"},"ec2":{"buildDate":"Sep 12, 2012","dependencies":[],"developers":[{"developerId":"francisu","email":"francis@oaklandsoftware.com","name":"Francis Upton IV"},{"developerId":"kohsuke","email":"kkawaguchi@cloudbees.com","name":"Kohsuke Kawaguchi"}],"excerpt":"Allow Jenkins to start slaves on EC2<\/a> or Ubuntu Enterprise Cloud<\/a> (Eucalyptus) on demand, and kill them as they get unused.","gav":"org.jenkins-ci.plugins:ec2:1.17","labels":["cluster"],"name":"ec2","previousTimestamp":"2012-05-26T18:19:16.00Z","previousVersion":"1.16","releaseTimestamp":"2012-09-12T21:34:08.00Z","requiredCore":"1.424","scm":"github.com","sha1":"5tAQN8tgmW2pHPDXEyxZMy0BRXI=","title":"Amazon EC2 Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ec2/1.17/ec2.hpi","version":"1.17","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Amazon+EC2+Plugin"},"eclipse-update-site":{"buildDate":"Sep 27, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This library plugin combines Eclipse update sites from all the installed plugins and expose it as a single update site.","gav":"org.jenkins-ci.plugins:eclipse-update-site:1.2","labels":["library"],"name":"eclipse-update-site","previousTimestamp":"2012-09-11T22:28:24.00Z","previousVersion":"1.1","releaseTimestamp":"2012-09-27T19:54:44.00Z","requiredCore":"1.424","scm":"github.com","sha1":"rW1t3oyaM3X6hSUMXUT4lxoE3oE=","title":"Eclipse Update Site Plugin","url":"http://updates.jenkins-ci.org/download/plugins/eclipse-update-site/1.2/eclipse-update-site.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Eclipse+Update+Site+Plugin"},"eggplant-plugin":{"buildDate":"Nov 05, 2012","dependencies":[],"developers":[{"developerId":"jonathanosx","email":"jonathan.gillaspie@testplant.com","name":"Jonathan Gillaspie"},{"developerId":"allen_fisher","email":"allen.fisher@gmail.com","name":"Allen Fisher"},{"developerId":"ryantestplant","email":"ryan.daubert@testplant.com","name":"Ryan Daubert"}],"excerpt":"This plugin calls eggPlant scripts as a Jenkins Build Action and returns the results to Jenkins for review or further processing.","gav":"org.jenkins-ci.plugins:eggplant-plugin:1.3","labels":["builder"],"name":"eggplant-plugin","previousTimestamp":"2012-02-02T00:40:00.00Z","previousVersion":"1.0","releaseTimestamp":"2012-11-05T17:26:46.00Z","requiredCore":"1.427","scm":"github.com","sha1":"2bj5sgDzq/D4qzWj8DbUECgbPV0=","title":"eggPlant-plugin","url":"http://updates.jenkins-ci.org/download/plugins/eggplant-plugin/1.3/eggplant-plugin.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/eggPlant-plugin"},"elOyente":{"buildDate":"Dec 12, 2012","dependencies":[],"developers":[{"developerId":"isabel","email":"isabel.fd@gmail.com","name":"Isabel Fernández Díaz"},{"developerId":"juanluis","email":"jlpardo87@gmail.com","name":"Juan Luis Pardo González"},{"developerId":"vanderhallenf","email":"frank.vanderhallen@gmail.com","name":"Frank Vanderhallen"}],"excerpt":"This plug-in adds job triggering based on XMPP Pub/Sub events.","gav":"com.technicolor:elOyente:1.0","labels":["trigger"],"name":"elOyente","releaseTimestamp":"2012-12-12T16:59:28.00Z","requiredCore":"1.492","scm":"github.com","sha1":"TMQJ4tbdYyllwx0mClWWPlRlk7c=","title":"El Oyente Plugin","url":"http://updates.jenkins-ci.org/download/plugins/elOyente/1.0/elOyente.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/El+Oyente+Plugin"},"email-ext":{"buildDate":"Dec 13, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.480"},{"name":"token-macro","optional":true,"version":"1.5.1"},{"name":"javadoc","optional":false,"version":"1.0"},{"name":"analysis-core","optional":true,"version":"1.41"}],"developers":[{"developerId":"ashlux","email":"ashlux@gmail.com","name":"Ash Lux"},{"developerId":"kdsweeney","name":"Kyle Sweeney"},{"developerId":"krwalker","email":"krwalker@stellarscience.com","name":"K. R. Walker"},{"developerId":"ssogabe","email":"s.sogabe@gmail.com","name":"Seiji Sogabe"},{"developerId":"slide","email":"slide.o.mix@gmail.com","name":"Alex Earl"}],"excerpt":"This plugin allows you to configure every aspect of email notifications. You can customize when an email is sent, who should receive it, and what the email says.","gav":"org.jenkins-ci.plugins:email-ext:2.25","labels":["notifier"],"name":"email-ext","previousTimestamp":"2012-07-20T12:21:42.00Z","previousVersion":"2.24.1","releaseTimestamp":"2012-12-13T08:18:16.00Z","requiredCore":"1.480","scm":"github.com","sha1":"nWICrmjm7Txe5/lhJSw1Kq5L8Wc=","title":"Email-ext plugin","url":"http://updates.jenkins-ci.org/download/plugins/email-ext/2.25/email-ext.hpi","version":"2.25","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin"},"embeddable-build-status":{"buildDate":"May 09, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin allows Jenkins to expose the current status of your build as an image in a fixed URL. You can put this URL into other sites (such as GitHub README) so that people can see the current state of the build. ","gav":"org.jenkins-ci.plugins:embeddable-build-status:1.0","labels":["ui"],"name":"embeddable-build-status","releaseTimestamp":"2012-05-09T15:02:30.00Z","requiredCore":"1.424","scm":"github.com","sha1":"1L4k6nZ6RFUNCsmcJRulpAAoRZ8=","title":"Embeddable Build Status Plugin","url":"http://updates.jenkins-ci.org/download/plugins/embeddable-build-status/1.0/embeddable-build-status.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin"},"emma":{"buildDate":"Jul 05, 2012","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"dashboard-view","optional":true,"version":"2.1"},{"name":"maven-plugin","optional":false,"version":"1.447"}],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"stephenconnolly","name":"Stephen Connolly"},{"developerId":"manolo","email":"manolo@apache.org","name":"Manuel Carrasco Monino"}],"excerpt":"This plugin allows you to capture code coverage report from Emma<\/a>. Jenkins will generate the trend report of coverage. ","gav":"org.jenkins-ci.plugins:emma:1.29","labels":["report"],"name":"emma","previousTimestamp":"2012-05-22T02:42:12.00Z","previousVersion":"1.28","releaseTimestamp":"2012-07-05T19:49:52.00Z","requiredCore":"1.447","scm":"github.com","sha1":"hia/Z09EJoxlfEOqQ3mi1QAVuo0=","title":"Emma Plugin","url":"http://updates.jenkins-ci.org/download/plugins/emma/1.29/emma.hpi","version":"1.29","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Emma+Plugin"},"emmacoveragecolumn":{"buildDate":"Oct 10, 2011","dependencies":[{"name":"emma","optional":false,"version":"1.25"}],"developers":[{"developerId":"danebert","email":"mathin@mathin.com","name":"Dan Ebert"}],"excerpt":"Allows you to add a column that displays line coverage percentages based on EMMA.","gav":"org.jenkins-ci.plugins:emmacoveragecolumn:0.0.4","labels":["listview-column"],"name":"emmacoveragecolumn","previousTimestamp":"2011-10-07T20:51:46.00Z","previousVersion":"0.0.3","releaseTimestamp":"2011-10-10T17:39:24.00Z","requiredCore":"1.434","scm":"github.com","sha1":"2fbw7e2SKaDM3AwyM+vqQ9Vczmc=","title":"Emma Coverage Column","url":"http://updates.jenkins-ci.org/download/plugins/emmacoveragecolumn/0.0.4/emmacoveragecolumn.hpi","version":"0.0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Emma+Coverage+Column"},"emotional-hudson":{"buildDate":"Nov 19, 2011","dependencies":[],"developers":[{"developerId":"masanobuimai","name":"Masanobu Imai"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This funny plugin changes the expression of Mr. Hudson in the background when your builds fail.","gav":"org.jvnet.hudson.plugins:emotional-hudson:1.3","labels":["ui"],"name":"emotional-hudson","previousTimestamp":"2010-04-16T20:32:40.00Z","previousVersion":"1.2","releaseTimestamp":"2011-11-20T01:45:42.00Z","requiredCore":"1.392","scm":"github.com","sha1":"S9yHTNQquKBhEhCV20aSa8piIX8=","title":"Emotional Hudson Plugin","url":"http://updates.jenkins-ci.org/download/plugins/emotional-hudson/1.3/emotional-hudson.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Emotional+Hudson+Plugin"},"emotional-jenkins-plugin":{"buildDate":"Aug 06, 2011","dependencies":[],"developers":[{"developerId":"masanobuimai","name":"Masanobu Imai"}],"excerpt":"This funny plugin changes the expression of Mr. Jenkins in the background when your builds fail.","gav":"org.jenkins-ci.plugins:emotional-jenkins-plugin:1.1","labels":["ui"],"name":"emotional-jenkins-plugin","releaseTimestamp":"2011-08-07T02:30:52.00Z","requiredCore":"1.398","scm":"github.com","sha1":"LsLBtxsOKA0RF/XA1m/alYBDkjg=","title":"Emotional Jenkins Plugin","url":"http://updates.jenkins-ci.org/download/plugins/emotional-jenkins-plugin/1.1/emotional-jenkins-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Emotional+Jenkins+Plugin"},"envfile":{"buildDate":"Aug 05, 2011","dependencies":[],"developers":[{"developerId":"ajoajoajo","email":"ajoajoajo@gmail.com","name":"Anders Johansson"}],"excerpt":"This plugin enables you to set environment variables via a file. The file's format must be the standard Java property file format<\/a>. Superseded by the [EnvInject Plugin]? The property file is always retrieved from the file system of the Jenkins master node, even in distributed setups with slave nodes. You can reference already defined environment variables both to specify the path to the property file, in a job's configuration, and in property values, in the property file.","gav":"org.jenkins-ci.plugins:envfile:1.2","labels":["buildwrapper","envfile"],"name":"envfile","previousTimestamp":"2010-10-20T14:59:24.00Z","previousVersion":"1.1","releaseTimestamp":"2011-08-05T19:16:30.00Z","requiredCore":"1.403","scm":"github.com","sha1":"4sV96798yzxtkfoYEiW6EdEYqgg=","title":"Envfile Plugin","url":"http://updates.jenkins-ci.org/download/plugins/envfile/1.2/envfile.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Envfile+Plugin"},"envinject":{"buildDate":"Dec 28, 2012","dependencies":[{"name":"ivy","optional":true,"version":"1.21"},{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.444"}],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to have an isolated environment for your jobs.","gav":"org.jenkins-ci.plugins:envinject:1.78","labels":["buildwrapper","builder"],"name":"envinject","previousTimestamp":"2012-12-28T00:43:44.00Z","previousVersion":"1.77","releaseTimestamp":"2012-12-29T01:05:50.00Z","requiredCore":"1.444","scm":"github.com","sha1":"gsUlmEQYWxno3VdNmbkADfC42CY=","title":"EnvInject Plugin","url":"http://updates.jenkins-ci.org/download/plugins/envinject/1.78/envinject.hpi","version":"1.78","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin"},"environment-script":{"buildDate":"Aug 09, 2012","dependencies":[],"developers":[{"developerId":"jorgenpt","email":"jorgen.tjerno@mylookout.com","name":"Jørgen P. Tjernø"}],"excerpt":"Allows you to run a script before each build that generates environment variables for it.","gav":"com.lookout.jenkins:environment-script:1.1.2","labels":["buildwrapper"],"name":"environment-script","previousTimestamp":"2012-08-09T01:13:00.00Z","previousVersion":"1.1.1","releaseTimestamp":"2012-08-09T16:03:36.00Z","requiredCore":"1.466","scm":"github.com","sha1":"Ybq+a0eRvgo+pGq0rsZz/LSrLws=","title":"Environment Script Plugin","url":"http://updates.jenkins-ci.org/download/plugins/environment-script/1.1.2/environment-script.hpi","version":"1.1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Environment+Script+Plugin"},"escaped-markup-plugin":{"buildDate":"Apr 23, 2011","dependencies":[],"developers":[{"developerId":"ssogabe","email":"s.sogabe@gmail.com","name":"Seiji Sogabe"}],"excerpt":"This plugin escapes the description of project, user, view, and build to prevent from XSS. ","gav":"org.jenkins-ci.plugins:escaped-markup-plugin:0.1","labels":["ui"],"name":"escaped-markup-plugin","releaseTimestamp":"2011-04-23T14:16:40.00Z","requiredCore":"1.408","scm":"github.com","sha1":"+Ze69qQ2ZCZjQbsYAmz0VQh08Co=","title":"Escaped Markup Plugin","url":"http://updates.jenkins-ci.org/download/plugins/escaped-markup-plugin/0.1/escaped-markup-plugin.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Escaped+Markup+Plugin"},"excludeMatrixParent":{"buildDate":"Jun 08, 2011","dependencies":[],"developers":[{"developerId":"vjuranek","name":"Vojtech Juranek"}],"excerpt":"This plugin exclude flyweight task to be run on given slave. ","gav":"hudson.plugins.excludeMatrixParent:excludeMatrixParent:1.1","labels":["slaves"],"name":"excludeMatrixParent","previousTimestamp":"2011-02-10T19:23:42.00Z","previousVersion":"1.0","releaseTimestamp":"2011-06-08T14:23:24.00Z","requiredCore":"1.391","scm":"github.com","sha1":"oW8+KSu5GgLQQReeFCMUzdEfKHQ=","title":"Exclude flyweight tasks","url":"http://updates.jenkins-ci.org/download/plugins/excludeMatrixParent/1.1/excludeMatrixParent.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Exclude+flyweight+tasks"},"exclusive-execution":{"buildDate":"Jul 31, 2011","dependencies":[],"developers":[{"developerId":"mambu","email":"marco.ambu+jenkins@gmail.com","name":"Marco Ambu"},{"developerId":"sata_","email":"sam@tavakoli.se","name":"Sam Tavakoli"}],"excerpt":"Allows a job to be executed when no other jobs are running.","gav":"org.jenkins-ci.plugins:exclusive-execution:0.7","labels":["buildwrapper"],"name":"exclusive-execution","previousTimestamp":"2011-02-25T22:27:36.00Z","previousVersion":"0.6","releaseTimestamp":"2011-07-31T19:37:56.00Z","requiredCore":"1.420","scm":"github.com","sha1":"i11F5+JFot2crUuXylOt8lqfhBw=","title":"Exclusive Execution Plugin","url":"http://updates.jenkins-ci.org/download/plugins/exclusive-execution/0.7/exclusive-execution.hpi","version":"0.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Exclusive+Execution+Plugin"},"extended-choice-parameter":{"buildDate":"Jan 07, 2013","dependencies":[],"developers":[{"developerId":"vimil","name":"Vimil Saju"}],"excerpt":"Adds extended functionality to Choice parameter.","gav":"org.jenkins-ci.plugins:extended-choice-parameter:0.20","labels":["parameter"],"name":"extended-choice-parameter","previousTimestamp":"2013-01-08T03:01:02.00Z","previousVersion":"0.19","releaseTimestamp":"2013-01-08T03:29:00.00Z","requiredCore":"1.398","scm":"github.com","sha1":"YdihF/CWtKA1KtHpsdXIvxdgUIc=","title":"Extended Choice Parameter plugin","url":"http://updates.jenkins-ci.org/download/plugins/extended-choice-parameter/0.20/extended-choice-parameter.hpi","version":"0.20","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Extended+Choice+Parameter+plugin"},"extended-read-permission":{"buildDate":"Oct 05, 2009","dependencies":[],"developers":[{"developerId":"dty","name":"Dean Yu"}],"excerpt":"This plugin enables the Extended Read permission in Hudson 1.324 and newer. ","gav":"org.jvnet.hudson.plugins:extended-read-permission:1.0","labels":["user"],"name":"extended-read-permission","releaseTimestamp":"2009-10-05T20:45:22.00Z","requiredCore":"1.324","scm":"svn.dev.java.net","sha1":"8HrQOxL0G4XTY9YkLXnutPCnyYs=","title":"Extended Read Permission Plugin","url":"http://updates.jenkins-ci.org/download/plugins/extended-read-permission/1.0/extended-read-permission.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Extended+Read+Permission+Plugin"},"extensible-choice-parameter":{"buildDate":"Jan 06, 2013","dependencies":[],"developers":[{"developerId":"ikedam","name":"IKEDA Yasuyuki"}],"excerpt":"This plugin adds \"Extensible Choice\" as a build parameter.","gav":"jp.ikedam.jenkins.plugins:extensible-choice-parameter:1.0.0","labels":["parameter"],"name":"extensible-choice-parameter","releaseTimestamp":"2013-01-06T23:09:12.00Z","requiredCore":"1.466","scm":"github.com","sha1":"lf002AE9c2qxF5a+vmWX2oqGwqs=","title":"Extensible Choice Parameter plugin","url":"http://updates.jenkins-ci.org/download/plugins/extensible-choice-parameter/1.0.0/extensible-choice-parameter.hpi","version":"1.0.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Extensible+Choice+Parameter+plugin"},"extension-filter":{"buildDate":"Oct 25, 2012","dependencies":[],"developers":[{"developerId":"ndeloof","email":"nicolas.deloof@gmail.com","name":"Nicolas De Loof"}],"excerpt":"This plugin allows to filter features available on a Jenkins instance by disabling some Extensions/Descriptors. ","gav":"org.jenkins-ci.plugins:extension-filter:1.0","labels":[],"name":"extension-filter","releaseTimestamp":"2012-10-25T18:26:18.00Z","requiredCore":"1.472","scm":"github.com","sha1":"LddTtmowN9YDTbf8Cr6v9r+IAss=","title":"Extension Filter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/extension-filter/1.0/extension-filter.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Extension+Filter+Plugin"},"external-monitor-job":{"buildDate":"Aug 06, 2012","dependencies":[],"developers":[{"developerId":"jglick"}],"excerpt":"Adds the ability to monitor the result of externally executed jobs.","gav":"org.jenkins-ci.plugins:external-monitor-job:1.1","labels":["misc","external"],"name":"external-monitor-job","previousTimestamp":"2012-06-06T01:04:10.00Z","previousVersion":"1.0","releaseTimestamp":"2012-08-07T00:54:36.00Z","requiredCore":"1.468","scm":"github.com","sha1":"k0RSxsS9r5EgOH5Qc7d6wUPPKy0=","title":"Monitoring external jobs","url":"http://updates.jenkins-ci.org/download/plugins/external-monitor-job/1.1/external-monitor-job.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Monitoring+external+jobs"},"externalresource-dispatcher":{"buildDate":"Nov 22, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"},{"name":"metadata","optional":false,"version":"1.0b"}],"developers":[{"developerId":"rsandell","email":"robert.sandell@sonymobile.com","name":"Robert Sandell"},{"developerId":"t_westling","email":"tomas.westling@sonymobile.com","name":"Tomas Westling"}],"excerpt":"This plugin adds support for external resources in Jenkins. An external resource is something external attached to a Jenkins slave and can be locked by a build, which thus gets exclusive access to it, then released after the build is done. Examples of external resources are phones, printers and USB christmas trees. ","gav":"com.sonyericsson.jenkins.plugins.externalresource:externalresource-dispatcher:1.0b","labels":["slaves","cli","android"],"name":"externalresource-dispatcher","releaseTimestamp":"2012-11-22T22:21:32.00Z","requiredCore":"1.424","scm":"github.com","sha1":"CFtzp803WnPc9vVSmrooKp02/+E=","title":"External Resource Dispatcher","url":"http://updates.jenkins-ci.org/download/plugins/externalresource-dispatcher/1.0b/externalresource-dispatcher.hpi","version":"1.0b","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/External+Resource+Dispatcher"},"extra-columns":{"buildDate":"Oct 17, 2012","dependencies":[],"developers":[{"developerId":"fredg","name":"Fred G."}],"excerpt":"This is a general listview-column plugin that currently contains the following columns: Test Result, Configure Project button, Disable/Enable Project button, Project Description, Build Description, SCM Type.","gav":"org.jenkins-ci.plugins:extra-columns:1.6","labels":["listview-column"],"name":"extra-columns","previousTimestamp":"2012-06-27T06:07:54.00Z","previousVersion":"1.5","releaseTimestamp":"2012-10-17T05:00:50.00Z","requiredCore":"1.417","scm":"github.com","sha1":"bLCn+Jad3UTA15hlDRotB/crBsE=","title":"Extra Columns Plugin","url":"http://updates.jenkins-ci.org/download/plugins/extra-columns/1.6/extra-columns.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Extra+Columns+Plugin"},"ezwall":{"buildDate":"Feb 26, 2012","dependencies":[],"developers":[{"developerId":"noirbizarre","email":"noirbizarre+jenkins@gmail.com","name":"Axel Haustant"}],"excerpt":"Add a button to display a fullscreen buildwall on each view.","gav":"org.jenkins-ci.plugins:ezwall:0.2","labels":["ui","report"],"name":"ezwall","previousTimestamp":"2012-02-18T23:24:18.00Z","previousVersion":"0.1","releaseTimestamp":"2012-02-26T10:30:24.00Z","requiredCore":"1.440","scm":"github.com","sha1":"j+3oXCLJOQlDKbX8znqAZ6QUlzg=","title":"EzWall Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ezwall/0.2/ezwall.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/EzWall+Plugin"},"fail-the-build-plugin":{"buildDate":"Jul 18, 2011","compatibleSinceVersion":"0.3","dependencies":[],"developers":[{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"}],"excerpt":"Set or change the build result to test job configurations - notifiers, publishers, promotions, build pipelines, etc. ","gav":"org.jenkins-ci.plugins:fail-the-build-plugin:1.0","labels":["builder"],"name":"fail-the-build-plugin","releaseTimestamp":"2011-07-18T23:19:24.00Z","requiredCore":"1.396","scm":"github.com","sha1":"0MU2dYZlY2ppCyoz+CYlAFiJ5mE=","title":"Fail The Build Plugin","url":"http://updates.jenkins-ci.org/download/plugins/fail-the-build-plugin/1.0/fail-the-build-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Fail+The+Build+Plugin"},"favorite":{"buildDate":"Sep 11, 2012","dependencies":[{"name":"token-macro","optional":true,"version":"1.5.1"}],"developers":[{"developerId":"lshatzer","email":"larrys@gmail.com","name":"Larry Shatzer, Jr."}],"excerpt":"This plugin allows you to mark a job a favorite.","gav":"org.jvnet.hudson.plugins:favorite:1.13","labels":["user","misc","ui","listview-column"],"name":"favorite","previousTimestamp":"2012-09-10T15:25:06.00Z","previousVersion":"1.12","releaseTimestamp":"2012-09-11T12:22:14.00Z","requiredCore":"1.447","scm":"github.com","sha1":"iUEzpnHrgQPBcrpsWhtrWB9c72g=","title":"Favorite Plugin","url":"http://updates.jenkins-ci.org/download/plugins/favorite/1.13/favorite.hpi","version":"1.13","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Favorite+Plugin"},"favorite-view":{"buildDate":"Feb 07, 2012","dependencies":[],"developers":[{"developerId":"tom"}],"excerpt":"","gav":"org.jenkins-ci.plugins:favorite-view:1.0","labels":["ui"],"name":"favorite-view","releaseTimestamp":"2012-02-08T00:16:38.00Z","requiredCore":"1.398","scm":"github.com","sha1":"lWM1FpD9J93rASFcHQIaoI8yKnc=","title":"Favorite View Plugin","url":"http://updates.jenkins-ci.org/download/plugins/favorite-view/1.0/favorite-view.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Favorite+View+Plugin"},"file-leak-detector":{"buildDate":"Apr 03, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"Runtime diagnosis tool for \"too many open files\" problem.","gav":"com.cloudbees.jenkins.plugins:file-leak-detector:1.2","labels":["misc"],"name":"file-leak-detector","previousTimestamp":"2012-04-03T14:51:56.00Z","previousVersion":"1.1","releaseTimestamp":"2012-04-03T16:53:24.00Z","requiredCore":"1.424","scm":"github.com","sha1":"luVIulwtAULMdmHMROgD1z4Eozk=","title":"File Leak Detector Plugin","url":"http://updates.jenkins-ci.org/download/plugins/file-leak-detector/1.2/file-leak-detector.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/File+Leak+Detector+Plugin"},"files-found-trigger":{"buildDate":"Aug 17, 2011","dependencies":[],"developers":[{"developerId":"stevengbrown","email":"StevenGBrown@gmail.com","name":"Steven Brown"}],"excerpt":"Build trigger that polls one or more directories and starts a build if certain files are found within those directories. ","gav":"org.jenkins-ci.plugins:files-found-trigger:1.3","labels":["trigger"],"name":"files-found-trigger","previousTimestamp":"2011-03-07T01:52:44.00Z","previousVersion":"1.2","releaseTimestamp":"2011-08-18T02:38:22.00Z","requiredCore":"1.398","scm":"github.com","sha1":"odoxgB/WNvTAsxzx25GDiKlCDS0=","title":"Files Found Trigger","url":"http://updates.jenkins-ci.org/download/plugins/files-found-trigger/1.3/files-found-trigger.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Files+Found+Trigger"},"filesystem_scm":{"buildDate":"Dec 05, 2011","dependencies":[],"developers":[{"developerId":"samngms","email":"samngms@yahoo.com","name":"Sam NG"},{"developerId":"kutzi","email":"kutzi@gmx.de","name":"Christoph Kutzinski"}],"excerpt":"Use File System as SCM.","gav":"hudson.plugins.filesystem_scm:filesystem_scm:1.20","labels":["scm"],"name":"filesystem_scm","previousTimestamp":"2011-04-02T16:14:38.00Z","previousVersion":"1.10","releaseTimestamp":"2011-12-06T00:49:42.00Z","requiredCore":"1.398","scm":"svn.jenkins-ci.org","sha1":"cOAR5kIPaGDd6prDZ8DBFCY9zzA=","title":"File System SCM","url":"http://updates.jenkins-ci.org/download/plugins/filesystem_scm/1.20/filesystem_scm.hpi","version":"1.20","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/File+System+SCM"},"findbugs":{"buildDate":"Oct 05, 2012","dependencies":[{"name":"dashboard-view","optional":true,"version":"2.2"},{"name":"token-macro","optional":true,"version":"1.5.1"},{"name":"analysis-core","optional":false,"version":"1.48"},{"name":"maven-plugin","optional":true,"version":"1.409"}],"developers":[{"developerId":"drulli","email":"ullrich.hafner@gmail.com","name":"Ulli Hafner"}],"excerpt":"This plugin generates the trend report for FindBugs<\/a>, an open source program which uses static analysis to look for bugs in Java code.  ","gav":"org.jvnet.hudson.plugins:findbugs:4.45","labels":["maven","report"],"name":"findbugs","previousTimestamp":"2012-09-04T15:09:10.00Z","previousVersion":"4.44","releaseTimestamp":"2012-10-05T15:55:50.00Z","requiredCore":"1.409","scm":"github.com","sha1":"2eXdJciGAFQeuL49+hmmdsXmrnk=","title":"FindBugs Plugin","url":"http://updates.jenkins-ci.org/download/plugins/findbugs/4.45/findbugs.hpi","version":"4.45","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/FindBugs+Plugin"},"fitnesse":{"buildDate":"Dec 10, 2012","dependencies":[],"developers":[{"developerId":"prime8","email":"tim bacon @at@ gmail dotcom","name":"timbacon"}],"excerpt":"This plugin can be used to both execute and report on Fitnesse<\/a> tests so that they can be integrated into a Jenkins build.","gav":"org.jenkins-ci.plugins:fitnesse:1.8","labels":["report","builder"],"name":"fitnesse","previousTimestamp":"2012-05-18T18:15:20.00Z","previousVersion":"1.7","releaseTimestamp":"2012-12-10T05:13:18.00Z","requiredCore":"1.401","scm":"github.com","sha1":"zxwJRSrQjbe//gcL1CD30ps39k8=","title":"Fitnesse Plugin","url":"http://updates.jenkins-ci.org/download/plugins/fitnesse/1.8/fitnesse.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Fitnesse+Plugin"},"flashlog-plugin":{"buildDate":"Jan 06, 2011","dependencies":[],"developers":[{"developerId":"ddragosd","email":"ddragosd@gmail.com","name":"Dragos Dascalita Haut"}],"excerpt":"Captures Adobe Flash Player logs during a Hudson build in order to save them as build artifacts. Useful to debug unit tests or integration tests.","gav":"org.jvnet.hudson.plugins:flashlog-plugin:1.0","labels":["report"],"name":"flashlog-plugin","releaseTimestamp":"2011-01-06T17:07:52.00Z","requiredCore":"1.392","scm":"github.com","sha1":"F4KFOvCOMEx+gNvZ1hb0UY5aBas=","title":"FlashLog Plugin","url":"http://updates.jenkins-ci.org/download/plugins/flashlog-plugin/1.0/flashlog-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/FlashLog+Plugin"},"flexible-publish":{"buildDate":"Jul 03, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"},{"name":"run-condition","optional":false,"version":"0.7"}],"developers":[{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"}],"excerpt":"Use a publisher more than once. Select the execution order of the publishers. Use run conditions<\/a> to decide whether a publisher should be run. ","gav":"org.jenkins-ci.plugins:flexible-publish:0.10","labels":["post-build"],"name":"flexible-publish","previousTimestamp":"2012-02-15T02:09:28.00Z","previousVersion":"0.9","releaseTimestamp":"2012-07-04T01:06:14.00Z","requiredCore":"1.408","scm":"github.com","sha1":"rdRaAiqUyPltuga3zuYtbwPn2VI=","title":"Flexible Publish Plugin","url":"http://updates.jenkins-ci.org/download/plugins/flexible-publish/0.10/flexible-publish.hpi","version":"0.10","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Flexible+Publish+Plugin"},"flexteam":{"buildDate":"Nov 03, 2011","dependencies":[],"developers":[{"developerId":"mindless","email":"alan.harder@gmail.com","name":"Alan Harder"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"","gav":"org.jvnet.hudson.plugins:flexteam:1.1","name":"flexteam","releaseTimestamp":"2011-11-03T18:58:46.00Z","requiredCore":"1.392","scm":"github.com","sha1":"C9cBIUV6zcpcsSPLFg0lXbzEebc=","title":"FlexTeam Plugin","url":"http://updates.jenkins-ci.org/download/plugins/flexteam/1.1/flexteam.hpi","version":"1.1"},"fogbugz":{"buildDate":"Jan 19, 2012","dependencies":[],"developers":[{"developerId":"pliljenberg","email":"pliljenberg@gmail.com","name":"Peter Liljenberg"}],"excerpt":"This plugin integrates FogBugz<\/a> with Jenkins.","gav":"org.jenkins-ci.plugins:fogbugz:1.0","labels":["external","scm-related","misc"],"name":"fogbugz","releaseTimestamp":"2012-01-20T03:44:04.00Z","requiredCore":"1.448","scm":"github.com","sha1":"JLWW5ABU0MrJSAaMmCLfZGJH3GQ=","title":"Fogbugz Plugin","url":"http://updates.jenkins-ci.org/download/plugins/fogbugz/1.0/fogbugz.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Fogbugz+Plugin"},"form-element-path":{"buildDate":"Jun 22, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin adds distinctive {{path}} attributes to every form elements inside Jenkins so that automated test programs like Selenium can be used more effectively to automate/test Jenkins.","gav":"org.jenkins-ci.plugins:form-element-path:1.0","labels":[],"name":"form-element-path","releaseTimestamp":"2012-06-22T19:15:06.00Z","requiredCore":"1.424","scm":"github.com","sha1":"Gno1/5hlwdUg2MB7rKBNLtzPDHI=","title":"Form Element Path Plugin","url":"http://updates.jenkins-ci.org/download/plugins/form-element-path/1.0/form-element-path.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Form+Element+Path+Plugin"},"fortify360":{"buildDate":"Nov 28, 2012","dependencies":[],"developers":[{"developerId":"samn"}],"excerpt":"Fortify 360 FPR post-processing and uploading to Fortify 360 Server","gav":"org.jvnet.hudson.plugins.fortify360:fortify360:3.6","labels":["report","external"],"name":"fortify360","previousTimestamp":"2012-05-26T20:03:40.00Z","previousVersion":"2.4","releaseTimestamp":"2012-11-28T22:48:04.00Z","requiredCore":"1.323","scm":"svn.jenkins-ci.org","sha1":"D/HQHma4CqrQl1DaLefW8BCwCts=","title":"Fortify 360 Plugin","url":"http://updates.jenkins-ci.org/download/plugins/fortify360/3.6/fortify360.hpi","version":"3.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Fortify+360+Plugin"},"fstrigger":{"buildDate":"Aug 03, 2012","dependencies":[],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"FSTrigger provides polling mechanisms to monitor a file system and trigger a build if a file or a set of files have changed.","gav":"org.jenkins-ci.plugins:fstrigger:0.34","labels":["trigger"],"name":"fstrigger","previousTimestamp":"2012-06-22T02:45:40.00Z","previousVersion":"0.33","releaseTimestamp":"2012-08-03T18:01:34.00Z","requiredCore":"1.410","scm":"github.com","sha1":"t/swQpTgfMZqxg+WtJFVDSr6vnM=","title":"FSTrigger Plugin","url":"http://updates.jenkins-ci.org/download/plugins/fstrigger/0.34/fstrigger.hpi","version":"0.34","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/FSTrigger+Plugin"},"ftppublisher":{"buildDate":"Jul 13, 2011","compatibleSinceVersion":"1.0","dependencies":[],"developers":[{"developerId":"jacob"}],"excerpt":"This plugin can be used to upload project artifacts and whole directories to an ftp server.","gav":"org.jvnet.hudson.plugins:ftppublisher:1.2","labels":["upload"],"name":"ftppublisher","previousTimestamp":"2011-07-05T22:52:08.00Z","previousVersion":"1.1.4","releaseTimestamp":"2011-07-13T22:45:12.00Z","requiredCore":"1.349","scm":"svn.jenkins-ci.org","sha1":"zDbyUSuiDuAkPwYLMkBlPITrAnc=","title":"FTP-Publisher Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ftppublisher/1.2/ftppublisher.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/FTP-Publisher+Plugin"},"gallio":{"buildDate":"Oct 12, 2011","dependencies":[{"name":"xunit","optional":false,"version":"1.23"}],"developers":[{"developerId":"pmiossec","name":"Philippe Miossec"},{"developerId":"gbois","email":"gbois@dev.java.net","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to publish Gallio<\/a>/MbUnit<\/a> test results","gav":"org.jenkins-ci.plugins:gallio:1.6","labels":["report"],"name":"gallio","previousTimestamp":"2011-05-16T03:29:18.00Z","previousVersion":"1.5","releaseTimestamp":"2011-10-13T03:53:08.00Z","requiredCore":"1.410","scm":"github.com","sha1":"1MYwLJ/ydWFpVJ9SqS8Tz4lq4oY=","title":"Gallio Plugin","url":"http://updates.jenkins-ci.org/download/plugins/gallio/1.6/gallio.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Gallio+Plugin"},"gant":{"buildDate":"Jan 29, 2010","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin allows Hudson to invoke Gant<\/a> build script as the main build step.","gav":"org.jvnet.hudson.plugins:gant:1.2","labels":["builder"],"name":"gant","previousTimestamp":"2008-07-07T22:44:12.00Z","previousVersion":"1.1","releaseTimestamp":"2010-01-30T02:34:50.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"EbRJgnSdzfxWxHLmm3puSM6fXRU=","title":"Gant Plugin","url":"http://updates.jenkins-ci.org/download/plugins/gant/1.2/gant.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Gant+Plugin"},"gatling":{"buildDate":"Dec 20, 2012","dependencies":[],"developers":[{"developerId":"slandelle@excilys.com","name":"Stephane Landelle"},{"developerId":"pdalpra","email":"pdalpra@excilys.com","name":"Pierre Dal-Pra"},{"developerId":"blemale@excilys.com>","name":"Bastien Lemale"},{"developerId":"gcoutant@excilys.com>","name":"Grégory Coutant"}],"excerpt":"This plugin integrates Gatling<\/a>, an Open Source stress tool, with Jenkins.","gav":"org.jenkins-ci.plugins:gatling:1.0.0","labels":["external","report"],"name":"gatling","releaseTimestamp":"2012-12-20T20:52:10.00Z","requiredCore":"1.494","scm":"github.com","sha1":"buE7nBbuynkF3mTldW0/l4QFtP0=","title":"Gatling Plugin","url":"http://updates.jenkins-ci.org/download/plugins/gatling/1.0.0/gatling.hpi","version":"1.0.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Gatling+Plugin"},"gcal":{"buildDate":"Nov 04, 2011","dependencies":[],"developers":[{"name":"Arnaud Lacour"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin publishes build records over to Google Calendar<\/a>","gav":"org.jvnet.hudson.plugins:gcal:0.4","labels":["external","notifier"],"name":"gcal","previousTimestamp":"2009-12-29T00:04:52.00Z","previousVersion":"0.3","releaseTimestamp":"2011-11-04T16:29:46.00Z","requiredCore":"1.392","scm":"github.com","sha1":"pV42CD4Q5IHFVcG6t7TbEmyTREE=","title":"Google Calendar Plugin","url":"http://updates.jenkins-ci.org/download/plugins/gcal/0.4/gcal.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Google+Calendar+Plugin"},"gcm-notification":{"buildDate":"Nov 20, 2012","dependencies":[{"name":"instant-messaging","optional":false,"version":"1.23"},{"name":"analysis-core","optional":true,"version":"1.0"},{"name":"jquery","optional":false,"version":"1.7.2-1"},{"name":"ci-game","optional":true,"version":"1.16"}],"developers":[{"developerId":"orrc","email":"chris@orr.me.uk","name":"Christopher Orr"}],"excerpt":"Sends build notifications to Android devices using the Google Cloud Messaging service.","gav":"org.jenkins-ci.plugins:gcm-notification:1.0","labels":["notifier","android"],"name":"gcm-notification","releaseTimestamp":"2012-11-20T06:43:02.00Z","requiredCore":"1.466","scm":"github.com","sha1":"a9ppScyuzXAzq+KfKuu4zFk1pmY=","title":"GCM Notification Plugin","url":"http://updates.jenkins-ci.org/download/plugins/gcm-notification/1.0/gcm-notification.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/GCM+Notification+Plugin"},"gerrit":{"buildDate":"Oct 20, 2010","dependencies":[{"name":"git","optional":false,"version":"1.0"}],"developers":[{"developerId":"jyrkiput","name":"Jyrki Puttonen"}],"excerpt":"This plugin integrates Gerrit Code Review<\/a> to Jenkins.","gav":"org.jvnet.hudson.plugins:gerrit:0.7","labels":["post-build","external"],"name":"gerrit","previousTimestamp":"2010-08-22T19:23:24.00Z","previousVersion":"0.6","releaseTimestamp":"2010-10-21T00:36:50.00Z","requiredCore":"1.362","scm":"github.com","sha1":"pvDZ2nwas9MxwnshQBR3JFaGYbU=","title":"Gerrit Plugin","url":"http://updates.jenkins-ci.org/download/plugins/gerrit/0.7/gerrit.hpi","version":"0.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Plugin"},"gerrit-trigger":{"buildDate":"Dec 05, 2012","dependencies":[{"name":"rebuild","optional":true,"version":"1.1"},{"name":"git","optional":false,"version":"1.1.10"}],"developers":[{"developerId":"rsandell","email":"robert.sandell@sonymobile.com","name":"Robert Sandell"},{"developerId":"twestling","email":"tomas.westling@sonymobile.com","name":"Tomas Westling"}],"excerpt":"This plugin integrates Jenkins to Gerrit<\/a> code review for triggering builds when a \"patch set\" is created. \\\\ ","gav":"com.sonyericsson.hudson.plugins.gerrit:gerrit-trigger:2.7.0","labels":["trigger"],"name":"gerrit-trigger","previousTimestamp":"2012-09-19T18:29:34.00Z","previousVersion":"2.6.0","releaseTimestamp":"2012-12-05T18:06:32.00Z","requiredCore":"1.424","scm":"github.com","sha1":"l3DEqfrC4B+nVJPlosa4v3tQI6Y=","title":"Gerrit Trigger","url":"http://updates.jenkins-ci.org/download/plugins/gerrit-trigger/2.7.0/gerrit-trigger.hpi","version":"2.7.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger"},"ghprb":{"buildDate":"Nov 14, 2012","dependencies":[{"name":"github-api","optional":false,"version":"1.28"},{"name":"github","optional":false,"version":"1.4"},{"name":"git","optional":false,"version":"1.1.17"}],"developers":[{"developerId":"janinko","email":"jbrazdil@redhat.com","name":"Honza Brázdil"}],"excerpt":"This plugin builds pull requests in github and report results.","gav":"org.jenkins-ci.plugins:ghprb:1.4","labels":["trigger"],"name":"ghprb","previousTimestamp":"2012-10-22T20:11:08.00Z","previousVersion":"1.3.2","releaseTimestamp":"2012-11-14T21:54:22.00Z","requiredCore":"1.476","scm":"github.com","sha1":"diNeo5WnPmbiE/IWlvkhJKpfv88=","title":"GitHub pull request builder plugin","url":"http://updates.jenkins-ci.org/download/plugins/ghprb/1.4/ghprb.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin"},"girls":{"buildDate":"Apr 27, 2010","dependencies":[],"developers":[{"developerId":"jessicayk","name":"Jessica Yoshie Kussuda"}],"excerpt":"Like [ChuckNorris Plugin] but with different pictures. Answering to requests and for study a little how the plugins work. ","gav":"org.jvnet.hudson.plugins:girls:1.0.0","labels":["ui"],"name":"girls","releaseTimestamp":"2010-04-28T00:30:10.00Z","requiredCore":"1.353","scm":"svn.dev.java.net","sha1":"H8+WlqVQ5rW/9hvYjhJ0k09Ljt0=","title":"Girls Plugin","url":"http://updates.jenkins-ci.org/download/plugins/girls/1.0.0/girls.hpi","version":"1.0.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Girls+Plugin"},"git":{"buildDate":"Nov 13, 2012","dependencies":[{"name":"multiple-scms","optional":true,"version":"0.2"},{"name":"parameterized-trigger","optional":true,"version":"2.4"},{"name":"token-macro","optional":true,"version":"1.5.1"}],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"ndeloof","email":"nicolas.deloof@gmail.com","name":"Nicolas De Loof"}],"excerpt":"This plugin allows use of Git<\/a> as a build SCM. Git 1.3.3 or newer is required.","gav":"org.jenkinsci.plugins:git:1.1.26","labels":["scm"],"name":"git","previousTimestamp":"2012-10-13T15:04:36.00Z","previousVersion":"1.1.25","releaseTimestamp":"2012-11-14T03:01:00.00Z","requiredCore":"1.424","scm":"github.com","sha1":"2OWVf1qWIur+xLVlqvTBy5xgT3s=","title":"Git Plugin","url":"http://updates.jenkins-ci.org/download/plugins/git/1.1.26/git.hpi","version":"1.1.26","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin"},"git-notes":{"buildDate":"Apr 23, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.10"}],"developers":[{"developerId":"bright"}],"excerpt":"Add git-notes with Jenkins build status!","gav":"org.jenkins-ci.ruby-plugins:git-notes:0.0.4","labels":[],"name":"git-notes","previousTimestamp":"2012-03-30T20:25:34.00Z","previousVersion":"0.0.2","releaseTimestamp":"2012-04-23T20:57:58.00Z","requiredCore":"1.432","scm":"github.com","sha1":"zijNvkz/zrmJOIzFraSJX2Q31zg=","title":"git-notes Plugin","url":"http://updates.jenkins-ci.org/download/plugins/git-notes/0.0.4/git-notes.hpi","version":"0.0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/git-notes+Plugin"},"git-parameter":{"buildDate":"Feb 21, 2012","dependencies":[{"name":"git","optional":false,"version":"1.1.15"}],"developers":[{"developerId":"lukanus","name":"Åukasz MiÅ‚kowski"}],"excerpt":"This plugin allows you to choose between Git tags or sha1 of your SCM repository so Git Plugin installed is required.","gav":"org.jenkins-ci.plugins:git-parameter:0.2","labels":["scm-related","parameter"],"name":"git-parameter","previousTimestamp":"2011-11-01T03:12:24.00Z","previousVersion":"0.1","releaseTimestamp":"2012-02-21T09:03:44.00Z","requiredCore":"1.451","scm":"github.com","sha1":"1nO8G+BvV28LI0b8711WocE7af4=","title":"Git Parameter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/git-parameter/0.2/git-parameter.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Git+Parameter+Plugin"},"git-server":{"buildDate":"Aug 30, 2012","dependencies":[{"name":"git","optional":false,"version":"1.1.17"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin is a library plugin for other plugins to add git server functionality to Jenkins.","gav":"org.jenkins-ci.plugins:git-server:1.1","labels":["library"],"name":"git-server","previousTimestamp":"2012-08-27T15:36:50.00Z","previousVersion":"1.0","releaseTimestamp":"2012-08-30T15:33:44.00Z","requiredCore":"1.447","scm":"github.com","sha1":"2ZgryoENLIWeTxOzsCfifvZWG9U=","title":"Git Server Plugin","url":"http://updates.jenkins-ci.org/download/plugins/git-server/1.1/git-server.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Git+Server+Plugin"},"git-userContent":{"buildDate":"Aug 29, 2012","dependencies":[{"name":"git-server","optional":false,"version":"1.0"},{"name":"git","optional":false,"version":"1.1.17"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin exposes $JENKINS_HOME/userContent as Git repository.","gav":"org.jenkins-ci.plugins:git-userContent:1.3","labels":[],"name":"git-userContent","previousTimestamp":"2012-08-29T21:43:16.00Z","previousVersion":"1.2","releaseTimestamp":"2012-08-29T21:59:54.00Z","requiredCore":"1.447","scm":"github.com","sha1":"XcqMQciZT0PQFLZK1gbGCeycv8o=","title":"Git userContent plugin","url":"http://updates.jenkins-ci.org/download/plugins/git-userContent/1.3/git-userContent.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Git+userContent+plugin"},"github":{"buildDate":"Jun 13, 2012","dependencies":[{"name":"github-api","optional":false,"version":"1.28"},{"name":"multiple-scms","optional":true,"version":"0.2"},{"name":"git","optional":false,"version":"1.1.17"}],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"juretta","name":"Stefan Saasen"}],"excerpt":"This plugin integrates Jenkins with Github<\/a> projects.","gav":"com.coravy.hudson.plugins.github:github:1.4","labels":["external"],"name":"github","previousTimestamp":"2012-05-31T18:07:50.00Z","previousVersion":"1.3","releaseTimestamp":"2012-06-13T13:06:40.00Z","requiredCore":"1.445","scm":"github.com","sha1":"JVtmW2eswoGRwYm8AdnhYx1dxRM=","title":"GitHub Plugin","url":"http://updates.jenkins-ci.org/download/plugins/github/1.4/github.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Plugin"},"github-api":{"buildDate":"Jan 07, 2013","dependencies":[],"developers":[{"developerId":"Johno Crawford"}],"excerpt":"This plugin is a library plugin used by other GitHub related plugins to share the same libraries. This plugin does not have any user visible feature by itself. There's no need to install this plugin manually, although you want to keep it up to date.","gav":"org.jenkins-ci.plugins:github-api:1.34","labels":["library"],"name":"github-api","previousTimestamp":"2012-09-13T20:43:54.00Z","previousVersion":"1.33","releaseTimestamp":"2013-01-07T19:27:32.00Z","requiredCore":"1.409","scm":"github.com","sha1":"v5PJxebX1xsuM19YpU5ywumRkC0=","title":"GitHub API Plugin","url":"http://updates.jenkins-ci.org/download/plugins/github-api/1.34/github-api.hpi","version":"1.34","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/GitHub+API+Plugin"},"github-oauth":{"buildDate":"Jun 13, 2012","compatibleSinceVersion":"0.3","dependencies":[{"name":"github-api","optional":false,"version":"1.28"}],"developers":[{"developerId":"mocleiri","name":"Michael O'Cleirigh"}],"excerpt":"Authentication of users is delegated to Github using the OAuth protocol.  Authorization is based on the characteristics of the users Github user data that is retrieved through the Github API (effectively as the authenticated user). ","gav":"org.jenkins-ci.plugins:github-oauth:0.12","labels":["user"],"name":"github-oauth","previousTimestamp":"2012-03-22T01:53:40.00Z","previousVersion":"0.11","releaseTimestamp":"2012-06-13T13:00:12.00Z","requiredCore":"1.431","scm":"github.com","sha1":"cAOjdw5d3oQVPo4bXkj9QAo1EiE=","title":"Github OAuth Plugin","url":"http://updates.jenkins-ci.org/download/plugins/github-oauth/0.12/github-oauth.hpi","version":"0.12","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Github+OAuth+Plugin"},"github-sqs-plugin":{"buildDate":"Nov 23, 2012","dependencies":[{"name":"git","optional":false,"version":"1.1.17"},{"name":"github-api","optional":false,"version":"1.28"},{"name":"multiple-scms","optional":true,"version":"0.2"},{"name":"github","optional":false,"version":"1.3"}],"developers":[{"developerId":"aaronwalker","name":"Aaron Walker"}],"excerpt":"This plugin integrates Jenkins with Github<\/a> projects via Amazon's Simple Queue Service<\/a>","gav":"com.base2services.jenkins:github-sqs-plugin:1.3","labels":["trigger","external"],"name":"github-sqs-plugin","previousTimestamp":"2012-11-22T19:45:54.00Z","previousVersion":"1.2.1","releaseTimestamp":"2012-11-23T17:43:00.00Z","requiredCore":"1.451","scm":"github.com","sha1":"5AOp3W2vlnY3cYJo/3oaaYUkAuM=","title":"GitHub SQS Plugin","url":"http://updates.jenkins-ci.org/download/plugins/github-sqs-plugin/1.3/github-sqs-plugin.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/GitHub+SQS+Plugin"},"gitlab-hook":{"buildDate":"Dec 11, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.10"},{"name":"git","optional":false,"version":"1.1.26"}],"developers":[{"developerId":"elvanja"}],"excerpt":"Enables Gitlab web hooks to be used to trigger SMC polling on Gitlab projects","gav":"org.jenkins-ci.ruby-plugins:gitlab-hook:0.2.5","labels":["scm-related"],"name":"gitlab-hook","previousTimestamp":"2012-12-08T03:21:46.00Z","previousVersion":"0.2.4","releaseTimestamp":"2012-12-11T20:49:36.00Z","requiredCore":"1.432","scm":"github.com","sha1":"YzSXkyswUSlx+MdmwxTl+inZn5c=","title":"Gitlab Hook Plugin","url":"http://updates.jenkins-ci.org/download/plugins/gitlab-hook/0.2.5/gitlab-hook.hpi","version":"0.2.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Gitlab+Hook+Plugin"},"gitorious":{"buildDate":"Oct 13, 2012","dependencies":[{"name":"git","optional":false,"version":"1.1.24"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"Integration Jenkins with Gitorious<\/a>","gav":"org.jenkins-ci.plugins:gitorious:1.0","labels":[],"name":"gitorious","releaseTimestamp":"2012-10-13T14:59:24.00Z","requiredCore":"1.466","scm":"github.com","sha1":"9aCHpCZviIdJwh7YuMFnEiSNtF8=","title":"Gitorious Plugin","url":"http://updates.jenkins-ci.org/download/plugins/gitorious/1.0/gitorious.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Gitorious+Plugin"},"global-build-stats":{"buildDate":"Apr 05, 2012","dependencies":[],"developers":[{"developerId":"fcamblor","email":"fcamblor+wikihudson@gmail.com","name":"Frederic Camblor"}],"excerpt":"Global build stats plugin will allow to gather and display global build result statistics. It is a useful tool allowing to display global hudson build trend over time.","gav":"org.jenkins-ci.plugins:global-build-stats:1.3","labels":["report"],"name":"global-build-stats","previousTimestamp":"2011-08-25T07:46:46.00Z","previousVersion":"1.2","releaseTimestamp":"2012-04-06T01:34:38.00Z","requiredCore":"1.424","scm":"github.com","sha1":"0vZtHB11OPpOu10xcfWXWnvAC3s=","title":"Global Build Stats Plugin","url":"http://updates.jenkins-ci.org/download/plugins/global-build-stats/1.3/global-build-stats.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Global+Build+Stats+Plugin"},"global-variable-string-parameter":{"buildDate":"Nov 02, 2012","dependencies":[],"developers":[{"developerId":"pmaccamp","email":"pmaccamp@sbcglobal.net","name":"Patrick McKeown"},{"developerId":"marsbar","name":"Mario Vuong"}],"excerpt":"Provides a parameter with support for global node properties via $VARIABLE or $\\{VARIABLE} ","gav":"org.jenkins-ci.plugins:global-variable-string-parameter:1.1","labels":["parameter"],"name":"global-variable-string-parameter","releaseTimestamp":"2012-11-02T05:21:38.00Z","requiredCore":"1.424","scm":"github.com","sha1":"Pp8d9F1YOZv0qw/BUSsUCMj9Ba4=","title":"Global Variable String Parameter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/global-variable-string-parameter/1.1/global-variable-string-parameter.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Global+Variable+String+Parameter+Plugin"},"gnat":{"buildDate":"Oct 11, 2012","dependencies":[{"name":"xunit","optional":false,"version":"1.39"}],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to integrate Gnat<\/a> features for ADA languages in Jenkins.","gav":"org.jenkins-ci.plugins:gnat:0.14","labels":["report"],"name":"gnat","previousTimestamp":"2012-02-15T04:34:40.00Z","previousVersion":"0.13","releaseTimestamp":"2012-10-11T22:45:40.00Z","requiredCore":"1.410","scm":"github.com","sha1":"lSvvdGIK13pLiOLEkyjEOug+YUE=","title":"Gnat Plugin","url":"http://updates.jenkins-ci.org/download/plugins/gnat/0.14/gnat.hpi","version":"0.14","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Gnat+Plugin"},"googleanalytics":{"buildDate":"Nov 23, 2011","dependencies":[],"developers":[{"developerId":"erik"}],"excerpt":"This plugin decorates all web pages with the Google Analytics tracking script","gav":"org.jvnet.hudson.plugins:googleanalytics:1.3","labels":["page-decorator"],"name":"googleanalytics","previousTimestamp":"2009-08-25T04:44:02.00Z","previousVersion":"1.2","releaseTimestamp":"2011-11-23T23:16:40.00Z","requiredCore":"1.323","scm":"github.com","sha1":"K8jV5dPn/543wX4bX0OJTGikJ3Y=","title":"Google Analytics Plugin","url":"http://updates.jenkins-ci.org/download/plugins/googleanalytics/1.3/googleanalytics.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Google+Analytics+Plugin"},"googlecode":{"buildDate":"Apr 09, 2012","dependencies":[{"name":"subversion","optional":false,"version":"1.36"}],"developers":[{"developerId":"redsolo","email":"eramfelt@gmail.com","name":"Erik Ramfelt"}],"excerpt":"This plugin creates links from Jenkins projects to Google Code<\/a> instances.","gav":"org.jenkins-ci.plugins:googlecode:1.7","labels":["external"],"name":"googlecode","previousTimestamp":"2011-03-04T23:06:06.00Z","previousVersion":"1.6","releaseTimestamp":"2012-04-09T13:28:24.00Z","requiredCore":"1.424","scm":"github.com","sha1":"1gYG/nA/fgde/jq/B3FSOY14NOk=","title":"Google Code Plugin","url":"http://updates.jenkins-ci.org/download/plugins/googlecode/1.7/googlecode.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Google+Code+Plugin"},"gradle":{"buildDate":"Nov 26, 2012","dependencies":[],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to invoke Gradle<\/a> build script as the main build step.","gav":"org.jenkins-ci.plugins:gradle:1.21","labels":["builder"],"name":"gradle","previousTimestamp":"2012-09-20T03:54:44.00Z","previousVersion":"1.20","releaseTimestamp":"2012-11-27T03:16:28.00Z","requiredCore":"1.409","scm":"github.com","sha1":"roa0zU6S5WZnHqAB7h7GVonwZTk=","title":"Gradle Plugin","url":"http://updates.jenkins-ci.org/download/plugins/gradle/1.21/gradle.hpi","version":"1.21","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Gradle+Plugin"},"grails":{"buildDate":"Jul 18, 2012","dependencies":[],"developers":[{"developerId":"jeffg2one","name":"Jeff Brown"},{"developerId":"kiy0taka","name":"Kiyotaka Oku"}],"excerpt":"This plugin allows Jenkins to invoke Grails tasks as build steps.","gav":"org.jvnet.hudson.plugins:grails:1.6.3","labels":["builder"],"name":"grails","previousTimestamp":"2012-05-18T18:47:30.00Z","previousVersion":"1.6.2","releaseTimestamp":"2012-07-18T18:10:56.00Z","requiredCore":"1.425","scm":"github.com","sha1":"CO/Kl9a6Zpu+9uC25gUOqL3Omds=","title":"Grails Plugin","url":"http://updates.jenkins-ci.org/download/plugins/grails/1.6.3/grails.hpi","version":"1.6.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Grails+Plugin"},"gravatar":{"buildDate":"Nov 18, 2011","dependencies":[],"developers":[{"developerId":"redsolo","email":"eramfelt@gmail.com","name":"Erik Ramfelt"}],"excerpt":"This plugins shows Gravatar<\/a> avatars instead of the generic user image.","gav":"org.jenkins-ci.plugins:gravatar:1.1","labels":["user","ui"],"name":"gravatar","releaseTimestamp":"2011-11-18T11:38:42.00Z","requiredCore":"1.434","scm":"github.com","sha1":"hC/9amrpcbltZRJHRGqqXVsWAUA=","title":"Gravatar plugin","url":"http://updates.jenkins-ci.org/download/plugins/gravatar/1.1/gravatar.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Gravatar+plugin"},"greenballs":{"buildDate":"May 07, 2012","dependencies":[],"developers":[{"developerId":"asgeirn","email":"asgeir@twingine.no","name":"Asgeir Storesund Nilsen"}],"excerpt":"Changes Hudson to use green balls instead of blue for successful builds","gav":"org.jvnet.hudson.plugins:greenballs:1.12","labels":["ui"],"name":"greenballs","previousTimestamp":"2011-09-10T18:51:30.00Z","previousVersion":"1.11","releaseTimestamp":"2012-05-07T21:29:28.00Z","requiredCore":"1.392","scm":"github.com","sha1":"MPqqs7ZYTcm1F5pz9wMOayfh8G0=","title":"Green Balls","url":"http://updates.jenkins-ci.org/download/plugins/greenballs/1.12/greenballs.hpi","version":"1.12","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Green+Balls"},"grinder":{"buildDate":"Jan 15, 2010","dependencies":[],"developers":[{"developerId":"BatemanSW"}],"excerpt":"This plugin reads output result files from Grinder<\/a> performance tests, and will generate reports showing test results for every build and trend reports showing performance results across builds.","gav":"org.jvnet.hudson.plugins:grinder:1.4","labels":["report"],"name":"grinder","previousTimestamp":"2009-12-30T04:26:38.00Z","previousVersion":"1.3","releaseTimestamp":"2010-01-15T16:45:28.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"XlTSwxFBO6UfqMlF5eGocJ29h6g=","title":"Grinder Plugin","url":"http://updates.jenkins-ci.org/download/plugins/grinder/1.4/grinder.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Grinder+Plugin"},"groovy":{"buildDate":"Mar 08, 2012","dependencies":[{"name":"token-macro","optional":true,"version":"1.4"}],"developers":[{"developerId":"vjuranek","name":"Vojtech Juranek"}],"excerpt":"This plugin adds the ability to directly execute Groovy code.","gav":"org.jenkins-ci.plugins:groovy:1.12","labels":["builder","groovy-related"],"name":"groovy","previousTimestamp":"2012-02-27T02:58:04.00Z","previousVersion":"1.11","releaseTimestamp":"2012-03-08T21:48:58.00Z","requiredCore":"1.409","scm":"github.com","sha1":"rO0nG2xE5RPG2/eDPzYcbX8tC04=","title":"Groovy plugin","url":"http://updates.jenkins-ci.org/download/plugins/groovy/1.12/groovy.hpi","version":"1.12","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin"},"groovy-postbuild":{"buildDate":"Aug 22, 2012","dependencies":[],"developers":[{"developerId":"wolfs","name":"Stefan Wolf"},{"developerId":"beryx","name":"Serban Iordache"}],"excerpt":"This plugin executes a groovy script in the Jenkins JVM. Typically, the script checks some conditions and changes accordingly the build result, puts badges next to the build in the build history and/or displays information on the build summary page.","gav":"org.jvnet.hudson.plugins:groovy-postbuild:1.8","labels":["post-build","groovy-related"],"name":"groovy-postbuild","previousTimestamp":"2012-05-02T19:56:08.00Z","previousVersion":"1.7","releaseTimestamp":"2012-08-22T16:03:14.00Z","requiredCore":"1.466","scm":"github.com","sha1":"uWryTtC4mZPwLfmZ8JjHHT1tZDo=","title":"Groovy Postbuild Plugin","url":"http://updates.jenkins-ci.org/download/plugins/groovy-postbuild/1.8/groovy-postbuild.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin"},"groovy-remote":{"buildDate":"Sep 12, 2012","dependencies":[],"developers":[],"excerpt":"This plugin provides Groovy Remote Control<\/a>'s receiver, and allows to control external application from Jenkins.","gav":"org.jenkinsci.plugins:groovy-remote:0.2","labels":["builder","groovy-related"],"name":"groovy-remote","previousTimestamp":"2012-08-09T17:27:08.00Z","previousVersion":"0.1","releaseTimestamp":"2012-09-13T00:30:50.00Z","requiredCore":"1.475","scm":"github.com","sha1":"0rhRQWmdaOqU8FN2UZCM2htpB/M=","title":"Groovy Remote Control Plugin","url":"http://updates.jenkins-ci.org/download/plugins/groovy-remote/0.2/groovy-remote.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Remote+Control+Plugin"},"groovyaxis":{"buildDate":"Jan 04, 2013","dependencies":[],"developers":[{"developerId":"emanuelez","email":"emanuelez@gmail.com","name":"Emanuele Zattin"}],"excerpt":"This plugin allows to have scriptable axes for Matrix Jobs.","gav":"org.jenkins-ci.plugins:groovyaxis:0.3","labels":["misc"],"name":"groovyaxis","previousTimestamp":"2011-06-08T03:58:30.00Z","previousVersion":"0.2","releaseTimestamp":"2013-01-04T15:59:46.00Z","requiredCore":"1.472","scm":"github.com","sha1":"rhp30tEZ3HrLU/OHNJmuDwfMgB4=","title":"GroovyAxis","url":"http://updates.jenkins-ci.org/download/plugins/groovyaxis/0.3/groovyaxis.hpi","version":"0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/GroovyAxis"},"growl":{"buildDate":"Jun 12, 2011","dependencies":[],"developers":[{"developerId":"sbower","email":"sbower@advws.net","name":"Shawn Bower"}],"excerpt":"Sends Growl<\/a> notification.","gav":"org.jenkins-ci.plugins:growl:1.1","labels":["notifier"],"name":"growl","previousTimestamp":"2010-10-09T04:38:06.00Z","previousVersion":"1.0","releaseTimestamp":"2011-06-13T01:15:20.00Z","requiredCore":"1.414","scm":"github.com","sha1":"NqahIAJnefwd9tvZ/T9mREAnh8E=","title":"Growl Plugin","url":"http://updates.jenkins-ci.org/download/plugins/growl/1.1/growl.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Growl+Plugin"},"hadoop":{"buildDate":"Jun 29, 2011","dependencies":[],"developers":[{"developerId":"olamy"}],"excerpt":"This plugin makes Hudson cluster act as a Hadoop cluster without any configuration.","gav":"org.jenkins-ci.plugins:hadoop:1.4","labels":["cluster"],"name":"hadoop","previousTimestamp":"2009-09-02T18:44:44.00Z","previousVersion":"1.3","releaseTimestamp":"2011-06-30T03:59:20.00Z","requiredCore":"1.403","scm":"github.com","sha1":"S4P+I7mwmD4wGaps43neIfH/fJg=","title":"Hadoop Plugin","url":"http://updates.jenkins-ci.org/download/plugins/hadoop/1.4/hadoop.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Hadoop+Plugin"},"harvest":{"buildDate":"Aug 22, 2011","dependencies":[],"developers":[{"developerId":"gliptak","name":"Gábor Lipták"}],"excerpt":"This plugin allows you to use CA Harvest<\/a> as a SCM.","gav":"org.jenkins-ci.plugins:harvest:0.5","labels":["scm"],"name":"harvest","previousTimestamp":"2011-05-30T13:16:32.00Z","previousVersion":"0.4.2","releaseTimestamp":"2011-08-22T22:20:54.00Z","requiredCore":"1.398","scm":"github.com","sha1":"EiNjfGkzWp4Jue9c3F9ZV2cJrRY=","title":"Harvest Plugin","url":"http://updates.jenkins-ci.org/download/plugins/harvest/0.5/harvest.hpi","version":"0.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Harvest+Plugin"},"heavy-job":{"buildDate":"Sep 26, 2010","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin allows you to define \"weight\" on each job, and making each job consume that many executors (instead of just one.)","gav":"org.jvnet.hudson.plugins:heavy-job:1.0","labels":["misc"],"name":"heavy-job","releaseTimestamp":"2010-09-26T15:51:08.00Z","requiredCore":"1.377","scm":"svn.dev.java.net","sha1":"sDBzy/rS8uh6D7lIT1TERQT9ie4=","title":"Heavy Job Plugin","url":"http://updates.jenkins-ci.org/download/plugins/heavy-job/1.0/heavy-job.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Heavy+Job+Plugin"},"heroku-jenkins-plugin":{"buildDate":"Oct 28, 2012","dependencies":[],"developers":[{"developerId":"ryanbrainard","name":"Ryan Brainard"}],"excerpt":"Build tasks for interacting with Heroku<\/a> including deployment, scaling dynos, running processes, and more. ","gav":"com.heroku:heroku-jenkins-plugin:0.7.1-BETA","labels":["post-build","external","upload"],"name":"heroku-jenkins-plugin","previousTimestamp":"2012-08-24T03:09:00.00Z","previousVersion":"0.7-BETA","releaseTimestamp":"2012-10-28T22:21:44.00Z","requiredCore":"1.398","scm":"github.com","sha1":"VTe4ezg2aZh2BzNxj0S+s3r2UrQ=","title":"Heroku Plugin","url":"http://updates.jenkins-ci.org/download/plugins/heroku-jenkins-plugin/0.7.1-BETA/heroku-jenkins-plugin.hpi","version":"0.7.1-BETA","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Heroku+Plugin"},"hgca":{"buildDate":"May 06, 2010","dependencies":[],"developers":[{"developerId":"abayer","email":"andrew.bayer@gmail.com","name":"Andrew Bayer"}],"excerpt":"This plugin allows the administrator to specify pairs of patterns and URLs, both globally and on a per-job level, to use for marking up changelog text.","gav":"org.jvnet.hudson.plugins:hgca:1.3","labels":["external"],"name":"hgca","previousTimestamp":"2010-04-05T19:12:36.00Z","previousVersion":"1.2","releaseTimestamp":"2010-05-06T19:33:40.00Z","requiredCore":"1.324","scm":"svn.dev.java.net","sha1":"ph8hqopM+L/rfNC4/tJXAfEfNzI=","title":"HGCA Plugin","url":"http://updates.jenkins-ci.org/download/plugins/hgca/1.3/hgca.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/HGCA+Plugin"},"hipchat":{"buildDate":"Mar 11, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.319"}],"developers":[{"developerId":"dholst"}],"excerpt":"This plugin allows your team to setup build notifications to be sent to HipChat rooms.","gav":"org.jvnet.hudson.plugins:hipchat:0.1.4","labels":["notifier"],"name":"hipchat","previousTimestamp":"2012-02-27T19:31:34.00Z","previousVersion":"0.1.3","releaseTimestamp":"2012-03-11T23:33:50.00Z","requiredCore":"1.319","scm":"github.com","sha1":"VCfHKpKml+ZITF/MhAO70cq1x/Y=","title":"HipChat Plugin","url":"http://updates.jenkins-ci.org/download/plugins/hipchat/0.1.4/hipchat.hpi","version":"0.1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/HipChat+Plugin"},"hipchat-plugin":{"buildDate":"Jan 21, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.319"}],"developers":[{"developerId":"dholst"}],"excerpt":"A Build status publisher that notifies channels on a HipChat server","gav":"com.github.jlewallen.jenkins.plugins:hipchat-plugin:0.1.0","name":"hipchat-plugin","releaseTimestamp":"2012-01-21T17:44:38.00Z","requiredCore":"1.319","scm":"github.com","sha1":"peU7l1dGVfNNMJKKXfOhb8mz7a0=","title":"Jenkins HipChat Plugin","url":"http://updates.jenkins-ci.org/download/plugins/hipchat-plugin/0.1.0/hipchat-plugin.hpi","version":"0.1.0"},"hockeyapp":{"buildDate":"Jan 07, 2013","dependencies":[],"developers":[{"developerId":"ohoeltke","email":"ohoeltke@gmail.com","name":"Oliver Hoeltke"}],"excerpt":"Lets you publish your .ipa and .dsym files to  www.hockeyapp.net<\/a> ","gav":"org.jenkins-ci.plugins:hockeyapp:1.0.3","labels":["upload","ios"],"name":"hockeyapp","previousTimestamp":"2012-12-05T14:41:46.00Z","previousVersion":"1.0.2","releaseTimestamp":"2013-01-07T19:25:32.00Z","requiredCore":"1.398","scm":"github.com","sha1":"KTj+TZdnvn6R3nUUaL1RVI2oOQg=","title":"Hockeyapp Plugin","url":"http://updates.jenkins-ci.org/download/plugins/hockeyapp/1.0.3/hockeyapp.hpi","version":"1.0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Hockeyapp+Plugin"},"hp-application-automation-tools-plugin":{"buildDate":"Dec 02, 2012","dependencies":[],"developers":[{"developerId":"ofirshaked","email":"ofir.shaked@hp.com","name":"Ofir Shaked"},{"developerId":"amitb","email":"amit.bezalel@hp.com","name":"Amit Bezalel"},{"email":"liron.tzabari@hp.com","name":"Liron Tzabari"}],"excerpt":"This plugin allows Jenkins to trigger HP tests such as:Test Sets on Application Lifecycle Management, tests saved on the file system from Unified Functional Testing, QuickTest Professional, and Service Test.","gav":"org.jenkins-ci.plugins:hp-application-automation-tools-plugin:1.0.2","labels":[],"name":"hp-application-automation-tools-plugin","previousTimestamp":"2012-11-26T15:51:46.00Z","previousVersion":"1.0","releaseTimestamp":"2012-12-02T19:31:42.00Z","requiredCore":"1.466","scm":"github.com","sha1":"Tgv0Q8zu+mhokBNb+mWNdoZxk4g=","title":"HP Application Automation Tools","url":"http://updates.jenkins-ci.org/download/plugins/hp-application-automation-tools-plugin/1.0.2/hp-application-automation-tools-plugin.hpi","version":"1.0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/HP+Application+Automation+Tools"},"hsts-filter-plugin":{"buildDate":"Sep 26, 2011","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provides a very simple filter which adds a response header indicating that HTTP Strict Transport Security<\/a> (HSTS) response headers should be sent.","gav":"org.jenkins-ci.plugins:hsts-filter-plugin:1.0","labels":["page-decorator","misc"],"name":"hsts-filter-plugin","releaseTimestamp":"2011-09-27T02:05:36.00Z","requiredCore":"1.429","scm":"github.com","sha1":"YTtcCuLLVggnk+/s+6zW/7OpxOA=","title":"HSTS Filter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/hsts-filter-plugin/1.0/hsts-filter-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/HSTS+Filter+Plugin"},"html-audio-notifier":{"buildDate":"Nov 25, 2011","dependencies":[],"developers":[{"developerId":"larshvile","email":"lars@hulte.net","name":"Lars Hvile"}],"excerpt":"Plays audio-notifications directly in the browser when builds fail","gav":"jenkins.plugins.htmlaudio:html-audio-notifier:0.4","labels":["notifier"],"name":"html-audio-notifier","previousTimestamp":"2011-10-15T18:08:02.00Z","previousVersion":"0.3","releaseTimestamp":"2011-11-26T00:52:22.00Z","requiredCore":"1.425","scm":"github.com","sha1":"1lWpujRmmhKwomBKQAM3XpBacK4=","title":"Html Audio Notifier","url":"http://updates.jenkins-ci.org/download/plugins/html-audio-notifier/0.4/html-audio-notifier.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Html+Audio+Notifier"},"html5-notifier-plugin":{"buildDate":"Apr 06, 2012","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provides W3C Web Notifications<\/a> support for builds.","gav":"org.jenkins-ci.plugins:html5-notifier-plugin:1.2","labels":["page-decorator","notifier"],"name":"html5-notifier-plugin","previousTimestamp":"2012-02-02T20:06:56.00Z","previousVersion":"1.1","releaseTimestamp":"2012-04-06T12:22:36.00Z","requiredCore":"1.455","scm":"github.com","sha1":"QQU+7Yu9gTsM1+tlZ1G3UCHemAE=","title":"HTML5 Notifier Plugin","url":"http://updates.jenkins-ci.org/download/plugins/html5-notifier-plugin/1.2/html5-notifier-plugin.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/HTML5+Notifier+Plugin"},"htmlpublisher":{"buildDate":"Dec 10, 2012","dependencies":[],"developers":[{"developerId":"mcrooney","name":"Michael Rooney"}],"excerpt":"","gav":"org.jenkins-ci.plugins:htmlpublisher:1.2","labels":["upload"],"name":"htmlpublisher","previousTimestamp":"2012-12-07T17:46:24.00Z","previousVersion":"1.1","releaseTimestamp":"2012-12-10T18:45:58.00Z","requiredCore":"1.398","scm":"github.com","sha1":"vRkwYavnDrH0p6Mn+eNcg/GKp9c=","title":"HTML Publisher Plugin","url":"http://updates.jenkins-ci.org/download/plugins/htmlpublisher/1.2/htmlpublisher.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/HTML+Publisher+Plugin"},"http_request":{"buildDate":"Dec 09, 2012","dependencies":[],"developers":[{"developerId":"janario","email":"janarioliver@gmail.com","name":"Janario Oliveira"}],"excerpt":"","gav":"org.jenkins-ci.plugins:http_request:1.7","labels":["builder"],"name":"http_request","previousTimestamp":"2012-11-26T01:05:16.00Z","previousVersion":"1.6","releaseTimestamp":"2012-12-10T02:06:16.00Z","requiredCore":"1.488","scm":"github.com","sha1":"Myo6m5JHMHQYFuDkKuHFVrHCFb8=","title":"HTTP Request Plugin","url":"http://updates.jenkins-ci.org/download/plugins/http_request/1.7/http_request.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/HTTP+Request+Plugin"},"hudson-logaction-plugin":{"buildDate":"Feb 05, 2010","dependencies":[],"developers":[{"developerId":"tspengler","name":"Thomas Spengler"}],"excerpt":"This plugin start action on pattern in the Joboutput, but this is centralized configured","gav":"de.fspengler.hudson.plugin:hudson-logaction-plugin:1.1","name":"hudson-logaction-plugin","previousTimestamp":"2009-04-02T16:56:30.00Z","previousVersion":"1.0","releaseTimestamp":"2010-02-05T15:28:54.00Z","requiredCore":"1.318","scm":"svn.dev.java.net","sha1":"JaRElwvfjqRso55tt+qd2MuuttM=","title":"Hudson Centralized Job(Re)Action","url":"http://updates.jenkins-ci.org/download/plugins/hudson-logaction-plugin/1.1/hudson-logaction-plugin.hpi","version":"1.1"},"hudson-pview-plugin":{"buildDate":"Jan 03, 2011","dependencies":[],"developers":[{"developerId":"tspengler","email":"tom@fspengler.de","name":"Thomas Spengler"}],"excerpt":"This plugin gives every user, also non administrative one the possibility to create his own view and to use a pseudo tree-view where every user can administer it's own delimiter which is used as path delimiter","gav":"de.fspengler.hudson.pview:hudson-pview-plugin:1.8","labels":["user","ui"],"name":"hudson-pview-plugin","previousTimestamp":"2010-01-13T04:51:14.00Z","previousVersion":"1.7","releaseTimestamp":"2011-01-03T21:23:04.00Z","requiredCore":"1.357","scm":"svn.java.net","sha1":"VKJ1X1bfi45x6w9N5rZl3kIw/Ko=","title":"Hudson Personal View","url":"http://updates.jenkins-ci.org/download/plugins/hudson-pview-plugin/1.8/hudson-pview-plugin.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Hudson+Personal+View"},"hudson-wsclean-plugin":{"buildDate":"Jan 06, 2010","dependencies":[],"developers":[{"developerId":"tspengler","name":"Thomas Spengler"}],"excerpt":"This plugin allows you to cleanup workspaces on unused slaves in the same slavegroup.","gav":"de.jamba.hudson.plugin.wsclean:hudson-wsclean-plugin:1.0.4","labels":["buildwrapper"],"name":"hudson-wsclean-plugin","previousTimestamp":"2009-10-12T19:33:54.00Z","previousVersion":"1.0.3","releaseTimestamp":"2010-01-07T02:51:32.00Z","requiredCore":"1.328","scm":"svn.dev.java.net","sha1":"4GulizdnzLipjuwRF50l+8MC8yU=","title":"Hudson Distributed Workspace Clean plugin","url":"http://updates.jenkins-ci.org/download/plugins/hudson-wsclean-plugin/1.0.4/hudson-wsclean-plugin.hpi","version":"1.0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Hudson+Distributed+Workspace+Clean+plugin"},"hudsontrayapp":{"buildDate":"Jan 10, 2010","dependencies":[],"developers":[{"developerId":"davyboyhayes","name":"David Hayes"}],"excerpt":"With this plugin, you can monitor your Hudson server from the comfort of you desktop tray, and even run programs when things change (or not).","gav":"org.jvnet.hudson.plugins.hudsontrayapp:hudsontrayapp:0.7.3","labels":["external"],"name":"hudsontrayapp","releaseTimestamp":"2010-01-10T15:15:24.00Z","requiredCore":"1.318","scm":"svn.dev.java.net","sha1":"kSJAtcXBsmDD4AxWuEboitcYCzE=","title":"Hudson Tray Application","url":"http://updates.jenkins-ci.org/download/plugins/hudsontrayapp/0.7.3/hudsontrayapp.hpi","version":"0.7.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Hudson+Tray+Application"},"ikachan":{"buildDate":"Jun 04, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.10"},{"name":"git","optional":false,"version":"1.1.11"}],"developers":[{"developerId":"usr0600239"}],"excerpt":"Publisher for an IRC bot named Ikachan.","gav":"org.jenkins-ci.ruby-plugins:ikachan:0.0.1","name":"ikachan","releaseTimestamp":"2012-06-05T01:55:10.00Z","requiredCore":"1.432","scm":"github.com","sha1":"DoVDQcH5vaSvHtnTS2GA7AQNydA=","title":"Ikachan Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ikachan/0.0.1/ikachan.hpi","version":"0.0.1"},"image-gallery":{"buildDate":"Sep 21, 2012","dependencies":[],"developers":[{"developerId":"kinow","email":"brunodepaulak@yahoo.com.br","name":"Bruno P. Kinoshita"}],"excerpt":"This plug-in reads a job workspace and collects images to produce an image gallery using colorbox<\/a> lightbox Javascript library. ","gav":"com.tupilabs.image_gallery:image-gallery:1.0","labels":["report"],"name":"image-gallery","previousTimestamp":"2012-08-08T01:29:48.00Z","previousVersion":"0.1","releaseTimestamp":"2012-09-21T21:43:12.00Z","requiredCore":"1.424","scm":"github.com","sha1":"djwP4FFX04fsopZIyMGYPhuSytw=","title":"Image Gallery Plugin","url":"http://updates.jenkins-ci.org/download/plugins/image-gallery/1.0/image-gallery.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Image+Gallery+Plugin"},"instant-messaging":{"buildDate":"Jan 01, 2013","dependencies":[{"name":"analysis-core","optional":true,"version":"1.0"},{"name":"ci-game","optional":true,"version":"1.16"}],"developers":[{"developerId":"kutzi","email":"kutzi@gmx.de","name":"Christoph Kutzinski"},{"developerId":"kohsuke","email":"kk@kohsuke.org","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin provides generic support for build notifications and a 'bot' via instant messaging protocols.","gav":"org.jvnet.hudson.plugins:instant-messaging:1.25","labels":["notifier"],"name":"instant-messaging","previousTimestamp":"2012-12-15T16:11:44.00Z","previousVersion":"1.24","releaseTimestamp":"2013-01-02T01:39:40.00Z","requiredCore":"1.466","scm":"github.com","sha1":"xj/wpeIY+tsOvZBgTQZhmM/3B8E=","title":"Instant Messaging Plugin","url":"http://updates.jenkins-ci.org/download/plugins/instant-messaging/1.25/instant-messaging.hpi","version":"1.25","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Instant+Messaging+Plugin"},"integrity-plugin":{"buildDate":"Sep 11, 2012","dependencies":[],"developers":[{"developerId":"cdsouza","email":"cdsouza@ptc.com","name":"Cletus D'Souza"}],"excerpt":"This Jenkins plugin provides SCM integration capabilities to PTC Integrity<\/a> for Configuration Management<\/a>. ","gav":"org.jenkins-ci.plugins:integrity-plugin:1.16","labels":["scm"],"name":"integrity-plugin","previousTimestamp":"2012-08-11T03:07:56.00Z","previousVersion":"1.15","releaseTimestamp":"2012-09-11T21:52:54.00Z","requiredCore":"1.481","scm":"github.com","sha1":"eLeLiBuBiFPjXiD5BMRBx4+E4Ok=","title":"PTC Integrity Plugin","url":"http://updates.jenkins-ci.org/download/plugins/integrity-plugin/1.16/integrity-plugin.hpi","version":"1.16","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PTC+Integrity+Plugin"},"ion-deployer-plugin":{"buildDate":"Feb 20, 2012","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.451"}],"developers":[{"developerId":"jeluard","name":"Julien Eluard"}],"excerpt":"Deploy your mule application<\/a> on iON<\/a> at the end of your build. ","gav":"org.jenkins-ci.plugins:ion-deployer-plugin:0.9","labels":["maven","external","post-build"],"name":"ion-deployer-plugin","releaseTimestamp":"2012-02-20T23:41:36.00Z","requiredCore":"1.451","scm":"github.com","sha1":"DTehlzpE1so/n4FKjL17mweTDsc=","title":"iON Deployer Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ion-deployer-plugin/0.9/ion-deployer-plugin.hpi","version":"0.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/iON+Deployer+Plugin"},"ios-device-connector":{"buildDate":"Oct 10, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin lists up all the iOS devices connected to the master and all the Jenkins slaves, and provide operations to them.","gav":"org.jenkins-ci.plugins:ios-device-connector:1.2","labels":["builder","ios"],"name":"ios-device-connector","previousTimestamp":"2012-10-08T17:04:26.00Z","previousVersion":"1.1","releaseTimestamp":"2012-10-10T14:27:30.00Z","requiredCore":"1.466","scm":"github.com","sha1":"B2z2wTyA8l5uwz9HqD+xhG9Hjns=","title":"iOS Device Connector Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ios-device-connector/1.2/ios-device-connector.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/iOS+Device+Connector+Plugin"},"iphoneview":{"buildDate":"Mar 27, 2010","dependencies":[],"developers":[{"developerId":"sogabe","email":"sogabe@dev.java.net","name":"Seiji Sogabe"}],"excerpt":"This plugin allows you to view the status of your jobs via iPhone or iPod touch. ","gav":"org.jvnet.hudson.plugins:iphoneview:0.2","labels":["ui"],"name":"iphoneview","previousTimestamp":"2010-03-21T17:45:12.00Z","previousVersion":"0.1","releaseTimestamp":"2010-03-27T23:42:02.00Z","requiredCore":"1.352","scm":"svn.dev.java.net","sha1":"nh82LEmYxlfBmqxOPukiN+QekNM=","title":"iPhoneView Plugin","url":"http://updates.jenkins-ci.org/download/plugins/iphoneview/0.2/iphoneview.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/iPhoneView+Plugin"},"ipmessenger-plugin":{"buildDate":"May 12, 2012","dependencies":[{"name":"token-macro","optional":true,"version":"1.5.1"}],"developers":[{"developerId":"nabedge","name":"nabedge"}],"excerpt":"Sends build notifications to IPMessenger client. See http://ipmsg.org/ about IPMessenger","gav":"org.jenkins-ci.plugins:ipmessenger-plugin:1.2","labels":["notifier"],"name":"ipmessenger-plugin","previousTimestamp":"2012-05-08T03:19:54.00Z","previousVersion":"1.1","releaseTimestamp":"2012-05-13T03:59:24.00Z","requiredCore":"1.424","scm":"github.com","sha1":"S2J4Kjc2YI1xXbYWHpZ/guOmTjw=","title":"IPMessenger Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ipmessenger-plugin/1.2/ipmessenger-plugin.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/IPMessenger+Plugin"},"ircbot":{"buildDate":"Dec 15, 2012","dependencies":[{"name":"instant-messaging","optional":false,"version":"1.24"},{"name":"analysis-core","optional":true,"version":"1.0"},{"name":"ci-game","optional":true,"version":"1.16"}],"developers":[{"developerId":"kutzi","email":"kutzi@gmx.de","name":"Christoph Kutzinski"}],"excerpt":"This plugin enables Jenkins to send build notífications via IRC and lets you interact with Jenkins via an IRC bot. Note that you also need to install the instant-messaging plugin<\/a> .","gav":"org.jvnet.hudson.plugins:ircbot:2.21","labels":["trigger","notifier"],"name":"ircbot","previousTimestamp":"2012-10-13T21:21:42.00Z","previousVersion":"2.20","releaseTimestamp":"2012-12-15T16:18:20.00Z","requiredCore":"1.466","scm":"github.com","sha1":"xkJmi5JpHpd4P6KNRFeMYCvCgLw=","title":"IRC Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ircbot/2.21/ircbot.hpi","version":"2.21","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/IRC+Plugin"},"ivy":{"buildDate":"Feb 06, 2012","dependencies":[{"name":"nant","optional":true,"version":"1.4.1"}],"developers":[{"developerId":"hibou"},{"developerId":"martinficker","name":"Martin Ficker"},{"developerId":"jmetcalf"},{"developerId":"tbingaman","name":"Timothy Bingaman"},{"developerId":"gboissinot","name":"Gregory Boissinot"}],"excerpt":"This plugin automatically configures a build to trigger other builds based on dependency configuration via Apache Ivy<\/a>.","gav":"org.jenkins-ci.plugins:ivy:1.21","labels":["trigger"],"name":"ivy","previousTimestamp":"2011-11-16T07:04:48.00Z","previousVersion":"1.20","releaseTimestamp":"2012-02-06T13:33:42.00Z","requiredCore":"1.410","scm":"github.com","sha1":"uiMZfg29zqtWdyiccZZ4GJrvjGs=","title":"Ivy Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ivy/1.21/ivy.hpi","version":"1.21","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Ivy+Plugin"},"ivy-report":{"buildDate":"Feb 17, 2012","dependencies":[{"name":"ivy","optional":false,"version":"1.15"}],"developers":[{"developerId":"cchabanois","email":"cchabanois@gmail.com","name":"Cedric Chabanois"}],"excerpt":"This plugin publishes Apache Ivy<\/a> reports for each build. ","gav":"org.jenkins-ci.plugins:ivy-report:1.2","labels":[],"name":"ivy-report","previousTimestamp":"2012-02-16T12:01:48.00Z","previousVersion":"1.1","releaseTimestamp":"2012-02-18T03:03:36.00Z","requiredCore":"1.420","scm":"github.com","sha1":"wFYRVvmvk3JPqzMi1hEL9Uz+2fU=","title":"Ivy Report Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ivy-report/1.2/ivy-report.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Ivy+Report+Plugin"},"ivytrigger":{"buildDate":"Nov 19, 2012","dependencies":[],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"IvyTrigger provides polling mechanisms to poll an Ivy file and triggers a build if an Ivy dependency version has changed.","gav":"org.jenkins-ci.plugins:ivytrigger:0.24","labels":["trigger"],"name":"ivytrigger","previousTimestamp":"2012-09-11T04:33:58.00Z","previousVersion":"0.23","releaseTimestamp":"2012-11-20T03:57:02.00Z","requiredCore":"1.410","scm":"github.com","sha1":"kx6bkBYL2sksBmTcCK9QBEceWOU=","title":"IvyTrigger Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ivytrigger/0.24/ivytrigger.hpi","version":"0.24","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/IvyTrigger+Plugin"},"jabber":{"buildDate":"Dec 15, 2012","dependencies":[{"name":"analysis-core","optional":true,"version":"1.0"},{"name":"ci-game","optional":true,"version":"1.16"},{"name":"instant-messaging","optional":false,"version":"1.24"}],"developers":[{"developerId":"kutzi","email":"kutzi@gmx.de","name":"Christoph Kutzinski"}],"excerpt":"Integrates Jenkins with the Jabber/XMPP instant messaging protocol. Note that you also need to install the instant-messaging plugin<\/a>. ","gav":"org.jvnet.hudson.plugins:jabber:1.25","labels":["trigger","notifier"],"name":"jabber","previousTimestamp":"2012-10-13T21:26:16.00Z","previousVersion":"1.24","releaseTimestamp":"2012-12-15T16:24:42.00Z","requiredCore":"1.466","scm":"github.com","sha1":"9+eXyp28QJA44oJdDqZ3Uwe/7S4=","title":"Jabber Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jabber/1.25/jabber.hpi","version":"1.25","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Jabber+Plugin"},"jacoco":{"buildDate":"Nov 17, 2012","dependencies":[{"name":"dashboard-view","optional":true,"version":"2.1"},{"name":"maven-plugin","optional":false,"version":"1.424.6"}],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"stephenconnolly","name":"Stephen Connolly"},{"developerId":"manolo","email":"manolo@apache.org","name":"Manuel Carrasco Monino"},{"developerId":"jfuerth","name":"Jonathan Fuerth"},{"developerId":"kingargyle","name":"David Carver"},{"developerId":"ognjenb","name":"Ognjen Bubalo"}],"excerpt":"This plugin allows you to capture code coverage report from JaCoCo. Jenkins will generate the trend report of coverage. This plugin is fork of the [Emma Plugin]. Big part of the code structure comes from it, however, it is completely refactored. ","gav":"org.jenkins-ci.plugins:jacoco:1.0.9","labels":["report"],"name":"jacoco","previousTimestamp":"2012-10-15T16:44:06.00Z","previousVersion":"1.0.8","releaseTimestamp":"2012-11-17T16:09:34.00Z","requiredCore":"1.424.6","scm":"github.com","sha1":"M1eEllRpkIFjplP2/myvdIIfTgw=","title":"JaCoCo Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jacoco/1.0.9/jacoco.hpi","version":"1.0.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin"},"japex":{"buildDate":"Feb 14, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin adds Japex<\/a> support so that Jenkins can display trend reports and other useful metrics.","gav":"org.jvnet.hudson.plugins:japex:1.7","labels":["report"],"name":"japex","previousTimestamp":"2009-12-30T17:14:18.00Z","previousVersion":"1.6","releaseTimestamp":"2011-02-14T19:06:54.00Z","requiredCore":"1.377","scm":"svn.jenkins-ci.org","sha1":"Cwnz6S3GT+nNvQWAHtbW69Ymj0Y=","title":"Japex Plugin","url":"http://updates.jenkins-ci.org/download/plugins/japex/1.7/japex.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Japex+Plugin"},"javadoc":{"buildDate":"Sep 19, 2011","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin adds Javadoc support to Jenkins.","gav":"org.jenkins-ci.plugins:javadoc:1.0","labels":[],"name":"javadoc","releaseTimestamp":"2011-09-19T16:58:34.00Z","requiredCore":"1.431","scm":"github.com","sha1":"Brf5LTIRj9konD9o37NqUvy5Fic=","title":"Javadoc Plugin","url":"http://updates.jenkins-ci.org/download/plugins/javadoc/1.0/javadoc.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Javadoc+Plugin"},"javancss":{"buildDate":"Jun 11, 2011","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.413"}],"developers":[{"developerId":"stephenconnolly","name":"Stephen Connolly"}],"excerpt":"This plugin allows you to use JavaNCSS<\/a> build reporting tool.","gav":"org.jenkins-ci.plugins:javancss:1.1","labels":["report"],"name":"javancss","previousTimestamp":"2010-06-01T20:07:30.00Z","previousVersion":"1.0","releaseTimestamp":"2011-06-11T23:01:42.00Z","requiredCore":"1.413","scm":"github.com","sha1":"0jV7Ovyi4H4L5Wryc42Qh2k5wL8=","title":"JavaNCSS Plugin","url":"http://updates.jenkins-ci.org/download/plugins/javancss/1.1/javancss.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JavaNCSS+Plugin"},"javanet":{"buildDate":"Dec 29, 2009","dependencies":[{"name":"subversion","optional":false,"version":"1.7"}],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin extends Hudson for projects hosted on java.net by providing various capabilities","gav":"org.jvnet.hudson.plugins:javanet:1.3","labels":["external"],"name":"javanet","previousTimestamp":"2008-05-23T09:22:40.00Z","previousVersion":"1.2","releaseTimestamp":"2009-12-29T20:35:06.00Z","requiredCore":"1.325","scm":"svn.dev.java.net","sha1":"HhNr+0/UTPJcIIVK4SAIkAez6tE=","title":"Java.net Plugin","url":"http://updates.jenkins-ci.org/download/plugins/javanet/1.3/javanet.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Java.net+Plugin"},"javanet-uploader":{"buildDate":"Dec 29, 2009","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin uses java.net tasks library<\/a> to make Hudson capable of posting artifacts to java.net","gav":"org.jvnet.hudson.plugins:javanet-uploader:1.7","labels":["external","upload"],"name":"javanet-uploader","previousTimestamp":"2009-06-18T22:17:46.00Z","previousVersion":"1.6","releaseTimestamp":"2009-12-29T21:02:46.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"mUdi22mBZNoETMRXISlq4XL5EXM=","title":"java.net uploader Plugin","url":"http://updates.jenkins-ci.org/download/plugins/javanet-uploader/1.7/javanet-uploader.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/java.net+uploader+Plugin"},"javatest-report":{"buildDate":"Feb 14, 2011","dependencies":[],"developers":[{"developerId":"ramapulavarthi","name":"Rama Pulavarthi"}],"excerpt":"This plugin enables Jenkins to load test output from JavaTest<\/a> test harness, which is commonly used by TCK tests for various JSRs.","gav":"org.jvnet.hudson.plugins:javatest-report:1.4","labels":["report"],"name":"javatest-report","previousTimestamp":"2010-01-31T17:12:44.00Z","previousVersion":"1.3","releaseTimestamp":"2011-02-14T18:14:32.00Z","requiredCore":"1.377","scm":"svn.jenkins-ci.org","sha1":"Uf+6aAX/xO4o9uICgdv4+c1j4nk=","title":"JavaTest Report Plugin","url":"http://updates.jenkins-ci.org/download/plugins/javatest-report/1.4/javatest-report.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JavaTest+Report+Plugin"},"jboss":{"buildDate":"Nov 04, 2011","dependencies":[],"developers":[{"developerId":"JulB4","email":"JulB4@dev.java.net","name":"Juliusz Brzostek"}],"excerpt":"This plugin allows to manage a JBoss Application Server<\/a> during build procedure. ","gav":"org.jenkins-ci.plugins:jboss:1.0.5","labels":["misc","builder"],"name":"jboss","previousTimestamp":"2011-08-20T14:34:20.00Z","previousVersion":"1.0.4","releaseTimestamp":"2011-11-04T20:12:50.00Z","requiredCore":"1.398","scm":"github.com","sha1":"08xwWJsdwME3cpCv8pKym/DXXZ8=","title":"JBoss Management Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jboss/1.0.5/jboss.hpi","version":"1.0.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JBoss+Management+Plugin"},"jcaptcha-plugin":{"buildDate":"Jul 21, 2011","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"JCaptcha provider of Jenkins' CaptchaSupport extension point.","gav":"org.jenkins-ci.plugins:jcaptcha-plugin:1.1","labels":["misc"],"name":"jcaptcha-plugin","previousTimestamp":"2011-06-09T03:49:34.00Z","previousVersion":"1.0","releaseTimestamp":"2011-07-22T02:54:50.00Z","requiredCore":"1.420","scm":"github.com","sha1":"4vbTiLFQDMH98DHDbumn7127UNw=","title":"JCaptcha Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jcaptcha-plugin/1.1/jcaptcha-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JCaptcha+Plugin"},"jclouds-jenkins":{"buildDate":"Sep 17, 2012","dependencies":[],"developers":[{"developerId":"sdirector","email":"mordred@inaugust.com","name":"Monty Taylor"},{"developerId":"jclouds","email":"adrian@jclouds.org","name":"Adrian Cole"},{"developerId":"vijaykiran","email":"mail@vijaykiran.com","name":"Vijay Kiran"},{"developerId":"abayer","email":"andrew.bayer@gmail.com","name":"Andrew Bayer"}],"excerpt":"This plugin uses JClouds<\/a> to provide slave launching on most of the currently usable Cloud infrastructures.","gav":"org.jenkins-ci.plugins:jclouds-jenkins:2.3.1","labels":["cluster"],"name":"jclouds-jenkins","previousTimestamp":"2012-08-31T16:49:34.00Z","previousVersion":"2.3","releaseTimestamp":"2012-09-17T14:00:34.00Z","requiredCore":"1.457","scm":"github.com","sha1":"N3KFajrhGE+rpBjyOmgz9vH23uo=","title":"JClouds Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jclouds-jenkins/2.3.1/jclouds-jenkins.hpi","version":"2.3.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JClouds+Plugin"},"jdepend":{"buildDate":"Feb 14, 2011","dependencies":[],"developers":[{"developerId":"cflewis","email":"chris@cflewis.com","name":"Chris Lewis"}],"excerpt":"The JDepend Plugin is a plugin to generate JDepend reports for builds.","gav":"org.jvnet.hudson.plugins:jdepend:1.2.3","labels":["report"],"name":"jdepend","previousTimestamp":"2009-09-17T19:18:24.00Z","previousVersion":"1.2.2","releaseTimestamp":"2011-02-14T18:04:38.00Z","requiredCore":"1.377","scm":"svn.jenkins-ci.org","sha1":"g/0fc7a7C+vEd5BVQJ5gbGFWgwU=","title":"JDepend Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jdepend/1.2.3/jdepend.hpi","version":"1.2.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JDepend+Plugin"},"jenkins-cloudformation-plugin":{"buildDate":"Sep 20, 2012","dependencies":[],"developers":[{"developerId":"edovale","email":"edovale@gmail.com","name":"Erick Dovale"}],"excerpt":"A plugin that allows for the creation of cloud formation stacks before running the build and the deletion of them after the build is completed. ","gav":"org.jenkins-ci.plugins:jenkins-cloudformation-plugin:0.10","labels":["buildwrapper","external","notifier"],"name":"jenkins-cloudformation-plugin","previousTimestamp":"2012-02-19T23:36:24.00Z","previousVersion":"0.9","releaseTimestamp":"2012-09-20T14:56:34.00Z","requiredCore":"1.414","scm":"github.com","sha1":"02dRrRVnjeLdxVmivWOvRNvvHVw=","title":"AWS Cloudformation Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jenkins-cloudformation-plugin/0.10/jenkins-cloudformation-plugin.hpi","version":"0.10","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/AWS+Cloudformation+Plugin"},"jenkins-flowdock-plugin":{"buildDate":"Sep 14, 2012","dependencies":[],"developers":[{"developerId":"anttipitkanen","email":"antti@flowdock.com","name":"Antti Pitkanen"}],"excerpt":"Posts build notifications to your flow","gav":"com.flowdock.jenkins:jenkins-flowdock-plugin:1.0.7","name":"jenkins-flowdock-plugin","previousTimestamp":"2012-09-06T18:54:26.00Z","previousVersion":"1.0.6","releaseTimestamp":"2012-09-14T19:29:32.00Z","requiredCore":"1.478","scm":"github.com","sha1":"ITvApYw7z1DUQK38eD/MnBWA0HE=","title":"Flowdock plugin","url":"http://updates.jenkins-ci.org/download/plugins/jenkins-flowdock-plugin/1.0.7/jenkins-flowdock-plugin.hpi","version":"1.0.7"},"jenkins-jira-issue-updater":{"buildDate":"Sep 04, 2012","dependencies":[],"developers":[{"developerId":"laszlomiklosik","email":"laszlo.miklosik@gmail.com","name":"Laszlo Miklosik"}],"excerpt":"This is a Jenkins plugin which updates issues in Atlassian Jira (by changing their status and adding a comment) as part of a Jenkins job. ","gav":"info.bluefloyd.jenkins:jenkins-jira-issue-updater:1.3","labels":["external"],"name":"jenkins-jira-issue-updater","previousTimestamp":"2012-09-04T03:28:58.00Z","previousVersion":"1.2","releaseTimestamp":"2012-09-05T01:18:22.00Z","requiredCore":"1.437","scm":"github.com","sha1":"OrukTyxt0mksPV06/X59Rc29w4A=","title":"Jira Issue Updater Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jenkins-jira-issue-updater/1.3/jenkins-jira-issue-updater.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Jira+Issue+Updater+Plugin"},"jenkins-leiningen":{"buildDate":"Sep 07, 2012","dependencies":[],"developers":[{"developerId":"pyr","email":"pyr@spootnik.org","name":"Pierre-Yves Ritschard"}],"excerpt":"This plugin allows building projects using leiningen<\/a>. ","gav":"org.spootnik:jenkins-leiningen:0.5.1","labels":["builder"],"name":"jenkins-leiningen","releaseTimestamp":"2012-09-07T13:05:40.00Z","requiredCore":"1.424","scm":"github.com","sha1":"/J7AcQNGifoTvU47hWJ9UTM7zVM=","title":"leiningen plugin","url":"http://updates.jenkins-ci.org/download/plugins/jenkins-leiningen/0.5.1/jenkins-leiningen.hpi","version":"0.5.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/leiningen+plugin"},"jenkins-multijob-plugin":{"buildDate":"Nov 19, 2012","dependencies":[],"developers":[{"developerId":"alex-n","email":"alex@tikalk.com","name":"Alex Nickolaevsky"},{"developerId":"ronil","email":"roni@tikalk.com","name":"Roni Licht"},{"developerId":"itaior","email":"itai@tikalk.com","name":"Itai Or"}],"excerpt":"This plugin<\/a>, created by Tikal<\/a> ALM team, gives the option to define complex and hierarchical jobs structure in Jenkins. ","gav":"org.jenkins-ci.plugins:jenkins-multijob-plugin:1.7","labels":["misc"],"name":"jenkins-multijob-plugin","previousTimestamp":"2012-11-01T03:03:16.00Z","previousVersion":"1.6","releaseTimestamp":"2012-11-20T03:33:00.00Z","requiredCore":"1.465","scm":"github.com","sha1":"1vLaI7J3HDcnXEiw+selKaI8JzA=","title":"Multijob Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jenkins-multijob-plugin/1.7/jenkins-multijob-plugin.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin"},"jenkins-tag-cloud-plugin":{"buildDate":"Jul 03, 2012","dependencies":[],"developers":[{"developerId":"cvanes","email":"cvanes@gmail.com","name":"Chris van Es"}],"excerpt":"Plugin which generates a tag cloud from source code.","gav":"org.jenkins-ci.plugins:jenkins-tag-cloud-plugin:1.6","labels":["misc"],"name":"jenkins-tag-cloud-plugin","previousTimestamp":"2012-04-15T09:43:28.00Z","previousVersion":"1.5","releaseTimestamp":"2012-07-03T15:31:22.00Z","requiredCore":"1.424","scm":"github.com","sha1":"kMIRpde1Ck+jmM61yXZZ1bac9ss=","title":"Tag Cloud Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jenkins-tag-cloud-plugin/1.6/jenkins-tag-cloud-plugin.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Tag+Cloud+Plugin"},"jenkins-testswarm-plugin":{"buildDate":"Oct 02, 2012","dependencies":[],"developers":[{"developerId":"keivnnilson","name":"Kevin Nilson"}],"excerpt":"","gav":"com.javaclimber.jenkins.testswarmplugin:jenkins-testswarm-plugin:1.2","name":"jenkins-testswarm-plugin","releaseTimestamp":"2012-10-02T04:14:10.00Z","requiredCore":"1.424","scm":"github.com","sha1":"il4+Q/8yWZO1vDD5pxU/4kwKAiA=","title":"jenkins-testswarm-plugin","url":"http://updates.jenkins-ci.org/download/plugins/jenkins-testswarm-plugin/1.2/jenkins-testswarm-plugin.hpi","version":"1.2"},"jenkinswalldisplay":{"buildDate":"Oct 11, 2012","dependencies":[{"name":"nested-view","optional":true,"version":"1.8"}],"developers":[{"developerId":"pellepelster","email":"pellepelster@gmail.com","name":"Christian Pelster"}],"excerpt":"This plugin provides a website that monitors jobs in a way suitable for public wall displays.","gav":"org.jenkins-ci.plugins:jenkinswalldisplay:0.6.15","labels":["ui"],"name":"jenkinswalldisplay","previousTimestamp":"2012-10-11T23:32:48.00Z","previousVersion":"0.6.14","releaseTimestamp":"2012-10-12T00:08:32.00Z","requiredCore":"1.424","scm":"github.com","sha1":"UFU9AufIT26aaJxFX/wWmBbdbto=","title":"Wall Display Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jenkinswalldisplay/0.6.15/jenkinswalldisplay.hpi","version":"0.6.15","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Wall+Display+Plugin"},"jenkinswalldisplay-pom":{"buildDate":"Nov 13, 2011","dependencies":[],"developers":[{"developerId":"pellepelster","email":"pellepelster@gmail.com","name":"Christian Pelster"}],"excerpt":"This plugin provides a website that monitors jobs in a way suitable for public wall displays.","gav":"org.jenkins-ci.plugins:jenkinswalldisplay-pom:0.6.2","labels":["ui"],"name":"jenkinswalldisplay-pom","releaseTimestamp":"2011-11-14T02:05:58.00Z","requiredCore":"1.398","scm":"github.com","sha1":"Gbd7IngzepF57Tm1hzfe6iGQNTc=","title":"Wall Display Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jenkinswalldisplay-pom/0.6.2/jenkinswalldisplay-pom.hpi","version":"0.6.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Wall+Display+Plugin"},"jenkow-plugin":{"buildDate":"Nov 27, 2012","dependencies":[{"name":"async-job","optional":false,"version":"1.3"},{"name":"git","optional":false,"version":"1.1.17"},{"name":"git-server","optional":false,"version":"1.1"},{"name":"eclipse-update-site","optional":false,"version":"1.2"}],"developers":[{"developerId":"m2spring","email":"mspring@cisco.com","name":"Max Spring"},{"developerId":"chikkala","email":"schikkal@cisco.com","name":"Srinivasan Chikkala"}],"excerpt":"Integration of the Activiti BPMN Workflow Engine<\/a> into Jenkins.","gav":"com.cisco.step.jenkins.plugins:jenkow-plugin:0.2.5","labels":["trigger","misc"],"name":"jenkow-plugin","previousTimestamp":"2012-09-27T20:32:20.00Z","previousVersion":"0.2.4","releaseTimestamp":"2012-11-27T20:23:54.00Z","requiredCore":"1.455","scm":"github.com","sha1":"+H+Zf0EivXsO+j04uYHHYhovY+A=","title":"Jenkow Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jenkow-plugin/0.2.5/jenkow-plugin.hpi","version":"0.2.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Jenkow+Plugin"},"jigomerge":{"buildDate":"Jul 08, 2011","dependencies":[],"developers":[{"developerId":"vberetti","name":"Vincent Beretti"}],"excerpt":"This plugin adds the ability to directly merge Subversion branches in Jenkins. See http://code.google.com/p/jigomerge/<\/a>","gav":"org.jenkins-ci.plugins:jigomerge:0.7","labels":["builder"],"name":"jigomerge","previousTimestamp":"2011-04-30T16:16:56.00Z","previousVersion":"0.6","releaseTimestamp":"2011-07-08T21:15:30.00Z","requiredCore":"1.398","scm":"github.com","sha1":"GRxJX0VOdCNLKl3P7cwzqdH1zr8=","title":"Jigomerge plugin","url":"http://updates.jenkins-ci.org/download/plugins/jigomerge/0.7/jigomerge.hpi","version":"0.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Jigomerge+plugin"},"jira":{"buildDate":"Jul 29, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"}],"developers":[{"developerId":"olamy","name":"Olivier Lamy"}],"excerpt":"This plugin integrates Atlassian JIRA<\/a> to Jenkins.","gav":"org.jenkins-ci.plugins:jira:1.35","labels":["maven","external"],"name":"jira","previousTimestamp":"2012-06-11T17:55:00.00Z","previousVersion":"1.34","releaseTimestamp":"2012-07-30T03:23:22.00Z","requiredCore":"1.424","scm":"github.com","sha1":"PJgE3+qrqSjvTo+T972yrgXrGxc=","title":"JIRA Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jira/1.35/jira.hpi","version":"1.35","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JIRA+Plugin"},"job-dsl":{"buildDate":"Jan 07, 2013","dependencies":[],"developers":[],"excerpt":"The job-dsl-plugin allows the programmatic creation of projects using a DSL. Pushing job creation into a script allows you to automate and standardize your Jenkins installation, unlike anything possible before. ","gav":"org.jenkinsci.plugins:job-dsl:1.11","labels":["builder"],"name":"job-dsl","previousTimestamp":"2012-11-13T23:09:00.00Z","previousVersion":"1.9","releaseTimestamp":"2013-01-07T15:18:32.00Z","requiredCore":"1.456","scm":"github.com","sha1":"efr4JFA0vUUirWInI/sl7Rp8vpA=","title":"Job DSL Plugin","url":"http://updates.jenkins-ci.org/download/plugins/job-dsl/1.11/job-dsl.hpi","version":"1.11","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin"},"job-exporter":{"buildDate":"Jan 27, 2012","dependencies":[],"developers":[{"developerId":"m31","email":"michael@meyling.com","name":"Michael Meyling"}],"excerpt":"Adds a build step that exports runtime parameters into a properties file (e.g who triggered the build, what is her email address...). This information can be read by other build steps.","gav":"org.jenkins-ci.plugins:job-exporter:0.4","labels":["builder"],"name":"job-exporter","previousTimestamp":"2011-03-23T02:31:20.00Z","previousVersion":"0.3.1","releaseTimestamp":"2012-01-27T14:48:32.00Z","requiredCore":"1.433","scm":"svn.jenkins-ci.org","sha1":"2SC4lvJtUwtW5e6ImdSJafagjJk=","title":"Job Exporter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/job-exporter/0.4/job-exporter.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Job+Exporter+Plugin"},"job-import-plugin":{"buildDate":"Jul 20, 2011","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Import jobs from another Jenkins instance.","gav":"org.jenkins-ci.plugins:job-import-plugin:1.0","labels":["misc"],"name":"job-import-plugin","releaseTimestamp":"2011-07-21T03:44:40.00Z","requiredCore":"1.398","scm":"github.com","sha1":"er5mTVmSXct8aVcOVSdTO8xafbY=","title":"Job Import Plugin","url":"http://updates.jenkins-ci.org/download/plugins/job-import-plugin/1.0/job-import-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Job+Import+Plugin"},"job-log-logger-plugin":{"buildDate":"Jan 17, 2012","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Write the job log to the underlying logging system.","gav":"org.jenkins-ci.plugins:job-log-logger-plugin:1.0","labels":["misc","buildwrapper"],"name":"job-log-logger-plugin","releaseTimestamp":"2012-01-17T05:14:12.00Z","requiredCore":"1.424","scm":"github.com","sha1":"ikHWj/fSsoafQKcxjIV9Ov5UOm0=","title":"Job Log Logger Plugin","url":"http://updates.jenkins-ci.org/download/plugins/job-log-logger-plugin/1.0/job-log-logger-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Job+Log+Logger+Plugin"},"job-poll-action-plugin":{"buildDate":"Mar 07, 2012","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provides an easy mechanism to force a job to poll for SCM changes.","gav":"org.jenkins-ci.plugins:job-poll-action-plugin:1.0","labels":["misc","trigger"],"name":"job-poll-action-plugin","releaseTimestamp":"2012-03-08T03:26:34.00Z","requiredCore":"1.424","scm":"github.com","sha1":"qehDx0VLMjyHlb/uULkO2hKvaxU=","title":"Job Poll Action Plugin","url":"http://updates.jenkins-ci.org/download/plugins/job-poll-action-plugin/1.0/job-poll-action-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Job+Poll+Action+Plugin"},"job-strongauth-simple":{"buildDate":"Dec 17, 2012","dependencies":[],"developers":[{"developerId":"kkkon","name":"KK.Kon"}],"excerpt":"This plugin allows you to safety builds for job, when multi-people approved ","gav":"org.jenkins-ci.plugins:job-strongauth-simple:0.5","labels":["builder"],"name":"job-strongauth-simple","previousTimestamp":"2012-12-08T15:46:30.00Z","previousVersion":"0.4","releaseTimestamp":"2012-12-17T16:58:00.00Z","requiredCore":"1.409","scm":"github.com","sha1":"gwM1pQC1RLQKw7GCP8q6aYvfuh4=","title":"Job StrongAuthSimple Plugin","url":"http://updates.jenkins-ci.org/download/plugins/job-strongauth-simple/0.5/job-strongauth-simple.hpi","version":"0.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Job+StrongAuthSimple+Plugin"},"jobConfigHistory":{"buildDate":"Nov 19, 2012","dependencies":[],"developers":[{"developerId":"stefanbrausch","email":"stefanbrausch@dev.java.net","name":"Stefan Brausch"},{"developerId":"mfriedenhagen","email":"mfriedenhagen@gmail.com","name":"Mirko Friedenhagen"},{"developerId":"kstutz","email":"kathi.stutz@1und1.de","name":"Kathi Stutz"}],"excerpt":"Saves copies of all job and system configurations.","gav":"org.jenkins-ci.plugins:jobConfigHistory:2.0","labels":["ui","misc"],"name":"jobConfigHistory","previousTimestamp":"2012-02-01T03:17:22.00Z","previousVersion":"1.13","releaseTimestamp":"2012-11-19T16:16:48.00Z","requiredCore":"1.427","scm":"github.com","sha1":"mb4XoK5QUFv2gC1ppju6yoHnYSo=","title":"JobConfigHistory Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jobConfigHistory/2.0/jobConfigHistory.hpi","version":"2.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JobConfigHistory+Plugin"},"jobgenerator":{"buildDate":"Jan 09, 2013","dependencies":[{"name":"parameterized-trigger","optional":true,"version":"2.16"},{"name":"token-macro","optional":false,"version":"1.5.1"},{"name":"run-condition","optional":false,"version":"0.10"}],"developers":[{"developerId":"syl20bnr","email":"sylvain.benner@gmail.com","name":"Sylvain Benner"}],"excerpt":"This plugin adds a new job type \"Job Generator\" which can generate new projects when executed.","gav":"org.jenkins-ci.plugins:jobgenerator:1.08","labels":["misc","parameter"],"name":"jobgenerator","previousTimestamp":"2012-12-13T00:55:12.00Z","previousVersion":"1.07","releaseTimestamp":"2013-01-09T05:50:32.00Z","requiredCore":"1.489","scm":"github.com","sha1":"VqOYowG7L5Vw9LHy1pLEBAsR88c=","title":"Job Generator Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jobgenerator/1.08/jobgenerator.hpi","version":"1.08","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Job+Generator+Plugin"},"jobrevision":{"buildDate":"Jan 03, 2012","dependencies":[],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"This plugin enables users to set a revision (a version) for the Jenkins job.","gav":"org.jenkins-ci.plugins:jobrevision:0.6","labels":["buildwrapper"],"name":"jobrevision","previousTimestamp":"2011-05-17T01:55:38.00Z","previousVersion":"0.5","releaseTimestamp":"2012-01-03T06:10:46.00Z","requiredCore":"1.410","scm":"github.com","sha1":"q8lTZoa/FC+Yko0SuF7Abii8gYM=","title":"JobRevision Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jobrevision/0.6/jobrevision.hpi","version":"0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JobRevision+Plugin"},"jobtype-column":{"buildDate":"Nov 22, 2012","dependencies":[],"developers":[{"developerId":"mindless","email":"alan.harder@gmail.com","name":"Alan Harder"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Adds column showing job type that can be configured in views.","gav":"org.jenkins-ci.plugins:jobtype-column:1.3","labels":["listview-column"],"name":"jobtype-column","previousTimestamp":"2011-12-10T05:01:38.00Z","previousVersion":"1.2","releaseTimestamp":"2012-11-22T05:39:46.00Z","requiredCore":"1.465","scm":"github.com","sha1":"qysh5vJKwHhY17LMuR6H8y//vlg=","title":"Job Type Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jobtype-column/1.3/jobtype-column.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Job+Type+Column+Plugin"},"join":{"buildDate":"May 03, 2012","dependencies":[{"name":"downstream-ext","optional":true,"version":"1.7"},{"name":"parameterized-trigger","optional":true,"version":"2.13"},{"name":"maven-plugin","optional":true,"version":"1.424"},{"name":"copyarchiver","optional":true,"version":"0.5.1"}],"developers":[{"developerId":"mdonohue","name":"Michael Donohue"},{"developerId":"wolfs","name":"Stefan Wolf"}],"excerpt":"This plugin allows a job to be run after all the immediate downstream jobs have completed.","gav":"org.jenkins-ci.plugins:join:1.15","labels":["trigger"],"name":"join","previousTimestamp":"2012-04-06T02:00:36.00Z","previousVersion":"1.14","releaseTimestamp":"2012-05-03T15:32:50.00Z","requiredCore":"1.424","scm":"github.com","sha1":"SnyeBC16Q5qMWN+3iKHeCDffmuc=","title":"Join Plugin","url":"http://updates.jenkins-ci.org/download/plugins/join/1.15/join.hpi","version":"1.15","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Join+Plugin"},"jprt":{"buildDate":"Nov 04, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","email":"kk@kohsuke.org","name":"Kohsuke Kawaguchi"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"","gav":"org.jvnet.hudson.plugins:jprt:1.0","name":"jprt","releaseTimestamp":"2011-11-04T17:25:44.00Z","requiredCore":"1.392","scm":"github.com","sha1":"YMOe/KblCN57oAOgNmh6VLIzFxk=","title":"JPRT Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jprt/1.0/jprt.hpi","version":"1.0"},"jquery":{"buildDate":"Nov 15, 2012","dependencies":[],"developers":[{"developerId":"kiy0taka","name":"Kiyotaka Oku"},{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin is a library plugin for other plugins to share common jQuery. It also allows users to use jQuery on each view descriptions.","gav":"org.jenkins-ci.plugins:jquery:1.7.2-1","labels":["ui","library"],"name":"jquery","previousTimestamp":"2012-06-14T22:22:24.00Z","previousVersion":"1.7.2-0","releaseTimestamp":"2012-11-16T01:14:04.00Z","requiredCore":"1.424","scm":"github.com","sha1":"UhqjwZK9YkLzvHoGZkYWAA8cshI=","title":"jQuery Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jquery/1.7.2-1/jquery.hpi","version":"1.7.2-1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/jQuery+Plugin"},"jquery-ui":{"buildDate":"Feb 27, 2011","dependencies":[{"name":"jquery","optional":false,"version":"1.0.2"}],"developers":[{"developerId":"kiy0taka","name":"Kiyotaka Oku"}],"excerpt":"This plugin allows you to use jQuery UI on each view descriptions.","gav":"org.jenkins-ci.plugins:jquery-ui:1.0.2","labels":["ui"],"name":"jquery-ui","previousTimestamp":"2011-02-23T02:37:36.00Z","previousVersion":"1.0.1","releaseTimestamp":"2011-02-27T14:16:22.00Z","requiredCore":"1.398","scm":"github.com","sha1":"ViCgK4dU7QhkDfxlrK5m2Bw89og=","title":"jQuery UI Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jquery-ui/1.0.2/jquery-ui.hpi","version":"1.0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/jQuery+UI+Plugin"},"jsgames":{"buildDate":"Aug 05, 2011","dependencies":[],"developers":[{"developerId":"cliffano","email":"blah@cliffano.com","name":"Cliffano Subagio"}],"excerpt":"Play some JavaScript games from the comfort of your Jenkins instance.","gav":"org.jenkins-ci.plugins:jsgames:0.2","labels":[],"name":"jsgames","previousTimestamp":"2010-08-01T19:42:00.00Z","previousVersion":"0.1","releaseTimestamp":"2011-08-05T19:37:08.00Z","requiredCore":"1.398","scm":"github.com","sha1":"Hf5Xs8mph2L8KMF/J8MMt6nsgdk=","title":"JSGames Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jsgames/0.2/jsgames.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JSGames+Plugin"},"jslint":{"buildDate":"Jan 03, 2013","dependencies":[],"developers":[{"developerId":"gavd","email":"gavin.davies@boxuk.com","name":"Gavin Davies"}],"excerpt":"Lint JavaScript files, outputting to checkstyle format. Supports all JSLint options. Developed by Box UK.","gav":"org.jenkins-ci.plugins:jslint:0.7.6","labels":["misc"],"name":"jslint","previousTimestamp":"2013-01-03T20:22:38.00Z","previousVersion":"0.7.5","releaseTimestamp":"2013-01-03T20:29:06.00Z","requiredCore":"1.474","scm":"github.com","sha1":"jEMfwBcXR7sVqI74SlNY+ZwxO9g=","title":"JSLint plugin","url":"http://updates.jenkins-ci.org/download/plugins/jslint/0.7.6/jslint.hpi","version":"0.7.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JSLint+plugin"},"jsoup":{"buildDate":"Sep 17, 2012","dependencies":[],"developers":[{"developerId":"stephenc","name":"Stephen Connolly"}],"excerpt":"This plugin provides a shared dependency on the jsoup library so that other plugins can co-operate when using this library.","gav":"org.jenkins-ci.plugins:jsoup:1.6.3","labels":[],"name":"jsoup","releaseTimestamp":"2012-09-17T20:39:06.00Z","requiredCore":"1.424","scm":"github.com","sha1":"8ikQk817DT/9kj78e8xTq950Olk=","title":"JSoup Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jsoup/1.6.3/jsoup.hpi","version":"1.6.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JSoup+Plugin"},"jsunit":{"buildDate":"May 15, 2011","dependencies":[{"name":"xunit","optional":false,"version":"1.17"}],"developers":[{"developerId":"ricktw","email":"r.oosterholt@gmail.com","name":"Rick Oosterholt"},{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"This plugin allows you publish JSUnit<\/a> test results ","gav":"org.jenkins-ci.plugins:jsunit:1.5","labels":["report"],"name":"jsunit","previousTimestamp":"2011-04-01T05:16:00.00Z","previousVersion":"1.4.2","releaseTimestamp":"2011-05-16T03:27:22.00Z","requiredCore":"1.410","scm":"github.com","sha1":"jdoq+tEDly4shNVPMgQJ2oHa4Cs=","title":"JSUnit plugin","url":"http://updates.jenkins-ci.org/download/plugins/jsunit/1.5/jsunit.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JSUnit+plugin"},"jswidgets":{"buildDate":"Jun 15, 2012","dependencies":[],"developers":[{"developerId":"mfriedenhagen","email":"mfriedenhagen@gmail.com","name":"Mirko Friedenhagen"}],"excerpt":"Allows embedding various statistics available from Jenkins in your via javascript-snippets ala ohloh.net.","gav":"org.jenkins-ci.plugins:jswidgets:1.9","labels":["ui"],"name":"jswidgets","previousTimestamp":"2011-02-16T02:51:02.00Z","previousVersion":"1.8","releaseTimestamp":"2012-06-16T01:20:10.00Z","requiredCore":"1.424.6","scm":"github.com","sha1":"8VrYeQWlVHqo4zpbWRRMhloBlFM=","title":"JSWidgets Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jswidgets/1.9/jswidgets.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JSWidgets+Plugin"},"junit-attachments":{"buildDate":"Dec 02, 2012","dependencies":[{"name":"jquery","optional":false,"version":"1.7.2-1"}],"developers":[{"developerId":"huybrechts","name":"Tom Huybrechts"},{"developerId":"orrc","email":"chris@orr.me.uk","name":"Christopher Orr"}],"excerpt":"This plugin can archive certain files (attachments) together with your JUnit results.","gav":"org.jenkins-ci.plugins:junit-attachments:1.3","labels":["report"],"name":"junit-attachments","previousTimestamp":"2011-12-19T23:31:44.00Z","previousVersion":"1.2","releaseTimestamp":"2012-12-03T02:26:02.00Z","requiredCore":"1.424","scm":"github.com","sha1":"jMVSKozdQMSmYL8JF4b2RC4diPw=","title":"JUnit Attachments Plugin","url":"http://updates.jenkins-ci.org/download/plugins/junit-attachments/1.3/junit-attachments.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/JUnit+Attachments+Plugin"},"jython":{"buildDate":"Dec 20, 2011","dependencies":[],"developers":[{"developerId":"jackgene","email":"jackgene@java.net","name":"Jack Leow"},{"developerId":"rtyler","email":"tyler@slide.com","name":"R. Tyler Ballance"}],"excerpt":"Adds the ability to execute Jython script","gav":"org.jvnet.hudson.plugins:jython:1.9","labels":["builder"],"name":"jython","previousTimestamp":"2011-12-16T05:27:04.00Z","previousVersion":"1.8","releaseTimestamp":"2011-12-20T05:44:30.00Z","requiredCore":"1.377","scm":"github.com","sha1":"9U3sTmSg5s5Rwr+HmV+CdVMQ0Qs=","title":"Jython Plugin","url":"http://updates.jenkins-ci.org/download/plugins/jython/1.9/jython.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Jython+Plugin"},"kagemai":{"buildDate":"Dec 29, 2009","dependencies":[],"developers":[{"developerId":"yamkazu"}],"excerpt":"This plugin integrates Kagemai<\/a> to Hudson.","gav":"org.jvnet.hudson.plugins:kagemai:1.3","labels":["external"],"name":"kagemai","previousTimestamp":"2009-03-04T05:43:20.00Z","previousVersion":"1.2","releaseTimestamp":"2009-12-29T05:16:58.00Z","requiredCore":"1.324","scm":"svn.dev.java.net","sha1":"tbzjjid8VTIw+JvmX+iBRpO+je8=","title":"Kagemai Plugin","url":"http://updates.jenkins-ci.org/download/plugins/kagemai/1.3/kagemai.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Kagemai+Plugin"},"karotz":{"buildDate":"Jul 31, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"sogabe","email":"s.sogabe@gmail.com","name":"Seiji Sogabe"}],"excerpt":"This plugin aims to publish build results to your Karotz<\/a>. ","gav":"org.jenkins-ci.plugins:karotz:0.2","labels":["notifier"],"name":"karotz","previousTimestamp":"2011-12-23T17:45:56.00Z","previousVersion":"0.1","releaseTimestamp":"2012-07-31T08:17:20.00Z","requiredCore":"1.424","scm":"github.com","sha1":"yy4+fUnJy1gpaFGxBRf6vjND03g=","title":"Karotz Plugin","url":"http://updates.jenkins-ci.org/download/plugins/karotz/0.2/karotz.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Karotz+Plugin"},"keepSlaveOffline":{"buildDate":"Feb 10, 2011","dependencies":[],"developers":[{"developerId":"vjuranek","name":"Vojtech Juranek"}],"excerpt":"  This plugin allows to keep given slave offline after Jenkins restart.","gav":"hudson.plugins.keepSlaveOffline:keepSlaveOffline:1.0","labels":["slaves"],"name":"keepSlaveOffline","releaseTimestamp":"2011-02-10T19:27:06.00Z","requiredCore":"1.391","scm":"github.com","sha1":"AX3TuzSE9BNUo5wiCbdqbPQXDkA=","title":"Keep slave offline","url":"http://updates.jenkins-ci.org/download/plugins/keepSlaveOffline/1.0/keepSlaveOffline.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Keep+slave+offline"},"keyboard-shortcuts-plugin":{"buildDate":"Apr 03, 2012","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provides keyboard shortcuts to quickly and efficiently navigate and manage Jenkins.","gav":"org.jenkins-ci.plugins:keyboard-shortcuts-plugin:1.2","labels":["misc","ui"],"name":"keyboard-shortcuts-plugin","previousTimestamp":"2012-03-07T15:09:00.00Z","previousVersion":"1.1","releaseTimestamp":"2012-04-04T00:59:22.00Z","requiredCore":"1.455","scm":"github.com","sha1":"vKTNGmyvXb6df8sqM9OEQgnvRCw=","title":"Keyboard Shortcuts Plugin","url":"http://updates.jenkins-ci.org/download/plugins/keyboard-shortcuts-plugin/1.2/keyboard-shortcuts-plugin.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Keyboard+Shortcuts+Plugin"},"klaros-testmanagement":{"buildDate":"Apr 15, 2011","dependencies":[],"developers":[{"developerId":"stolp","email":"stolp@verit.de","name":"Torsten Stolpmann"}],"excerpt":"Integrates Jenkins with Klaros-Testmanagement<\/a> by publishing the test results of a build to the Klaros-Testmanagement<\/a> application. The test results will be stored in the Klaros-Testmanagement<\/a> database for further evaluation and reporting purposes.","gav":"hudson.plugins.klaros:klaros-testmanagement:1.4","labels":["external"],"name":"klaros-testmanagement","previousTimestamp":"2011-04-08T18:32:22.00Z","previousVersion":"1.3","releaseTimestamp":"2011-04-15T19:51:04.00Z","requiredCore":"1.388","scm":"svn.jenkins-ci.org","sha1":"wifWiNAPqqFPgOBYO7cUMdaJTUo=","title":"Klaros-Testmanagement Plugin","url":"http://updates.jenkins-ci.org/download/plugins/klaros-testmanagement/1.4/klaros-testmanagement.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Klaros-Testmanagement+Plugin"},"klocwork":{"buildDate":"Nov 22, 2012","dependencies":[],"developers":[{"developerId":"Aravindan","name":"Aravindan Mahendran"},{"developerId":"gboissinot","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to publish Klocwork reports in Jenkins.","gav":"org.jenkins-ci.plugins:klocwork:1.14.1","labels":["report"],"name":"klocwork","previousTimestamp":"2012-10-23T02:36:42.00Z","previousVersion":"1.14","releaseTimestamp":"2012-11-23T03:12:58.00Z","requiredCore":"1.410","scm":"github.com","sha1":"57426N92r9ocg1dcUYg/4tmyR64=","title":"Klocwork Plugin","url":"http://updates.jenkins-ci.org/download/plugins/klocwork/1.14.1/klocwork.hpi","version":"1.14.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Klocwork+Plugin"},"kundo":{"buildDate":"Jan 31, 2010","dependencies":[],"developers":[{"developerId":"ben_leedham","name":"Ben Leedham"}],"excerpt":"This plugin allows you to invoke Kundo<\/a> builds as a Jenkins build step.","gav":"org.jvnet.hudson.plugins:kundo:0.2","labels":["builder"],"name":"kundo","previousTimestamp":"2009-02-11T16:50:40.00Z","previousVersion":"0.1","releaseTimestamp":"2010-01-31T17:35:30.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"WTMU44CrQaDzYSRlsIYf+jJ29fc=","title":"Kundo Plugin","url":"http://updates.jenkins-ci.org/download/plugins/kundo/0.2/kundo.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Kundo+Plugin"},"label-verifier":{"buildDate":"Sep 11, 2010","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin allows system administrator to programmatically verify the label assignment correctness on slaves.","gav":"org.jvnet.hudson.plugins:label-verifier:1.0","labels":["slaves"],"name":"label-verifier","releaseTimestamp":"2010-09-11T20:15:24.00Z","requiredCore":"1.376","scm":"svn.dev.java.net","sha1":"Z6+Xt/IhP6jRa3xJ1JuC81NxTLA=","title":"Label Verifier Plugin","url":"http://updates.jenkins-ci.org/download/plugins/label-verifier/1.0/label-verifier.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Label+Verifier+Plugin"},"labeled-test-groups-publisher":{"buildDate":"Mar 20, 2010","dependencies":[],"developers":[{"developerId":"dty"}],"excerpt":"This plugin provides the functionality to group tests by types, such as \"unit test\", \"smoke test\", \"regression test\", etc.","gav":"org.jvnet.hudson.plugins:labeled-test-groups-publisher:1.2.6","labels":["report"],"name":"labeled-test-groups-publisher","previousTimestamp":"2010-03-19T15:11:46.00Z","previousVersion":"1.2.4","releaseTimestamp":"2010-03-20T18:56:44.00Z","requiredCore":"1.343","scm":"hudson.dev.java.net","sha1":"qKOSENwI3uZqYm9v8iaBDs1RMf0=","title":"LabeledTestGroupsPublisher Plugin","url":"http://updates.jenkins-ci.org/download/plugins/labeled-test-groups-publisher/1.2.6/labeled-test-groups-publisher.hpi","version":"1.2.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/LabeledTestGroupsPublisher+Plugin"},"labmanager":{"buildDate":"Aug 05, 2011","dependencies":[],"developers":[{"developerId":"tomrini","email":"trini@kernel.crashing.org","name":"Tom Rini"}],"excerpt":"Add VMware Lab Manager support to Jenkins","gav":"org.jenkins-ci.plugins:labmanager:0.2.8","labels":["cluster"],"name":"labmanager","previousTimestamp":"2011-07-18T19:12:32.00Z","previousVersion":"0.2.7","releaseTimestamp":"2011-08-05T14:42:14.00Z","requiredCore":"1.403","scm":"github.com","sha1":"qc+HiOyoRAPvDCyvrtQ9W9pmLQ4=","title":"Lab Manager Plugin","url":"http://updates.jenkins-ci.org/download/plugins/labmanager/0.2.8/labmanager.hpi","version":"0.2.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Lab+Manager+Plugin"},"lastfailureversioncolumn":{"buildDate":"Nov 02, 2011","dependencies":[],"developers":[{"developerId":"ajpurkiss","email":"ajpurkiss@hotmail.com","name":"Adam Purkiss"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Adds a column showing last failed version that can be configured in views.","gav":"org.jvnet.hudson.plugins:lastfailureversioncolumn:1.1","labels":["listview-column"],"name":"lastfailureversioncolumn","previousTimestamp":"2009-11-25T15:12:18.00Z","previousVersion":"1.0","releaseTimestamp":"2011-11-02T19:54:40.00Z","requiredCore":"1.392","scm":"github.com","sha1":"TrjhYHvx09364NnzSgkj+XqemQg=","title":"Last Failure Version Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/lastfailureversioncolumn/1.1/lastfailureversioncolumn.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Last+Failure+Version+Column+Plugin"},"lastsuccessdescriptioncolumn":{"buildDate":"Mar 29, 2010","dependencies":[],"developers":[{"developerId":"stephenconnolly","email":"stephenc at apache","name":"Stephen Connolly"}],"excerpt":"Column showing the last success description that can be configured in views.","gav":"org.jvnet.hudson.plugins:lastsuccessdescriptioncolumn:1.0","labels":["listview-column"],"name":"lastsuccessdescriptioncolumn","releaseTimestamp":"2010-03-29T16:03:02.00Z","requiredCore":"1.352","scm":"svn.dev.java.net","sha1":"I2n8cOXtRE3nJI/spxIMtHBAxn8=","title":"Last Success Description Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/lastsuccessdescriptioncolumn/1.0/lastsuccessdescriptioncolumn.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Last+Success+Description+Column+Plugin"},"lastsuccessversioncolumn":{"buildDate":"Nov 02, 2011","dependencies":[],"developers":[{"developerId":"ajpurkiss","email":"ajpurkiss@hotmail.com","name":"Adam Purkiss"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Adds a column showing last successful version that can be configured in views.","gav":"org.jvnet.hudson.plugins:lastsuccessversioncolumn:1.1","labels":["listview-column"],"name":"lastsuccessversioncolumn","previousTimestamp":"2009-11-25T15:15:48.00Z","previousVersion":"1.0","releaseTimestamp":"2011-11-02T20:23:24.00Z","requiredCore":"1.392","scm":"github.com","sha1":"MTwbngVgz/iGTTeZwjEviC8CIHo=","title":"Last Success Version Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/lastsuccessversioncolumn/1.1/lastsuccessversioncolumn.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Last+Success+Version+Column+Plugin"},"ldap":{"buildDate":"Dec 06, 2012","dependencies":[],"developers":[{"developerId":"olamy"}],"excerpt":"Security realm based on LDAP authentication.","gav":"org.jenkins-ci.plugins:ldap:1.2","labels":["user"],"name":"ldap","previousTimestamp":"2012-06-11T12:46:48.00Z","previousVersion":"1.1","releaseTimestamp":"2012-12-06T05:07:48.00Z","requiredCore":"1.468","scm":"github.com","sha1":"IGPQPJsTRl4d9UHjBldQ4P8DKNo=","title":"LDAP Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ldap/1.2/ldap.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/LDAP+Plugin"},"ldapemail":{"buildDate":"Feb 14, 2011","dependencies":[],"developers":[{"developerId":"justinedelson","name":"Justin Edelson"}],"excerpt":"This plugin resolves user email addresses from an LDAP directory. It is not needed if Jenkins uses LDAP as its authentication source and user records have a standard \"mail\" attribute.","gav":"com.mtvi.plateng.hudson:ldapemail:0.7","labels":["user"],"name":"ldapemail","previousTimestamp":"2010-01-31T20:19:28.00Z","previousVersion":"0.6","releaseTimestamp":"2011-02-14T15:47:26.00Z","requiredCore":"1.377","scm":"svn.jenkins-ci.org","sha1":"Q1UqwPQJ9sILBa8KpiC6hzozVD4=","title":"LDAP Email Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ldapemail/0.7/ldapemail.hpi","version":"0.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/LDAP+Email+Plugin"},"leiningen-plugin":{"buildDate":"Oct 29, 2012","dependencies":[],"developers":[{"developerId":"pyr","email":"pyr@spootnik.org","name":"Pierre-Yves Ritschard"}],"excerpt":"This plugin allows building projects using leiningen<\/a>. ","gav":"org.jenkins-ci.plugins:leiningen-plugin:0.5.5","labels":["builder"],"name":"leiningen-plugin","previousTimestamp":"2012-09-07T13:11:38.00Z","previousVersion":"0.5.4","releaseTimestamp":"2012-10-29T19:00:26.00Z","requiredCore":"1.424","scm":"github.com","sha1":"EK4cKrLwhOuqEbpcnMmg4SG39ro=","title":"leiningen plugin","url":"http://updates.jenkins-ci.org/download/plugins/leiningen-plugin/0.5.5/leiningen-plugin.hpi","version":"0.5.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/leiningen+plugin"},"libvirt-slave":{"buildDate":"Apr 01, 2010","dependencies":[],"developers":[{"developerId":"mmornati","email":"mmornati@byte-code.com","name":"Marco Mornati"}],"excerpt":"Add Libvirt Hypervisor support to Jenkins ","gav":"hudson.plugins.libvirt:libvirt-slave:1.6","labels":["slaves","cluster"],"name":"libvirt-slave","previousTimestamp":"2010-03-30T15:22:16.00Z","previousVersion":"1.5","releaseTimestamp":"2010-04-01T13:31:26.00Z","requiredCore":"1.347","scm":"svn.dev.java.net","sha1":"3JDC9QPj5p+JJMdiNaDMYgWJpc4=","title":"Libvirt Slaves Plugin","url":"http://updates.jenkins-ci.org/download/plugins/libvirt-slave/1.6/libvirt-slave.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Libvirt+Slaves+Plugin"},"lingr-plugin":{"buildDate":"Jul 03, 2011","dependencies":[],"developers":[{"developerId":"cactusman","email":"cactusman1980@gmail.com","name":"cactusman"}],"excerpt":"This plugin posts build results to Lingr.","gav":"org.jenkins-ci.plugins:lingr-plugin:0.1","labels":[],"name":"lingr-plugin","releaseTimestamp":"2011-07-04T03:14:14.00Z","requiredCore":"1.398","scm":"github.com","sha1":"LO6eODnAR0TTzMunzjDmv9LZLk0=","title":"lingr plugin","url":"http://updates.jenkins-ci.org/download/plugins/lingr-plugin/0.1/lingr-plugin.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/lingr+plugin"},"list-command":{"buildDate":"Dec 13, 2011","dependencies":[],"developers":[{"developerId":"wadatka","name":"Takahisa Wada"}],"excerpt":"","gav":"org.jenkins-ci.plugins:list-command:0.2","labels":["cli"],"name":"list-command","releaseTimestamp":"2011-12-13T06:39:14.00Z","requiredCore":"1.409","scm":"github.com","sha1":"wsiA/aNli+2UOL7iYNN9pQqiFng=","title":"List Command Plugin","url":"http://updates.jenkins-ci.org/download/plugins/list-command/0.2/list-command.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/List+Command+Plugin"},"liverebel-deploy":{"buildDate":"Nov 21, 2012","dependencies":[],"developers":[{"developerId":"toomasr","name":"Toomas Romer"},{"developerId":"DracoAter","name":"Juri Timosin"},{"developerId":"mirkozt","name":"Mirko Adari"},{"developerId":"atsuiboupin","name":"Ats Uiboupin"},{"developerId":"poolik","name":"Tonis Pool"}],"excerpt":"LiveRebel Plugin helps to run updates to your JEE containers faster. LiveRebel is a tool for hot updates without downtime, lost sessions and OutOfMemoryErrors. You have to have a running LiveRebel Command Center to use this plugin.","gav":"org.jenkins-ci.plugins:liverebel-deploy:2.5.4","name":"liverebel-deploy","previousTimestamp":"2012-11-22T00:05:34.00Z","previousVersion":"2.5.3","releaseTimestamp":"2012-11-22T00:45:14.00Z","requiredCore":"1.423","scm":"github.com","sha1":"vNUI81TLpPqia5XY6Epc8tGpMWg=","title":"LiveRebel Plugin","url":"http://updates.jenkins-ci.org/download/plugins/liverebel-deploy/2.5.4/liverebel-deploy.hpi","version":"2.5.4"},"locale":{"buildDate":"Feb 14, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin controls the language of Jenkins","gav":"org.jvnet.hudson.plugins:locale:1.2","labels":["ui"],"name":"locale","previousTimestamp":"2009-12-30T20:34:04.00Z","previousVersion":"1.1","releaseTimestamp":"2011-02-14T15:32:34.00Z","requiredCore":"1.377","scm":"svn.jenkins-ci.org","sha1":"HmtbDDPNAYBO4A4OWzjUg4zzyQY=","title":"Locale Plugin","url":"http://updates.jenkins-ci.org/download/plugins/locale/1.2/locale.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Locale+Plugin"},"locked-files-report":{"buildDate":"Feb 03, 2012","dependencies":[],"developers":[{"developerId":"redsolo","email":"eramfelt@gmail.com","name":"Erik Ramfelt"}],"excerpt":"This debug plugin fails a build if there are locked files in the workspace at the begining or end of a build.","gav":"org.jvnet.hudson.plugins:locked-files-report:1.6","labels":["misc"],"name":"locked-files-report","previousTimestamp":"2011-11-17T04:11:50.00Z","previousVersion":"1.5","releaseTimestamp":"2012-02-03T16:37:10.00Z","requiredCore":"1.363","scm":"github.com","sha1":"RTRJ07yTXFfmfA5guhnhmIw2zig=","title":"Locked Files Report Plugin","url":"http://updates.jenkins-ci.org/download/plugins/locked-files-report/1.6/locked-files-report.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Locked+Files+Report+Plugin"},"locks-and-latches":{"buildDate":"Apr 16, 2010","dependencies":[],"developers":[{"developerId":"F276977"}],"excerpt":"This plugin allows you to control the parallel execution of jobs.","gav":"org.jvnet.hudson.plugins:locks-and-latches:0.6","labels":["trigger","buildwrapper"],"name":"locks-and-latches","previousTimestamp":"2009-12-26T17:42:06.00Z","previousVersion":"0.5","releaseTimestamp":"2010-04-16T18:46:48.00Z","requiredCore":"1.318","scm":"svn.dev.java.net","sha1":"zbuMjM7kQDsLt4fkzLxcCZWAcEI=","title":"Locks and Latches plugin","url":"http://updates.jenkins-ci.org/download/plugins/locks-and-latches/0.6/locks-and-latches.hpi","version":"0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Locks+and+Latches+plugin"},"log-command":{"buildDate":"Nov 20, 2012","dependencies":[{"name":"instant-messaging","optional":true,"version":"1.22"}],"developers":[{"developerId":"ialbors","name":"Ignacio Albors"}],"excerpt":"Adds a command for the CLI which shows a build's console log. If instant-messaging-plugin<\/a> is installed, it also provides a command for it (Jabber, IRC, ...).","gav":"org.jenkins-ci.plugins:log-command:1.0.1","labels":["cli"],"name":"log-command","previousTimestamp":"2012-11-14T21:57:28.00Z","previousVersion":"1.0.0","releaseTimestamp":"2012-11-20T18:13:08.00Z","requiredCore":"1.466","scm":"github.com","sha1":"463jFhLMW7JM0p4leFcAdOnx8gM=","title":"Log Command","url":"http://updates.jenkins-ci.org/download/plugins/log-command/1.0.1/log-command.hpi","version":"1.0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Log+Command"},"log-parser":{"buildDate":"Dec 14, 2010","dependencies":[],"developers":[{"developerId":"rgoren","email":"rgoren@cisco.com","name":"Rinat Ailon"},{"developerId":"jborghi","name":"John Borghi"}],"excerpt":"Parse the console output and highlight error/warning/info lines.","gav":"org.jvnet.hudson.plugins:log-parser:1.0.8","labels":["report"],"name":"log-parser","previousTimestamp":"2010-08-24T18:30:26.00Z","previousVersion":"1.0.7","releaseTimestamp":"2010-12-14T23:30:40.00Z","requiredCore":"1.350","scm":"svn.java.net","sha1":"E7PtHvlAe19jLoUL4auFXjFBuQI=","title":"Log Parser Plugin","url":"http://updates.jenkins-ci.org/download/plugins/log-parser/1.0.8/log-parser.hpi","version":"1.0.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Log+Parser+Plugin"},"logaction-plugin":{"buildDate":"Dec 09, 2011","dependencies":[],"developers":[{"developerId":"tspengler","name":"Thomas Spengler"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Centralized configuration to restart jobs when a pattern occurs in the job console output.","gav":"de.fspengler.hudson.plugin:logaction-plugin:1.2","labels":["trigger"],"name":"logaction-plugin","releaseTimestamp":"2011-12-09T20:10:58.00Z","requiredCore":"1.392","scm":"github.com","sha1":"h5n7nAMn1cTIE76p72JCU8Sdn/I=","title":"Centralized Job(Re)Action Plugin","url":"http://updates.jenkins-ci.org/download/plugins/logaction-plugin/1.2/logaction-plugin.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Centralized+Job%28Re%29Action+Plugin"},"logfilesizechecker":{"buildDate":"Sep 10, 2012","dependencies":[],"developers":[{"developerId":"stefanbrausch","email":"stefan.brausch@1und1.de","name":"Stefan Brausch"},{"developerId":"kstutz","email":"logfilesizechecker@kathistutz.de","name":"Kathi Stutz"}],"excerpt":"Aborts a build if its log file gets too big.","gav":"org.jenkins-ci.plugins:logfilesizechecker:1.0","labels":["buildwrapper"],"name":"logfilesizechecker","releaseTimestamp":"2012-09-10T21:16:48.00Z","requiredCore":"1.424.6","scm":"github.com","sha1":"ViVedzoIuG7IweIxL3YWunyDm6Y=","title":"Logfilesizechecker Plugin","url":"http://updates.jenkins-ci.org/download/plugins/logfilesizechecker/1.0/logfilesizechecker.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Logfilesizechecker+Plugin"},"logging":{"buildDate":"Nov 06, 2012","dependencies":[],"developers":[{"developerId":"wolfgarnet","email":"coolers@praqma.net","name":"Christian Wolfgang"}],"excerpt":"Advanced logging for Jenkins","gav":"net.praqma:logging:0.2.6","labels":["misc"],"name":"logging","previousTimestamp":"2012-10-01T19:03:04.00Z","previousVersion":"0.2.5","releaseTimestamp":"2012-11-06T05:57:54.00Z","requiredCore":"1.483","scm":"github.com","sha1":"KnnEo1edZZYMFF1p7EmpCk+UTjA=","title":"Logging Plugin","url":"http://updates.jenkins-ci.org/download/plugins/logging/0.2.6/logging.hpi","version":"0.2.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Logging+Plugin"},"lotus-connections-plugin":{"buildDate":"Nov 07, 2012","dependencies":[],"developers":[{"developerId":"philrumble","email":"prumble@au1.ibm.com","name":"Phil Rumble"}],"excerpt":"This plugin posts build results to Lotus Connections. ","gav":"org.jenkins-ci.plugins:lotus-connections-plugin:1.18","labels":["notifier"],"name":"lotus-connections-plugin","previousTimestamp":"2012-11-06T15:25:30.00Z","previousVersion":"1.17","releaseTimestamp":"2012-11-07T16:25:10.00Z","requiredCore":"1.425","scm":"github.com","sha1":"qrrK3PuD7dIX/OFNTW3+6y42v00=","title":"Lotus Connections plugin","url":"http://updates.jenkins-ci.org/download/plugins/lotus-connections-plugin/1.18/lotus-connections-plugin.hpi","version":"1.18","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Lotus+Connections+plugin"},"m2-extra-steps":{"buildDate":"Mar 06, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.405"}],"developers":[{"developerId":"abayer","email":"andrew.bayer@gmail.com","name":"Andrew Bayer"}],"excerpt":"Deprecated since core 1.433. This plugin provides the ability to add pre\\- and post-build steps to Maven 2-type projects.","gav":"org.jenkins-ci.plugins:m2-extra-steps:1.1.7","labels":["maven","buildwrapper"],"name":"m2-extra-steps","previousTimestamp":"2011-02-17T22:02:08.00Z","previousVersion":"1.1.4","releaseTimestamp":"2012-03-06T15:24:48.00Z","requiredCore":"1.405","scm":"github.com","sha1":"NXhS+oZu2LXH+r3owM8g+KQjY4M=","title":"M2 Extra Steps Plugin","url":"http://updates.jenkins-ci.org/download/plugins/m2-extra-steps/1.1.7/m2-extra-steps.hpi","version":"1.1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/M2+Extra+Steps+Plugin"},"m2-repo-reaper":{"buildDate":"Oct 04, 2009","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.326"}],"developers":[{"developerId":"bimargulies","email":"bimargulies@gmail.com","name":"Benson Margulies"}],"excerpt":"This plugin allows you to configure a maven2 job to clean some or all of the artifacts from the repository before it runs.","gav":"org.jvnet.hudson.plugins:m2-repo-reaper:1.0","labels":["maven"],"name":"m2-repo-reaper","releaseTimestamp":"2009-10-04T22:36:20.00Z","requiredCore":"1.326","scm":"svn.dev.java.net","sha1":"OfP4GcPtlYX4tSKveYgBKar1/IU=","title":"M2 Repository Cleanup Plugin","url":"http://updates.jenkins-ci.org/download/plugins/m2-repo-reaper/1.0/m2-repo-reaper.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/M2+Repository+Cleanup+Plugin"},"m2release":{"buildDate":"Mar 01, 2012","dependencies":[{"name":"maven-plugin","optional":true,"version":"2.2.1"},{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":true,"version":"1.442"}],"developers":[{"developerId":"teilo","name":"James Nord"},{"developerId":"m68k","name":"Christian Slama"},{"developerId":"imod","name":"Dominik Bartholdi"}],"excerpt":"This plugin allows you to perform a release build using the maven-release-plugin<\/a> from within Jenkins. ","gav":"org.jvnet.hudson.plugins.m2release:m2release:0.9.1","labels":["buildwrapper","maven"],"name":"m2release","previousTimestamp":"2012-02-14T02:16:34.00Z","previousVersion":"0.9.0","releaseTimestamp":"2012-03-02T03:07:30.00Z","requiredCore":"1.442","scm":"github.com","sha1":"gvSzteQBQNyKsA8/n4CjA1gKY9w=","title":"M2 Release Plugin","url":"http://updates.jenkins-ci.org/download/plugins/m2release/0.9.1/m2release.hpi","version":"0.9.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/M2+Release+Plugin"},"mail-watcher-plugin":{"buildDate":"Nov 27, 2012","dependencies":[],"developers":[{"developerId":"olivergondza","email":"ogondza@redhat.org","name":"Oliver Gondža"}],"excerpt":"This plugin notifies configured email recipients on various events.","gav":"org.jenkins-ci.plugins:mail-watcher-plugin:1.4","labels":["notifier"],"name":"mail-watcher-plugin","previousTimestamp":"2012-08-13T16:02:28.00Z","previousVersion":"1.3","releaseTimestamp":"2012-11-27T19:29:00.00Z","requiredCore":"1.460","scm":"github.com","sha1":"qoNIny4C0Cla2oCPvE6v5emFZ6U=","title":"Mail Watcher Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mail-watcher-plugin/1.4/mail-watcher-plugin.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Mail+Watcher+Plugin"},"mailcommander":{"buildDate":"Mar 29, 2011","dependencies":[],"developers":[{"developerId":"sikakura","email":"sikakura@gmail.com","name":"Naoto Shikakura"}],"excerpt":"This plugin is provide function that command with e-mail. Write CLI command to e-mail subject and send to pre setting address. Mail Commander recieve e-mail from pre setting address, and read e-mail subject as CLI command, execute it. ","gav":"org.jenkins-ci.plugins:mailcommander:1.0.0","labels":["misc","trigger"],"name":"mailcommander","releaseTimestamp":"2011-03-29T22:40:10.00Z","requiredCore":"1.398","scm":"github.com","sha1":"VIMj7SMq0q1KjiWU3XV2LoKl4ck=","title":"Mail Commander Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mailcommander/1.0.0/mailcommander.hpi","version":"1.0.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Mail+Commander+Plugin"},"mailer":{"buildDate":"Dec 11, 2012","dependencies":[],"developers":[{"developerId":"slide","email":"slide.o.mix@gmail.com","name":"Alex Earl"}],"excerpt":"This plugin allows you to configure email notifications. This is a break-out of the original core based email component.","gav":"org.jenkins-ci.plugins:mailer:1.4","labels":[],"name":"mailer","previousTimestamp":"2012-12-09T11:47:18.00Z","previousVersion":"1.3","releaseTimestamp":"2012-12-11T14:57:26.00Z","requiredCore":"1.494","scm":"github.com","sha1":"bFbSgXi8beI21BGEtWNXXsXHSSU=","title":"Mailer","url":"http://updates.jenkins-ci.org/download/plugins/mailer/1.4/mailer.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Mailer"},"managed-scripts":{"buildDate":"Oct 11, 2012","dependencies":[{"name":"config-file-provider","optional":false,"version":"2.0"}],"developers":[{"developerId":"imod","name":"Dominik Bartholdi"}],"excerpt":"Managed scripts are shell script which are managed centrally by an administrator and can be referenced as a build step within jobs. ","gav":"org.jenkinsci.plugins:managed-scripts:1.0.1","labels":["builder"],"name":"managed-scripts","previousTimestamp":"2012-04-14T15:53:10.00Z","previousVersion":"1.0","releaseTimestamp":"2012-10-11T23:22:04.00Z","requiredCore":"1.458","scm":"github.com","sha1":"XoL/aR2532IzNJMWVLEMtPT0jTM=","title":"Managed Script Plugin","url":"http://updates.jenkins-ci.org/download/plugins/managed-scripts/1.0.1/managed-scripts.hpi","version":"1.0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Managed+Script+Plugin"},"mantis":{"buildDate":"May 01, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"},{"name":"mercurial","optional":true,"version":"1.38"},{"name":"cvs","optional":true,"version":"2.0"},{"name":"git","optional":true,"version":"1.1.16"},{"name":"subversion","optional":true,"version":"1.34"}],"developers":[{"developerId":"sogabe","email":"s.sogabe@gmail.com","name":"Seiji Sogabe"}],"excerpt":"This plugin integrates Mantis Bug Tracker<\/a> to Jenkins.","gav":"org.jenkins-ci.plugins:mantis:0.24","labels":["external"],"name":"mantis","previousTimestamp":"2012-04-01T14:45:38.00Z","previousVersion":"0.23","releaseTimestamp":"2012-05-01T08:03:46.00Z","requiredCore":"1.424","scm":"github.com","sha1":"7Bck6rhjKQo4D2Xkv0eRxCA+gtY=","title":"Mantis Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mantis/0.24/mantis.hpi","version":"0.24","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Mantis+Plugin"},"mask-passwords":{"buildDate":"Dec 07, 2011","dependencies":[],"developers":[{"developerId":"rseguy","email":"romain.seguy@gmail.com","name":"Romain Seguy"}],"excerpt":"This plugin allows masking passwords that may appear in the console","gav":"org.jenkins-ci.plugins:mask-passwords:2.7.2","labels":["misc","buildwrapper"],"name":"mask-passwords","previousTimestamp":"2011-10-27T14:08:40.00Z","previousVersion":"2.7.1","releaseTimestamp":"2011-12-07T22:34:20.00Z","requiredCore":"1.409","scm":"svn.jenkins-ci.org","sha1":"KYnDW0mS7LT9QqcbiQGwSnrHcY0=","title":"Mask Passwords Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mask-passwords/2.7.2/mask-passwords.hpi","version":"2.7.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Mask+Passwords+Plugin"},"matrix-reloaded":{"buildDate":"Jun 05, 2012","dependencies":[{"name":"downstream-ext","optional":true,"version":"1.7"}],"developers":[{"developerId":"wolfgarnet","email":"coolers@praqma.net","name":"Christian Wolfgang"}],"excerpt":"The Matrix Reloaded Plugin allows for rebuilding parts of an already built Matrix build.","gav":"net.praqma:matrix-reloaded:1.1.0","labels":["misc"],"name":"matrix-reloaded","previousTimestamp":"2012-01-27T10:25:14.00Z","previousVersion":"1.0.2","releaseTimestamp":"2012-06-05T05:29:20.00Z","requiredCore":"1.418","scm":"github.com","sha1":"xSvwhLU6lvwdwxSVGSA2UI0h+m4=","title":"Matrix Reloaded Plugin","url":"http://updates.jenkins-ci.org/download/plugins/matrix-reloaded/1.1.0/matrix-reloaded.hpi","version":"1.1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Matrix+Reloaded+Plugin"},"matrixtieparent":{"buildDate":"Aug 23, 2010","dependencies":[],"developers":[{"developerId":"kbertelson","name":"Ken Bertelson"}],"excerpt":"Ties the parent build of a multi-configuration project to a node.","gav":"org.jvnet.hudson.plugins:matrixtieparent:1.1","labels":["buildwrapper"],"name":"matrixtieparent","previousTimestamp":"2010-06-08T12:23:20.00Z","previousVersion":"1.0","releaseTimestamp":"2010-08-23T20:51:26.00Z","requiredCore":"1.373","scm":"svn.dev.java.net","sha1":"rwErLQ/J5sYGD0Vz/wCzwzYpe00=","title":"Matrix Tie Parent Plugin","url":"http://updates.jenkins-ci.org/download/plugins/matrixtieparent/1.1/matrixtieparent.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Matrix+Tie+Parent+Plugin"},"maven-dependency-update-trigger":{"buildDate":"Dec 30, 2011","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424.1"}],"developers":[{"developerId":"olamy","email":"olamy@apache.org"}],"excerpt":"This plugin will check if any SNAPSHOT dependencies (or optionally plugins SNAPSHOT) have been updated during your project's dependencies resolution and trigger a build. You have to configure a cron expression.","gav":"org.jenkins-ci.plugins:maven-dependency-update-trigger:1.4","labels":["trigger"],"name":"maven-dependency-update-trigger","previousTimestamp":"2011-08-13T14:44:12.00Z","previousVersion":"1.3","releaseTimestamp":"2011-12-30T21:15:14.00Z","requiredCore":"1.424.1","scm":"github.com","sha1":"QbYx4H55qskJfKAf/poqBbLjZ4w=","title":"Maven Dependency Update trigger","url":"http://updates.jenkins-ci.org/download/plugins/maven-dependency-update-trigger/1.4/maven-dependency-update-trigger.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Maven+Dependency+Update+trigger"},"maven-deployment-linker":{"buildDate":"May 11, 2012","dependencies":[{"name":"async-http-client","optional":false,"version":"1.7.4"}],"developers":[{"developerId":"lshatzer","email":"larrys@gmail.com","name":"Larry Shatzer, Jr."},{"developerId":"vlatombe","email":"vincent.latombe@gmail.com","name":"Vincent Latombe"},{"developerId":"aheritier","email":"aheritier@apache.org","name":"Arnaud H�ritier"},{"developerId":"imod","name":"Dominik Bartholdi"}],"excerpt":"This plugin will add a summary on the build of the artifacts uploaded to your maven repository and a builder to download the uploaded artifacts to other projects. ","gav":"org.jvnet.hudson.plugins:maven-deployment-linker:1.5","labels":["maven","misc","post-build"],"name":"maven-deployment-linker","previousTimestamp":"2011-11-30T18:16:40.00Z","previousVersion":"1.4","releaseTimestamp":"2012-05-11T10:12:24.00Z","requiredCore":"1.406","scm":"github.com","sha1":"WQoh5v7YkBXt6ElM1Q0Awx+MoiU=","title":"Maven Deployment Linker","url":"http://updates.jenkins-ci.org/download/plugins/maven-deployment-linker/1.5/maven-deployment-linker.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Maven+Deployment+Linker"},"maven-info":{"buildDate":"Apr 11, 2011","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.403"}],"developers":[{"developerId":"tomfolga","email":"tomfolga@gmail.com","name":"Tom Folga"},{"developerId":"olamy","email":"olamy@apache.org","name":"Olivier Lamy"}],"excerpt":"Adds columns configurable in views to show info about Maven jobs.","gav":"org.tomfolga:maven-info:0.0.4","labels":["maven","listview-column"],"name":"maven-info","previousTimestamp":"2009-12-28T22:52:10.00Z","previousVersion":"0.0.3","releaseTimestamp":"2011-04-12T03:38:06.00Z","requiredCore":"1.403","scm":"github.com","sha1":"2dBQ8RFU8doGYPwiOwt/0wrF03s=","title":"Maven Info Plugin","url":"http://updates.jenkins-ci.org/download/plugins/maven-info/0.0.4/maven-info.hpi","version":"0.0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Maven+Info+Plugin"},"maven-invoker-plugin":{"buildDate":"Sep 26, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"}],"developers":[{"developerId":"olamy"}],"excerpt":"Display reports on Maven Invoker it tests.","gav":"org.jenkins-ci.plugins:maven-invoker-plugin:1.2","labels":["maven","external"],"name":"maven-invoker-plugin","previousTimestamp":"2012-08-07T16:07:34.00Z","previousVersion":"1.1","releaseTimestamp":"2012-09-26T14:59:44.00Z","requiredCore":"1.424","scm":"github.com","sha1":"t+q8qhvZtYEhCP2h9ydHmsoW54o=","title":"Maven Invoker Plugin","url":"http://updates.jenkins-ci.org/download/plugins/maven-invoker-plugin/1.2/maven-invoker-plugin.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Maven+Invoker+Plugin"},"maven-metadata-plugin":{"buildDate":"Apr 17, 2012","dependencies":[],"developers":[{"developerId":"markov","email":"gesh@markov.eu","name":"Georgi \"Gesh\" Markov"}],"excerpt":"This plugin adds a new build parameter type for resolving artifact versions reading the repository maven-metadata.xml<\/a>. ","gav":"eu.markov.jenkins.plugin.mvnmeta:maven-metadata-plugin:1.0.0","labels":["maven","parameter"],"name":"maven-metadata-plugin","releaseTimestamp":"2012-04-17T04:37:50.00Z","requiredCore":"1.447","scm":"github.com","sha1":"Ibn9AwLZAwe70Eg9ARNhOfoxIGU=","title":"Maven Metadata Plugin","url":"http://updates.jenkins-ci.org/download/plugins/maven-metadata-plugin/1.0.0/maven-metadata-plugin.hpi","version":"1.0.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Maven+Metadata+Plugin"},"maven-plugin":{"buildDate":"Jan 07, 2013","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"token-macro","optional":true,"version":"1.1"},{"name":"mailer","optional":false,"version":"1.3"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"Jenkin's Maven 2 project type","gav":"org.jenkins-ci.main:maven-plugin:1.498","labels":["builder"],"name":"maven-plugin","previousTimestamp":"2013-01-06T18:35:28.00Z","previousVersion":"1.497","releaseTimestamp":"2013-01-07T15:49:02.00Z","requiredCore":"1.498","scm":"github.com","sha1":"e2SpfZjG8sXhm0B0UxcoUor3Vx4=","title":"Maven 2 Project Plugin","url":"http://updates.jenkins-ci.org/download/plugins/maven-plugin/1.498/maven-plugin.hpi","version":"1.498","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Maven+2+Project+Plugin"},"maven-repo-cleaner":{"buildDate":"Jan 08, 2013","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.468"}],"developers":[{"developerId":"abayer","email":"andrew.bayer@gmail.com","name":"Andrew Bayer"},{"developerId":"olamy","name":"Olivier Lamy"}],"excerpt":"Clean your jobs maven repositories.","gav":"org.jenkins-ci.plugins:maven-repo-cleaner:1.2","labels":["maven","external"],"name":"maven-repo-cleaner","previousTimestamp":"2012-04-24T17:37:56.00Z","previousVersion":"1.1","releaseTimestamp":"2013-01-08T19:03:10.00Z","requiredCore":"1.468","scm":"github.com","sha1":"AZrDlB5CA7b9DO5cZoQP7AK18Dg=","title":"Maven Repo Cleaner Plugin","url":"http://updates.jenkins-ci.org/download/plugins/maven-repo-cleaner/1.2/maven-repo-cleaner.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Maven+Repo+Cleaner+Plugin"},"measurement-plots":{"buildDate":"Apr 07, 2010","dependencies":[],"developers":[{"developerId":"krwalker","email":"krwalker@stellarscience.com","name":"K. R. Walker"}],"excerpt":"Plot measurements embedded into the standard output and error streams of tests.","gav":"org.jvnet.hudson.plugins:measurement-plots:0.1","labels":["report","ui"],"name":"measurement-plots","releaseTimestamp":"2010-04-07T15:51:46.00Z","requiredCore":"1.353","scm":"svn.dev.java.net","sha1":"amNqnjOy0kALkROSNj7RlllqBes=","title":"Measurement Plots Plugin","url":"http://updates.jenkins-ci.org/download/plugins/measurement-plots/0.1/measurement-plots.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Measurement+Plots+Plugin"},"memegen":{"buildDate":"Aug 18, 2012","dependencies":[],"developers":[{"developerId":"joonty","email":"jon@joncairns.com","name":"Jon Cairns"}],"excerpt":"Generate Meme images when a build fails (and returns to stable), and post them on the project page.","gav":"hudson.plugins.memegen:memegen:0.4.3","labels":["misc"],"name":"memegen","previousTimestamp":"2012-07-25T16:46:46.00Z","previousVersion":"0.4.2","releaseTimestamp":"2012-08-18T18:27:52.00Z","requiredCore":"1.428","scm":"github.com","sha1":"a2YT4odR+TftMmBR1GM/xyZUepg=","title":"Meme Generator Plugin","url":"http://updates.jenkins-ci.org/download/plugins/memegen/0.4.3/memegen.hpi","version":"0.4.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Meme+Generator+Plugin"},"memory-map":{"buildDate":"Jan 03, 2013","dependencies":[],"developers":[{"developerId":"praqma"}],"excerpt":"","gav":"net.praqma:memory-map:0.1.2","name":"memory-map","previousTimestamp":"2012-12-21T17:04:16.00Z","previousVersion":"0.1.1","releaseTimestamp":"2013-01-03T16:46:50.00Z","requiredCore":"1.484","scm":"github.com","sha1":"B3mAip7ASkL+ZaavCantpN0i0E0=","title":"Memory Map Plugin","url":"http://updates.jenkins-ci.org/download/plugins/memory-map/0.1.2/memory-map.hpi","version":"0.1.2"},"mercurial":{"buildDate":"Nov 06, 2012","dependencies":[],"developers":[{"developerId":"jglick","email":"jglick@cloudbees.com","name":"Jesse Glick"},{"developerId":"mfriedenhagen","email":"mfriedenhagen@gmail.com","name":"Mirko Friedenhagen"},{"developerId":"kohsuke","email":"kk@kohsuke.org","name":"Kohsuke Kawaguchi"},{"developerId":"davidmc24","email":"david@carrclan.us","name":"David M. Carr"}],"excerpt":"This plugin integrates the Mercurial version control system<\/a> with Jenkins.","gav":"org.jenkins-ci.plugins:mercurial:1.42","labels":["scm"],"name":"mercurial","previousTimestamp":"2012-06-05T15:32:46.00Z","previousVersion":"1.41","releaseTimestamp":"2012-11-06T15:44:52.00Z","requiredCore":"1.424","scm":"github.com","sha1":"4p47jh0Wvfq2hzF5vhXW+rcBdeg=","title":"Mercurial Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mercurial/1.42/mercurial.hpi","version":"1.42","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Mercurial+Plugin"},"metadata":{"buildDate":"Nov 22, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.424"}],"developers":[{"developerId":"rsandell","email":"robert.sandell@sonymobile.com","name":"Robert Sandell"},{"developerId":"t_westling","email":"tomas.westling@sonymobile.com","name":"Tomas Westling"}],"excerpt":"This plugin allows metadata to be added to projects, builds and slaves in Jenkins. Users can add metadata manually on a project or slave via the user interface. Metadata can also be added programmatically through a plugin. Currently, this can be done when a build starts or when a build ends. The Metadata can then be searched for.","gav":"com.sonyericsson.hudson.plugins.metadata:metadata:1.0b","labels":["misc","cli","library","ui"],"name":"metadata","releaseTimestamp":"2012-11-22T20:54:58.00Z","requiredCore":"1.424","scm":"github.com","sha1":"csrASr2vYSgQW3oRcPSwYgsH5hc=","title":"Metadata plugin","url":"http://updates.jenkins-ci.org/download/plugins/metadata/1.0b/metadata.hpi","version":"1.0b","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Metadata+plugin"},"mock-security-realm":{"buildDate":"Oct 15, 2012","dependencies":[],"developers":[{"developerId":"jglick","email":"jglick@cloudbees.com","name":"Jesse Glick"}],"excerpt":"Defines an insecure “security realm†only good for testing/demoing other parts of the system, such as authorization strategy.","gav":"org.jenkins-ci.plugins:mock-security-realm:1.0","labels":["user"],"name":"mock-security-realm","releaseTimestamp":"2012-10-15T21:43:26.00Z","requiredCore":"1.466","scm":"github.com","sha1":"p1Mn51uVzjA3NY8WctfAC/Flrjk=","title":"Mock Security Realm Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mock-security-realm/1.0/mock-security-realm.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Mock+Security+Realm+Plugin"},"mongodb":{"buildDate":"Aug 13, 2011","dependencies":[],"developers":[{"developerId":"kiy0taka","name":"Kiyotaka Oku"}],"excerpt":"This plugin provides MongoDB<\/a> integration capabilities.","gav":"org.jenkins-ci.plugins:mongodb:1.1","labels":["buildwrapper"],"name":"mongodb","previousTimestamp":"2011-06-13T03:10:04.00Z","previousVersion":"1.0","releaseTimestamp":"2011-08-13T22:25:40.00Z","requiredCore":"1.415","scm":"github.com","sha1":"LHjhJQsYgihyz1oMMWHmxY++lzA=","title":"MongoDB Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mongodb/1.1/mongodb.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/MongoDB+Plugin"},"monitoring":{"buildDate":"Dec 02, 2012","dependencies":[],"developers":[{"developerId":"evernat","email":"evernat@free.fr","name":"Emeric Vernat"}],"excerpt":"Monitoring plugin: Monitoring of Jenkins / Hudson itself with JavaMelody<\/a>. Open the report<\/a> (or [http://yourhost/monitoring]) after installation. ","gav":"org.jvnet.hudson.plugins:monitoring:1.42.0","labels":["misc"],"name":"monitoring","previousTimestamp":"2012-09-30T20:11:20.00Z","previousVersion":"1.41.0","releaseTimestamp":"2012-12-03T04:53:36.00Z","requiredCore":"1.424.1","scm":"svn.jenkins-ci.org","sha1":"IxikHEm09tHJvYHYuDm6srWJWek=","title":"Monitoring","url":"http://updates.jenkins-ci.org/download/plugins/monitoring/1.42.0/monitoring.hpi","version":"1.42.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Monitoring"},"monkit-plugin":{"buildDate":"Jun 08, 2012","dependencies":[],"developers":[{"developerId":"wolfgarnet","email":"coolers@praqma.net","name":"Christian Wolfgang"}],"excerpt":"*The MonKit plugin is used to display charts of data delivered in XML compliant with* *monkit.xsd<\/a>**. Monkit also has a small Java API you can use to produce the XML.* ","gav":"net.praqma:monkit-plugin:0.2.6","labels":[],"name":"monkit-plugin","previousTimestamp":"2012-06-08T15:38:48.00Z","previousVersion":"0.2.5","releaseTimestamp":"2012-06-08T17:57:40.00Z","requiredCore":"1.426","scm":"github.com","sha1":"3BK+9CQZ1Z8IbNHjoFUTzQeqF98=","title":"MonKit Plugin","url":"http://updates.jenkins-ci.org/download/plugins/monkit-plugin/0.2.6/monkit-plugin.hpi","version":"0.2.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/MonKit+Plugin"},"mozmill":{"buildDate":"Mar 03, 2010","dependencies":[],"developers":[{"developerId":"admc","name":"Adam Christian"}],"excerpt":"This plugin allows you to use Mozmill<\/a> for automated tests in Gecko based applications such as Firefox and Thunderbird.","gav":"org.jvnet.hudson.plugins:mozmill:1.3","labels":["report"],"name":"mozmill","previousTimestamp":"2009-09-26T01:08:04.00Z","previousVersion":"1.2","releaseTimestamp":"2010-03-03T14:53:58.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"KAMwwP+6nH6enzbIhbHqf3UXhHU=","title":"Mozmill Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mozmill/1.3/mozmill.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Mozmill+Plugin"},"msbuild":{"buildDate":"Sep 17, 2012","dependencies":[],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"},{"developerId":"kdsweeney","email":"kyle.sweeney@valtech.com","name":"Kyle Sweeney"}],"excerpt":"This plugin allows you to use MSBuild to build .NET projects. ","gav":"org.jenkins-ci.plugins:msbuild:1.16","labels":["builder"],"name":"msbuild","previousTimestamp":"2012-08-15T22:36:46.00Z","previousVersion":"1.15","releaseTimestamp":"2012-09-18T03:59:10.00Z","requiredCore":"1.410","scm":"github.com","sha1":"IyON3Vma6gGfp4D204eP2RrARJA=","title":"MSBuild Plugin","url":"http://updates.jenkins-ci.org/download/plugins/msbuild/1.16/msbuild.hpi","version":"1.16","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/MSBuild+Plugin"},"mstest":{"buildDate":"Jun 17, 2011","dependencies":[],"developers":[{"developerId":"acmarques","name":"Antonio Marques"}],"excerpt":"This plugin converts MSTest<\/a> TRX test reports into JUnit XML reports so it can be integrated with Hudson's JUnit features.","gav":"org.jvnet.hudson.plugins:mstest:0.7","labels":["report"],"name":"mstest","previousTimestamp":"2010-02-12T01:25:58.00Z","previousVersion":"0.6","releaseTimestamp":"2011-06-17T14:23:04.00Z","requiredCore":"1.398","scm":"svn.jenkins-ci.org","sha1":"FaaKhPYNMlF9Cz/FnvFI8PPZSyY=","title":"MSTest Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mstest/0.7/mstest.hpi","version":"0.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/MSTest+Plugin"},"mstestrunner":{"buildDate":"Sep 14, 2012","dependencies":[],"developers":[{"developerId":"ido_ran","email":"ido.ran@gmail.com","name":"Ido Ran"}],"excerpt":"This plugin allow you to execute test using MSTest command line tool. ","gav":"org.jenkins-ci.plugins:mstestrunner:0.2.1","labels":["builder"],"name":"mstestrunner","previousTimestamp":"2012-09-03T03:04:44.00Z","previousVersion":"0.2.0","releaseTimestamp":"2012-09-14T17:48:28.00Z","requiredCore":"1.447","scm":"github.com","sha1":"ac/Ft2vNccjBigOaOC258PpZ5Uo=","title":"MSTestRunner Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mstestrunner/0.2.1/mstestrunner.hpi","version":"0.2.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/MSTestRunner+Plugin"},"multi-module-tests-publisher":{"buildDate":"Dec 17, 2012","dependencies":[],"developers":[{"developerId":"vimil","email":"vimilsaju@yahoo.com","name":"Vimil Saju"}],"excerpt":"This plugin stores junit results into an embedded derby database and groups testcases by module,package,class and case ","gav":"org.jenkins-ci.plugins:multi-module-tests-publisher:1.30","labels":["post-build"],"name":"multi-module-tests-publisher","previousTimestamp":"2012-12-17T16:26:46.00Z","previousVersion":"1.29","releaseTimestamp":"2012-12-17T18:42:32.00Z","requiredCore":"1.398","scm":"github.com","sha1":"dO61rR0XMGqiyHT6pKSYUvshBt4=","title":"Multi Module Tests Publisher","url":"http://updates.jenkins-ci.org/download/plugins/multi-module-tests-publisher/1.30/multi-module-tests-publisher.hpi","version":"1.30","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Multi+Module+Tests+Publisher"},"multi-slave-config-plugin":{"buildDate":"Sep 22, 2011","dependencies":[],"developers":[{"developerId":"nilsi","email":"nicklas3.nilsson@sonyericsson.com","name":"Nicklas Nilsson"},{"developerId":"fredrikpersson","email":"fredrik4.persson@sonyericsson.com","name":"Fredrik Persson"},{"developerId":"rsandell","email":"robert.sandell@sonyericsson.com","name":"Robert Sandell"}],"excerpt":"This plugin allows administrators to configure, add and delete several dumb slaves at the same time. \\\\ ","gav":"com.sonyericsson.hudson.plugins.multi-slave-config-plugin:multi-slave-config-plugin:1.0.0","labels":["slaves","cluster"],"name":"multi-slave-config-plugin","releaseTimestamp":"2011-09-22T14:07:48.00Z","requiredCore":"1.404","scm":"github.com","sha1":"XnZWFOQiPcX+hnyeV2o9WZu0a3o=","title":"Multi slave config plugin","url":"http://updates.jenkins-ci.org/download/plugins/multi-slave-config-plugin/1.0.0/multi-slave-config-plugin.hpi","version":"1.0.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Multi+slave+config+plugin"},"multiline-tabbar-plugin":{"buildDate":"Oct 26, 2010","dependencies":[],"developers":[{"developerId":"wjprakash","name":"Winston Prakash"}],"excerpt":"Provides a multi-line tab bar for views.","gav":"org.jvnet.hudson.plugins:multiline-tabbar-plugin:1.1","labels":[],"name":"multiline-tabbar-plugin","releaseTimestamp":"2010-10-26T21:23:48.00Z","requiredCore":"1.381","scm":"svn.dev.java.net","sha1":"CwZW+NwZVngsfDjFR0QV1TQU0F4=","title":"Extension Point for Project Views Navigation","url":"http://updates.jenkins-ci.org/download/plugins/multiline-tabbar-plugin/1.1/multiline-tabbar-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Extension+Point+for+Project+Views+Navigation"},"multiple-scms":{"buildDate":"Jan 19, 2012","dependencies":[],"developers":[{"developerId":"kbell","email":"kbell6397@gmail.com","name":"Kevin Bell"}],"excerpt":"Allows a job to check out sources from multiple SCM providers.","gav":"org.jenkins-ci.plugins:multiple-scms:0.2","labels":["scm"],"name":"multiple-scms","previousTimestamp":"2011-03-07T13:35:58.00Z","previousVersion":"0.1","releaseTimestamp":"2012-01-20T03:40:26.00Z","requiredCore":"1.398","scm":"github.com","sha1":"VUywzdM7W830oUcHo9POQTy3vQk=","title":"Multiple SCMs Plugin","url":"http://updates.jenkins-ci.org/download/plugins/multiple-scms/0.2/multiple-scms.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Multiple+SCMs+Plugin"},"mysql-auth":{"buildDate":"Apr 16, 2010","dependencies":[],"developers":[{"developerId":"darkhonor","name":"Alex Ackerman"}],"excerpt":"This plugin allows users to authenticate to a Hudson instance using credentials stored in a MySQL database.","gav":"org.jvnet.hudson.plugins:mysql-auth:1.0","labels":["user"],"name":"mysql-auth","releaseTimestamp":"2010-04-16T18:53:42.00Z","requiredCore":"1.324","scm":"svn.dev.java.net","sha1":"AGFSK1xi/4VhdiFRaLAEbPQielE=","title":"MySQL Authentication Plugin","url":"http://updates.jenkins-ci.org/download/plugins/mysql-auth/1.0/mysql-auth.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/MySQL+Authentication+Plugin"},"nabaztag":{"buildDate":"Mar 24, 2010","dependencies":[],"developers":[{"developerId":"stephannoske","name":"Stephan Noske"},{"developerId":"ericlemerdy","name":"Eric Le Merdy"}],"excerpt":"Publish the result of a build to a Nabaztag<\/a>.","gav":"org.jvnet.hudson.plugins:nabaztag:1.9","labels":["notifier"],"name":"nabaztag","previousTimestamp":"2010-03-24T04:03:24.00Z","previousVersion":"1.8","releaseTimestamp":"2010-03-24T04:46:42.00Z","requiredCore":"1.352","scm":"svn.dev.java.net","sha1":"OoZ/cLug7ELrWrLnVVKQvPxKocE=","title":"Nabaztag Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nabaztag/1.9/nabaztag.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Nabaztag+Plugin"},"naginator":{"buildDate":"Jun 12, 2012","dependencies":[],"developers":[{"developerId":"abayer","email":"andrew.bayer@gmail.com","name":"Andrew Bayer"},{"developerId":"ndeloof","email":"nicolas.deloof@gmail.com","name":"Nicolas De Loof"}],"excerpt":"This plugin allows you to automatically reschedule a build after a build failure.","gav":"org.jenkins-ci.plugins:naginator:1.8","labels":["trigger"],"name":"naginator","previousTimestamp":"2012-05-31T11:57:44.00Z","previousVersion":"1.7","releaseTimestamp":"2012-06-12T18:27:52.00Z","requiredCore":"1.424","scm":"github.com","sha1":"PKx91+n+EUjCDYvSjlLEPsseJWA=","title":"Naginator Plugin","url":"http://updates.jenkins-ci.org/download/plugins/naginator/1.8/naginator.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Naginator+Plugin"},"nant":{"buildDate":"Nov 01, 2012","dependencies":[],"developers":[{"developerId":"jholzer","email":"jsholzer@gmail.com","name":"Justin Holzer"}],"excerpt":"This plugin allows for the execution of a NAnt<\/a> build as a build step.","gav":"org.jenkins-ci.plugins:nant:1.4.3","labels":["builder"],"name":"nant","previousTimestamp":"2011-08-06T03:10:18.00Z","previousVersion":"1.4.2","releaseTimestamp":"2012-11-01T19:09:26.00Z","requiredCore":"1.398","scm":"github.com","sha1":"Pfm4i25OeWGv2CozWtlYEeEpmf0=","title":"NAnt Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nant/1.4.3/nant.hpi","version":"1.4.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/NAnt+Plugin"},"ncover":{"buildDate":"Mar 03, 2010","dependencies":[],"developers":[{"developerId":"mcrooney","name":"Michael Rooney"}],"excerpt":"Archive and publish .NET code coverage HTML reports from NCover<\/a>.","gav":"org.jvnet.hudson.plugins:ncover:0.3","labels":["report"],"name":"ncover","previousTimestamp":"2009-07-28T15:03:22.00Z","previousVersion":"0.2.6","releaseTimestamp":"2010-03-03T15:19:58.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"a3ytPYkKW4fNuePM3moMw9L2atw=","title":"NCover Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ncover/0.3/ncover.hpi","version":"0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/NCover+Plugin"},"nerrvana-plugin":{"buildDate":"Jan 09, 2013","dependencies":[],"developers":[{"developerId":"vic","email":"wise@deepshiftlabs.com","name":"Victor Orlov"}],"excerpt":"The Nerrvana Jenkins plugin allows you to automate functional and cross browser Selenium testing of your web applications in Nerrvana cloud<\/a>. ","gav":"org.jenkins-ci.plugins:nerrvana-plugin:1.02.01","labels":["buildwrapper"],"name":"nerrvana-plugin","previousTimestamp":"2012-11-09T21:08:44.00Z","previousVersion":"1.02r","releaseTimestamp":"2013-01-09T21:18:00.00Z","requiredCore":"1.450","scm":"github.com","sha1":"INcuvHLlMvY9473ktzPxwEP2bVA=","title":"Nerrvana Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nerrvana-plugin/1.02.01/nerrvana-plugin.hpi","version":"1.02.01","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Nerrvana+Plugin"},"nested-view":{"buildDate":"Aug 16, 2012","dependencies":[],"developers":[{"developerId":"mindless","name":"Alan Harder"}],"excerpt":"View type to allow grouping job views into multiple levels instead of one big list of tabs.","gav":"org.jenkins-ci.plugins:nested-view:1.9","labels":["ui"],"name":"nested-view","previousTimestamp":"2011-07-28T13:12:10.00Z","previousVersion":"1.8","releaseTimestamp":"2012-08-16T18:21:48.00Z","requiredCore":"1.447","scm":"github.com","sha1":"cDhpdm1XhoFTOrJxvAbrYK5itmI=","title":"Nested View Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nested-view/1.9/nested-view.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Nested+View+Plugin"},"network-monitor":{"buildDate":"Nov 02, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","email":"kk@kohsuke.org","name":"Kohsuke Kawaguchi"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin checks that slaves can resolve host names.","gav":"org.jvnet.hudson.plugins:network-monitor:1.1","name":"network-monitor","previousTimestamp":"2011-11-02T21:21:52.00Z","previousVersion":"1.0","releaseTimestamp":"2011-11-02T21:23:54.00Z","requiredCore":"1.392","scm":"github.com","sha1":"LLmUM0bZA8aUt7UDRDJehDbm4Pc=","title":"Slave Monitor for network connectivity","url":"http://updates.jenkins-ci.org/download/plugins/network-monitor/1.1/network-monitor.hpi","version":"1.1"},"next-build-number":{"buildDate":"Oct 12, 2009","dependencies":[],"developers":[{"developerId":"dty","name":"Dean Yu"}],"excerpt":"This is a simple plugin that changes the next build number Hudson will use for a job.","gav":"org.jvnet.hudson.plugins:next-build-number:1.0","labels":["misc"],"name":"next-build-number","releaseTimestamp":"2009-10-12T16:47:52.00Z","requiredCore":"1.327","scm":"svn.dev.java.net","sha1":"zHL2fn/oow0DhVkyVqtXEwGgh6Q=","title":"Next Build Number Plugin","url":"http://updates.jenkins-ci.org/download/plugins/next-build-number/1.0/next-build-number.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Next+Build+Number+Plugin"},"next-executions":{"buildDate":"Nov 07, 2012","dependencies":[],"developers":[{"developerId":"ialbors","name":"Ignacio Albors"}],"excerpt":"Adds a widget in the sidebar with the next _build_ date for all the scheduled projects. It also creates a column definition.","gav":"org.jenkins-ci.plugins:next-executions:1.0.5","labels":["ui","listview-column"],"name":"next-executions","previousTimestamp":"2012-02-26T01:36:58.00Z","previousVersion":"1.0.4","releaseTimestamp":"2012-11-08T00:00:16.00Z","requiredCore":"1.448","scm":"github.com","sha1":"9YUI5a6xUlAd4K1xGyZ7U6DqZQU=","title":"Next Executions","url":"http://updates.jenkins-ci.org/download/plugins/next-executions/1.0.5/next-executions.hpi","version":"1.0.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Next+Executions"},"nexus-task-runner":{"buildDate":"Nov 07, 2012","dependencies":[],"developers":[{"developerId":"quramy","email":"yosuke.kurami@gmail.com","name":"Yosuke Kurami"}],"excerpt":"This plugin executes Sonatype Nexus scheduled tasks after your build. ","gav":"org.jenkins-ci.plugins:nexus-task-runner:0.9.2","labels":["external"],"name":"nexus-task-runner","previousTimestamp":"2012-11-05T08:31:54.00Z","previousVersion":"0.9.1","releaseTimestamp":"2012-11-07T06:05:14.00Z","requiredCore":"1.431","scm":"github.com","sha1":"x8AE0OnWLgmcJ0EEpG9CZfw/7fA=","title":"Nexus Task Runner Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nexus-task-runner/0.9.2/nexus-task-runner.hpi","version":"0.9.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Nexus+Task+Runner+Plugin"},"nodejs":{"buildDate":"Aug 13, 2010","dependencies":[],"developers":[{"developerId":"cliffano"}],"excerpt":"Executes NodeJS script as a build step.","gav":"org.jvnet.hudson.plugins:nodejs:0.1","labels":[],"name":"nodejs","releaseTimestamp":"2010-08-13T23:39:14.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"BleVb3djw0y+z7I/yO8OOZ85UrQ=","title":"NodeJS Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nodejs/0.1/nodejs.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/NodeJS+Plugin"},"nodelabelparameter":{"buildDate":"Dec 09, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"},{"name":"parameterized-trigger","optional":true,"version":"2.12"}],"developers":[{"developerId":"imod","name":"Dominik Bartholdi"}],"excerpt":"This plugin adds two new parameter types to job configuration - node and label, this allows to dynamically select the node where a job/project should be executed.","gav":"org.jenkins-ci.plugins:nodelabelparameter:1.3","labels":["slaves","trigger","parameter"],"name":"nodelabelparameter","previousTimestamp":"2012-07-02T22:58:44.00Z","previousVersion":"1.2.1","releaseTimestamp":"2012-12-09T23:19:18.00Z","requiredCore":"1.424","scm":"github.com","sha1":"7MiTTj/N+61jvS7/9pnzyXSDQz8=","title":"NodeLabel Parameter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nodelabelparameter/1.3/nodelabelparameter.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin"},"nodenamecolumn":{"buildDate":"Apr 17, 2010","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.323"}],"developers":[{"developerId":"knagired"}],"excerpt":"Adds column showing node name and can be configured in views.","gav":"org.jvnet.hudson.plugins:nodenamecolumn:1.1","labels":["listview-column"],"name":"nodenamecolumn","previousTimestamp":"2010-02-01T22:09:02.00Z","previousVersion":"1.0","releaseTimestamp":"2010-04-17T04:59:30.00Z","requiredCore":"1.323","scm":"svn.dev.java.net","sha1":"2H2mVNiHRJyec17oGx0nq7hFyJc=","title":"Node Name Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nodenamecolumn/1.1/nodenamecolumn.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Node+Name+Column+Plugin"},"nodeofflinenotification":{"buildDate":"Apr 01, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.9"}],"developers":[{"developerId":"Jens"}],"excerpt":"Get a notification by email if one of your nodes suddenly goes offline ","gav":"org.jenkins-ci.ruby-plugins:nodeofflinenotification:1.0.3","labels":[],"name":"nodeofflinenotification","previousTimestamp":"2012-03-31T23:22:28.00Z","previousVersion":"1.0.2","releaseTimestamp":"2012-04-01T13:09:52.00Z","requiredCore":"1.432","scm":"github.com","sha1":"3e3F4WMYh7ZHYZuc2fNfZqATmP4=","title":"Node Offline Notification Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nodeofflinenotification/1.0.3/nodeofflinenotification.hpi","version":"1.0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Node+Offline+Notification+Plugin"},"nopmdcheck":{"buildDate":"Oct 26, 2012","dependencies":[],"developers":[{"developerId":"quramy","email":"yosuke.kurami@gmail.com","name":"Yosuke Kurami"}],"excerpt":"This plugin checks the keyword 'NOPMD' in your codes. ","gav":"org.jenkins-ci.plugins:nopmdcheck:0.9","labels":["misc"],"name":"nopmdcheck","releaseTimestamp":"2012-10-26T04:22:38.00Z","requiredCore":"1.431","scm":"github.com","sha1":"xOSCCk+0dudR2JIXXJOR3C/Vblo=","title":"nopmdcheck Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nopmdcheck/0.9/nopmdcheck.hpi","version":"0.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/nopmdcheck+Plugin"},"nopmdverifytrac":{"buildDate":"Oct 26, 2012","dependencies":[{"name":"nopmdcheck","optional":false,"version":"0.9"}],"developers":[{"developerId":"yosuke"}],"excerpt":"When you use Trac to tracking issues, this plugin makes a report about whether 'NOPMD' in your codes are right. ","gav":"org.jenkins-ci.plugins:nopmdverifytrac:0.9","labels":["external"],"name":"nopmdverifytrac","releaseTimestamp":"2012-10-26T04:56:42.00Z","requiredCore":"1.431","scm":"github.com","sha1":"FxaTSxaqdp9mIgxcrDnNDht+zqs=","title":"nopmdverifytrac Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nopmdverifytrac/0.9/nopmdverifytrac.hpi","version":"0.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/nopmdverifytrac+Plugin"},"notification":{"buildDate":"Nov 28, 2011","dependencies":[],"developers":[{"developerId":"markb","email":"markb@tikalk.com","name":"Mark Berner"}],"excerpt":"Allows sending job status notifications via HTTP, TCP or UDP.","gav":"com.tikalk.hudson.plugins:notification:1.4","labels":["notifier"],"name":"notification","previousTimestamp":"2011-08-26T20:58:26.00Z","previousVersion":"1.3","releaseTimestamp":"2011-11-28T18:11:46.00Z","requiredCore":"1.398","scm":"github.com","sha1":"bAnxrIEdbamDJ55eQ8t5cqnSv2k=","title":"Notification Plugin","url":"http://updates.jenkins-ci.org/download/plugins/notification/1.4/notification.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Notification+Plugin"},"notifo":{"buildDate":"Jul 29, 2010","dependencies":[],"developers":[{"developerId":"csamuel","email":"csamuel@gmail.com","name":"Chris Samuel"}],"excerpt":"Integration with the Notifo API<\/a> to push build notifications to mobile devices.","gav":"org.jvnet.hudson.plugins:notifo:1.0.1","labels":["notifier"],"name":"notifo","releaseTimestamp":"2010-07-29T20:24:08.00Z","requiredCore":"1.366","scm":"github.com","sha1":"DTMHyiL48RRh0Y8xQ5wbZbno5cI=","title":"Notifo Plugin","url":"http://updates.jenkins-ci.org/download/plugins/notifo/1.0.1/notifo.hpi","version":"1.0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Notifo+Plugin"},"nsiqcollector":{"buildDate":"Aug 06, 2011","dependencies":[],"developers":[{"developerId":"iceize","email":"iceize@nhn.com","name":"Oh, Young-eun"},{"developerId":"junoyoon","email":"junoyoon@gmail.com","name":"JunHo Yoon"}],"excerpt":"This plugin shows the lines of code and cyclomatic complexity from from external metric tools named N'SIQ Collector<\/a>.","gav":"org.jvnet.hudson.plugins:nsiqcollector:1.3.3","labels":["report"],"name":"nsiqcollector","previousTimestamp":"2010-10-21T15:30:16.00Z","previousVersion":"1.3.2","releaseTimestamp":"2011-08-06T12:25:34.00Z","requiredCore":"1.395","scm":"svn.jenkins-ci.org","sha1":"LifvvdE4okdqHY9o5QYG25QerC0=","title":"NSIQ Collector Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nsiqcollector/1.3.3/nsiqcollector.hpi","version":"1.3.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/NSIQ+Collector+Plugin"},"nunit":{"buildDate":"May 06, 2011","dependencies":[],"developers":[{"developerId":"redsolo","email":"eramfelt@gmail.com","name":"Erik Ramfelt"}],"excerpt":"This plugin allows you to publish NUnit<\/a> test results.","gav":"org.jvnet.hudson.plugins:nunit:0.14","labels":["report"],"name":"nunit","previousTimestamp":"2011-03-16T03:19:14.00Z","previousVersion":"0.13","releaseTimestamp":"2011-05-07T00:22:06.00Z","requiredCore":"1.380","scm":"github.com","sha1":"XmEZuOE7CVue+7vSRG0PvPjSn6o=","title":"NUnit Plugin","url":"http://updates.jenkins-ci.org/download/plugins/nunit/0.14/nunit.hpi","version":"0.14","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/NUnit+Plugin"},"offlineonfailure-plugin":{"buildDate":"Jun 19, 2011","dependencies":[],"developers":[{"email":"andreas.nilsson@atex.com","name":"Andreas Nilsson"},{"developerId":"bitter","email":"sternevald@imap.cc","name":"Martin Sternevald"}],"excerpt":"Adds a post build configuration option to bring the executing node offline if the build fails. ","gav":"org.jenkins-ci.plugins:offlineonfailure-plugin:1.0","labels":["post-build"],"name":"offlineonfailure-plugin","releaseTimestamp":"2011-06-19T19:29:00.00Z","requiredCore":"1.398","scm":"github.com","sha1":"b24ZX21Mz61by7jVNmGVC+AFs+4=","title":"Offline Node On Failure Plugin","url":"http://updates.jenkins-ci.org/download/plugins/offlineonfailure-plugin/1.0/offlineonfailure-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Offline+Node+On+Failure+Plugin"},"openJDK-native-plugin":{"buildDate":"Mar 01, 2012","dependencies":[],"developers":[{"developerId":"vjuranek","name":"Vojtech Juranek"}],"excerpt":"This plugin adds auto installer for OpenJDK from native RPM packages and provides switching between OpenJDK vesrions using Linux alternatives","gav":"org.jenkinsci.plugins.openjdk_native:openJDK-native-plugin:1.0","labels":[],"name":"openJDK-native-plugin","releaseTimestamp":"2012-03-01T15:08:22.00Z","requiredCore":"1.398","scm":"github.com","sha1":"WQYSgJjJFOkdl6/p0vOJsrm6+oE=","title":"OpenJDK native intaller plugin","url":"http://updates.jenkins-ci.org/download/plugins/openJDK-native-plugin/1.0/openJDK-native-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/OpenJDK+native+intaller+plugin"},"openid":{"buildDate":"Jul 11, 2012","dependencies":[],"developers":[{"developerId":"kohsuke","email":"kkawaguchi@cloudbees.com","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin lets your Jenkins users login to Jenkins through external OpenID providers, without using password.","gav":"org.jenkins-ci.plugins:openid:1.5","labels":["user"],"name":"openid","previousTimestamp":"2011-10-28T02:06:10.00Z","previousVersion":"1.4","releaseTimestamp":"2012-07-11T22:58:22.00Z","requiredCore":"1.398","scm":"github.com","sha1":"BYqS/3z3ZTYWHeqA91MzpJi2BNQ=","title":"OpenID plugin","url":"http://updates.jenkins-ci.org/download/plugins/openid/1.5/openid.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/OpenID+plugin"},"origo-issue-notifier":{"buildDate":"May 18, 2010","dependencies":[],"developers":[{"developerId":"butcherch","name":"Patrick Ruckstuhl"}],"excerpt":"This plugin opens or updates an issue on an Origo<\/a> instance based on the build result.","gav":"org.jvnet.hudson.plugins:origo-issue-notifier:1.1","labels":["notifier"],"name":"origo-issue-notifier","releaseTimestamp":"2010-05-19T01:11:20.00Z","requiredCore":"1.343","scm":"svn.dev.java.net","sha1":"I+uxIQlOPfGj1YcgmzBzJtLb5dU=","title":"Origo Issue Notifier","url":"http://updates.jenkins-ci.org/download/plugins/origo-issue-notifier/1.1/origo-issue-notifier.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Origo+Issue+Notifier"},"oslc-cm":{"buildDate":"Jul 22, 2011","dependencies":[],"developers":[{"developerId":"mdhar","email":"mdhar@free.fr","name":"Madhumita DHAR"}],"excerpt":"Connects to different remote bug trackers via the OSLC protocol ","gav":"org.jenkins-ci.plugins:oslc-cm:1.31","labels":["notifier"],"name":"oslc-cm","previousTimestamp":"2011-07-21T04:24:58.00Z","previousVersion":"1.3","releaseTimestamp":"2011-07-22T14:36:36.00Z","requiredCore":"1.398","scm":"github.com","sha1":"NHEf02sMF+mss8oKDA+MPPQOlhM=","title":"OSLC CM Plugin","url":"http://updates.jenkins-ci.org/download/plugins/oslc-cm/1.31/oslc-cm.hpi","version":"1.31","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/OSLC+CM+Plugin"},"pam-auth":{"buildDate":"Jun 05, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"","gav":"org.jenkins-ci.plugins:pam-auth:1.0","name":"pam-auth","releaseTimestamp":"2012-06-06T00:55:04.00Z","requiredCore":"1.468","scm":"github.com","sha1":"O3+oq5GiTvIQj7tLWkaQviQfRN4=","title":"pam-auth","url":"http://updates.jenkins-ci.org/download/plugins/pam-auth/1.0/pam-auth.hpi","version":"1.0"},"parameterized-trigger":{"buildDate":"Oct 09, 2012","dependencies":[{"name":"subversion","optional":true,"version":"1.25"}],"developers":[{"developerId":"huybrechts","name":"Tom Huybrechts"},{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin lets you trigger new builds when your build has completed, with various ways of specifying parameters for the new build.","gav":"org.jenkins-ci.plugins:parameterized-trigger:2.16","labels":["trigger","post-build","builder","cluster"],"name":"parameterized-trigger","previousTimestamp":"2012-05-23T19:33:08.00Z","previousVersion":"2.15","releaseTimestamp":"2012-10-09T15:14:16.00Z","requiredCore":"1.424","scm":"github.com","sha1":"1GETw1KLGpdjhjXno7UJLGfw0og=","title":"Parameterized Trigger Plugin","url":"http://updates.jenkins-ci.org/download/plugins/parameterized-trigger/2.16/parameterized-trigger.hpi","version":"2.16","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin"},"patch-parameter":{"buildDate":"Oct 07, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin adds a new parameter type to a parameterized build, where the user can optionally submit a patch file.","gav":"org.jenkins-ci.plugins:patch-parameter:1.0","labels":[],"name":"patch-parameter","releaseTimestamp":"2012-10-07T20:18:04.00Z","requiredCore":"1.466","scm":"github.com","sha1":"3d0EZUQN45qMbtDnyc6H601eHwg=","title":"Patch Parameter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/patch-parameter/1.0/patch-parameter.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Patch+Parameter+Plugin"},"pathignore":{"buildDate":"Nov 17, 2011","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.6"}],"developers":[{"developerId":"jtjerno"}],"excerpt":"This plugin allows SCM-triggered jobs to ignore build requests if only certain paths have changed, or to build if and only if certain paths are changed.","gav":"org.jenkins-ci.ruby-plugins:pathignore:0.6","labels":["scm-related","buildwrapper"],"name":"pathignore","previousTimestamp":"2011-11-14T20:24:52.00Z","previousVersion":"0.5","releaseTimestamp":"2011-11-18T03:22:06.00Z","requiredCore":"1.432","scm":"github.com","sha1":"7UG0Wxxa4QuKfSq5DVHlZFs+q/g=","title":"Pathignore Plugin","url":"http://updates.jenkins-ci.org/download/plugins/pathignore/0.6/pathignore.hpi","version":"0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Pathignore+Plugin"},"pegdown-formatter":{"buildDate":"Apr 09, 2012","dependencies":[],"developers":[{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"}],"excerpt":"Format descriptions using Markdown syntax. Use simple wiki-like markup instead of HTML. ","gav":"org.jenkins-ci.plugins:pegdown-formatter:1.3","labels":["ui"],"name":"pegdown-formatter","previousTimestamp":"2011-08-05T01:41:10.00Z","previousVersion":"1.2","releaseTimestamp":"2012-04-10T01:20:14.00Z","requiredCore":"1.396","scm":"github.com","sha1":"VPm/aCS7FsNgr0KAu1QeijD7B5U=","title":"PegDown Formatter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/pegdown-formatter/1.3/pegdown-formatter.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PegDown+Formatter+Plugin"},"people-redirector":{"buildDate":"May 11, 2012","dependencies":[],"developers":[{"developerId":"m2spring","email":"mspring@cisco.com","name":"Max Spring"}],"excerpt":"Allows you to integrate with an external user management system.","gav":"com.cisco.step.jenkins.plugins:people-redirector:1.3","labels":["external"],"name":"people-redirector","previousTimestamp":"2011-10-12T18:36:08.00Z","previousVersion":"1.2","releaseTimestamp":"2012-05-11T21:17:20.00Z","requiredCore":"1.415","scm":"github.com","sha1":"+UdYkY/5biwQcPFJeGaPDoRFYHE=","title":"People Redirector Plugin","url":"http://updates.jenkins-ci.org/download/plugins/people-redirector/1.3/people-redirector.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/People+Redirector+Plugin"},"perforce":{"buildDate":"Nov 28, 2012","dependencies":[],"developers":[{"developerId":"javadude","email":"carl.quinn@gmail.com","name":"Carl Quinn"},{"developerId":"rpetti","email":"rob.petti@gmail.com","name":"Rob Petti"}],"excerpt":"Integrates Jenkins with Perforce<\/a> SCM Repositories. ","gav":"org.jvnet.hudson.plugins:perforce:1.3.18","labels":["scm"],"name":"perforce","previousTimestamp":"2012-08-12T17:06:50.00Z","previousVersion":"1.3.17","releaseTimestamp":"2012-11-28T17:05:24.00Z","requiredCore":"1.346","scm":"github.com","sha1":"8mVONDubM5mI56JzfiaPMMAHvNg=","title":"Perforce Plugin","url":"http://updates.jenkins-ci.org/download/plugins/perforce/1.3.18/perforce.hpi","version":"1.3.18","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Perforce+Plugin"},"performance":{"buildDate":"Apr 11, 2012","dependencies":[],"developers":[{"developerId":"manolo","email":"manolo@apache.org","name":"Manuel Carrasco Monino"},{"developerId":"vergnes","email":"vergnes@dev.java.net","name":"Vergnes"},{"developerId":"aespy","email":"aespy@dev.java.net","name":"Arnaud Espy"}],"excerpt":"This plugin allows you to capture reports from JMeter<\/a> and JUnit<\/a> . Hudson will generate graphic charts with the trend report of performance and robustness. It includes the feature of setting the final build status as good, unstable or failed, based on the reported error percentage. ","gav":"org.jvnet.hudson.plugins:performance:1.8","labels":["report"],"name":"performance","previousTimestamp":"2011-05-16T13:44:10.00Z","previousVersion":"1.7","releaseTimestamp":"2012-04-11T15:35:04.00Z","requiredCore":"1.388","scm":"github.com","sha1":"CTieY3sq27/Qk8UI4lWXqQEToXo=","title":"Performance Plugin","url":"http://updates.jenkins-ci.org/download/plugins/performance/1.8/performance.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Performance+Plugin"},"perfpublisher":{"buildDate":"Apr 18, 2010","dependencies":[{"name":"analysis-core","optional":false,"version":"1.1"},{"name":"maven-plugin","optional":false,"version":"1.354"}],"developers":[{"email":"gbossert@gmail.com","name":"Georges Bossert"}],"excerpt":"This plugin generates global and trend reports for tests results analysis. Based on an open XML tests results format, the plugin parses the generated files and publish statistics, reports and analysis on the current health of the project.","gav":"org.jvnet.hudson.plugins:perfpublisher:7.97","labels":["report"],"name":"perfpublisher","previousTimestamp":"2010-03-05T13:44:04.00Z","previousVersion":"7.96","releaseTimestamp":"2010-04-18T17:59:00.00Z","requiredCore":"1.354","scm":"svn.dev.java.net","sha1":"Ogtvjd5FcJMX+H9/EYeeAhjH300=","title":"PerfPublisher Plugin","url":"http://updates.jenkins-ci.org/download/plugins/perfpublisher/7.97/perfpublisher.hpi","version":"7.97","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PerfPublisher+Plugin"},"periodic-reincarnation":{"buildDate":"Nov 19, 2012","dependencies":[],"developers":[{"developerId":"stefanbrausch","email":"stefan.brausch@1und1.de","name":"Stefan Brausch"},{"developerId":"boev","email":"iordan.boev@gmail.com","name":"Yordan Boev"}],"excerpt":"This plugin makes it possible to periodically restart failed jobs according to a number of conditions. ","gav":"org.jenkins-ci.plugins:periodic-reincarnation:1.1","labels":["trigger"],"name":"periodic-reincarnation","previousTimestamp":"2012-10-29T20:56:38.00Z","previousVersion":"1.0","releaseTimestamp":"2012-11-19T17:48:22.00Z","requiredCore":"1.466","scm":"github.com","sha1":"4FbWByvUVPKwLSn3Q7lH3ZUzE+U=","title":"Periodic Reincarnation Plugin","url":"http://updates.jenkins-ci.org/download/plugins/periodic-reincarnation/1.1/periodic-reincarnation.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Periodic+Reincarnation+Plugin"},"periodicbackup":{"buildDate":"Jan 04, 2013","dependencies":[],"developers":[{"email":"tomasz.blaszczynski@gmail.com","name":"Tomasz Blaszczynski"},{"email":"emanuelez@gmail.com","name":"Emanuele Zattin"}],"excerpt":"","gav":"org.jenkins-ci.plugins:periodicbackup:1.3","labels":[],"name":"periodicbackup","previousTimestamp":"2013-01-04T14:37:26.00Z","previousVersion":"1.2","releaseTimestamp":"2013-01-04T14:40:36.00Z","requiredCore":"1.398","scm":"github.com","sha1":"sEkFAeJozgL/tGr5VTRVxGLnyOc=","title":"PeriodicBackup Plugin","url":"http://updates.jenkins-ci.org/download/plugins/periodicbackup/1.3/periodicbackup.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PeriodicBackup+Plugin"},"persona":{"buildDate":"Apr 17, 2012","dependencies":[],"developers":[{"developerId":"kohsuke","email":"kohsuke@infradna.com","name":"Kohsuke Kawaguchi"},{"developerId":"ssogabe","email":"s.sogabe@gmail.com","name":"Seiji Sogabe"}],"excerpt":"This plugin lets you define custom personalities like Chuck Norris<\/a> or Bruce Schneier<\/a> just by preparing an XML file and a few image files.","gav":"org.jenkins-ci.plugins:persona:2.2","labels":[],"name":"persona","previousTimestamp":"2012-03-06T02:32:38.00Z","previousVersion":"2.1","releaseTimestamp":"2012-04-17T13:31:16.00Z","requiredCore":"1.398","scm":"github.com","sha1":"/XG536Rbbg4KFD4Iq2DEWd8DwwM=","title":"Persona Plugin","url":"http://updates.jenkins-ci.org/download/plugins/persona/2.2/persona.hpi","version":"2.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Persona+Plugin"},"phing":{"buildDate":"Mar 20, 2012","dependencies":[],"developers":[{"developerId":"sogabe","email":"s.sogabe@gmail.com","name":"Seiji Sogabe"}],"excerpt":"This plugin allows you to use Phing<\/a> to build PHP projects.","gav":"org.jenkins-ci.plugins:phing:0.11","labels":["builder"],"name":"phing","previousTimestamp":"2012-03-03T20:37:34.00Z","previousVersion":"0.10","releaseTimestamp":"2012-03-20T13:55:06.00Z","requiredCore":"1.413","scm":"github.com","sha1":"PnJ57D+P7J+vQ8PsI89GxQI+Zzs=","title":"Phing Plugin","url":"http://updates.jenkins-ci.org/download/plugins/phing/0.11/phing.hpi","version":"0.11","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Phing+Plugin"},"php":{"buildDate":"Oct 11, 2012","dependencies":[{"name":"violations","optional":false,"version":"0.7.11"},{"name":"jdepend","optional":false,"version":"1.2.3"},{"name":"maven-plugin","optional":false,"version":"1.424"},{"name":"checkstyle","optional":false,"version":"3.32"},{"name":"xunit","optional":false,"version":"1.48"},{"name":"pmd","optional":false,"version":"3.33"},{"name":"cloverphp","optional":false,"version":"0.3.2"},{"name":"dry","optional":false,"version":"2.33"},{"name":"htmlpublisher","optional":false,"version":"1.0"},{"name":"analysis-core","optional":false,"version":"1.48"},{"name":"plot","optional":false,"version":"1.5"}],"developers":[{"developerId":"nicolas"}],"excerpt":"This plugin installs jenkins plugins suggested by [http://jenkins-php.org/] for PHP developers ","gav":"org.jenkins-ci.plugins:php:1.0","labels":[],"name":"php","releaseTimestamp":"2012-10-11T20:17:50.00Z","requiredCore":"1.424","scm":"github.com","sha1":"2K9otH75c+GEvMbJ/ulmrJmeLEA=","title":"PHP Plugin","url":"http://updates.jenkins-ci.org/download/plugins/php/1.0/php.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PHP+Plugin"},"piwikanalytics":{"buildDate":"Nov 06, 2009","dependencies":[],"developers":[{"developerId":"looztra"}],"excerpt":"This plugin decorates all web pages with the Piwik Analytics tracking script. ","gav":"org.jvnet.hudson.plugins:piwikanalytics:1.0","labels":["page-decorator"],"name":"piwikanalytics","releaseTimestamp":"2009-11-07T03:11:44.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"M96i01+NqiOwu8kJN3vBljfM2NI=","title":"Piwik Analytics Plugin","url":"http://updates.jenkins-ci.org/download/plugins/piwikanalytics/1.0/piwikanalytics.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Piwik+Analytics+Plugin"},"plasticscm-plugin":{"buildDate":"Jan 20, 2012","dependencies":[],"developers":[{"developerId":"ravelus","email":"lrodriguez@codicesoftware.com","name":"Luis Rodriguez Neches"}],"excerpt":"This plugin integrates Plastic SCM<\/a> source code management to Jenkins.","gav":"org.jvnet.hudson.plugins:plasticscm-plugin:2.0","labels":["scm"],"name":"plasticscm-plugin","previousTimestamp":"2011-03-29T03:39:36.00Z","previousVersion":"1.0","releaseTimestamp":"2012-01-20T08:57:20.00Z","requiredCore":"1.343","scm":"github.com","sha1":"d1vmWCEnyyERdiczDOqBCLG9mXQ=","title":"PlasticSCM Plugin","url":"http://updates.jenkins-ci.org/download/plugins/plasticscm-plugin/2.0/plasticscm-plugin.hpi","version":"2.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PlasticSCM+Plugin"},"platformlabeler":{"buildDate":"Dec 02, 2009","dependencies":[],"developers":[{"developerId":"robertc"}],"excerpt":"This plugin adds node labels based on the platform the node is running; they are updated each time the node connects.","gav":"org.jvnet.hudson.plugins:platformlabeler:1.1","labels":["misc"],"name":"platformlabeler","previousTimestamp":"2009-09-07T21:38:40.00Z","previousVersion":"1.0","releaseTimestamp":"2009-12-02T23:48:24.00Z","requiredCore":"1.323","scm":"svn.dev.java.net","sha1":"2Vms3n2RwOiV89sT3cBtgtiQbTM=","title":"PlatformLabeler Plugin","url":"http://updates.jenkins-ci.org/download/plugins/platformlabeler/1.1/platformlabeler.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PlatformLabeler+Plugin"},"play-autotest-plugin":{"buildDate":"Sep 29, 2011","dependencies":[],"developers":[{"developerId":"ikeike443","email":"ikeike443@gmail.com","name":"Takafumi Ikeda"}],"excerpt":"This plugin integrates Play\\! framework<\/a> to Jenkins. It enables Jenkins to run play commands and to generate test-result view per build looks like Calimoucho -- Play\\! CI server. ","gav":"org.jenkins-ci.plugins:play-autotest-plugin:0.0.12","labels":["post-build","report","buildwrapper","external"],"name":"play-autotest-plugin","previousTimestamp":"2011-09-28T20:28:24.00Z","previousVersion":"0.0.11","releaseTimestamp":"2011-09-29T16:50:18.00Z","requiredCore":"1.409","scm":"github.com","sha1":"1wRQSkmU4GeeLVIbchTsdNXs488=","title":"play-plugin","url":"http://updates.jenkins-ci.org/download/plugins/play-autotest-plugin/0.0.12/play-autotest-plugin.hpi","version":"0.0.12","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/play-plugin"},"plot":{"buildDate":"Jul 10, 2011","dependencies":[],"developers":[{"developerId":"nidaley","name":"Nigel Daley"}],"excerpt":"This plugin provides generic plotting (or graphing) capabilities in Jenkins.","gav":"org.jenkins-ci.plugins:plot:1.5","labels":["report","ui"],"name":"plot","previousTimestamp":"2010-11-22T00:25:22.00Z","previousVersion":"1.4","releaseTimestamp":"2011-07-10T16:27:06.00Z","requiredCore":"1.398","scm":"github.com","sha1":"FFDY6Dk2pJJyPO5PlTXso/vLGXo=","title":"Plot Plugin","url":"http://updates.jenkins-ci.org/download/plugins/plot/1.5/plot.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Plot+Plugin"},"pmd":{"buildDate":"Oct 05, 2012","dependencies":[{"name":"token-macro","optional":true,"version":"1.5.1"},{"name":"maven-plugin","optional":true,"version":"1.409"},{"name":"analysis-core","optional":false,"version":"1.48"},{"name":"dashboard-view","optional":true,"version":"2.2"}],"developers":[{"developerId":"drulli","email":"ullrich.hafner@gmail.com","name":"Ulli Hafner"}],"excerpt":"This plugin generates the trend report for PMD<\/a>, an open source static code analysis program.  ","gav":"org.jvnet.hudson.plugins:pmd:3.33","labels":["maven","report"],"name":"pmd","previousTimestamp":"2012-09-04T17:04:38.00Z","previousVersion":"3.32","releaseTimestamp":"2012-10-05T16:00:46.00Z","requiredCore":"1.409","scm":"github.com","sha1":"2TYh/c1KpcecGhFr+dX4yhGKuN8=","title":"PMD Plugin","url":"http://updates.jenkins-ci.org/download/plugins/pmd/3.33/pmd.hpi","version":"3.33","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PMD+Plugin"},"polarion":{"buildDate":"Nov 03, 2011","dependencies":[{"name":"subversion","optional":false,"version":"2.0.1"}],"developers":[{"developerId":"jwray","name":"Jonny Wray"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin integrates the Polarion WebClient for SVN<\/a>, an open source, web based interface to Subversion.","gav":"org.jvnet.hudson.plugins:polarion:1.3","labels":["external"],"name":"polarion","previousTimestamp":"2010-01-29T22:17:40.00Z","previousVersion":"1.2","releaseTimestamp":"2011-11-03T17:48:18.00Z","requiredCore":"1.392","scm":"github.com","sha1":"yqnoigUhQZdM/7CiGFtDJzekqOk=","title":"Polarion Plugin","url":"http://updates.jenkins-ci.org/download/plugins/polarion/1.3/polarion.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Polarion+Plugin"},"pollscm":{"buildDate":"Jan 06, 2012","dependencies":[],"developers":[{"developerId":"vlatombe","email":"vincent.latombe@gmail.com","name":"Vincent Latombe"}],"excerpt":"This plugin adds a Poll Now button to your job when Poll SCM option is enabled. ","gav":"org.jenkins-ci.plugins:pollscm:1.1","labels":[],"name":"pollscm","previousTimestamp":"2012-01-06T22:46:46.00Z","previousVersion":"1.0","releaseTimestamp":"2012-01-06T23:13:32.00Z","requiredCore":"1.440","scm":"github.com","sha1":"5YrGI2DZAohAAvaJ+F38DRXPjZY=","title":"PollSCM Plugin","url":"http://updates.jenkins-ci.org/download/plugins/pollscm/1.1/pollscm.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PollSCM+Plugin"},"port-allocator":{"buildDate":"Mar 29, 2010","dependencies":[],"developers":[{"developerId":"ramapulavarthi","name":"Rama Pulavarthi"},{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"Assigns unique TCP port addresses to jobs so that jobs executed concurrently won't collide with each other. Also performs clean ups to kill off daemons that are forked by jobs.","gav":"org.jvnet.hudson.plugins:port-allocator:1.5","labels":["misc"],"name":"port-allocator","previousTimestamp":"2009-12-29T01:39:04.00Z","previousVersion":"1.4","releaseTimestamp":"2010-03-29T22:34:08.00Z","requiredCore":"1.324","scm":"svn.dev.java.net","sha1":"hgpEu3sP2pRfUFBV5dIOKOlflr0=","title":"Port Allocator Plugin","url":"http://updates.jenkins-ci.org/download/plugins/port-allocator/1.5/port-allocator.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Port+Allocator+Plugin"},"postbuild-task":{"buildDate":"Jan 03, 2011","dependencies":[],"developers":[{"developerId":"shinodkm","email":"shinodkm@gmail.com","name":"Shinod Mohandas"},{"developerId":"castorpilot","email":"castorpilot@gmail.com","name":"Fred"}],"excerpt":"This plugin allows the user to execute a shell/batch task depending on the build log output. Java regular expression are allowed.","gav":"org.jvnet.hudson.plugins:postbuild-task:1.8","labels":["post-build","builder"],"name":"postbuild-task","previousTimestamp":"2010-06-03T14:42:10.00Z","previousVersion":"1.7","releaseTimestamp":"2011-01-04T03:46:56.00Z","requiredCore":"1.357","scm":"svn.java.net","sha1":"BsfymNZesIFBvZtiIe01htpESHI=","title":"Post build task","url":"http://updates.jenkins-ci.org/download/plugins/postbuild-task/1.8/postbuild-task.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Post+build+task"},"postbuildscript":{"buildDate":"Aug 03, 2012","dependencies":[{"name":"ivy","optional":true,"version":"1.19"},{"name":"maven-plugin","optional":false,"version":"1.409"}],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"PostBuildScript makes it possible to execute a set of scripts at the end of the build. ","gav":"org.jenkins-ci.plugins:postbuildscript:0.10","labels":["post-build"],"name":"postbuildscript","previousTimestamp":"2012-07-03T01:24:42.00Z","previousVersion":"0.9","releaseTimestamp":"2012-08-03T18:12:12.00Z","requiredCore":"1.409","scm":"github.com","sha1":"A1T3WDZEilhyyKTDWP77TqXdSm0=","title":"PostBuildScript Plugin","url":"http://updates.jenkins-ci.org/download/plugins/postbuildscript/0.10/postbuildscript.hpi","version":"0.10","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PostBuildScript+Plugin"},"powershell":{"buildDate":"Aug 05, 2009","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"Integrates with Windows PowerShell","gav":"org.jvnet.hudson.plugins:powershell:1.2","labels":["builder"],"name":"powershell","previousTimestamp":"2009-07-01T16:50:40.00Z","previousVersion":"1.1","releaseTimestamp":"2009-08-05T22:56:08.00Z","requiredCore":"1.318","scm":"svn.dev.java.net","sha1":"knBheE891sVmdLu2GnWXWmU+cCc=","title":"PowerShell Plugin","url":"http://updates.jenkins-ci.org/download/plugins/powershell/1.2/powershell.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PowerShell+Plugin"},"preSCMbuildstep":{"buildDate":"Feb 19, 2012","dependencies":[],"developers":[{"developerId":"cjo9900","name":"Chris Johnson"}],"excerpt":"This plugin allows build step to run before SCM checkouts ","gav":"org.jenkins-ci.plugins:preSCMbuildstep:0.2","labels":["buildwrapper"],"name":"preSCMbuildstep","previousTimestamp":"2011-08-24T01:22:26.00Z","previousVersion":"0.1","releaseTimestamp":"2012-02-19T23:29:22.00Z","requiredCore":"1.398","scm":"github.com","sha1":"I8ehGnqC0sUdzqvLST3r4fQRjdA=","title":"pre-scm-buildstep","url":"http://updates.jenkins-ci.org/download/plugins/preSCMbuildstep/0.2/preSCMbuildstep.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/pre-scm-buildstep"},"prereq-buildstep":{"buildDate":"Apr 01, 2011","dependencies":[],"developers":[{"developerId":"lynggaard","email":"henrik@hlyh.dk","name":"Henrik Lynggaard"}],"excerpt":"The Prerequisite build step plug in allows you to verify the state of other jobs and fail the build if needed.","gav":"org.jvnet.hudson.plugins:prereq-buildstep:1.1","labels":["builder"],"name":"prereq-buildstep","releaseTimestamp":"2011-04-01T19:46:08.00Z","requiredCore":"1.392","scm":"bitbucket.org","sha1":"GJBVXEP3y9sdBrFYIq9/h4YtVFw=","title":"Prerequisite build step plugin","url":"http://updates.jenkins-ci.org/download/plugins/prereq-buildstep/1.1/prereq-buildstep.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Prerequisite+build+step+plugin"},"progress-bar-column-plugin":{"buildDate":"Aug 08, 2011","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provide progress bar available for views.","gav":"org.jenkins-ci.plugins:progress-bar-column-plugin:1.0","labels":["listview-column"],"name":"progress-bar-column-plugin","releaseTimestamp":"2011-08-08T22:46:44.00Z","requiredCore":"1.421","scm":"github.com","sha1":"A6ddrtk90zctZbw5hRyEguLpY08=","title":"Progress Bar Column Plugin","url":"http://updates.jenkins-ci.org/download/plugins/progress-bar-column-plugin/1.0/progress-bar-column-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Progress+Bar+Column+Plugin"},"project-description-setter":{"buildDate":"Jun 12, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"}],"excerpt":"Set the project description from a file in the workspace (à la GitHub README.md) ","gav":"org.jenkins-ci.plugins:project-description-setter:1.1","labels":["buildwrapper"],"name":"project-description-setter","previousTimestamp":"2011-08-06T00:05:08.00Z","previousVersion":"1.0","releaseTimestamp":"2012-06-13T01:30:28.00Z","requiredCore":"1.399","scm":"github.com","sha1":"vtjFCsAOwGWxR3BjUxtY+i2daBQ=","title":"Project Description Setter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/project-description-setter/1.1/project-description-setter.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Project+Description+Setter+Plugin"},"project-health-report":{"buildDate":"May 23, 2011","dependencies":[],"developers":[{"developerId":"lynggaard","email":"henrik@hlyh.dk","name":"Henrik Lynggaard"}],"excerpt":"The project health report plugin  provides a report page on each project where the user can see how many builds failed/passed and which test cases most often break.","gav":"org.jvnet.hudson.plugins:project-health-report:1.2","labels":[],"name":"project-health-report","previousTimestamp":"2011-04-18T18:29:00.00Z","previousVersion":"1.1","releaseTimestamp":"2011-05-23T22:44:44.00Z","requiredCore":"1.392","scm":"bitbucket.org","sha1":"epc6Y+I9FEkw2Wgt5IS8kYFMUBE=","title":"Project Health Report Plugin","url":"http://updates.jenkins-ci.org/download/plugins/project-health-report/1.2/project-health-report.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Project+Health+Report+Plugin"},"project-stats-plugin":{"buildDate":"Sep 22, 2012","dependencies":[{"name":"dashboard-view","optional":false,"version":"2.0"}],"developers":[{"developerId":"mambu","email":"marco.ambu+jenkins@gmail.com","name":"Marco Ambu"}],"excerpt":"This plugin provides new dashboard-view portlets and new columns for displaying project statistics for your Jenkins instance. ","gav":"org.jenkins-ci.plugins:project-stats-plugin:0.4","labels":["listview-column","ui"],"name":"project-stats-plugin","previousTimestamp":"2011-09-25T15:13:00.00Z","previousVersion":"0.3","releaseTimestamp":"2012-09-22T17:18:04.00Z","requiredCore":"1.459","scm":"github.com","sha1":"mIkd2WtsZ/Qn11Pn/JPojLHd7As=","title":"Project Statistics Plugin","url":"http://updates.jenkins-ci.org/download/plugins/project-stats-plugin/0.4/project-stats-plugin.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Project+Statistics+Plugin"},"promoted-builds":{"buildDate":"Oct 30, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.448"},{"name":"javadoc","optional":false,"version":"1.0"}],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"petehayes","name":"Peter Hayes"}],"excerpt":"This plugin allows you to distinguish good builds from bad builds by introducing the notion of 'promotion'.","gav":"org.jenkins-ci.plugins:promoted-builds:2.8","labels":["misc","ui","builder"],"name":"promoted-builds","previousTimestamp":"2012-09-26T23:08:58.00Z","previousVersion":"2.7","releaseTimestamp":"2012-10-30T17:38:06.00Z","requiredCore":"1.448","scm":"github.com","sha1":"J+vdJvd6a47gXcIuiDynDWlvbf8=","title":"Promoted Builds Plugin","url":"http://updates.jenkins-ci.org/download/plugins/promoted-builds/2.8/promoted-builds.hpi","version":"2.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin"},"promoted-builds-simple":{"buildDate":"Mar 29, 2011","dependencies":[{"name":"copyartifact","optional":true,"version":"1.14"},{"name":"maven-plugin","optional":true,"version":"1.398"}],"developers":[{"developerId":"mindless","name":"Alan Harder"}],"excerpt":"Simpler version of Promoted Builds Plugin<\/a>, with only manual promotion of builds.","gav":"org.jenkins-ci.plugins:promoted-builds-simple:1.9","labels":["misc","ui"],"name":"promoted-builds-simple","previousTimestamp":"2011-02-25T22:11:48.00Z","previousVersion":"1.8","releaseTimestamp":"2011-03-30T02:54:50.00Z","requiredCore":"1.398","scm":"github.com","sha1":"Q710UWrUUlaLRkSqOclH5RB9xN8=","title":"Promoted Builds Simple Plugin","url":"http://updates.jenkins-ci.org/download/plugins/promoted-builds-simple/1.9/promoted-builds-simple.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Simple+Plugin"},"prqa-plugin":{"buildDate":"Nov 13, 2012","dependencies":[],"developers":[{"developerId":"jstruck","email":"coolers@praqma.net","name":"Jes Struck"},{"developerId":"MadsNielsen","email":"man@praqma.net","name":"Mads Nielsen"}],"excerpt":"A plugin for doing static code analysis using PRQA. ","gav":"net.praqma:prqa-plugin:1.1.3","labels":["notifier","report"],"name":"prqa-plugin","previousTimestamp":"2012-11-09T13:20:26.00Z","previousVersion":"1.1.2","releaseTimestamp":"2012-11-13T18:07:54.00Z","requiredCore":"1.474","scm":"github.com","sha1":"QBs61tHuA78J+K2xeCzHweZtkro=","title":"PRQA Plugin","url":"http://updates.jenkins-ci.org/download/plugins/prqa-plugin/1.1.3/prqa-plugin.hpi","version":"1.1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PRQA+Plugin"},"pry":{"buildDate":"May 31, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.10"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin lets you remotely inspect/alter running Jenkins instance through pry<\/a>. Think of it as the Ruby version of the Groovy shell console","gav":"org.jenkins-ci.plugins:pry:1.1","labels":[],"name":"pry","previousTimestamp":"2012-05-10T10:43:40.00Z","previousVersion":"1.0","releaseTimestamp":"2012-05-31T13:23:00.00Z","requiredCore":"1.447","scm":"github.com","sha1":"13OpWLobyimk1qD6zwnhDHpglh8=","title":"Pry Plugin","url":"http://updates.jenkins-ci.org/download/plugins/pry/1.1/pry.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Pry+Plugin"},"publish-over-cifs":{"buildDate":"Jun 05, 2011","compatibleSinceVersion":"0.1","dependencies":[],"developers":[{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"},{"developerId":"slide_o_mix","email":"slide.o.mix@gmail.com","name":"slide"}],"excerpt":"Send build artifacts to a windows share (CIFS/SMB/samba) ","gav":"org.jenkins-ci.plugins:publish-over-cifs:0.2","labels":["upload"],"name":"publish-over-cifs","releaseTimestamp":"2011-06-05T10:48:22.00Z","requiredCore":"1.388","scm":"github.com","sha1":"rvULLcwogegRtp9x7bNOXURCaZ8=","title":"Publish Over CIFS Plugin","url":"http://updates.jenkins-ci.org/download/plugins/publish-over-cifs/0.2/publish-over-cifs.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+CIFS+Plugin"},"publish-over-ftp":{"buildDate":"Oct 22, 2012","dependencies":[],"developers":[{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"}],"excerpt":"Publish files over FTP ","gav":"org.jenkins-ci.plugins:publish-over-ftp:1.8","labels":["upload"],"name":"publish-over-ftp","previousTimestamp":"2012-09-11T03:38:54.00Z","previousVersion":"1.7","releaseTimestamp":"2012-10-22T17:54:20.00Z","requiredCore":"1.388","scm":"github.com","sha1":"O1EsWuqFiqlRKd5R2muZ0zCrS+c=","title":"Publish Over FTP Plugin","url":"http://updates.jenkins-ci.org/download/plugins/publish-over-ftp/1.8/publish-over-ftp.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+FTP+Plugin"},"publish-over-ssh":{"buildDate":"Oct 22, 2012","dependencies":[],"developers":[{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"}],"excerpt":"Publish files and/or execute commands over SSH (SCP using SFTP) ","gav":"org.jenkins-ci.plugins:publish-over-ssh:1.9","labels":["upload","builder"],"name":"publish-over-ssh","previousTimestamp":"2012-09-11T03:42:24.00Z","previousVersion":"1.8","releaseTimestamp":"2012-10-22T18:38:26.00Z","requiredCore":"1.388","scm":"github.com","sha1":"E7315PNWymljPh2Y4AvggySkz1g=","title":"Publish Over SSH Plugin","url":"http://updates.jenkins-ci.org/download/plugins/publish-over-ssh/1.9/publish-over-ssh.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+SSH+Plugin"},"purge-build-queue-plugin":{"buildDate":"Aug 25, 2011","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provides an easy mechanism to purge the build queue.","gav":"org.jenkins-ci.plugins:purge-build-queue-plugin:1.0","labels":["misc"],"name":"purge-build-queue-plugin","releaseTimestamp":"2011-08-25T04:32:02.00Z","requiredCore":"1.425","scm":"github.com","sha1":"o1FGXRJoYPDa2gfqzNnXOW4e6Us=","title":"Purge Build Queue Plugin","url":"http://updates.jenkins-ci.org/download/plugins/purge-build-queue-plugin/1.0/purge-build-queue-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Purge+Build+Queue+Plugin"},"pvcs_scm":{"buildDate":"Jul 21, 2010","dependencies":[],"developers":[{"developerId":"blalor","email":"blalor@bravo5.org","name":"Brian Lalor"}],"excerpt":"This plugin provides integration with Serena's PVCS Version Manager SCM.","gav":"org.jvnet.hudson.plugins:pvcs_scm:1.1","labels":["scm"],"name":"pvcs_scm","previousTimestamp":"2008-11-05T12:36:58.00Z","previousVersion":"1.0","releaseTimestamp":"2010-07-21T15:57:40.00Z","requiredCore":"1.324","scm":"svn.dev.java.net","sha1":"rKiuRk88u5b03+foxUPssjWMils=","title":"PVCS SCM","url":"http://updates.jenkins-ci.org/download/plugins/pvcs_scm/1.1/pvcs_scm.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PVCS+SCM"},"pwauth":{"buildDate":"Dec 21, 2010","dependencies":[],"developers":[{"developerId":"mallox","email":"mallox@pyxzl.net","name":"Ravi Gairola"}],"excerpt":"This plug-in adds authentication via pwauth and supports both \\*nix system users and groups through PAM. ","gav":"org.jvnet.hudson.plugins:pwauth:0.4","labels":["user"],"name":"pwauth","releaseTimestamp":"2010-12-21T14:18:28.00Z","requiredCore":"1.389","scm":"svn.java.net","sha1":"A/xofYwc8Wz8W3aWAQHubV5qmi8=","title":"pwauth","url":"http://updates.jenkins-ci.org/download/plugins/pwauth/0.4/pwauth.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/pwauth"},"pxe":{"buildDate":"Feb 02, 2010","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin enhances Jenkins to support network-booting PCs for rapid, hands-free installations of various OSes, thereby making new slave installations easier.","gav":"org.jvnet.hudson.plugins:pxe:1.5","labels":["cluster"],"name":"pxe","previousTimestamp":"2010-01-10T01:32:50.00Z","previousVersion":"1.4","releaseTimestamp":"2010-02-02T21:45:18.00Z","requiredCore":"1.322","scm":"svn.dev.java.net","sha1":"dE84kD7kmrxqG+I0jmDFXRevhv4=","title":"PXE Plugin","url":"http://updates.jenkins-ci.org/download/plugins/pxe/1.5/pxe.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/PXE+Plugin"},"python":{"buildDate":"Nov 16, 2011","dependencies":[],"developers":[{"developerId":"rtyler","email":"tyler@slide.com","name":"R. Tyler Ballance"}],"excerpt":"Adds the ability to execute python scripts as build steps.","gav":"org.jenkins-ci.plugins:python:1.2","labels":["builder"],"name":"python","previousTimestamp":"2010-02-11T03:45:24.00Z","previousVersion":"1.1","releaseTimestamp":"2011-11-16T17:19:12.00Z","requiredCore":"1.409","scm":"github.com","sha1":"B6Jb7KKKx0QMBiNr4G9eWsJRfOg=","title":"Python Plugin","url":"http://updates.jenkins-ci.org/download/plugins/python/1.2/python.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Python+Plugin"},"qc":{"buildDate":"Jan 12, 2012","dependencies":[],"developers":[{"developerId":"tmaurel","name":"Thomas Maurel"},{"developerId":"rseguy","name":"Romain Seguy"}],"excerpt":"This plugin allows Hudson to trigger HP Quality Center test sets.","gav":"org.jenkins-ci.plugins:qc:1.2.1","labels":["report","builder"],"name":"qc","previousTimestamp":"2011-12-07T19:12:08.00Z","previousVersion":"1.2","releaseTimestamp":"2012-01-12T21:45:08.00Z","requiredCore":"1.409","scm":"svn.jenkins-ci.org","sha1":"hKLzEjb829TBh0EXSHss2qq7o3M=","title":"Quality Center Plugin","url":"http://updates.jenkins-ci.org/download/plugins/qc/1.2.1/qc.hpi","version":"1.2.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Quality+Center+Plugin"},"r":{"buildDate":"Jul 22, 2012","dependencies":[],"developers":[{"developerId":"kinow","email":"brunodepaulak@yahoo.com.br","name":"Bruno P. Kinoshita"}],"excerpt":"A simple plug-in to invoke R<\/a> interpreter and execute an R script. ","gav":"org.biouno.r:r:0.2","labels":["builder"],"name":"r","previousTimestamp":"2012-07-10T13:08:46.00Z","previousVersion":"0.1","releaseTimestamp":"2012-07-22T06:25:44.00Z","requiredCore":"1.424","scm":"github.com","sha1":"rWowbhQDeeGV4t/Dn8Puc94Qjwg=","title":"R Plugin","url":"http://updates.jenkins-ci.org/download/plugins/r/0.2/r.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/R+Plugin"},"rad-builder":{"buildDate":"Mar 04, 2011","dependencies":[],"developers":[{"developerId":"rseguy","email":"romain.seguy@gmail.com","name":"Romain Seguy"}],"excerpt":"This plugin allows Jenkins to invoke IBM Rational Application Developer as a build step. ","gav":"org.jvnet.hudson.plugins:rad-builder:1.1.4","labels":["builder"],"name":"rad-builder","previousTimestamp":"2011-02-21T16:14:36.00Z","previousVersion":"1.1.3","releaseTimestamp":"2011-03-04T15:37:50.00Z","requiredCore":"1.375","scm":"svn.jenkins-ci.org","sha1":"pM4htrn1zMf51bPf1CAZoIZFPrA=","title":"RAD Builder Plugin","url":"http://updates.jenkins-ci.org/download/plugins/rad-builder/1.1.4/rad-builder.hpi","version":"1.1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/RAD+Builder+Plugin"},"radiatorviewplugin":{"buildDate":"May 17, 2011","dependencies":[{"name":"claim","optional":true,"version":"1.7"}],"developers":[{"developerId":"howama","email":"mh@tildemh.com","name":"Mark Howard"}],"excerpt":"Provides a job view displaying project status in a highly visible manner. This is ideal for displaying on a screen on the office wall as a form of Extreme Feedback Device.","gav":"org.jenkins-ci.plugins:radiatorviewplugin:1.13","labels":["report","ui"],"name":"radiatorviewplugin","previousTimestamp":"2011-04-20T14:04:38.00Z","previousVersion":"1.12","releaseTimestamp":"2011-05-17T13:14:36.00Z","requiredCore":"1.398","scm":"svn.jenkins-ci.org","sha1":"RV2RK68V/SCUnF8JNJus7qjXLNw=","title":"Radiator View Plugin","url":"http://updates.jenkins-ci.org/download/plugins/radiatorviewplugin/1.13/radiatorviewplugin.hpi","version":"1.13","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Radiator+View+Plugin"},"rake":{"buildDate":"Aug 13, 2011","dependencies":[],"developers":[{"developerId":"david_calavera","email":"calavera@apache.org","name":"David Calavera"}],"excerpt":"This plugin allows Jenkins to invoke Rake<\/a> tasks as build steps.","gav":"org.jenkins-ci.plugins:rake:1.7.7","labels":["builder","ruby"],"name":"rake","previousTimestamp":"2011-03-23T03:06:24.00Z","previousVersion":"1.7.6","releaseTimestamp":"2011-08-13T15:24:34.00Z","requiredCore":"1.398","scm":"github.com","sha1":"D3FkVgKpgurCbRzTTXpw/8e0118=","title":"Rake plugin","url":"http://updates.jenkins-ci.org/download/plugins/rake/1.7.7/rake.hpi","version":"1.7.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Rake+plugin"},"random-string-parameter":{"buildDate":"Aug 12, 2012","dependencies":[],"developers":[{"developerId":"piotrskotnicki","email":"piotr.skotnicki@gmail.com","name":"Piotr Skotnicki"}],"excerpt":"Adds a new parameter type called Random String Parameter which inserts a random string that prevents Jenkins from merging multiple job runs into one. ","gav":"org.jenkins-ci.plugins:random-string-parameter:1.0","labels":["parameter"],"name":"random-string-parameter","releaseTimestamp":"2012-08-12T23:18:58.00Z","requiredCore":"1.409","scm":"github.com","sha1":"SRTRxyIUjyum+CwnxEMCP9prebY=","title":"Random String Parameter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/random-string-parameter/1.0/random-string-parameter.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Random+String+Parameter+Plugin"},"rbenv":{"buildDate":"Nov 27, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.10"}],"developers":[{"developerId":"hsbt"}],"excerpt":"This plugin runs your jobs in the rbenv ","gav":"org.jenkins-ci.ruby-plugins:rbenv:0.0.6","labels":[],"name":"rbenv","previousTimestamp":"2012-06-12T21:42:54.00Z","previousVersion":"0.0.5","releaseTimestamp":"2012-11-28T02:35:50.00Z","requiredCore":"1.432","scm":"github.com","sha1":"2w+ljr5L21WsD6dWhtHjxH4CO5Y=","title":"rbenv plugin","url":"http://updates.jenkins-ci.org/download/plugins/rbenv/0.0.6/rbenv.hpi","version":"0.0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/rbenv+plugin"},"read-only-configurations":{"buildDate":"Oct 05, 2012","dependencies":[],"developers":[{"developerId":"lvotypko","email":"lvotypko@redhat.com","name":"Lucie Votypkova"}],"excerpt":"This plugin enables to show read-only configurations of job and global Jenkins configurations ","gav":"org.jenkins-ci.plugins:read-only-configurations:1.7","labels":[],"name":"read-only-configurations","previousTimestamp":"2012-10-05T17:40:22.00Z","previousVersion":"1.6","releaseTimestamp":"2012-10-05T18:35:10.00Z","requiredCore":"1.425","scm":"github.com","sha1":"BwoAhTMVYG38pWv3G8QpmONW+bA=","title":"Read-only configurations plugin","url":"http://updates.jenkins-ci.org/download/plugins/read-only-configurations/1.7/read-only-configurations.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Read-only+configurations+plugin"},"rebuild":{"buildDate":"Nov 13, 2012","dependencies":[],"developers":[{"developerId":"ragesh_nair","email":"ragesh.x.nair@sonyericsson.com","name":"Ragesh Nair"},{"developerId":"shemeersulaiman","email":"shemeer.x.sulaiman@sonyericsson.com","name":"Shemeer Sulaiman"}],"excerpt":"This plug-in allows the user to _rebuild_ a _parametrized build_ without entering the _parameters_ again.It will also allow the user to edit the parameters before rebuilding. ","gav":"com.sonyericsson.hudson.plugins.rebuild:rebuild:1.16","labels":["misc"],"name":"rebuild","previousTimestamp":"2012-10-11T17:58:36.00Z","previousVersion":"1.15","releaseTimestamp":"2012-11-13T20:19:42.00Z","requiredCore":"1.481","scm":"github.com","sha1":"Oc7o/KYGkbMnjtkBnTSFve+GHjU=","title":"Rebuild Plugin","url":"http://updates.jenkins-ci.org/download/plugins/rebuild/1.16/rebuild.hpi","version":"1.16","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Rebuild+Plugin"},"recipe":{"buildDate":"Dec 31, 2012","dependencies":[{"name":"chosen","optional":false,"version":"1.0"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"","gav":"org.jenkins-ci.plugins:recipe:1.0","labels":[],"name":"recipe","releaseTimestamp":"2012-12-31T18:04:24.00Z","requiredCore":"1.489","scm":"github.com","sha1":"cHVq4x9ZfhGjSd+T80SASoWqrsc=","title":"Recipe Plugin","url":"http://updates.jenkins-ci.org/download/plugins/recipe/1.0/recipe.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Recipe+Plugin"},"redmine":{"buildDate":"Oct 28, 2012","dependencies":[{"name":"subversion","optional":false,"version":"2.0.1"}],"developers":[{"developerId":"gaooh","name":"Akiko Asami"}],"excerpt":"This plugin integrates Redmine<\/a> into Hudson (there's a plugin for Redmine<\/a> that integrates Hudson from the Redmine side, too.)","gav":"org.jenkins-ci.plugins:redmine:0.11","labels":["external"],"name":"redmine","previousTimestamp":"2012-08-17T06:25:00.00Z","previousVersion":"0.10","releaseTimestamp":"2012-10-28T19:27:48.00Z","requiredCore":"1.466","scm":"github.com","sha1":"KFGBYxdGnSPSQwHCno78GCnV0Xo=","title":"Redmine Plugin","url":"http://updates.jenkins-ci.org/download/plugins/redmine/0.11/redmine.hpi","version":"0.11","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Redmine+Plugin"},"refit":{"buildDate":"Jul 14, 2011","dependencies":[],"developers":[{"developerId":"hwellmann","email":"harald.wellmann@gmx.de","name":"Harald Wellmann"}],"excerpt":"A plugin for publishing Fit test reports created by reFit<\/a>, an implementation of the Framework for Integrated Test (Fit). ","gav":"com.googlecode.refit.jenkins:refit:0.3.1","labels":["report"],"name":"refit","previousTimestamp":"2011-04-06T02:08:44.00Z","previousVersion":"0.3","releaseTimestamp":"2011-07-15T01:00:36.00Z","requiredCore":"1.403","scm":"svn.jenkins-ci.org","sha1":"IbilFMeyYoX5oHRQE7y39/yu60E=","title":"reFit Plugin","url":"http://updates.jenkins-ci.org/download/plugins/refit/0.3.1/refit.hpi","version":"0.3.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/reFit+Plugin"},"regexemail":{"buildDate":"Jan 31, 2010","dependencies":[],"developers":[{"developerId":"justinedelson","name":"Justin Edelson"}],"excerpt":"This plugin allows you to generate user email addresses from usernames.","gav":"com.mtvi.plateng.hudson:regexemail:0.3","labels":["user"],"name":"regexemail","previousTimestamp":"2008-06-30T20:38:16.00Z","previousVersion":"0.2","releaseTimestamp":"2010-01-31T20:41:44.00Z","requiredCore":"1.318","scm":"svn.dev.java.net","sha1":"J9gFriK5ue+NWM3WF3P5OG8Kf4U=","title":"RegEx Email Plugin","url":"http://updates.jenkins-ci.org/download/plugins/regexemail/0.3/regexemail.hpi","version":"0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/RegEx+Email+Plugin"},"regression-report-plugin":{"buildDate":"Jun 12, 2012","dependencies":[],"developers":[{"developerId":"eller86","name":"Kengo TODA"}],"excerpt":"This plugin sends a mail if your test cases find regression (new failure). ","gav":"org.jenkins-ci.plugins:regression-report-plugin:1.0","labels":["report"],"name":"regression-report-plugin","releaseTimestamp":"2012-06-12T06:35:34.00Z","requiredCore":"1.436","scm":"github.com","sha1":"GEMfb4MDa+ARzWfR14EHuml1tDc=","title":"Regression Report Plugin","url":"http://updates.jenkins-ci.org/download/plugins/regression-report-plugin/1.0/regression-report-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Regression+Report+Plugin"},"release":{"buildDate":"Sep 20, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.399"},{"name":"dashboard-view","optional":true,"version":"2.0"},{"name":"promoted-builds","optional":true,"version":"2.0"}],"developers":[{"developerId":"petehayes","email":"petehayes@gmail.com","name":"Peter Hayes"}],"excerpt":"This plugin adds the ability to wrap your job with pre\\- and post\\- build steps which are only executed when a manual release build is triggered.","gav":"org.jenkins-ci.plugins:release:2.3","labels":["buildwrapper","listview-column"],"name":"release","previousTimestamp":"2011-09-14T00:57:02.00Z","previousVersion":"2.2","releaseTimestamp":"2012-09-20T05:21:22.00Z","requiredCore":"1.398","scm":"github.com","sha1":"cKamKJumyoeDwr/71brgI5Odtzk=","title":"Release Plugin","url":"http://updates.jenkins-ci.org/download/plugins/release/2.3/release.hpi","version":"2.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Release+Plugin"},"remote-terminal-access":{"buildDate":"Jan 07, 2013","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin enables users to open an interactive terminal session against on-going builds on Jenkins.","gav":"org.jenkins-ci.plugins:remote-terminal-access:1.0","labels":["ui"],"name":"remote-terminal-access","releaseTimestamp":"2013-01-07T21:53:14.00Z","requiredCore":"1.466","scm":"github.com","sha1":"WrPWFvvCxSA4NThOVh2sAzFqEYc=","title":"Remote Terminal Access Plugin","url":"http://updates.jenkins-ci.org/download/plugins/remote-terminal-access/1.0/remote-terminal-access.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Remote+Terminal+Access+Plugin"},"repo":{"buildDate":"Nov 19, 2012","dependencies":[],"developers":[{"developerId":"bjarkef","email":"bjarkefh@gmail.com","name":"Bjarke Freund-Hansen"},{"developerId":"bklarson","email":"bklarson@gmail.com","name":"Brad Larson"}],"excerpt":"This plugin adds Repo ([http://code.google.com/p/git-repo/]) as an SCM provider in Jenkins.","gav":"org.jenkins-ci.plugins:repo:1.3","labels":["scm"],"name":"repo","previousTimestamp":"2012-04-23T16:59:16.00Z","previousVersion":"1.2.1","releaseTimestamp":"2012-11-19T20:55:40.00Z","requiredCore":"1.350","scm":"github.com","sha1":"ce7ZgiClo/HuvwLxpQj/KrJ7vGE=","title":"Repo Plugin","url":"http://updates.jenkins-ci.org/download/plugins/repo/1.3/repo.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Repo+Plugin"},"repository":{"buildDate":"Sep 28, 2012","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"git","optional":false,"version":"1.1.23"},{"name":"token-macro","optional":true,"version":"1.5.1"},{"name":"maven-plugin","optional":false,"version":"1.466"}],"developers":[{"developerId":"magnayn","email":"nigel.magnay@gmail.com","name":"Nigel Magnay"}],"excerpt":"This plug-in exposes project builds as a maven repository so the artifacts can be picked up by downstream builds or other systems.","gav":"jenkins:repository:0.11","labels":["maven"],"name":"repository","previousTimestamp":"2012-04-05T17:03:16.00Z","previousVersion":"0.9","releaseTimestamp":"2012-09-28T19:31:12.00Z","requiredCore":"1.466","scm":"github.com","sha1":"/eJTCcGKH3C4hD6YW3qUvVmekHM=","title":"Jenkins Maven Repository Server","url":"http://updates.jenkins-ci.org/download/plugins/repository/0.11/repository.hpi","version":"0.11","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Maven+Repository+Server"},"repository-connector":{"buildDate":"Feb 18, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"imod","email":"-","name":"Dominik Bartholdi"}],"excerpt":"Repository Connector adds a build step which allows to resolve artifacts from a maven repository like nexus (without having maven installed). ","gav":"org.jvnet.hudson.plugins:repository-connector:0.8.2","labels":["external","maven"],"name":"repository-connector","previousTimestamp":"2011-09-26T21:36:44.00Z","previousVersion":"0.8.1","releaseTimestamp":"2012-02-18T23:33:48.00Z","requiredCore":"1.378","scm":"github.com","sha1":"RNX3AdZQ2/qxFI8fchubAo7pwIQ=","title":"Repository Connector Plugin","url":"http://updates.jenkins-ci.org/download/plugins/repository-connector/0.8.2/repository-connector.hpi","version":"0.8.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Repository+Connector+Plugin"},"reverse-proxy-auth-plugin":{"buildDate":"Mar 26, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","email":"kkawaguchi@cloudbees.com","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin lets you delegate the authentication to the reverse proxy that you run in front of Jenkins.","gav":"org.jenkins-ci.plugins:reverse-proxy-auth-plugin:1.0","labels":["user"],"name":"reverse-proxy-auth-plugin","releaseTimestamp":"2011-03-26T21:32:40.00Z","requiredCore":"1.398","scm":"github.com","sha1":"CHkHnHHOS+KtezFxqmmI9hBcnmE=","title":"Reverse Proxy Auth Plugin","url":"http://updates.jenkins-ci.org/download/plugins/reverse-proxy-auth-plugin/1.0/reverse-proxy-auth-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Reverse+Proxy+Auth+Plugin"},"reviewboard":{"buildDate":"Feb 17, 2011","dependencies":[{"name":"perforce","optional":false,"version":"1.0.28"}],"developers":[{"developerId":"rshelley","email":"ryan@12gaugemedia.com","name":"Ryan Shelley"}],"excerpt":"This plugin connects to Reviewboard<\/a> to create and update Review Requests. Reviewboard is a tool for conducting code reviews and this plugin will allow you to link your SCM updates, when they are pulled for a Jenkins build, to Reviewboard. Note that currently, only the Perforce SCM<\/a> is supported.","gav":"org.jvnet.hudson.plugins:reviewboard:1.0.1","labels":["notifier"],"name":"reviewboard","previousTimestamp":"2010-05-04T17:38:06.00Z","previousVersion":"1.0.0","releaseTimestamp":"2011-02-17T18:47:32.00Z","requiredCore":"1.358","scm":"svn.jenkins-ci.org","sha1":"teByZj4VXUnhXdL7uEPTrSdqcLg=","title":"Reviewboard Plugin","url":"http://updates.jenkins-ci.org/download/plugins/reviewboard/1.0.1/reviewboard.hpi","version":"1.0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Reviewboard+Plugin"},"robot":{"buildDate":"Oct 01, 2012","dependencies":[{"name":"token-macro","optional":true,"version":"1.5.1"}],"developers":[{"developerId":"jpiironen","email":"janne.piironen@gmail.com","name":"Janne Piironen"}],"excerpt":"This plugin collects and publishes Robot Framework<\/a> test results","gav":"org.jenkins-ci.plugins:robot:1.2.3","labels":["report"],"name":"robot","previousTimestamp":"2012-05-09T19:54:56.00Z","previousVersion":"1.2.2","releaseTimestamp":"2012-10-01T16:24:12.00Z","requiredCore":"1.398","scm":"github.com","sha1":"ziR0jZJMfZghpNWCRaqjIiPYHrI=","title":"Robot Framework Plugin","url":"http://updates.jenkins-ci.org/download/plugins/robot/1.2.3/robot.hpi","version":"1.2.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Robot+Framework+Plugin"},"role-strategy":{"buildDate":"Oct 14, 2011","dependencies":[],"developers":[{"developerId":"tmaurel","name":"Thomas Maurel"},{"developerId":"rseguy","name":"Romain Seguy"}],"excerpt":"Adds a new role-based strategy to manage users' permissions.","gav":"org.jenkins-ci.plugins:role-strategy:1.1.2","labels":["user"],"name":"role-strategy","previousTimestamp":"2011-09-19T22:53:20.00Z","previousVersion":"1.1.1","releaseTimestamp":"2011-10-14T15:12:56.00Z","requiredCore":"1.409","scm":"svn.jenkins-ci.org","sha1":"OL8aScDTWyM0ReP/fYILTU5Vt0k=","title":"Role Strategy Plugin","url":"http://updates.jenkins-ci.org/download/plugins/role-strategy/1.1.2/role-strategy.hpi","version":"1.1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin"},"rrod":{"buildDate":"Mar 01, 2012","dependencies":[],"developers":[{"developerId":"danielpetisme","email":"daniel.petisme@gmail.com","name":"Daniel Petisme"}],"excerpt":"This plugin adds new actions on jobs for users to request that their jobs are renamed or deleted","gav":"org.jenkins-ci.plugins:rrod:1.1.0","labels":["misc"],"name":"rrod","previousTimestamp":"2011-10-17T21:19:04.00Z","previousVersion":"1.0.2","releaseTimestamp":"2012-03-01T20:41:30.00Z","requiredCore":"1.409","scm":"svn.jenkins-ci.org","sha1":"BHc6RyGkYHbOqmZpdTP/60k3XMo=","title":"Request Rename Or Delete Plugin","url":"http://updates.jenkins-ci.org/download/plugins/rrod/1.1.0/rrod.hpi","version":"1.1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Request+Rename+Or+Delete+Plugin"},"rtc":{"buildDate":"Dec 12, 2011","dependencies":[],"developers":[{"developerId":"deluan","email":"jenkins@deluan.com","name":"Deluan Quintao"}],"excerpt":"This plugin integrates IBM's Rational Team Concert (RTC)<\/a> source control to Hudson. ","gav":"org.jenkins-ci.plugins:rtc:0.3","labels":["scm"],"name":"rtc","previousTimestamp":"2011-11-29T20:30:54.00Z","previousVersion":"0.2.2","releaseTimestamp":"2011-12-13T01:18:58.00Z","requiredCore":"1.398","scm":"github.com","sha1":"u5HX8M8dP83hTcc83Z3tPVKvaNM=","title":"Rational Team Concert Plugin","url":"http://updates.jenkins-ci.org/download/plugins/rtc/0.3/rtc.hpi","version":"0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Rational+Team+Concert+Plugin"},"ruby":{"buildDate":"Jan 31, 2010","dependencies":[],"developers":[{"developerId":"vivekp","name":"Vivek Pandey"}],"excerpt":"This plugin will let users use Ruby<\/a> in the build scripts. ","gav":"org.jvnet.hudson.plugins:ruby:1.2","labels":["builder","ruby"],"name":"ruby","previousTimestamp":"2008-01-26T14:20:32.00Z","previousVersion":"1.1","releaseTimestamp":"2010-01-31T20:49:38.00Z","requiredCore":"1.318","scm":"svn.dev.java.net","sha1":"8Mvxy/p9VNOY8+LIlwMv5+/XhP8=","title":"Ruby Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ruby/1.2/ruby.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Ruby+Plugin"},"ruby-runtime":{"buildDate":"Mar 22, 2012","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"Hosts runtime for enabling pure-Ruby plugins","gav":"org.jenkins-ci.plugins:ruby-runtime:0.10","name":"ruby-runtime","previousTimestamp":"2012-02-09T13:44:28.00Z","previousVersion":"0.9","releaseTimestamp":"2012-03-22T13:55:52.00Z","requiredCore":"1.447","scm":"github.com","sha1":"MWaCPg4BvdYGfcUaRY45Fb9yBnc=","title":"ruby-runtime","url":"http://updates.jenkins-ci.org/download/plugins/ruby-runtime/0.10/ruby-runtime.hpi","version":"0.10"},"rubyMetrics":{"buildDate":"Mar 10, 2011","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.397"},{"name":"rake","optional":false,"version":"1.7.3"}],"developers":[{"developerId":"david_calavera","email":"calavera@apache.org","name":"David Calavera"}],"excerpt":"Ruby metric reports for Jenkins. Rcov<\/a>, Rails stats, Rails notes and Flog<\/a>.","gav":"org.jenkins-ci.plugins:rubyMetrics:1.5.0","labels":["report","ruby"],"name":"rubyMetrics","previousTimestamp":"2010-11-27T18:31:10.00Z","previousVersion":"1.4.6","releaseTimestamp":"2011-03-11T03:33:44.00Z","requiredCore":"1.397","scm":"github.com","sha1":"pIJbY1kwbVpO8Yss6/IC1iqaOFw=","title":"Ruby metrics plugin","url":"http://updates.jenkins-ci.org/download/plugins/rubyMetrics/1.5.0/rubyMetrics.hpi","version":"1.5.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Ruby+metrics+plugin"},"run-condition":{"buildDate":"May 25, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"bap","email":"bap-jenkins@BapIT.co.uk","name":"Bap"}],"excerpt":"Core conditions to select whether to execute a build step or publisher. Used by the [Flexible Publish Plugin] and the [Conditional BuildStep Plugin]. ","gav":"org.jenkins-ci.plugins:run-condition:0.10","labels":["misc"],"name":"run-condition","previousTimestamp":"2012-05-06T23:51:32.00Z","previousVersion":"0.9","releaseTimestamp":"2012-05-26T00:34:10.00Z","requiredCore":"1.408","scm":"github.com","sha1":"S2616avhln75jKH2/yhK5SLphpw=","title":"Run Condition Plugin","url":"http://updates.jenkins-ci.org/download/plugins/run-condition/0.10/run-condition.hpi","version":"0.10","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Run+Condition+Plugin"},"rundeck":{"buildDate":"Jan 04, 2012","compatibleSinceVersion":"2.0","dependencies":[],"developers":[{"developerId":"vbehar","name":"Vincent Behar"}],"excerpt":"This plugin is a Notifier that will talk to a RunDeck<\/a> instance (via its HTTP API) to schedule a job execution on RunDeck after a successful build on Jenkins. It is also a Trigger that will schedule a build on Jenkins after a job execution on RunDeck (using RunDeck WebHook Notification). In addition, it turns Jenkins into an Option provider<\/a> for RunDeck, if you want to use your Jenkins build artifacts as an option to a RunDeck job. ","gav":"org.jenkins-ci.plugins:rundeck:2.11","labels":["notifier","external","trigger"],"name":"rundeck","previousTimestamp":"2011-10-12T04:06:56.00Z","previousVersion":"2.10","releaseTimestamp":"2012-01-05T03:58:46.00Z","requiredCore":"1.398","scm":"github.com","sha1":"q36Zqr/NnOOGOmiyTgfSzJAruNg=","title":"RunDeck Plugin","url":"http://updates.jenkins-ci.org/download/plugins/rundeck/2.11/rundeck.hpi","version":"2.11","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/RunDeck+Plugin"},"rvm":{"buildDate":"Apr 03, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.7"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin runs your jobs in the RVM<\/a> managed ruby+gemset of your choice","gav":"org.jenkins-ci.ruby-plugins:rvm:0.3","labels":["ruby"],"name":"rvm","previousTimestamp":"2012-01-25T01:56:28.00Z","previousVersion":"0.2","releaseTimestamp":"2012-04-03T15:19:20.00Z","requiredCore":"1.432","scm":"github.com","sha1":"2pt70X8VG9X1vcq7VpiDuKcT2gA=","title":"RVM Plugin","url":"http://updates.jenkins-ci.org/download/plugins/rvm/0.3/rvm.hpi","version":"0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/RVM+Plugin"},"s3":{"buildDate":"Nov 06, 2012","dependencies":[],"developers":[{"developerId":"dougm","name":"Doug MacEachern"},{"developerId":"d6y","name":"Richard Dallaway"},{"developerId":"longlho","name":"Long Ho"},{"developerId":"mikewatt","name":"Michael Watt"}],"excerpt":"Upload build artifacts to Amazon S3","gav":"org.jenkins-ci.plugins:s3:0.3.2","labels":["upload"],"name":"s3","previousTimestamp":"2012-09-20T13:06:50.00Z","previousVersion":"0.3.1","releaseTimestamp":"2012-11-06T18:44:10.00Z","requiredCore":"1.434","scm":"github.com","sha1":"1S0PpGWCUHT2cxG6khxuWODq6Ic=","title":"S3 Plugin","url":"http://updates.jenkins-ci.org/download/plugins/s3/0.3.2/s3.hpi","version":"0.3.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/S3+Plugin"},"saferestart":{"buildDate":"Sep 07, 2011","dependencies":[],"developers":[{"developerId":"sogabe","email":"s.sogabe@gmail.com","name":"Seiji Sogabe"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin allows you to restart Jenkins safely.","gav":"org.jenkins-ci.plugins:saferestart:0.2","labels":["misc"],"name":"saferestart","previousTimestamp":"2010-10-18T20:53:24.00Z","previousVersion":"0.1","releaseTimestamp":"2011-09-08T02:47:20.00Z","requiredCore":"1.421","scm":"github.com","sha1":"pdGEVPrNiv9AervaJ1Xu8IBAQDk=","title":"SafeRestart Plugin","url":"http://updates.jenkins-ci.org/download/plugins/saferestart/0.2/saferestart.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SafeRestart+Plugin"},"sauce-ondemand":{"buildDate":"Dec 27, 2012","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"copy-to-slave","optional":false,"version":"1.4"},{"name":"maven-plugin","optional":false,"version":"1.467"}],"developers":[{"developerId":"ross"}],"excerpt":"This plugin allows you to integrate Sauce OnDemand<\/a> with Jenkins.","gav":"org.jenkins-ci.plugins:sauce-ondemand:1.37","labels":["buildwrapper"],"name":"sauce-ondemand","previousTimestamp":"2012-12-22T13:39:30.00Z","previousVersion":"1.36","releaseTimestamp":"2012-12-27T16:11:06.00Z","requiredCore":"1.439","scm":"github.com","sha1":"hgSl1PyXGOlWSFpAgZJVArW0iqo=","title":"Sauce OnDemand Plugin","url":"http://updates.jenkins-ci.org/download/plugins/sauce-ondemand/1.37/sauce-ondemand.hpi","version":"1.37","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Sauce+OnDemand+Plugin"},"sbt":{"buildDate":"Jul 17, 2012","dependencies":[],"developers":[{"developerId":"uzilan","email":"uzi.landsmann@gmail.com","name":"Uzi Landsmann"}],"excerpt":"This plugin allows building Scala projects using sbt<\/a>. ","gav":"org.jenkins-ci.plugins:sbt:1.4","labels":["builder"],"name":"sbt","previousTimestamp":"2011-08-27T13:24:28.00Z","previousVersion":"1.3","releaseTimestamp":"2012-07-17T20:24:34.00Z","requiredCore":"1.398","scm":"github.com","sha1":"UXG6GZDyIxGZUZqtVUBeZqhtS7M=","title":"sbt plugin","url":"http://updates.jenkins-ci.org/download/plugins/sbt/1.4/sbt.hpi","version":"1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/sbt+plugin"},"schedule-failed-builds":{"buildDate":"Dec 28, 2009","dependencies":[],"developers":[{"developerId":"sfritz","name":"Stefan Fritz"}],"excerpt":"Allows you to retry failed Hudson builds every n minutes.","gav":"com.progress.hudson:schedule-failed-builds:1.1","labels":["trigger"],"name":"schedule-failed-builds","previousTimestamp":"2008-09-19T11:23:46.00Z","previousVersion":"1.0","releaseTimestamp":"2009-12-29T02:41:02.00Z","requiredCore":"1.324","scm":"svn.dev.java.net","sha1":"MlP7dxQRuT+IMolVNq5xXpScN1s=","title":"Retry Failed Builds Plugin","url":"http://updates.jenkins-ci.org/download/plugins/schedule-failed-builds/1.1/schedule-failed-builds.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Retry+Failed+Builds+Plugin"},"scm-sync-configuration":{"buildDate":"Oct 28, 2012","dependencies":[{"name":"subversion","optional":false,"version":"1.39"}],"developers":[{"developerId":"fcamblor","email":"fcamblor+jenkinswiki@gmail.com","name":"Frederic Camblor"},{"developerId":"bpaquet","email":"bertrand.paquet@gmail.com","name":"Bertrand Paquet"}],"excerpt":"Syncs configuration files to a SCM repository and tracks changes done to them ","gav":"org.jenkins-ci.plugins:scm-sync-configuration:0.0.6.1","labels":["misc"],"name":"scm-sync-configuration","previousTimestamp":"2012-09-18T05:59:22.00Z","previousVersion":"0.0.6","releaseTimestamp":"2012-10-29T03:36:56.00Z","requiredCore":"1.409","scm":"github.com","sha1":"u3SDtmNgc1gQAX2/zgq1gCwtqjc=","title":"SCM Sync configuration plugin","url":"http://updates.jenkins-ci.org/download/plugins/scm-sync-configuration/0.0.6.1/scm-sync-configuration.hpi","version":"0.0.6.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SCM+Sync+configuration+plugin"},"scm2job":{"buildDate":"Sep 20, 2012","dependencies":[{"name":"subversion","optional":false,"version":"1.39"},{"name":"git","optional":false,"version":"1.1.17"}],"developers":[{"developerId":"stefanbrausch","email":"stefan.brausch@1und1.de","name":"Stefan Brausch"},{"developerId":"kstutz","email":"kathi.stutz@1und1.de","name":"Kathi Stutz"}],"excerpt":"Finds jobs by their SCM URL. ","gav":"org.jenkins-ci.plugins:scm2job:2.2","labels":["scm-related"],"name":"scm2job","previousTimestamp":"2012-09-19T19:57:42.00Z","previousVersion":"2.1","releaseTimestamp":"2012-09-20T21:57:24.00Z","requiredCore":"1.424.6","scm":"github.com","sha1":"UTloKrMrXCDdmoYtJIpxDqoAI0Q=","title":"SCM2Job Plugin","url":"http://updates.jenkins-ci.org/download/plugins/scm2job/2.2/scm2job.hpi","version":"2.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SCM2Job+Plugin"},"scons":{"buildDate":"May 24, 2011","dependencies":[],"developers":[{"developerId":"gbois","email":"gbois@dev.java.net","name":"Gregory Boissinot"}],"excerpt":"This plugin allows Hudson to invoke SCons<\/a> build script as the main build step.","gav":"com.thalesgroup.jenkins-ci.plugins:scons:0.4","labels":["builder"],"name":"scons","previousTimestamp":"2011-03-07T01:12:56.00Z","previousVersion":"0.3","releaseTimestamp":"2011-05-24T05:37:02.00Z","requiredCore":"1.413","scm":"github.com","sha1":"KobvAmnJkmEayv9IHUOY9PCqod8=","title":"SCons Plugin","url":"http://updates.jenkins-ci.org/download/plugins/scons/0.4/scons.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SCons+Plugin"},"scp":{"buildDate":"Jan 07, 2011","dependencies":[],"developers":[{"developerId":"ramazanyich2","name":"Ramil Israfilov"}],"excerpt":"This plugin uploads build artifacts to repository sites using SCP (SSH) protocol.","gav":"org.jvnet.hudson.plugins:scp:1.8","labels":["upload"],"name":"scp","previousTimestamp":"2010-11-20T15:12:00.00Z","previousVersion":"1.7","releaseTimestamp":"2011-01-07T05:05:58.00Z","requiredCore":"1.389","scm":"github.com","sha1":"9mS+ZOeydNbMV07rXC62xNFDwEw=","title":"SCP plugin","url":"http://updates.jenkins-ci.org/download/plugins/scp/1.8/scp.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SCP+plugin"},"screenshot":{"buildDate":"Dec 01, 2009","dependencies":[],"developers":[{"developerId":"tom"}],"excerpt":"Shows a screenshot of a running build.","gav":"org.jvnet.hudson.plugins:screenshot:1.1","labels":["ui","buildwrapper"],"name":"screenshot","previousTimestamp":"2009-11-29T02:18:14.00Z","previousVersion":"1.0","releaseTimestamp":"2009-12-02T02:06:30.00Z","requiredCore":"1.335","scm":"svn.dev.java.net","sha1":"14C0JllgeK68CdJb7vPxF8cPu6Y=","title":"Screenshot Plugin","url":"http://updates.jenkins-ci.org/download/plugins/screenshot/1.1/screenshot.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Screenshot+Plugin"},"script-realm":{"buildDate":"Jun 24, 2012","dependencies":[],"developers":[{"developerId":"imod","email":"-","name":"Dominik Bartholdi"}],"excerpt":"This plugin allows you to use a user-written custom script to authenticate the username and password","gav":"org.jvnet.hudson.plugins:script-realm:1.5","labels":["user"],"name":"script-realm","previousTimestamp":"2011-07-29T23:42:08.00Z","previousVersion":"1.4","releaseTimestamp":"2012-06-24T22:57:46.00Z","requiredCore":"1.330","scm":"github.com","sha1":"d4ee6ZzSh4OhfkcyY80ZB+0BAR0=","title":"Script Security Realm","url":"http://updates.jenkins-ci.org/download/plugins/script-realm/1.5/script-realm.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Script+Security+Realm"},"script-scm":{"buildDate":"Oct 22, 2012","dependencies":[],"developers":[{"developerId":"vimil","name":"vimil"}],"excerpt":"","gav":"org.jenkins-ci.plugins:script-scm:1.11","labels":[],"name":"script-scm","previousTimestamp":"2012-10-19T13:31:46.00Z","previousVersion":"1.8","releaseTimestamp":"2012-10-22T16:25:02.00Z","requiredCore":"1.398","scm":"github.com","sha1":"QYKuWLkppC7rLoOVjQYXD7dqgOM=","title":"Script SCM Plugin","url":"http://updates.jenkins-ci.org/download/plugins/script-scm/1.11/script-scm.hpi","version":"1.11","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Script+SCM+Plugin"},"scripted-cloud-plugin":{"buildDate":"Oct 12, 2012","dependencies":[{"name":"ivy","optional":true,"version":"1.19"}],"developers":[{"developerId":"hisatti77","email":"hisatti77@gmail.com","name":"Satinder Singh"}],"excerpt":"Add script based slave VM management to Jenkins to use virtual machines as slaves ","gav":"org.jenkins-ci.plugins:scripted-cloud-plugin:0.12","labels":["slaves"],"name":"scripted-cloud-plugin","previousTimestamp":"2012-10-06T01:32:22.00Z","previousVersion":"0.11","releaseTimestamp":"2012-10-12T21:47:14.00Z","requiredCore":"1.464","scm":"github.com","sha1":"sy4QBfyjx6SJda+uayHVfK0gt0M=","title":"Scripted Cloud plugin","url":"http://updates.jenkins-ci.org/download/plugins/scripted-cloud-plugin/0.12/scripted-cloud-plugin.hpi","version":"0.12","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Scripted+Cloud+plugin"},"scriptler":{"buildDate":"Nov 19, 2012","dependencies":[{"name":"git","optional":false,"version":"1.1.17"},{"name":"git-server","optional":false,"version":"1.1"},{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"imod","email":"-","name":"Dominik Bartholdi"}],"excerpt":"Scriptler allows you to store/edit groovy scripts and execute it on any of the slaves/nodes... no need to copy/paste groovy code anymore. ","gav":"org.jenkins-ci.plugins:scriptler:2.5.1","labels":["slaves","misc","groovy-related"],"name":"scriptler","previousTimestamp":"2012-11-08T02:24:04.00Z","previousVersion":"2.5","releaseTimestamp":"2012-11-20T04:12:30.00Z","requiredCore":"1.451","scm":"github.com","sha1":"GxSE6MZdqwLuW/yTKmFgVsZXj64=","title":"Scriptler Plugin","url":"http://updates.jenkins-ci.org/download/plugins/scriptler/2.5.1/scriptler.hpi","version":"2.5.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin"},"scripttrigger":{"buildDate":"Jul 25, 2012","dependencies":[],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"ScriptTrigger makes it possible to monitor an environment with a script.","gav":"org.jenkins-ci.plugins:scripttrigger:0.21","labels":["trigger"],"name":"scripttrigger","previousTimestamp":"2012-06-16T15:07:10.00Z","previousVersion":"0.20","releaseTimestamp":"2012-07-25T05:43:14.00Z","requiredCore":"1.410","scm":"github.com","sha1":"HNmeh5otHjenQ1WuLyNOpmrx6lw=","title":"ScriptTrigger Plugin","url":"http://updates.jenkins-ci.org/download/plugins/scripttrigger/0.21/scripttrigger.hpi","version":"0.21","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ScriptTrigger+Plugin"},"search-all-results-plugin":{"buildDate":"Jun 25, 2012","dependencies":[],"developers":[{"developerId":"lvotypko","email":"lvotypko@redhat.com","name":"Lucie Votypkova"}],"excerpt":"This plugin enables to show all searched results (not only suggestion) and categorization. ","gav":"org.jenkins-ci.plugins:search-all-results-plugin:1.0","labels":[],"name":"search-all-results-plugin","releaseTimestamp":"2012-06-25T13:36:52.00Z","requiredCore":"1.471","scm":"github.com","sha1":"qG6sd4kHUFvw52HatIL7tN6wsx0=","title":"All searched results plugin","url":"http://updates.jenkins-ci.org/download/plugins/search-all-results-plugin/1.0/search-all-results-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/All+searched+results+plugin"},"secret":{"buildDate":"May 06, 2010","dependencies":[],"developers":[{"developerId":"jglick","email":"jesse.glick@sun.com","name":"Jesse Glick"}],"excerpt":"Lets you upload secret files to be used by a build.","gav":"org.jvnet.hudson.plugins:secret:1.6","labels":["buildwrapper"],"name":"secret","previousTimestamp":"2010-02-15T23:13:44.00Z","previousVersion":"1.5","releaseTimestamp":"2010-05-06T20:27:12.00Z","requiredCore":"1.324","scm":"svn.dev.java.net","sha1":"SOj2X0iOJ+7RnNKAR0kJjghgkuk=","title":"Build Secret Plugin","url":"http://updates.jenkins-ci.org/download/plugins/secret/1.6/secret.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Build+Secret+Plugin"},"sectioned-view":{"buildDate":"Dec 04, 2011","dependencies":[],"developers":[{"developerId":"tbingaman","email":"timothy.bingaman@gmail.com","name":"Timothy Bingaman"}],"excerpt":"This plugin provides a new view implementation that can be divided into sections. Each section can display different information about the selected jobs. An extension point is also provided to define new types of sections.","gav":"org.jvnet.hudson.plugins:sectioned-view:1.16","labels":["ui"],"name":"sectioned-view","previousTimestamp":"2011-03-23T15:05:28.00Z","previousVersion":"1.15","releaseTimestamp":"2011-12-04T21:36:38.00Z","requiredCore":"1.388","scm":"github.com","sha1":"4tvOl5TCgbhQom8a2OJsyrFYxgc=","title":"Sectioned View Plugin","url":"http://updates.jenkins-ci.org/download/plugins/sectioned-view/1.16/sectioned-view.hpi","version":"1.16","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Sectioned+View+Plugin"},"selection-tasks-plugin":{"buildDate":"Feb 28, 2011","dependencies":[],"developers":[{"developerId":"nzhelyakov","email":"nzhelyakov@gmail.com","name":"Nikita Zhelyakov"},{"email":"tzolotuhin@gmail.com","name":"Timur Zolotuhin"}],"excerpt":"This plugin adds new variable. You may select several tasks (for example, Selenium tests) for run. ","gav":"org.jvnet.hudson.plugins:selection-tasks-plugin:1.0","labels":["must-be-labeled"],"name":"selection-tasks-plugin","releaseTimestamp":"2011-03-01T00:18:24.00Z","requiredCore":"1.366","scm":"svn.jenkins-ci.org","sha1":"C6EJvWUCaKmzwjSXb8sl642HveE=","title":"Selection Tasks Plugin","url":"http://updates.jenkins-ci.org/download/plugins/selection-tasks-plugin/1.0/selection-tasks-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Selection+Tasks+Plugin"},"selenium":{"buildDate":"Sep 05, 2012","dependencies":[],"developers":[{"developerId":"darkrift","email":"lavoie.richard@gmail.com","name":"Richard Lavoie"}],"excerpt":"This plugin turns your Jenkins cluster into a Selenium2 Grid<\/a> cluster","gav":"org.jenkins-ci.plugins:selenium:2.2","labels":["cluster"],"name":"selenium","previousTimestamp":"2012-09-04T00:49:44.00Z","previousVersion":"2.1","releaseTimestamp":"2012-09-05T04:29:56.00Z","requiredCore":"1.478","scm":"github.com","sha1":"SrwEsRYa46Xp9ooP8HMEfYJkEIk=","title":"Selenium Plugin","url":"http://updates.jenkins-ci.org/download/plugins/selenium/2.2/selenium.hpi","version":"2.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Selenium+Plugin"},"selenium-aes":{"buildDate":"Jan 03, 2011","dependencies":[],"developers":[{"developerId":"onozaty"}],"excerpt":"This plugin is for continuous regression test by Selenium Auto Exec Server (AES)<\/a>.","gav":"org.jvnet.hudson.plugins:selenium-aes:0.5","labels":["builder","report"],"name":"selenium-aes","previousTimestamp":"2010-02-05T14:56:38.00Z","previousVersion":"0.3","releaseTimestamp":"2011-01-03T22:28:08.00Z","requiredCore":"1.391","scm":"svn.java.net","sha1":"LGfTbg0/TYuS3CwT6y6wMOV5PBw=","title":"Selenium AES Plugin","url":"http://updates.jenkins-ci.org/download/plugins/selenium-aes/0.5/selenium-aes.hpi","version":"0.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Selenium+AES+Plugin"},"seleniumhq":{"buildDate":"Jul 16, 2010","dependencies":[],"developers":[{"developerId":"pascal_martin","name":"Pascal Martin"}],"excerpt":"This plugin allows you to run and load HTML Selenese suite result generate by Selenium Server from Seleniumhq<\/a>. Jenkins will generate the trend report of test result. The Seleniumhq plug in can be downloaded here<\/a>.","gav":"org.jvnet.hudson.plugins:seleniumhq:0.4","labels":["builder","report"],"name":"seleniumhq","previousTimestamp":"2010-07-11T00:46:32.00Z","previousVersion":"0.3","releaseTimestamp":"2010-07-16T19:16:38.00Z","requiredCore":"1.366","scm":"svn.dev.java.net","sha1":"qhJVAttsNzozQT2TWKgmi9LJ1+M=","title":"Seleniumhq Plugin","url":"http://updates.jenkins-ci.org/download/plugins/seleniumhq/0.4/seleniumhq.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Seleniumhq+Plugin"},"seleniumhtmlreport":{"buildDate":"Nov 03, 2011","dependencies":[],"developers":[{"developerId":"m211","name":"Marco Machmer"}],"excerpt":"This plugin visualizes the results of selenium tests. ","gav":"org.jenkins-ci.plugins:seleniumhtmlreport:0.94","labels":["report"],"name":"seleniumhtmlreport","previousTimestamp":"2011-05-24T12:13:08.00Z","previousVersion":"0.93","releaseTimestamp":"2011-11-03T13:03:10.00Z","requiredCore":"1.405","scm":"github.com","sha1":"rsBIrOiQiqj6/MOxMCTFt6WsmnQ=","title":"seleniumhtmlreport Plugin","url":"http://updates.jenkins-ci.org/download/plugins/seleniumhtmlreport/0.94/seleniumhtmlreport.hpi","version":"0.94","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/seleniumhtmlreport+Plugin"},"seleniumrc-plugin":{"buildDate":"Mar 02, 2011","dependencies":[],"developers":[{"developerId":"nzhelyakov","email":"nzhelyakov@gmail.com","name":"Nikita Zhelyakov"}],"excerpt":"This plugin allows you to create Selenium server instance for each project build. ","gav":"org.jvnet.hudson.plugins:seleniumrc-plugin:1.0","labels":["buildwrapper","must-be-labeled"],"name":"seleniumrc-plugin","releaseTimestamp":"2011-03-02T05:27:40.00Z","requiredCore":"1.366","scm":"svn.jenkins-ci.org","sha1":"ULZBFhnLxv1sGK6Rnojt6mQzXAs=","title":"SeleniumRC Plugin","url":"http://updates.jenkins-ci.org/download/plugins/seleniumrc-plugin/1.0/seleniumrc-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SeleniumRC+Plugin"},"serenity":{"buildDate":"May 13, 2010","dependencies":[],"developers":[{"developerId":"michael.couck","email":"michael.couck@gmail.com","name":"Michael Couck"}],"excerpt":"Serenity is a Java code coverage, complexity and dependency library that uses dynamic instrumentation, with a friendly Hudson ui.","gav":"org.jvnet.hudson.plugins:serenity:0.4","labels":["report"],"name":"serenity","previousTimestamp":"2010-03-16T16:31:58.00Z","previousVersion":"0.3","releaseTimestamp":"2010-05-13T16:56:30.00Z","requiredCore":"1.350","scm":"svn.dev.java.net","sha1":"NTYMV3iNwIEfH+czfKB0ZuUlPu0=","title":"Serenity Plugin","url":"http://updates.jenkins-ci.org/download/plugins/serenity/0.4/serenity.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Serenity+Plugin"},"sfee":{"buildDate":"Aug 12, 2010","dependencies":[{"name":"description-setter","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.361"}],"developers":[{"developerId":"awpyv"}],"excerpt":"Authenticate users and publish build artifacts relying on a Collabnet Source Forge Enterprise Edition (SFEE)<\/a> server.","gav":"org.jvnet.hudson.plugins:sfee:1.0.4","labels":["external","upload","user"],"name":"sfee","previousTimestamp":"2009-10-19T16:57:10.00Z","previousVersion":"1.0.3","releaseTimestamp":"2010-08-12T15:57:48.00Z","requiredCore":"1.361","scm":"svn.dev.java.net","sha1":"FcCj+/e5eOeKMwYXCZhDLCu5dzM=","title":"SFEE Plugin","url":"http://updates.jenkins-ci.org/download/plugins/sfee/1.0.4/sfee.hpi","version":"1.0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SFEE+Plugin"},"shared-objects":{"buildDate":"Aug 26, 2012","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.444"},{"name":"envinject","optional":false,"version":"1.68"}],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to share objects (script file, source file, tool installation, ...) from an environment in Jenkins and manage dynamically these objects through environment variables with the [JENKINS:EnvInject Plugin] during the job build.","gav":"org.jenkins-ci.plugins:shared-objects:0.42","labels":[],"name":"shared-objects","previousTimestamp":"2012-07-14T03:01:28.00Z","previousVersion":"0.41","releaseTimestamp":"2012-08-26T21:07:12.00Z","requiredCore":"1.444","scm":"github.com","sha1":"ep4oE3heWCkgid0fxsr2ZYZrLA4=","title":"SharedObjects Plugin","url":"http://updates.jenkins-ci.org/download/plugins/shared-objects/0.42/shared-objects.hpi","version":"0.42","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SharedObjects+Plugin"},"shelve-project-plugin":{"buildDate":"Aug 06, 2011","dependencies":[],"developers":[{"developerId":"ashlux","email":"ashlux@gmail.com","name":"Ash Lux"}],"excerpt":"This plugin lets you shelve projects so that they can easily be resurrected.","gav":"org.jenkins-ci.plugins:shelve-project-plugin:1.3","labels":["ui","misc"],"name":"shelve-project-plugin","previousTimestamp":"2011-02-08T22:54:40.00Z","previousVersion":"1.2","releaseTimestamp":"2011-08-06T13:33:42.00Z","requiredCore":"1.398","scm":"github.com","sha1":"jBzsK2886A0JCi2OC9QJulUb50E=","title":"Shelve Project Plugin","url":"http://updates.jenkins-ci.org/download/plugins/shelve-project-plugin/1.3/shelve-project-plugin.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Shelve+Project+Plugin"},"shiningpanda":{"buildDate":"Nov 28, 2012","dependencies":[],"developers":[{"developerId":"omansion","email":"olivier.mansion@shiningpanda.com","name":"Olivier Mansion"},{"developerId":"atabary","email":"alexis.tabary@shiningpanda.com","name":"Alexis Tabary"}],"excerpt":"This plugin adds Python support to Jenkins with some useful builders (Python builder, virtualenv<\/a> builder, tox<\/a> builder...) and the ability to use a Python axis in multi-configuration projects (for testing on multiple versions of Python).","gav":"org.jenkins-ci.plugins:shiningpanda:0.17","labels":["builder"],"name":"shiningpanda","previousTimestamp":"2012-11-22T01:39:48.00Z","previousVersion":"0.16","releaseTimestamp":"2012-11-29T03:14:22.00Z","requiredCore":"1.429","scm":"github.com","sha1":"56nVRQW6czBiaQlfPBpXsFLD0Vk=","title":"ShiningPanda Plugin","url":"http://updates.jenkins-ci.org/download/plugins/shiningpanda/0.17/shiningpanda.hpi","version":"0.17","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ShiningPanda+Plugin"},"show-build-parameters":{"buildDate":"Mar 06, 2011","dependencies":[],"developers":[{"developerId":"petehayes","name":"Peter Hayes"}],"excerpt":"Show the parameters used for a build on the main build page ","gav":"org.jenkins-ci.plugins:show-build-parameters:1.0","labels":["ui"],"name":"show-build-parameters","releaseTimestamp":"2011-03-06T15:20:06.00Z","requiredCore":"1.398","scm":"github.com","sha1":"ae5bAwfMkHzoDBgsyAA1yIMRucA=","title":"Show Build Parameters Plugin","url":"http://updates.jenkins-ci.org/download/plugins/show-build-parameters/1.0/show-build-parameters.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Show+Build+Parameters+Plugin"},"sicci_for_xcode":{"buildDate":"Feb 09, 2011","dependencies":[],"developers":[{"developerId":"bene","email":"benedikt@biallowons.de","name":"Benedikt Biallowons"}],"excerpt":"This plugin integrates support for Xcode projects.","gav":"org.jvnet.hudson.plugins:sicci_for_xcode:0.0.8","labels":["builder","ios"],"name":"sicci_for_xcode","previousTimestamp":"2011-02-01T17:56:54.00Z","previousVersion":"0.0.7","releaseTimestamp":"2011-02-09T14:20:04.00Z","requiredCore":"1.398","scm":"github.com","sha1":"OWTxzIrYsIkdjE+phvc1GQRkwqI=","title":"SICCI for Xcode Plugin","url":"http://updates.jenkins-ci.org/download/plugins/sicci_for_xcode/0.0.8/sicci_for_xcode.hpi","version":"0.0.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SICCI+for+Xcode+Plugin"},"sidebar-link":{"buildDate":"Jul 24, 2011","dependencies":[],"developers":[{"developerId":"mindless","name":"Alan Harder"}],"excerpt":"Add links in the sidebar of the Jenkins main page, view tabs and project pages.","gav":"org.jenkins-ci.plugins:sidebar-link:1.6","labels":["ui"],"name":"sidebar-link","previousTimestamp":"2011-01-20T12:37:14.00Z","previousVersion":"1.5","releaseTimestamp":"2011-07-24T12:26:02.00Z","requiredCore":"1.398","scm":"github.com","sha1":"95DL2vYrkbhW4FomEUtbIj3TgAg=","title":"Sidebar-Link Plugin","url":"http://updates.jenkins-ci.org/download/plugins/sidebar-link/1.6/sidebar-link.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Sidebar-Link+Plugin"},"signal-killer":{"buildDate":"Feb 10, 2011","dependencies":[],"developers":[{"developerId":"vjuranek","name":"Vojtech Juranek"}],"excerpt":"  This plugin extends ProcessKiller extension point and sends signal (currentlly SIGKILL) to given job via native GNU C library call.   ","gav":"hudson.plugins.signal_killer:signal-killer:1.0","labels":["misc"],"name":"signal-killer","releaseTimestamp":"2011-02-10T19:29:14.00Z","requiredCore":"1.391","scm":"github.com","sha1":"mJIImiIigV6xPXAg5QdKk3CGBlM=","title":"Signal killer","url":"http://updates.jenkins-ci.org/download/plugins/signal-killer/1.0/signal-killer.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Signal+killer"},"simple-parameterized-builds-report":{"buildDate":"Jan 01, 2013","dependencies":[],"developers":[{"developerId":"nalin_makar","name":"Nalin Makar"}],"excerpt":"This Jenkins plugin makes it easy to visualize the various builds for a parameterized project that were run using the same set of parameters. ","gav":"org.jenkins-ci.plugins:simple-parameterized-builds-report:1.0","labels":["report"],"name":"simple-parameterized-builds-report","releaseTimestamp":"2013-01-02T03:34:24.00Z","requiredCore":"1.447","scm":"github.com","sha1":"9ZOVhMA0rmz7Hva5uLJleuUieS4=","title":"Simple Parameterized Builds Report plugin","url":"http://updates.jenkins-ci.org/download/plugins/simple-parameterized-builds-report/1.0/simple-parameterized-builds-report.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Simple+Parameterized+Builds+Report+plugin"},"simple-theme-plugin":{"buildDate":"Jul 29, 2011","dependencies":[],"developers":[{"developerId":"mallowlabs","email":"mallowlabs@gmail.com","name":"mallowlabs"}],"excerpt":"A plugin for Jenkins that supports custom CSS & JavaScript. You can customize Jenkins's appearance (ex. his gentle face on the background). ","gav":"org.codefirst.jenkins.simplethemeplugin:simple-theme-plugin:0.2","labels":["ui"],"name":"simple-theme-plugin","releaseTimestamp":"2011-07-29T19:14:06.00Z","requiredCore":"1.398","scm":"github.com","sha1":"bC5ilH3xsYurk2R+y8vCDWBjtsU=","title":"Simple Theme Plugin","url":"http://updates.jenkins-ci.org/download/plugins/simple-theme-plugin/0.2/simple-theme-plugin.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Simple+Theme+Plugin"},"simpleclearcase":{"buildDate":"Mar 14, 2012","dependencies":[],"developers":[{"developerId":"sata_","email":"sam@tavakoli.se","name":"Sam Tavakoli"}],"excerpt":"Integrates Jenkins with ClearCase<\/a>.","gav":"jenkins.plugins:simpleclearcase:1.2.2","labels":[],"name":"simpleclearcase","previousTimestamp":"2012-03-13T19:19:44.00Z","previousVersion":"1.2.1","releaseTimestamp":"2012-03-14T17:43:10.00Z","requiredCore":"1.452","scm":"github.com","sha1":"DCOw3J21RcGMpwtYEeSNFkXW9Ng=","title":"SimpleClearCase-Plugin","url":"http://updates.jenkins-ci.org/download/plugins/simpleclearcase/1.2.2/simpleclearcase.hpi","version":"1.2.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SimpleClearCase-Plugin"},"simpleupdatesite":{"buildDate":"Sep 17, 2011","dependencies":[],"developers":[{"developerId":"junoyoon","email":"junoyoon@gmail.com","name":"JunHo Yoon"}],"excerpt":"This plugin make Jenkins connect to the custom support site which provide custom plugin update info and announcements. ","gav":"org.jenkins-ci.plugins:simpleupdatesite:1.1.2","labels":["misc"],"name":"simpleupdatesite","releaseTimestamp":"2011-09-17T05:28:12.00Z","requiredCore":"1.398","scm":"github.com","sha1":"v0mCSfELSnPdpf1433omqFqRs8s=","title":"SimpleUpdateSite Plugin","url":"http://updates.jenkins-ci.org/download/plugins/simpleupdatesite/1.1.2/simpleupdatesite.hpi","version":"1.1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SimpleUpdateSite+Plugin"},"sitemonitor":{"buildDate":"Nov 01, 2011","dependencies":[],"developers":[{"developerId":"cliffano","email":"blah@cliffano.com","name":"Cliffano Subagio"}],"excerpt":"Monitors web site up/down status.","gav":"org.jvnet.hudson.plugins:sitemonitor:0.4","labels":["post-build"],"name":"sitemonitor","previousTimestamp":"2011-02-14T14:48:12.00Z","previousVersion":"0.2","releaseTimestamp":"2011-11-01T23:09:56.00Z","requiredCore":"1.434","scm":"github.com","sha1":"vwH3TH44voPzWr+k7Ovhe5rqi3A=","title":"SiteMonitor Plugin","url":"http://updates.jenkins-ci.org/download/plugins/sitemonitor/0.4/sitemonitor.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SiteMonitor+Plugin"},"skip-certificate-check":{"buildDate":"Sep 07, 2011","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"This is a plugin that makes JVM bypass all the HTTPS certificate checks. Convenient if you deal with self-signed certificates and so on. Use with caution.","gav":"org.jenkins-ci.plugins:skip-certificate-check:1.0","labels":["misc"],"name":"skip-certificate-check","releaseTimestamp":"2011-09-07T15:52:54.00Z","requiredCore":"1.398","scm":"github.com","sha1":"THcV5kg0L/LR3ID4vTQZxX6Lywc=","title":"Skip Certificate Check plugin","url":"http://updates.jenkins-ci.org/download/plugins/skip-certificate-check/1.0/skip-certificate-check.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Skip+Certificate+Check+plugin"},"skype-notifier":{"buildDate":"May 14, 2011","dependencies":[{"name":"instant-messaging","optional":false,"version":"1.16"}],"developers":[{"developerId":"jbh","email":"jarlebh@gmail.com","name":"Jarle Hjortland"}],"excerpt":"Integrates Jenkins with Skype for instant messaging. Requires extra manual installation steps\\!\\!\\! Note that you also need to install the instant-messaging plugin<\/a>.","gav":"org.jenkins-ci.plugins:skype-notifier:1.1.0","labels":["notifier"],"name":"skype-notifier","previousTimestamp":"2011-05-07T01:49:12.00Z","previousVersion":"1.0.1","releaseTimestamp":"2011-05-15T00:22:34.00Z","requiredCore":"1.404","scm":"github.com","sha1":"0/aVziykcHu6OkRmUGXj7GZ00H8=","title":"Skype Plugin","url":"http://updates.jenkins-ci.org/download/plugins/skype-notifier/1.1.0/skype-notifier.hpi","version":"1.1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Skype+Plugin"},"sladiator-notifier":{"buildDate":"Jun 29, 2012","dependencies":[],"developers":[{"developerId":"mkemme","email":"martins.kemme@gmail.com","name":"Martins Kemme"}],"excerpt":"Sends build status notifications to the SLAdiator monitoring application ([http://sladiator.com]). ","gav":"org.jenkins-ci.plugins:sladiator-notifier:1.0.4","labels":["notifier"],"name":"sladiator-notifier","previousTimestamp":"2012-04-19T19:33:22.00Z","previousVersion":"1.0.2","releaseTimestamp":"2012-06-29T17:47:08.00Z","requiredCore":"1.424","scm":"github.com","sha1":"tg+vi33M6Hi8ZvtOvK3lr9uKov0=","title":"SLAdiator plugin","url":"http://updates.jenkins-ci.org/download/plugins/sladiator-notifier/1.0.4/sladiator-notifier.hpi","version":"1.0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SLAdiator+plugin"},"slave-prerequisites":{"buildDate":"Feb 29, 2012","dependencies":[],"developers":[{"developerId":"ndeloof","email":"nicolas.deloof@gmail.com","name":"Nicolas De Loof"}],"excerpt":"This plugin allows to check prerequisites on slave before a job can run a build on it","gav":"org.jenkins-ci.plugins:slave-prerequisites:1.0","labels":[],"name":"slave-prerequisites","releaseTimestamp":"2012-02-29T19:16:14.00Z","requiredCore":"1.452","scm":"github.com","sha1":"IEhASdw3rTtil5vgK5z1TlRQMkc=","title":"Slave Prerequisites Plugin","url":"http://updates.jenkins-ci.org/download/plugins/slave-prerequisites/1.0/slave-prerequisites.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Slave+Prerequisites+Plugin"},"slave-setup":{"buildDate":"Jul 02, 2012","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"ffromm","name":"Frederik Fromm"}],"excerpt":"This plugin prepares slaves for build execution by letting you copy files and execute scripts before the slave gets used.","gav":"org.jenkins-ci.plugins:slave-setup:1.6","labels":["cluster","slaves"],"name":"slave-setup","previousTimestamp":"2012-06-18T16:46:12.00Z","previousVersion":"1.5","releaseTimestamp":"2012-07-02T16:00:42.00Z","requiredCore":"1.442","scm":"github.com","sha1":"maUWMsiiRdk9MirQaGl2jLuAVJY=","title":"Slave Setup Plugin","url":"http://updates.jenkins-ci.org/download/plugins/slave-setup/1.6/slave-setup.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Slave+Setup+Plugin"},"slave-squatter":{"buildDate":"Aug 07, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin enables administrators to reserve executors to be used outside Jenkins.","gav":"org.jenkins-ci.plugins:slave-squatter:1.2","labels":["slaves"],"name":"slave-squatter","previousTimestamp":"2010-09-29T21:33:50.00Z","previousVersion":"1.1","releaseTimestamp":"2011-08-07T13:15:06.00Z","requiredCore":"1.398","scm":"github.com","sha1":"ohVYgUUtofZvBLAeiqHyMtokkPI=","title":"Slave Squatter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/slave-squatter/1.2/slave-squatter.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Slave+Squatter+Plugin"},"slave-status":{"buildDate":"Nov 02, 2011","dependencies":[],"developers":[{"developerId":"douglassquirrel","name":"Douglas Squirrel"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Monitor the status of Hudson slaves.","gav":"org.jvnet.hudson.plugins:slave-status:1.6","labels":["slaves"],"name":"slave-status","previousTimestamp":"2011-11-03T01:19:42.00Z","previousVersion":"1.5","releaseTimestamp":"2011-11-03T01:21:06.00Z","requiredCore":"1.392","scm":"github.com","sha1":"p5HHzKUcrMyQHn/fnB3MuYaCmCI=","title":"slave-status","url":"http://updates.jenkins-ci.org/download/plugins/slave-status/1.6/slave-status.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/slave-status"},"sloccount":{"buildDate":"Jun 16, 2012","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.447"}],"developers":[{"developerId":"npiguet","name":"Nicolas Piguet"},{"developerId":"ohtake","name":"OHTAKE Tomohiro"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"},{"developerId":"ssogabe","email":"s.sogabe@gmail.com","name":"Seiji Sogabe"}],"excerpt":"This plug-in generates the trend report for SLOCCount<\/a>, an open source program which counts the number of lines of codes in over 25 different languages, including C/C++, Ada, COBOL, Fortran, SQL, Ruby, Python, etc...","gav":"hudson.plugins.sloccount:sloccount:1.8","labels":["report"],"name":"sloccount","previousTimestamp":"2012-05-20T18:20:00.00Z","previousVersion":"1.7","releaseTimestamp":"2012-06-17T03:39:46.00Z","requiredCore":"1.447","scm":"github.com","sha1":"Ox4DjkgFPtOaE0C2Hj4HVjbb+AI=","title":"SLOCCount Plugin","url":"http://updates.jenkins-ci.org/download/plugins/sloccount/1.8/sloccount.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SLOCCount+Plugin"},"smart-jenkins":{"buildDate":"Aug 01, 2011","dependencies":[],"developers":[{"developerId":"future-azure","email":"future.azure@gmail.com","name":"Yi Hu"},{"name":"Wenting Gu"}],"excerpt":"This plugin reduces the electricity consumption by shutting down idle slaves and re-schedules jobs to avoid the rush hours of electricity. ","gav":"org.jenkins-ci.plugins:smart-jenkins:1.0","labels":["slaves"],"name":"smart-jenkins","releaseTimestamp":"2011-08-01T15:48:26.00Z","requiredCore":"1.417","scm":"github.com","sha1":"spKQWs6C87Z7X5CTeXmgsntLCbc=","title":"Smart Jenkins","url":"http://updates.jenkins-ci.org/download/plugins/smart-jenkins/1.0/smart-jenkins.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Smart+Jenkins"},"snsnotify":{"buildDate":"Mar 21, 2012","dependencies":[],"developers":[{"developerId":"mikewatt","name":"Michael Watt"}],"excerpt":"Send build notifications to an AWS SNS Topic.","gav":"org.jenkins-ci.plugins:snsnotify:1.6","labels":["notifier"],"name":"snsnotify","previousTimestamp":"2011-10-03T17:48:04.00Z","previousVersion":"1.5","releaseTimestamp":"2012-03-21T21:11:34.00Z","requiredCore":"1.409","scm":"github.com","sha1":"iAfGQgpuLIEDApbdd+B7qErW0zA=","title":"Amazon SNS Notifier","url":"http://updates.jenkins-ci.org/download/plugins/snsnotify/1.6/snsnotify.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Amazon+SNS+Notifier"},"sonar":{"buildDate":"Nov 27, 2012","compatibleSinceVersion":"1.2","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.344"}],"developers":[{"developerId":"godin","email":"mandrikov@gmail.com","name":"Evgeny Mandrikov"},{"developerId":"sbrandhof","email":"simon.brandhof@gmail.com","name":"Simon Brandhof"},{"developerId":"dgageot","email":"david@gageot.net","name":"David Gageot"},{"developerId":"henryju","email":"henryju@yahoo.fr","name":"Julien Henry"}],"excerpt":"Quickly benefit from Sonar<\/a>, an open-source dashboard based on many analysis tools like Checkstyle, PMD and Cobertura.","gav":"org.jvnet.hudson.plugins:sonar:2.0.1","labels":["external","report"],"name":"sonar","previousTimestamp":"2012-10-19T15:50:30.00Z","previousVersion":"2.0","releaseTimestamp":"2012-11-27T21:07:32.00Z","requiredCore":"1.344","scm":"github.com","sha1":"j8CRD1/JxtbdYu0zE3eYG/Pvsmo=","title":"Sonar plugin","url":"http://updates.jenkins-ci.org/download/plugins/sonar/2.0.1/sonar.hpi","version":"2.0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Sonar+plugin"},"sonatype-ci":{"buildDate":"Sep 28, 2012","dependencies":[],"developers":[{"developerId":"mcculls","name":"Stuart McCulloch"}],"excerpt":"Insight for CI analyzes every component in every build, including dependencies, to help you find and fix license, security and quality problems quickly. ","gav":"org.jenkins-ci.plugins:sonatype-ci:1.2","labels":["report"],"name":"sonatype-ci","previousTimestamp":"2012-09-28T01:54:26.00Z","previousVersion":"1.1","releaseTimestamp":"2012-09-29T00:50:26.00Z","requiredCore":"1.395","scm":"github.com","sha1":"sswgv6TMI2hZlBeNkxAwKIOFd4k=","title":"Sonatype CI Plugins","url":"http://updates.jenkins-ci.org/download/plugins/sonatype-ci/1.2/sonatype-ci.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Sonatype+CI+Plugins"},"sounds":{"buildDate":"Sep 01, 2011","dependencies":[],"developers":[{"developerId":"oxcafebabe","email":"edward@hurst-frost.net","name":"Edward Hurst-Frost"}],"excerpt":"This plugin allows Jenkins to play arbitrary audio clips as build actions and notifications.","gav":"org.jvnet.hudson.plugins:sounds:0.4","labels":["notifier"],"name":"sounds","previousTimestamp":"2011-03-02T02:57:06.00Z","previousVersion":"0.3","releaseTimestamp":"2011-09-01T23:18:48.00Z","requiredCore":"1.377","scm":"svn.jenkins-ci.org","sha1":"+rqcWfpyf7fJTmGlaTckYqbBWlU=","title":"Jenkins Sounds plugin","url":"http://updates.jenkins-ci.org/download/plugins/sounds/0.4/sounds.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Sounds+plugin"},"speaks":{"buildDate":"Dec 02, 2009","dependencies":[],"developers":[{"developerId":"oxcafebabe","email":"edward@hurst-frost.net","name":"Edward Hurst-Frost"}],"excerpt":"This plugin gives Hudson a voice using FreeTTS<\/a>.","gav":"org.jvnet.hudson.plugins:speaks:0.1.1","labels":["notifier"],"name":"speaks","previousTimestamp":"2009-11-29T18:50:18.00Z","previousVersion":"0.1","releaseTimestamp":"2009-12-02T22:00:12.00Z","requiredCore":"1.324","scm":"svn.dev.java.net","sha1":"oBZkkzqSmjunMN0L4U6k8saZbxI=","title":"Hudson Speaks! Plugin","url":"http://updates.jenkins-ci.org/download/plugins/speaks/0.1.1/speaks.hpi","version":"0.1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Hudson+Speaks%21+Plugin"},"ssh":{"buildDate":"Sep 24, 2012","dependencies":[],"developers":[{"developerId":"edmund_wagner","name":"Edmund Wagner"}],"excerpt":"You can use the SSH Plugin to run shell commands on a remote machine via ssh.","gav":"org.jvnet.hudson.plugins:ssh:2.3","labels":["buildwrapper"],"name":"ssh","previousTimestamp":"2012-09-04T03:25:44.00Z","previousVersion":"2.2","releaseTimestamp":"2012-09-24T23:51:14.00Z","requiredCore":"1.358","scm":"github.com","sha1":"9Vc+y7i515bRVRrD9qvaPNKGzb8=","title":"SSH plugin","url":"http://updates.jenkins-ci.org/download/plugins/ssh/2.3/ssh.hpi","version":"2.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SSH+plugin"},"ssh-agent":{"buildDate":"Nov 01, 2012","dependencies":[{"name":"ssh-credentials","optional":false,"version":"0.2"},{"name":"credentials","optional":false,"version":"1.3"}],"developers":[{"developerId":"stephenconnolly","name":"Stephen Connolly"}],"excerpt":"This plugin allows you to provide SSH credentials to builds via a ssh-agent in Jenkins.","gav":"org.jenkins-ci.plugins:ssh-agent:1.0","labels":[],"name":"ssh-agent","previousTimestamp":"2012-10-26T16:52:18.00Z","previousVersion":"0.1","releaseTimestamp":"2012-11-01T16:51:20.00Z","requiredCore":"1.398","scm":"github.com","sha1":"u9I3nWyNE5qS9tvCfCFy+wWT8+U=","title":"SSH Agent Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ssh-agent/1.0/ssh-agent.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SSH+Agent+Plugin"},"ssh-credentials":{"buildDate":"Oct 25, 2012","dependencies":[{"name":"credentials","optional":false,"version":"1.3"}],"developers":[{"developerId":"stephenconnolly","name":"Stephen Connolly"}],"excerpt":"This plugin allows you to store SSH credentials in Jenkins.","gav":"org.jenkins-ci.plugins:ssh-credentials:0.2","labels":[],"name":"ssh-credentials","previousTimestamp":"2012-02-28T21:02:48.00Z","previousVersion":"0.1","releaseTimestamp":"2012-10-25T20:06:42.00Z","requiredCore":"1.398","scm":"github.com","sha1":"ouTKUZtIvH376nqrgIXLB3AKvwo=","title":"SSH Credentials Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ssh-credentials/0.2/ssh-credentials.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SSH+Credentials+Plugin"},"ssh-slaves":{"buildDate":"Dec 07, 2012","dependencies":[],"developers":[{"developerId":"stephenconnolly","name":"Stephen Connolly"},{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"olamy","name":"Olivier Lamy"}],"excerpt":"This plugin allows you to manage slaves running on \\*nix machines over SSH.","gav":"org.jenkins-ci.plugins:ssh-slaves:0.22","labels":["slaves"],"name":"ssh-slaves","previousTimestamp":"2011-10-27T11:04:30.00Z","previousVersion":"0.21","releaseTimestamp":"2012-12-07T22:15:02.00Z","requiredCore":"1.424","scm":"github.com","sha1":"mEw1H66P+r3ZT23kZDOgOj7gtc0=","title":"SSH Slaves plugin","url":"http://updates.jenkins-ci.org/download/plugins/ssh-slaves/0.22/ssh-slaves.hpi","version":"0.22","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SSH+Slaves+plugin"},"stackhammer":{"buildDate":"Sep 24, 2012","dependencies":[],"developers":[{"developerId":"thallgren","email":"thomas@tada.se","name":"Thomas Hallgren"}],"excerpt":"This plugin integrates Jenkins with Cloudsmith Stack Hammer<\/a> to validate and/or deploy Puppet configurations (stacks) stored in a repository at GitHub. ","gav":"org.jenkins-ci.plugins:stackhammer:1.0.6","labels":["external"],"name":"stackhammer","previousTimestamp":"2012-09-06T20:24:38.00Z","previousVersion":"1.0.5","releaseTimestamp":"2012-09-25T02:10:00.00Z","requiredCore":"1.420","scm":"github.com","sha1":"ELccKHSaHuTf2CzQnnJ3ojTa/78=","title":"Stack Hammer Plugin","url":"http://updates.jenkins-ci.org/download/plugins/stackhammer/1.0.6/stackhammer.hpi","version":"1.0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Stack+Hammer+Plugin"},"staf":{"buildDate":"Jan 09, 2010","dependencies":[],"developers":[{"developerId":"smithgcovert","email":"covert@mighty.sytes.net","name":"Gregory Covert Smith"}],"excerpt":"This plugin allows Hudson to invoke a STAF command or launch a STAX job as a build step. ","gav":"org.jvnet.hudson.plugins:staf:0.1","labels":["builder"],"name":"staf","releaseTimestamp":"2010-01-10T01:50:36.00Z","requiredCore":"1.339","scm":"svn.dev.java.net","sha1":"krhnfgtef6WRV5B0dUQl3NkfKqQ=","title":"STAF - STAX Plugin","url":"http://updates.jenkins-ci.org/download/plugins/staf/0.1/staf.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/STAF+-+STAX+Plugin"},"starteam":{"buildDate":"Dec 12, 2012","dependencies":[],"developers":[{"developerId":"ilkka","email":"ilkka.s.laukkanen@gmail.com","name":"Ilkka Laukkanen"},{"developerId":"pamdirac","email":"john@mcnair.org","name":"John McNair"},{"developerId":"chunyang","email":"wangchunyang@gmail.com","name":"Chunyang Wang"},{"developerId":"jan_ruzicka","email":"jan_ruzicka@dev.java.net","name":"Jan Ruzicka"},{"developerId":"robwiss","email":"robwiss@gmail.com","name":"Rob Wissmann"},{"developerId":"vyazelenko","email":"vyazelenko@yahoo.com","name":"Dmitry Vyazelenko"}],"excerpt":"This plugin integrates Hudson with StarTeam<\/a>, Borland's crossplatform SCM solution.","gav":"hudson.plugins:starteam:0.6.9","labels":["scm"],"name":"starteam","previousTimestamp":"2012-07-18T14:22:58.00Z","previousVersion":"0.6.8","releaseTimestamp":"2012-12-12T15:29:22.00Z","requiredCore":"1.345","scm":"github.com","sha1":"fdLmAlTXQ/T9lMQvcs6rFlihrmQ=","title":"StarTeam","url":"http://updates.jenkins-ci.org/download/plugins/starteam/0.6.9/starteam.hpi","version":"0.6.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/StarTeam"},"started-by-envvar":{"buildDate":"Oct 20, 2011","dependencies":[],"developers":[{"developerId":"Tom"}],"excerpt":"","gav":"org.jenkins-ci.plugins:started-by-envvar:1.0","name":"started-by-envvar","releaseTimestamp":"2011-10-21T02:08:12.00Z","requiredCore":"1.409.2","scm":"github.com","sha1":"QOvQ8y1L4z1lgH2QvYRUnYJnEco=","title":"Started-By Environment Variable Plugin","url":"http://updates.jenkins-ci.org/download/plugins/started-by-envvar/1.0/started-by-envvar.hpi","version":"1.0"},"startup-trigger-plugin":{"buildDate":"Feb 08, 2011","dependencies":[],"developers":[{"developerId":"ashlux","email":"ashlux@gmail.com","name":"Ash Lux"}],"excerpt":"The Startup Trigger plugin allows you to trigger a build when Jenkins is first started.","gav":"org.jenkins-ci.plugins:startup-trigger-plugin:1.1","labels":["trigger"],"name":"startup-trigger-plugin","previousTimestamp":"2011-02-05T21:29:12.00Z","previousVersion":"1.0","releaseTimestamp":"2011-02-08T22:34:22.00Z","requiredCore":"1.398","scm":"github.com","sha1":"FpBTI1Dtg10dlgEn+O+2D8W6LJ4=","title":"Startup Trigger","url":"http://updates.jenkins-ci.org/download/plugins/startup-trigger-plugin/1.1/startup-trigger-plugin.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger"},"status-view":{"buildDate":"Jun 04, 2010","dependencies":[],"developers":[{"developerId":"mindless","email":"mindless@dev.java.net","name":"Alan Harder"}],"excerpt":"View type to show jobs filtered by the status of the last completed build.","gav":"org.jvnet.hudson.plugins:status-view:1.0","labels":["ui"],"name":"status-view","releaseTimestamp":"2010-06-04T20:58:06.00Z","requiredCore":"1.342","scm":"svn.dev.java.net","sha1":"QThzZO+jlzyS38OAlwK+W6WH2Bk=","title":"Status View Plugin","url":"http://updates.jenkins-ci.org/download/plugins/status-view/1.0/status-view.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Status+View+Plugin"},"statusmonitor":{"buildDate":"Nov 04, 2011","dependencies":[],"developers":[{"developerId":"ashlux","email":"ashlux@gmail.com","name":"Ash Lux"},{"name":"redsolo"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin shows the state of selected jobs visually on a single screen.","gav":"org.jvnet.hudson.plugins:statusmonitor:1.3","labels":["notifier"],"name":"statusmonitor","previousTimestamp":"2009-12-31T22:46:00.00Z","previousVersion":"1.2","releaseTimestamp":"2011-11-04T13:18:10.00Z","requiredCore":"1.392","scm":"github.com","sha1":"SZL+F985IGKx0PT5eNc/fzcVYow=","title":"Status Monitor Plugin","url":"http://updates.jenkins-ci.org/download/plugins/statusmonitor/1.3/statusmonitor.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Status+Monitor+Plugin"},"storable-configs-plugin":{"buildDate":"Feb 28, 2011","dependencies":[{"name":"selection-tasks-plugin","optional":true,"version":"1.0"}],"developers":[{"developerId":"nzhelyakov","email":"nzhelyakov@gmail.com","name":"Nikita Zhelyakov"}],"excerpt":"This plugin allows you to save and load set of job parameters. ","gav":"org.jvnet.hudson.plugins:storable-configs-plugin:1.0","labels":["misc"],"name":"storable-configs-plugin","releaseTimestamp":"2011-03-01T01:38:02.00Z","requiredCore":"1.366","scm":"svn.jenkins-ci.org","sha1":"OdMAq62DknBGvL419fo+kNGzWh8=","title":"Storable Configs Plugin","url":"http://updates.jenkins-ci.org/download/plugins/storable-configs-plugin/1.0/storable-configs-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Storable+Configs+Plugin"},"strawboss":{"buildDate":"Nov 02, 2011","dependencies":[],"developers":[{"developerId":"morgandev","email":"morgandev@gmail.com","name":"Scott Morgan"}],"excerpt":"Strawboss supports the same features as Jenkins external job monitor with added support for sending email notifications and triggering other jobs. ","gav":"org.jenkins-ci.plugins:strawboss:1.1","labels":["notifier","misc"],"name":"strawboss","releaseTimestamp":"2011-11-03T03:03:06.00Z","requiredCore":"1.398","scm":"github.com","sha1":"hW+QUrwqr7XV9BQdxGw2RW+41hk=","title":"Strawboss Plugin","url":"http://updates.jenkins-ci.org/download/plugins/strawboss/1.1/strawboss.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Strawboss+Plugin"},"subversion":{"buildDate":"Dec 16, 2012","dependencies":[],"developers":[{"developerId":"kohsuke abayer dodok1 dty huybrechts mindless pgweiss stephenconnolly rseguy kutzi etc","name":"Many"}],"excerpt":"This plugin adds the Subversion support (via SVNKit) to Jenkins.","gav":"org.jenkins-ci.plugins:subversion:1.44","labels":["scm"],"name":"subversion","previousTimestamp":"2012-09-24T13:33:50.00Z","previousVersion":"1.43","releaseTimestamp":"2012-12-16T16:22:00.00Z","requiredCore":"1.447","scm":"github.com","sha1":"VQUXY9qD/KL++pGnNJhdZSO4M6Q=","title":"Subversion Plugin","url":"http://updates.jenkins-ci.org/download/plugins/subversion/1.44/subversion.hpi","version":"1.44","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin"},"suite-test-groups-publisher":{"buildDate":"Oct 21, 2012","dependencies":[],"developers":[{"developerId":"vimil","email":"vimilsaju@yahoo.com","name":"Vimil Saju"}],"excerpt":"","gav":"org.jenkins-ci.plugins:suite-test-groups-publisher:1.13","name":"suite-test-groups-publisher","previousTimestamp":"2012-10-13T17:15:12.00Z","previousVersion":"1.12","releaseTimestamp":"2012-10-21T16:11:20.00Z","requiredCore":"1.398","scm":"github.com","sha1":"5XrazBJW6IFKRmTMmQTpz7zaz4g=","title":"suite-test-groups-publisher","url":"http://updates.jenkins-ci.org/download/plugins/suite-test-groups-publisher/1.13/suite-test-groups-publisher.hpi","version":"1.13"},"summary_report":{"buildDate":"Jan 08, 2013","dependencies":[],"developers":[{"developerId":"deruyter","email":"tderuyte@gmail.com","name":"Deruyter Thomas"}],"excerpt":"Extend build and project page with extended results in XML format","gav":"org.jenkins-ci.plugins:summary_report:1.8","labels":["report"],"name":"summary_report","previousTimestamp":"2012-12-10T20:18:36.00Z","previousVersion":"1.7","releaseTimestamp":"2013-01-08T15:16:08.00Z","requiredCore":"1.470","scm":"github.com","sha1":"2z3AFmRp0kUZnFq/RoZ4T73O8g0=","title":"Summary Display Plugin","url":"http://updates.jenkins-ci.org/download/plugins/summary_report/1.8/summary_report.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Summary+Display+Plugin"},"svn-release-mgr":{"buildDate":"Nov 03, 2010","dependencies":[{"name":"subversion","optional":false,"version":"1.20"}],"developers":[{"developerId":"mindless"}],"excerpt":"This plugin allows you to set up a job in Hudson for building specific revisions of a project. ","gav":"org.jvnet.hudson.plugins:svn-release-mgr:1.2","labels":["scm-related"],"name":"svn-release-mgr","previousTimestamp":"2010-03-02T13:27:22.00Z","previousVersion":"1.1","releaseTimestamp":"2010-11-03T16:55:44.00Z","requiredCore":"1.318","scm":"svn.dev.java.net","sha1":"5q/nDzmuttNPJKmHCgKm+nuIeRo=","title":"Subversion Release Manager","url":"http://updates.jenkins-ci.org/download/plugins/svn-release-mgr/1.2/svn-release-mgr.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Release+Manager"},"svn-revert-plugin":{"buildDate":"Sep 10, 2012","dependencies":[{"name":"subversion","optional":false,"version":"1.37"},{"name":"claim","optional":true,"version":"1.7"}],"developers":[{"developerId":"ki82","email":"akerstrom.christian@gmail.com","name":"Christian Ã…kerström"},{"developerId":"davidparsson","email":"david.parsson@gmail.com","name":"David Pärsson"}],"excerpt":"Automatically reverts SVN commits for a build if build status is changed from successful to unstable.","gav":"org.jenkins-ci.plugins:svn-revert-plugin:1.3","labels":["scm-related","post-build"],"name":"svn-revert-plugin","previousTimestamp":"2012-09-05T19:11:18.00Z","previousVersion":"1.2","releaseTimestamp":"2012-09-10T15:48:22.00Z","requiredCore":"1.444","scm":"github.com","sha1":"Hy5wQTFuyu97RzYj5DphUzVrY7w=","title":"SVN Revert Plugin","url":"http://updates.jenkins-ci.org/download/plugins/svn-revert-plugin/1.3/svn-revert-plugin.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SVN+Revert+Plugin"},"svn-tag":{"buildDate":"Nov 03, 2011","dependencies":[{"name":"subversion","optional":false,"version":"1.34"}],"developers":[{"developerId":"k2nakamura","email":"kenjin@clazzsoft.com","name":"Kenji Nakamura"}],"excerpt":"This plugin automatically performs subversion tagging (technically speaking svn copy) on successful build.","gav":"org.jenkins-ci.plugins:svn-tag:1.16","labels":["scm-related","post-build"],"name":"svn-tag","previousTimestamp":"2011-07-27T17:41:42.00Z","previousVersion":"1.15","releaseTimestamp":"2011-11-04T02:19:06.00Z","requiredCore":"1.421","scm":"github.com","sha1":"XQvchAI26eFmR4vF0pNQtN30ybI=","title":"Subversion Tagging Plugin","url":"http://updates.jenkins-ci.org/download/plugins/svn-tag/1.16/svn-tag.hpi","version":"1.16","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Tagging+Plugin"},"svn-workspace-cleaner":{"buildDate":"May 11, 2012","dependencies":[{"name":"subversion","optional":false,"version":"1.37"}],"developers":[{"developerId":"davidparsson","email":"david.parsson@gmail.com","name":"David Pärsson"}],"excerpt":"Automatically removes SVN modules from workspaces when the modules are removed from the job's SVN configuration.","gav":"org.jenkins-ci.plugins:svn-workspace-cleaner:1.0","labels":["scm-related","buildwrapper"],"name":"svn-workspace-cleaner","releaseTimestamp":"2012-05-11T18:03:36.00Z","requiredCore":"1.444","scm":"github.com","sha1":"nsr2PiZr2fnY8mTDAfHR44WnBGA=","title":"SVN Workspace Cleaner","url":"http://updates.jenkins-ci.org/download/plugins/svn-workspace-cleaner/1.0/svn-workspace-cleaner.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SVN+Workspace+Cleaner"},"svncompat13":{"buildDate":"Nov 19, 2011","dependencies":[{"name":"subversion","optional":false,"version":"1.1"}],"developers":[{"developerId":"kohsuke","email":"kk@kohsuke.org","name":"Kohsuke Kawaguchi"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin forces the built-in SVNKit library to use the Subversion 1.3 working copy format (instead of the most recent one it supports).","gav":"org.jvnet.hudson.plugins:svncompat13:1.2","labels":["scm-related"],"name":"svncompat13","previousTimestamp":"2008-07-29T01:13:00.00Z","previousVersion":"1.1","releaseTimestamp":"2011-11-19T15:27:28.00Z","requiredCore":"1.392","scm":"github.com","sha1":"Bjq5bod/k2kbz9Q8GyWDzfkycZ0=","title":"SVNCompat13 Plugin","url":"http://updates.jenkins-ci.org/download/plugins/svncompat13/1.2/svncompat13.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SVNCompat13+Plugin"},"svncompat14":{"buildDate":"Nov 19, 2011","dependencies":[{"name":"subversion","optional":false,"version":"1.3"}],"developers":[{"developerId":"kohsuke","email":"kk@kohsuke.org","name":"Kohsuke Kawaguchi"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin forces the built-in SVNKit library to use the Subversion 1.4 working copy format (instead of the most recent one it supports).","gav":"org.jvnet.hudson.plugins:svncompat14:1.1","labels":["scm-related"],"name":"svncompat14","previousTimestamp":"2008-07-30T18:11:24.00Z","previousVersion":"1.0","releaseTimestamp":"2011-11-19T23:29:54.00Z","requiredCore":"1.392","scm":"github.com","sha1":"nORj9bJ8VRMi1UXP+7PqT4DspYk=","title":"SVNCompat14 Plugin","url":"http://updates.jenkins-ci.org/download/plugins/svncompat14/1.1/svncompat14.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SVNCompat14+Plugin"},"svnmerge":{"buildDate":"Apr 14, 2012","dependencies":[{"name":"subversion","optional":false,"version":"1.25"}],"developers":[{"developerId":"kohsuke"}],"excerpt":"This plugin automates feature/personal branch workflow on Jenkins","gav":"org.jenkins-ci.plugins:svnmerge:1.2","labels":["scm-related"],"name":"svnmerge","previousTimestamp":"2011-10-01T20:19:04.00Z","previousVersion":"1.1","releaseTimestamp":"2012-04-14T17:28:10.00Z","requiredCore":"1.426","scm":"github.com","sha1":"ZFyFuAuVG0WuBfVLttf/VxedmXo=","title":"Subversion Merge Plugin","url":"http://updates.jenkins-ci.org/download/plugins/svnmerge/1.2/svnmerge.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Merge+Plugin"},"svnpublisher":{"buildDate":"Jan 10, 2010","dependencies":[{"name":"subversion","optional":false,"version":"1.8"}],"developers":[{"developerId":"brentsmith","name":"Brent Smith"}],"excerpt":"This plugin allows you to upload artifacts to a subversion repository. This is done via a delete/import of the items requested.","gav":"com.mtvi.plateng.subversion:svnpublisher:0.1","labels":["upload"],"name":"svnpublisher","releaseTimestamp":"2010-01-10T23:16:52.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"AnWSoTU78viv60MrJy62OjJxRjo=","title":"SVN Publisher","url":"http://updates.jenkins-ci.org/download/plugins/svnpublisher/0.1/svnpublisher.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/SVN+Publisher"},"swarm":{"buildDate":"Nov 22, 2012","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin enables slaves to auto-discover nearby Jenkins master and join it automatically, thereby forming an ad-hoc cluster.","gav":"org.jenkins-ci.plugins:swarm:1.8","labels":["cluster"],"name":"swarm","previousTimestamp":"2012-03-19T00:35:56.00Z","previousVersion":"1.7","releaseTimestamp":"2012-11-23T04:23:36.00Z","requiredCore":"1.424","scm":"github.com","sha1":"Qqc5EcIZLimXHsPnKqcPv1j0Gog=","title":"Swarm Plugin","url":"http://updates.jenkins-ci.org/download/plugins/swarm/1.8/swarm.hpi","version":"1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin"},"synergy":{"buildDate":"Aug 16, 2011","dependencies":[],"developers":[{"developerId":"mendozak"}],"excerpt":"This plugin provide integrations with IBM Rational CM/Synergy 6.5a Version Manager SCM","gav":"org.jvnet.hudson.plugins:synergy:1.6","labels":["scm"],"name":"synergy","previousTimestamp":"2009-06-03T04:48:10.00Z","previousVersion":"1.5","releaseTimestamp":"2011-08-16T15:26:04.00Z","requiredCore":"1.319","scm":"github.com","sha1":"fs6VXYlDV8r9/5krmv12D8wRRNM=","title":"Synergy Plugin","url":"http://updates.jenkins-ci.org/download/plugins/synergy/1.6/synergy.hpi","version":"1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Synergy+Plugin"},"systemloadaverage-monitor":{"buildDate":"Aug 13, 2011","dependencies":[],"developers":[{"developerId":"stefanbrausch","email":"stefanbrausch@dev.java.net","name":"Stefan Brausch"}],"excerpt":"Use to display the System Load Average of unix nodes.","gav":"org.jvnet.hudson.plugins:systemloadaverage-monitor:1.2","labels":["slaves"],"name":"systemloadaverage-monitor","previousTimestamp":"2010-02-12T22:17:58.00Z","previousVersion":"1.1","releaseTimestamp":"2011-08-13T15:48:06.00Z","requiredCore":"1.395","scm":"github.com","sha1":"4g0Wp80C+xGOCyphSZNMYjBjA4Q=","title":"System Load Average Monitor Plugin","url":"http://updates.jenkins-ci.org/download/plugins/systemloadaverage-monitor/1.2/systemloadaverage-monitor.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/System+Load+Average+Monitor+Plugin"},"tap":{"buildDate":"Jan 04, 2013","dependencies":[],"developers":[{"developerId":"kinow","email":"brunodepaulak@yahoo.com.br","name":"Bruno P. Kinoshita"}],"excerpt":"This plug-in adds support to TAP test result files to Jenkins. It lets you specify an ant-like pattern for a directory that contains your TAP<\/a> files. ","gav":"org.tap4j:tap:1.9","labels":["report"],"name":"tap","previousTimestamp":"2012-12-19T03:52:26.00Z","previousVersion":"1.8","releaseTimestamp":"2013-01-05T04:36:30.00Z","requiredCore":"1.398","scm":"github.com","sha1":"qOnTdLb7Rea9qPkwa0SPUBIh6/Y=","title":"TAP Plugin","url":"http://updates.jenkins-ci.org/download/plugins/tap/1.9/tap.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/TAP+Plugin"},"tasks":{"buildDate":"Oct 05, 2012","dependencies":[{"name":"analysis-core","optional":false,"version":"1.48"},{"name":"token-macro","optional":true,"version":"1.5.1"},{"name":"maven-plugin","optional":true,"version":"1.409"},{"name":"dashboard-view","optional":true,"version":"2.2"}],"developers":[{"developerId":"drulli","email":"ullrich.hafner@gmail.com","name":"Ulli Hafner"}],"excerpt":"This plugin scans the workspace files for open tasks and generates a trend report.","gav":"org.jvnet.hudson.plugins:tasks:4.35","labels":["report","maven"],"name":"tasks","previousTimestamp":"2012-09-04T17:18:28.00Z","previousVersion":"4.34","releaseTimestamp":"2012-10-05T16:06:52.00Z","requiredCore":"1.409","scm":"github.com","sha1":"7e2sxEyB0g5tB4oBcb22VV+f7ac=","title":"Task Scanner Plugin","url":"http://updates.jenkins-ci.org/download/plugins/tasks/4.35/tasks.hpi","version":"4.35","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Task+Scanner+Plugin"},"tattletale-plugin":{"buildDate":"May 29, 2012","dependencies":[],"developers":[{"developerId":"vtunka","name":"Vaclav Tunka"}],"excerpt":"This plugin generates Tattletale<\/a> reports, mostly useful for jar file analysis. ","gav":"org.jenkins-ci.plugins:tattletale-plugin:0.3","labels":["report"],"name":"tattletale-plugin","releaseTimestamp":"2012-05-30T02:55:06.00Z","requiredCore":"1.424","scm":"github.com","sha1":"1EpOcO03OEAzSZzAh/dnV8of5e4=","title":"Tattletale Plugin","url":"http://updates.jenkins-ci.org/download/plugins/tattletale-plugin/0.3/tattletale-plugin.hpi","version":"0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Tattletale+Plugin"},"template-project":{"buildDate":"Aug 15, 2011","dependencies":[],"developers":[{"developerId":"huybrechts","name":"Tom Huybrechts"}],"excerpt":"This plugin lets you use builders, publishers and SCM settings from another project.","gav":"org.jenkins-ci.plugins:template-project:1.3","labels":["scm","notifier","builder"],"name":"template-project","previousTimestamp":"2010-02-12T04:53:04.00Z","previousVersion":"1.2","releaseTimestamp":"2011-08-15T11:45:06.00Z","requiredCore":"1.398","scm":"github.com","sha1":"QmwHW/bPwAbNIdyX35bcvcO9uco=","title":"Template Project Plugin","url":"http://updates.jenkins-ci.org/download/plugins/template-project/1.3/template-project.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Template+Project+Plugin"},"template-workflows":{"buildDate":"Aug 15, 2012","dependencies":[],"developers":[{"developerId":"shaib","email":"shai.bhur@gmail.com","name":"Shai Ben-Hur"}],"excerpt":"","gav":"org.jenkins.plugin.templateWorkflows:template-workflows:1.2","labels":["templates-workflows"],"name":"template-workflows","releaseTimestamp":"2012-08-16T00:48:42.00Z","requiredCore":"1.477","scm":"github.com","sha1":"pYV90D4T2R9iQDj6JEZfjau9X/A=","title":"Template Workflows Plugin","url":"http://updates.jenkins-ci.org/download/plugins/template-workflows/1.2/template-workflows.hpi","version":"1.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Template+Workflows+Plugin"},"tepco":{"buildDate":"Mar 25, 2011","dependencies":[],"developers":[{"developerId":"kiy0taka","name":"Kiyotaka Oku"}],"excerpt":"This plugin displays TEPCO<\/a> electric usage condition.","gav":"org.jenkins-ci.plugins:tepco:0.1","labels":["misc"],"name":"tepco","releaseTimestamp":"2011-03-25T13:33:50.00Z","requiredCore":"1.401","scm":"github.com","sha1":"ummdAW42/ryCVZbRmx27UvFHYvw=","title":"TEPCO Plugin","url":"http://updates.jenkins-ci.org/download/plugins/tepco/0.1/tepco.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/TEPCO+Plugin"},"tepco-epuw":{"buildDate":"May 25, 2011","dependencies":[],"developers":[{"developerId":"future-azure","email":"future.azure@gmail.com","name":"Yi Hu"}],"excerpt":"This plugin shows current TEPCO electric power usage and a graph of daily usage. ","gav":"org.jenkins-ci.plugins:tepco-epuw:1.0","labels":["misc"],"name":"tepco-epuw","releaseTimestamp":"2011-05-25T06:07:50.00Z","requiredCore":"1.411","scm":"github.com","sha1":"9Yn1hFxnJVQ9DFCKjP2maqsAbMw=","title":"TEPCO Electric Power Usage Widget","url":"http://updates.jenkins-ci.org/download/plugins/tepco-epuw/1.0/tepco-epuw.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/TEPCO+Electric+Power+Usage+Widget"},"terminal":{"buildDate":"Mar 01, 2011","dependencies":[{"name":"jquery-ui","optional":false,"version":"1.0.1"},{"name":"jquery","optional":false,"version":"1.0.1"}],"developers":[{"developerId":"kiy0taka","name":"Kiyotaka Oku"}],"excerpt":"This plugin allows you to execute OS commands.","gav":"org.jenkins-ci.plugins:terminal:1.3","labels":["misc"],"name":"terminal","previousTimestamp":"2011-02-23T03:02:12.00Z","previousVersion":"1.2","releaseTimestamp":"2011-03-01T20:27:18.00Z","requiredCore":"1.398","scm":"github.com","sha1":"gvgSI+r1Gc4SsuihjGHouf+XfF0=","title":"Terminal Plugin","url":"http://updates.jenkins-ci.org/download/plugins/terminal/1.3/terminal.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Terminal+Plugin"},"terminate-ssh-processes-plugin":{"buildDate":"May 31, 2012","dependencies":[],"developers":[{"developerId":"lvotypko","email":"lvotypko@redhat.com","name":"Lucie Votypkova"}],"excerpt":"This plugin check if there is some ssh process associated with slave during before its new connection ","gav":"org.jenkins-ci.plugins:terminate-ssh-processes-plugin:1.0","labels":[],"name":"terminate-ssh-processes-plugin","releaseTimestamp":"2012-05-31T19:57:30.00Z","requiredCore":"1.430","scm":"github.com","sha1":"RQHrZsJbpU8TpJVTdXHyBddJYMc=","title":"Ssh processes check plugin","url":"http://updates.jenkins-ci.org/download/plugins/terminate-ssh-processes-plugin/1.0/terminate-ssh-processes-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Ssh+processes+check+plugin"},"testabilityexplorer":{"buildDate":"May 29, 2012","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.437"}],"developers":[{"developerId":"reikje","name":"Reik Schatz"},{"developerId":"vsbmeza","name":"Marton Meszaros"}],"excerpt":"This plugin generates trend reports for the Testability Explorer<\/a>, an open source program which uses byte-code analysis to look for testability pitfalls in Java code.  ","gav":"org.jenkins-ci.plugins:testabilityexplorer:0.4","labels":["report"],"name":"testabilityexplorer","previousTimestamp":"2009-12-29T21:48:38.00Z","previousVersion":"0.3","releaseTimestamp":"2012-05-29T21:59:16.00Z","requiredCore":"1.437","scm":"svn.jenkins-ci.org","sha1":"0PMfy3eqPw9Gu/HEs1VyBIF/7Ro=","title":"Testability Explorer Plugin","url":"http://updates.jenkins-ci.org/download/plugins/testabilityexplorer/0.4/testabilityexplorer.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Testability+Explorer+Plugin"},"testflight":{"buildDate":"Jan 12, 2012","dependencies":[],"developers":[{"developerId":"jweinberg","email":"joshuacweinberg@gmail.com","name":"Joshua Weinberg"}],"excerpt":"This plugin uses the Testflight upload API to allow for uploading to www.testflightapp.com<\/a>","gav":"org.jenkins-ci.plugins:testflight:1.3.1","labels":["upload","ios"],"name":"testflight","previousTimestamp":"2012-01-12T14:04:02.00Z","previousVersion":"1.3","releaseTimestamp":"2012-01-12T14:10:04.00Z","requiredCore":"1.398","scm":"github.com","sha1":"Hzj7RxPteN6Lw1HE2cTVkpHe93I=","title":"Testflight Plugin","url":"http://updates.jenkins-ci.org/download/plugins/testflight/1.3.1/testflight.hpi","version":"1.3.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Testflight+Plugin"},"testingbot":{"buildDate":"Jul 21, 2012","dependencies":[],"developers":[{"developerId":"testingbot","email":"info@testingbot.com","name":"Jochen Delabie"}],"excerpt":"This plugin allows for integration of TestingBot<\/a> Selenium in Jenkins.","gav":"testingbot:testingbot:1.5","labels":["buildwrapper"],"name":"testingbot","previousTimestamp":"2012-05-05T17:11:14.00Z","previousVersion":"1.4","releaseTimestamp":"2012-07-21T20:06:38.00Z","requiredCore":"1.462","scm":"github.com","sha1":"8/f1NwIAdsl+mBr3FsMEKAqurAg=","title":"TestingBot Selenium Plugin","url":"http://updates.jenkins-ci.org/download/plugins/testingbot/1.5/testingbot.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/TestingBot+Selenium+Plugin"},"testlink":{"buildDate":"Oct 20, 2012","dependencies":[],"developers":[{"developerId":"kinow","email":"brunodepaulak@yahoo.com.br","name":"Bruno P. Kinoshita"},{"developerId":"cesar1983","email":"cesar.fa@gmail.com","name":"Cesar Fernandes de Almeida"},{"developerId":"floreal","email":"ftoumikian@april.org","name":"Floreal Toumikian"},{"developerId":"orenault","email":"orenault@gmail.com","name":"Olivier Renault"},{"developerId":"omerkel","email":"Merkel.Oliver@web.de","name":"Oliver Merkel"},{"developerId":"yachoor","email":"jchorko@gmail.com","name":"Janusz Chorko"}],"excerpt":"This plug-in integrates Jenkins and TestLink<\/a> and generates reports on automated test execution. ith this plug-in you can manage your tests in TestLink, schedule and control in Jenkins, and execute using your favorite test execution tool (TestPartner, Selenium, TestNG, Perl modules, PHPUnit, among others). ","gav":"org.jenkins-ci.plugins:testlink:3.1.8","labels":["builder"],"name":"testlink","previousTimestamp":"2012-09-19T16:47:34.00Z","previousVersion":"3.1.7","releaseTimestamp":"2012-10-20T22:50:28.00Z","requiredCore":"1.466","scm":"github.com","sha1":"oTCM64GRngaPR8PILDewmyY6jRw=","title":"TestLink Plugin","url":"http://updates.jenkins-ci.org/download/plugins/testlink/3.1.8/testlink.hpi","version":"3.1.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/TestLink+Plugin"},"testng-plugin":{"buildDate":"Jan 06, 2013","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.447"}],"developers":[{"developerId":"nalin_makar","email":"nalin.makar@gmail.com","name":"Nalin Makar"},{"developerId":"farshidce","email":"farshid.ghods@gmail.com","name":"Farshid Ghods"}],"excerpt":"This plugin allows you to publish TestNG results generated using {{org.testng.reporters.XMLReporter}}.","gav":"org.jenkins-ci.plugins:testng-plugin:0.33","labels":["report"],"name":"testng-plugin","previousTimestamp":"2012-02-15T02:37:04.00Z","previousVersion":"0.32","releaseTimestamp":"2013-01-06T05:52:52.00Z","requiredCore":"1.447","scm":"github.com","sha1":"+NQU63/vu/Ui0qpjnP3ii7+ZcD0=","title":"testng-plugin","url":"http://updates.jenkins-ci.org/download/plugins/testng-plugin/0.33/testng-plugin.hpi","version":"0.33","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/testng-plugin"},"testopia":{"buildDate":"Jan 06, 2013","dependencies":[],"developers":[{"developerId":"tooh","email":"florijn.peter@gmail.com","name":"Peter Florijn"},{"developerId":"kinow","email":"brunodepaulak@yahoo.com.br","name":"Bruno P. Kinoshita"}],"excerpt":"This plug-in integrates *Jenkins* with Testopia and generates reports on automated test execution. With this plug-in you can manage your tests in Testopia, schedule and control in *Jenkins*, and execute using your favorite test execution tool (TestPartner, Selenium, TestNG, Perl modules, prove, PHPUnit, among others).","gav":"jenkins.plugins.testopia:testopia:1.3","labels":[],"name":"testopia","previousTimestamp":"2012-10-15T02:45:18.00Z","previousVersion":"1.2","releaseTimestamp":"2013-01-06T21:11:36.00Z","requiredCore":"1.424","scm":"github.com","sha1":"7PZ2sL7Ey6eumDnbaQBAYafCPg0=","title":"Testopia Plugin","url":"http://updates.jenkins-ci.org/download/plugins/testopia/1.3/testopia.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Testopia+Plugin"},"text-finder":{"buildDate":"Feb 13, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"name":"Santiago Pericas-Geertsen"}],"excerpt":"This plugin lets you search keywords in the files you specified and use that to downgrade a \"successful\" build to be unstable or a failure.","gav":"org.jvnet.hudson.plugins:text-finder:1.9","labels":["post-build"],"name":"text-finder","previousTimestamp":"2010-02-06T14:17:58.00Z","previousVersion":"1.8","releaseTimestamp":"2011-02-14T03:49:46.00Z","requiredCore":"1.377","scm":"svn.jenkins-ci.org","sha1":"PWK0FuWWvlZIm6AN3UkB15C257Q=","title":"Text-finder Plugin","url":"http://updates.jenkins-ci.org/download/plugins/text-finder/1.9/text-finder.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Text-finder+Plugin"},"text-finder-run-condition":{"buildDate":"Jul 13, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"},{"name":"run-condition","optional":false,"version":"0.10"}],"developers":[{"developerId":"cjo9900","name":"Chris Johnson"}],"excerpt":"Text Finder run condition to select whether to execute a build step or publisher. Used by the [Run Condition Plugin]. ","gav":"org.jenkins-ci.plugins:text-finder-run-condition:0.1","labels":["misc","runcondition"],"name":"text-finder-run-condition","releaseTimestamp":"2012-07-13T21:30:02.00Z","requiredCore":"1.409","scm":"github.com","sha1":"MELbWymaMLgpY4L5+iYtLbOHqYM=","title":"Text Finder Run Condition Plugin","url":"http://updates.jenkins-ci.org/download/plugins/text-finder-run-condition/0.1/text-finder-run-condition.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Text+Finder+Run+Condition+Plugin"},"tfs":{"buildDate":"Sep 17, 2011","dependencies":[],"developers":[{"developerId":"redsolo","email":"eramfelt@gmail.com","name":"Erik Ramfelt"}],"excerpt":"This plugin integrates Microsoft Team Foundation Server<\/a> source control to Hudson.","gav":"org.jvnet.hudson.plugins:tfs:1.20","labels":["scm"],"name":"tfs","previousTimestamp":"2011-09-06T03:13:16.00Z","previousVersion":"1.19","releaseTimestamp":"2011-09-17T17:16:34.00Z","requiredCore":"1.324","scm":"github.com","sha1":"I9ye7HA3YiDy6BtRyzAoUlq/D/I=","title":"Team Foundation Server Plugin","url":"http://updates.jenkins-ci.org/download/plugins/tfs/1.20/tfs.hpi","version":"1.20","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin"},"thinBackup":{"buildDate":"Jul 25, 2012","dependencies":[],"developers":[{"developerId":"tofuatjava","email":"tfuerer.javanet@gmail.com","name":"Thomas Fuerer"},{"developerId":"alienllama","email":"alienllama@gmail.com","name":"Matthias Steinkogler"}],"excerpt":"This plugin simply backs up the global and job specific configurations (not the archive or the workspace). ","gav":"org.jvnet.hudson.plugins:thinBackup:1.6.2","labels":["misc"],"name":"thinBackup","previousTimestamp":"2012-06-23T16:46:20.00Z","previousVersion":"1.6.1","releaseTimestamp":"2012-07-25T23:08:10.00Z","requiredCore":"1.409","scm":"svn.jenkins-ci.org","sha1":"6SBPZkLreb/prk3V/OaaK9Y1GHM=","title":"thinBackup","url":"http://updates.jenkins-ci.org/download/plugins/thinBackup/1.6.2/thinBackup.hpi","version":"1.6.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/thinBackup"},"thread-dump-action-plugin":{"buildDate":"Mar 03, 2012","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provides an easy mechanism to obtain a Jenkins thread dump.","gav":"org.jenkins-ci.plugins:thread-dump-action-plugin:1.0","labels":["misc"],"name":"thread-dump-action-plugin","releaseTimestamp":"2012-03-04T02:13:42.00Z","requiredCore":"1.424","scm":"github.com","sha1":"Y9bzNdNigix2G0qnQCepFNRqkjk=","title":"Thread Dump Action Plugin","url":"http://updates.jenkins-ci.org/download/plugins/thread-dump-action-plugin/1.0/thread-dump-action-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Thread+Dump+Action+Plugin"},"throttle-concurrents":{"buildDate":"May 04, 2012","dependencies":[],"developers":[{"developerId":"abayer","email":"andrew.bayer@gmail.com","name":"Andrew Bayer"}],"excerpt":"This plugin allows for throttling the number of concurrent builds of a project running per node or globally.","gav":"org.jenkins-ci.plugins:throttle-concurrents:1.7.2","labels":["slaves","cluster","buildwrapper"],"name":"throttle-concurrents","previousTimestamp":"2011-11-09T15:05:34.00Z","previousVersion":"1.7.1","releaseTimestamp":"2012-05-04T13:53:06.00Z","requiredCore":"1.398","scm":"github.com","sha1":"007nHNkK9mTvhD1hJ1VBDXS8uRk=","title":"Throttle Concurrent Builds Plugin","url":"http://updates.jenkins-ci.org/download/plugins/throttle-concurrents/1.7.2/throttle-concurrents.hpi","version":"1.7.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Throttle+Concurrent+Builds+Plugin"},"thucydides":{"buildDate":"Oct 07, 2012","dependencies":[],"developers":[{"developerId":"hwellmann","email":"harald.wellmann@gmx.de","name":"Harald Wellmann"}],"excerpt":"A plugin for publishing web test reports created by Thucydides<\/a>. ","gav":"net.thucydides.jenkins:thucydides:0.1","labels":["report"],"name":"thucydides","releaseTimestamp":"2012-10-08T03:40:48.00Z","requiredCore":"1.466","scm":"github.com","sha1":"5+nhQAxBWEC8y/q0gEHKHzmrpIY=","title":"Thucydides Plugin","url":"http://updates.jenkins-ci.org/download/plugins/thucydides/0.1/thucydides.hpi","version":"0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Thucydides+Plugin"},"timestamper":{"buildDate":"Jan 05, 2013","dependencies":[],"developers":[{"developerId":"stevengbrown","email":"StevenGBrown@gmail.com","name":"Steven Brown"}],"excerpt":"Adds timestamps to the Console Output. ","gav":"org.jenkins-ci.plugins:timestamper:1.5","labels":["buildwrapper"],"name":"timestamper","previousTimestamp":"2012-12-27T22:09:50.00Z","previousVersion":"1.4","releaseTimestamp":"2013-01-05T16:07:28.00Z","requiredCore":"1.461","scm":"github.com","sha1":"NSpInmeGLF83B2Z9vSeUru1LqW8=","title":"Timestamper","url":"http://updates.jenkins-ci.org/download/plugins/timestamper/1.5/timestamper.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Timestamper"},"tmpcleaner":{"buildDate":"Dec 29, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","name":"Kohsuke Kawaguchi"},{"developerId":"olamy","name":"Olivier Lamy"}],"excerpt":"This plugin allows you to cleanup JVM temporary files.","gav":"org.jenkins-ci.plugins:tmpcleaner:1.1","labels":["misc"],"name":"tmpcleaner","previousTimestamp":"2010-02-02T03:46:56.00Z","previousVersion":"1.0","releaseTimestamp":"2011-12-29T21:28:36.00Z","requiredCore":"1.424.1","scm":"github.com","sha1":"Ot5wgIjftgBiMFcQrDAdd9bXFYo=","title":"Tmp Cleaner Plugin","url":"http://updates.jenkins-ci.org/download/plugins/tmpcleaner/1.1/tmpcleaner.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Tmp+Cleaner+Plugin"},"token-macro":{"buildDate":"Nov 29, 2011","dependencies":[],"developers":[{"developerId":"kohsuke","email":"kkawaguchi@cloudbees.com","name":"Kohsuke Kawaguchi"}],"excerpt":"This plugin adds reusable macro expansion capability for other plugins to use","gav":"org.jenkins-ci.plugins:token-macro:1.5.1","labels":[],"name":"token-macro","previousTimestamp":"2011-11-28T20:12:16.00Z","previousVersion":"1.5","releaseTimestamp":"2011-11-30T04:26:00.00Z","requiredCore":"1.398","scm":"github.com","sha1":"Wxu+pvIbkr7slJWqlC/Ulc6Sc7o=","title":"Token Macro Plugin","url":"http://updates.jenkins-ci.org/download/plugins/token-macro/1.5.1/token-macro.hpi","version":"1.5.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Token+Macro+Plugin"},"toolenv":{"buildDate":"Feb 15, 2010","dependencies":[],"developers":[{"developerId":"jglick","email":"jesse.glick@sun.com","name":"Jesse Glick"}],"excerpt":"Lets you use \"tools\" in unusual ways, such as from shell scripts.","gav":"org.jvnet.hudson.plugins:toolenv:1.0","labels":["buildwrapper"],"name":"toolenv","releaseTimestamp":"2010-02-16T02:24:08.00Z","requiredCore":"1.346","scm":"svn.dev.java.net","sha1":"y4LbFJ1Ck0D4mIaWb/k56VR2Bo0=","title":"Tool Environment Plugin","url":"http://updates.jenkins-ci.org/download/plugins/toolenv/1.0/toolenv.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Tool+Environment+Plugin"},"trac":{"buildDate":"Feb 08, 2012","dependencies":[{"name":"git","optional":true,"version":"1.1.14"},{"name":"subversion","optional":false,"version":"1.3"}],"developers":[{"developerId":"kohsuke","email":"kk@kohsuke.org","name":"Kohsuke Kawaguchi"},{"developerId":"bradfritz","name":"Brad Fritz"},{"developerId":"pgweiss","name":"Paul Weiss"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"},{"developerId":"gerd_zanker","email":"gerd.zanker@googlemail.com","name":"Gerd Zanker"}],"excerpt":"This plugin creates links from Hudson projects to Trac<\/a> instances.","gav":"org.jenkins-ci.plugins:trac:1.13","labels":["external"],"name":"trac","previousTimestamp":"2011-11-04T16:10:46.00Z","previousVersion":"1.12","releaseTimestamp":"2012-02-09T01:55:48.00Z","requiredCore":"1.409","scm":"github.com","sha1":"z8tyrD9yYpCGZ0TEnoNgYNGax40=","title":"Trac Plugin","url":"http://updates.jenkins-ci.org/download/plugins/trac/1.13/trac.hpi","version":"1.13","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Trac+Plugin"},"trac-publisher-plugin":{"buildDate":"Aug 11, 2012","dependencies":[],"developers":[{"developerId":"batkinson","email":"brent.atkinson@gmail.com","name":"Brent Atkinson"}],"excerpt":"This plug-in adds a publisher that posts build links to Trac tickets referenced in built scm revisions. ","gav":"org.jenkins-ci.plugins:trac-publisher-plugin:1.3","labels":["external"],"name":"trac-publisher-plugin","previousTimestamp":"2011-12-05T01:49:42.00Z","previousVersion":"1.2","releaseTimestamp":"2012-08-11T13:24:50.00Z","requiredCore":"1.424","scm":"github.com","sha1":"NfLwrghh5zE+e7pEeU7oiPbsAsU=","title":"Trac Publisher Plugin","url":"http://updates.jenkins-ci.org/download/plugins/trac-publisher-plugin/1.3/trac-publisher-plugin.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Trac+Publisher+Plugin"},"tracking-svn":{"buildDate":"Jan 03, 2011","dependencies":[{"name":"subversion","optional":false,"version":"1.17"}],"developers":[{"developerId":"huybrechts","name":"Tom Huybrechts"}],"excerpt":"Lets one project track the Subversion revisions that are checked out for another project. ","gav":"org.jvnet.hudson.plugins:tracking-svn:1.1","labels":["scm-related"],"name":"tracking-svn","previousTimestamp":"2009-11-28T20:43:08.00Z","previousVersion":"1.0","releaseTimestamp":"2011-01-03T23:40:04.00Z","requiredCore":"1.357","scm":"svn.java.net","sha1":"8iLbn7AAHUQil0wS4BUjG4160lU=","title":"Tracking SVN Plugin","url":"http://updates.jenkins-ci.org/download/plugins/tracking-svn/1.1/tracking-svn.hpi","version":"1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Tracking+SVN+Plugin"},"translation":{"buildDate":"Nov 06, 2012","dependencies":[],"developers":[{"developerId":"jglick"}],"excerpt":"This plugin adds an additional dialog box in every page, which enables people to contribute localizations for the messages they are seeing in the current page.","gav":"org.jenkins-ci.plugins:translation:1.10","labels":["ui"],"name":"translation","previousTimestamp":"2012-03-20T19:10:34.00Z","previousVersion":"1.9","releaseTimestamp":"2012-11-06T15:54:48.00Z","requiredCore":"1.424","scm":"github.com","sha1":"Jgz4LRtsJe+yxH1OhUMnBSm/nZA=","title":"Translation Assistance Plugin","url":"http://updates.jenkins-ci.org/download/plugins/translation/1.10/translation.hpi","version":"1.10","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Translation+Assistance+Plugin"},"tuxdroid":{"buildDate":"Nov 04, 2011","dependencies":[],"developers":[{"developerId":"taillant","name":"Jean-Marc Taillant"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Allows to publish the result of a build to a TuxDroid community<\/a>.","gav":"org.jvnet.hudson.plugins:tuxdroid:1.7","labels":["notifier"],"name":"tuxdroid","previousTimestamp":"2010-02-11T01:34:02.00Z","previousVersion":"1.6","releaseTimestamp":"2011-11-04T14:11:28.00Z","requiredCore":"1.392","scm":"github.com","sha1":"G3Nk2Swa7PIHuHiTBP5ttfEfTDA=","title":"TuxDroid Plugin","url":"http://updates.jenkins-ci.org/download/plugins/tuxdroid/1.7/tuxdroid.hpi","version":"1.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/TuxDroid+Plugin"},"twitter":{"buildDate":"Sep 16, 2010","dependencies":[],"developers":[{"developerId":"cactusman"}],"excerpt":"This plugin posts build results to Twitter.","gav":"org.jvnet.hudson.plugins:twitter:0.6","labels":["notifier"],"name":"twitter","previousTimestamp":"2009-10-31T06:59:18.00Z","previousVersion":"0.4","releaseTimestamp":"2010-09-17T02:48:24.00Z","requiredCore":"1.365","scm":"svn.dev.java.net","sha1":"wYiA7y0nIGzUukeMW9gAo3VyVhg=","title":"Twitter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/twitter/0.6/twitter.hpi","version":"0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Twitter+Plugin"},"ui-samples-plugin":{"buildDate":"Jan 07, 2013","dependencies":[],"developers":[{"developerId":"kohsuke"}],"excerpt":"","gav":"org.jenkins-ci.main:ui-samples-plugin:1.498","name":"ui-samples-plugin","previousTimestamp":"2013-01-06T18:43:58.00Z","previousVersion":"1.497","releaseTimestamp":"2013-01-07T15:57:32.00Z","requiredCore":"1.498","scm":"github.com","sha1":"e+ZpwuhYFTqTjqM3phwTNMAC0q4=","title":"Jenkins UI sample plugin","url":"http://updates.jenkins-ci.org/download/plugins/ui-samples-plugin/1.498/ui-samples-plugin.hpi","version":"1.498"},"unicorn":{"buildDate":"Aug 08, 2011","dependencies":[],"developers":[{"developerId":"nej","email":"jernejz@gmail.com","name":"Jernej Zorec"}],"excerpt":"This plugin uses W3C's Unified Validator, which helps improve the quality of Web pages by performing a variety of checks.","gav":"si.nej.hudson.plugins:unicorn:0.1.1","labels":["builder"],"name":"unicorn","previousTimestamp":"2011-02-14T04:31:48.00Z","previousVersion":"0.1.0","releaseTimestamp":"2011-08-08T05:11:46.00Z","requiredCore":"1.377","scm":"github.com","sha1":"CRsQG3baoeQSvbxfxLbWOXvK9ZA=","title":"Unicorn Validation Plugin","url":"http://updates.jenkins-ci.org/download/plugins/unicorn/0.1.1/unicorn.hpi","version":"0.1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Unicorn+Validation+Plugin"},"unity-asset-server":{"buildDate":"Sep 27, 2010","dependencies":[],"developers":[{"developerId":"mbrunken"}],"excerpt":"This plugin allows you to use Unity Asset Server<\/a> as a SCM.","gav":"org.jvnet.hudson.plugins:unity-asset-server:1.1.1","labels":["scm"],"name":"unity-asset-server","previousTimestamp":"2010-09-23T21:42:32.00Z","previousVersion":"1.1.0","releaseTimestamp":"2010-09-27T15:30:50.00Z","requiredCore":"1.318","scm":"svn.dev.java.net","sha1":"3Bqn+CLdG3vFmXgD+svECx04N+Q=","title":"Unity Asset Server Plugin","url":"http://updates.jenkins-ci.org/download/plugins/unity-asset-server/1.1.1/unity-asset-server.hpi","version":"1.1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Unity+Asset+Server+Plugin"},"unity3d-plugin":{"buildDate":"Jun 13, 2012","dependencies":[],"developers":[{"developerId":"lacostej","email":"jerome.lacoste@gmail.com","name":"Jerome Lacoste"}],"excerpt":"Unity3d<\/a> is a powerful 3d game creation editor and engine that runs on Mac and Windows. This plugin adds the ability to call the Unity3d Editor from the command line to automate build and packaging of Unity3d applications. ","gav":"org.jenkins-ci.plugins:unity3d-plugin:0.3","labels":["builder"],"name":"unity3d-plugin","previousTimestamp":"2012-01-31T04:25:50.00Z","previousVersion":"0.2","releaseTimestamp":"2012-06-14T02:39:10.00Z","requiredCore":"1.398","scm":"github.com","sha1":"wagB1YreyAG/pCVCmdaoUBgW2LU=","title":"Unity3dBuilder Plugin","url":"http://updates.jenkins-ci.org/download/plugins/unity3d-plugin/0.3/unity3d-plugin.hpi","version":"0.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Unity3dBuilder+Plugin"},"unreliable-slave-plugin":{"buildDate":"Aug 06, 2012","dependencies":[],"developers":[{"developerId":"lvotypko","name":"Lucie Votypkova"}],"excerpt":"This plugin creates statistic about failed jobs which failed on slave and after configured count of failures try slave reconnect of put offline and send notification ","gav":"jenkinsci:unreliable-slave-plugin:1.0","labels":[],"name":"unreliable-slave-plugin","releaseTimestamp":"2012-08-06T18:35:42.00Z","requiredCore":"1.447","scm":"github.com","sha1":"Wos9SW6SQN+eeE7oYWHHmEdJzb4=","title":"Unreliable slave plugin","url":"http://updates.jenkins-ci.org/download/plugins/unreliable-slave-plugin/1.0/unreliable-slave-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Unreliable+slave+plugin"},"urltrigger":{"buildDate":"Jan 04, 2013","dependencies":[],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"URLTrigger plug-in makes it possible to monitor changes of the response got from an URL invocation.","gav":"org.jenkins-ci.plugins:urltrigger:0.27","labels":["trigger"],"name":"urltrigger","previousTimestamp":"2012-10-27T01:52:10.00Z","previousVersion":"0.26","releaseTimestamp":"2013-01-04T05:14:42.00Z","requiredCore":"1.410","scm":"github.com","sha1":"oC/pLcKiv9Ttp4Wcn+uCgQJjd5M=","title":"URLTrigger Plugin","url":"http://updates.jenkins-ci.org/download/plugins/urltrigger/0.27/urltrigger.hpi","version":"0.27","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/URLTrigger+Plugin"},"utplsql":{"buildDate":"Feb 13, 2011","dependencies":[],"developers":[{"developerId":"kusemuckl","email":"nils@kusemuckl.de","name":"Nils op den Winkel"}],"excerpt":"a tool to parse the output of utplsql<\/a>","gav":"hudson.plugins.utplsql:utplsql:0.4","labels":["report"],"name":"utplsql","previousTimestamp":"2010-06-12T12:37:12.00Z","previousVersion":"0.3","releaseTimestamp":"2011-02-14T03:19:30.00Z","requiredCore":"1.377","scm":"svn.jenkins-ci.org","sha1":"DaBYf/zwXOvkO6fB3IBPM9TzuRg=","title":"utplsql Plugin","url":"http://updates.jenkins-ci.org/download/plugins/utplsql/0.4/utplsql.hpi","version":"0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/utplsql+Plugin"},"vagrant":{"buildDate":"Mar 15, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.9"}],"developers":[{"developerId":"tyler"}],"excerpt":"This plugin allows booting of Vagrant virtual machines, provisioning them and also executing scripts inside of them","gav":"org.jenkins-ci.ruby-plugins:vagrant:0.1.4","labels":["buildwrapper","builder"],"name":"vagrant","previousTimestamp":"2012-03-15T18:11:10.00Z","previousVersion":"0.1.3","releaseTimestamp":"2012-03-15T20:25:16.00Z","requiredCore":"1.432","scm":"github.com","sha1":"V1FTJ8ZENLI4dDTpFlb03zN3lHE=","title":"Vagrant Plugin","url":"http://updates.jenkins-ci.org/download/plugins/vagrant/0.1.4/vagrant.hpi","version":"0.1.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Vagrant+Plugin"},"valgrind":{"buildDate":"Oct 23, 2012","dependencies":[],"developers":[{"developerId":"eXistence","email":"johannes.ohlemacher@googlemail.com","name":"Johannes Ohlemacher"}],"excerpt":"Integrates Valgrind<\/a> in Jenkins.","gav":"org.jenkins-ci.plugins:valgrind:0.18","labels":["report","builder"],"name":"valgrind","previousTimestamp":"2012-09-24T22:19:30.00Z","previousVersion":"0.17","releaseTimestamp":"2012-10-23T15:46:18.00Z","requiredCore":"1.424","scm":"github.com","sha1":"Pfe9ploNzcXO1REtgHoZF9C99GI=","title":"Valgrind Plugin","url":"http://updates.jenkins-ci.org/download/plugins/valgrind/0.18/valgrind.hpi","version":"0.18","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Valgrind+Plugin"},"validating-string-parameter":{"buildDate":"Sep 13, 2011","dependencies":[],"developers":[{"developerId":"petehayes","email":"petehayes@gmail.com","name":"Peter Hayes"}],"excerpt":"The validating string parameter plugin contributes a new parameter type to Jenkins that supports regular expression validation of the user's entered parameter.","gav":"org.jenkins-ci.plugins:validating-string-parameter:2.2","labels":["misc","parameter"],"name":"validating-string-parameter","previousTimestamp":"2011-02-28T02:39:04.00Z","previousVersion":"2.1","releaseTimestamp":"2011-09-14T00:43:10.00Z","requiredCore":"1.398","scm":"github.com","sha1":"RiHAzMCWWkyIBJZu3HOrV5MnVfc=","title":"Validating String Parameter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/validating-string-parameter/2.2/validating-string-parameter.hpi","version":"2.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Validating+String+Parameter+Plugin"},"vboxwrapper":{"buildDate":"Oct 23, 2012","dependencies":[],"developers":[{"developerId":"theirix","email":"theirix@gmail.com","name":"Eugene Seliverstov"}],"excerpt":"Plugin provides a build wrapper for starting and stopping slaves on the virtual machine","gav":"org.jenkins-ci.plugins:vboxwrapper:1.0","labels":["buildwrapper"],"name":"vboxwrapper","releaseTimestamp":"2012-10-23T08:21:12.00Z","requiredCore":"1.466","scm":"github.com","sha1":"Sz10e02cq+PZ/YMkedVfod9ofnk=","title":"VBoxWrapper","url":"http://updates.jenkins-ci.org/download/plugins/vboxwrapper/1.0/vboxwrapper.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/VBoxWrapper"},"versioncolumn":{"buildDate":"Sep 03, 2011","dependencies":[],"developers":[{"developerId":"ssogabe","name":"Seiji Sogabe"}],"excerpt":"This plugin shows the version of slave on \"Manage Nodes\" page and make the node offline if it uses old slave.jar. ","gav":"org.jenkins-ci.plugins:versioncolumn:0.2","labels":["listview-column"],"name":"versioncolumn","previousTimestamp":"2011-03-19T20:21:52.00Z","previousVersion":"0.1","releaseTimestamp":"2011-09-03T13:24:36.00Z","requiredCore":"1.401","scm":"github.com","sha1":"rRRI1En1DfCnZAORNb6j2Xm+6GY=","title":"VersionColumn Plugin","url":"http://updates.jenkins-ci.org/download/plugins/versioncolumn/0.2/versioncolumn.hpi","version":"0.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/VersionColumn+Plugin"},"versionnumber":{"buildDate":"Dec 19, 2011","dependencies":[],"developers":[{"developerId":"abayer","email":"andrew.bayer@gmail.com","name":"Andrew Bayer"},{"developerId":"cchabanois","email":"cchabanois@gmail.com","name":"Cedric Chabanois"}],"excerpt":"This plugin creates a new version number and stores it in the environment variable whose name you specify in the configuration.","gav":"org.jvnet.hudson.tools:versionnumber:1.4.1","labels":["buildwrapper"],"name":"versionnumber","previousTimestamp":"2011-12-18T00:54:00.00Z","previousVersion":"1.4","releaseTimestamp":"2011-12-20T03:14:00.00Z","requiredCore":"1.404","scm":"github.com","sha1":"dL5PdGT2sE2GoJWxBRh0CIOSL8Q=","title":"Version Number Plugin","url":"http://updates.jenkins-ci.org/download/plugins/versionnumber/1.4.1/versionnumber.hpi","version":"1.4.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Version+Number+Plugin"},"vertx":{"buildDate":"Nov 24, 2012","dependencies":[],"developers":[{"developerId":"blalor","email":"blalor@bravo5.org","name":"Brian Lalor"}],"excerpt":"Vert.x<\/a> embedder for Jenkins","gav":"org.bravo5.jenkins.plugins:vertx:1.0.1","labels":["misc","external","notifier"],"name":"vertx","previousTimestamp":"2012-11-20T03:14:18.00Z","previousVersion":"1.0.0","releaseTimestamp":"2012-11-25T03:01:38.00Z","requiredCore":"1.482","scm":"github.com","sha1":"pPJP92OlNpoPHGxP9aZzupcKuGo=","title":"Vert.x Embedder","url":"http://updates.jenkins-ci.org/download/plugins/vertx/1.0.1/vertx.hpi","version":"1.0.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Vert.x+Embedder"},"view-job-filters":{"buildDate":"May 25, 2012","dependencies":[{"name":"cvs","optional":true,"version":"1.1"},{"name":"subversion","optional":true,"version":"1.11"},{"name":"git","optional":true,"version":"1.1.9"},{"name":"email-ext","optional":true,"version":"2.7"},{"name":"m2-extra-steps","optional":true,"version":"1.1.3"},{"name":"maven-plugin","optional":false,"version":"1.395"}],"developers":[{"developerId":"jacob_robertson","email":"jacob.robertson.work@gmail.com","name":"Jacob Robertson"}],"excerpt":"Create smart views with exactly the jobs you want. Your smart views can automatically include or exclude jobs by using things like the SCM path or type, the job type, build statuses or trends or triggers, relevance to the logged-in user, email recipients, Maven configuration, job parameterization, and user permissions. Mix and match filters to narrow down to exactly what you want. ","gav":"org.jvnet.hudson.plugins:view-job-filters:1.22","labels":["ui","scm-related","maven","user"],"name":"view-job-filters","previousTimestamp":"2012-05-23T15:53:20.00Z","previousVersion":"1.21.1","releaseTimestamp":"2012-05-25T12:37:04.00Z","requiredCore":"1.398","scm":"svn.jenkins-ci.org","sha1":"p7m4eUF24aHhFWnPqrVTbnIuvbk=","title":"View Job Filters","url":"http://updates.jenkins-ci.org/download/plugins/view-job-filters/1.22/view-job-filters.hpi","version":"1.22","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/View+Job+Filters"},"viewVC":{"buildDate":"Nov 03, 2011","dependencies":[{"name":"subversion","optional":false,"version":"1.3"}],"developers":[{"name":"Mike Salnikov"},{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"This plugin integrates ViewVC<\/a> browser interface for CVS and Subversion with Hudson.","gav":"org.jvnet.hudson.plugins:viewVC:1.5","labels":["scm-related"],"name":"viewVC","previousTimestamp":"2011-11-03T18:20:06.00Z","previousVersion":"1.4","releaseTimestamp":"2011-11-03T18:22:26.00Z","requiredCore":"1.392","scm":"github.com","sha1":"qgCO5wqAdFBTUFFS44kqB09eoAg=","title":"ViewVC Plugin","url":"http://updates.jenkins-ci.org/download/plugins/viewVC/1.5/viewVC.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ViewVC+Plugin"},"violations":{"buildDate":"Sep 08, 2012","dependencies":[{"name":"maven-plugin","optional":false,"version":"1.399"}],"developers":[{"developerId":"peterkittreilly","name":"Peter Reilly"}],"excerpt":"This plug-in generates reports static code violation detectors such as checkstyle, pmd, cpd, findbugs, codenarc, fxcop, stylecop and simian. ","gav":"org.jenkins-ci.plugins:violations:0.7.11","labels":["maven","report"],"name":"violations","previousTimestamp":"2011-08-08T16:13:38.00Z","previousVersion":"0.7.10","releaseTimestamp":"2012-09-08T17:31:26.00Z","requiredCore":"1.398","scm":"github.com","sha1":"UuXzsT6UDHmYxIKcHycTkHZXsvg=","title":"Violations","url":"http://updates.jenkins-ci.org/download/plugins/violations/0.7.11/violations.hpi","version":"0.7.11","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Violations"},"virtualbox":{"buildDate":"Oct 07, 2012","dependencies":[],"developers":[{"developerId":"godin","name":"Evgeny Mandrikov"},{"developerId":"choas","name":"Lars Gregori"},{"developerId":"hgomez","name":"Henri Gomez"}],"excerpt":"This plugin integrates Jenkins with VirtualBox<\/a> (version 3, 4.0, 4.1 and 4.2) virtual machine.","gav":"org.jenkins-ci.plugins:virtualbox:0.6","labels":["slaves","buildwrapper"],"name":"virtualbox","previousTimestamp":"2012-09-22T02:44:02.00Z","previousVersion":"0.5","releaseTimestamp":"2012-10-08T01:14:52.00Z","requiredCore":"1.424","scm":"github.com","sha1":"VF05k+pFUby9fssNm7H6yfGAazU=","title":"VirtualBox Plugin","url":"http://updates.jenkins-ci.org/download/plugins/virtualbox/0.6/virtualbox.hpi","version":"0.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/VirtualBox+Plugin"},"vmware":{"buildDate":"Apr 09, 2008","dependencies":[],"developers":[{"developerId":"connollys"}],"excerpt":"This plugin allows you to start a VMware<\/a> Virtual Machine before a build and stop it again after the build completes.","gav":"org.jvnet.hudson.plugins:vmware:0.8","labels":["buildwrapper"],"name":"vmware","previousTimestamp":"2008-02-27T17:27:22.00Z","previousVersion":"0.7","releaseTimestamp":"2008-04-09T13:15:54.00Z","requiredCore":"1.206","scm":"svn.dev.java.net","sha1":"O9T9nyEMzQJv7k7j9u+uag0Lesw=","title":"VMware plugin","url":"http://updates.jenkins-ci.org/download/plugins/vmware/0.8/vmware.hpi","version":"0.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/VMware+plugin"},"vsphere-cloud":{"buildDate":"May 25, 2012","dependencies":[],"developers":[{"developerId":"jswager","email":"jswager@alohaoi.com","name":"Jason Swager"}],"excerpt":"Add VMware vSphere support to Jenkins to use virtual machines as slaves ","gav":"org.jenkins-ci.plugins:vsphere-cloud:0.10","labels":["cluster","slaves"],"name":"vsphere-cloud","previousTimestamp":"2012-05-07T14:05:32.00Z","previousVersion":"0.9","releaseTimestamp":"2012-05-25T13:05:48.00Z","requiredCore":"1.464","scm":"github.com","sha1":"yNgfIMFTECk8fXkI0kJgauT+syQ=","title":"vSphere Cloud Plugin","url":"http://updates.jenkins-ci.org/download/plugins/vsphere-cloud/0.10/vsphere-cloud.hpi","version":"0.10","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/vSphere+Cloud+Plugin"},"vss":{"buildDate":"Aug 08, 2011","dependencies":[],"developers":[{"developerId":"rioch","name":"Jon Black"}],"excerpt":"This plugin integrates Hudson with Microsoft Visual SourceSafe ","gav":"org.jenkins-ci.plugins:vss:1.9","labels":["scm"],"name":"vss","previousTimestamp":"2010-09-19T22:06:44.00Z","previousVersion":"1.8","releaseTimestamp":"2011-08-08T15:37:28.00Z","requiredCore":"1.424","scm":"github.com","sha1":"z7LRaabPUDNZpuDs7rAEafW4EOM=","title":"Visual SourceSafe Plugin","url":"http://updates.jenkins-ci.org/download/plugins/vss/1.9/vss.hpi","version":"1.9","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Visual+SourceSafe+Plugin"},"warnings":{"buildDate":"Oct 05, 2012","dependencies":[{"name":"dashboard-view","optional":true,"version":"2.2"},{"name":"analysis-core","optional":false,"version":"1.48"},{"name":"maven-plugin","optional":true,"version":"1.409"},{"name":"violations","optional":true,"version":"0.7.10"},{"name":"token-macro","optional":true,"version":"1.5.1"}],"developers":[{"developerId":"drulli","email":"ullrich.hafner@gmail.com","name":"Ulli Hafner"}],"excerpt":"This plugin generates the trend report for compiler warnings in the console log or in log files. ","gav":"org.jvnet.hudson.plugins:warnings:4.18","labels":["maven","report"],"name":"warnings","previousTimestamp":"2012-09-10T22:59:10.00Z","previousVersion":"4.17","releaseTimestamp":"2012-10-05T16:09:32.00Z","requiredCore":"1.409","scm":"github.com","sha1":"bcwfanowEEGzTEG2bWBiMGxx2OY=","title":"Warnings Plugin","url":"http://updates.jenkins-ci.org/download/plugins/warnings/4.18/warnings.hpi","version":"4.18","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Warnings+Plugin"},"was-builder":{"buildDate":"Oct 20, 2011","dependencies":[],"developers":[{"developerId":"rseguy","email":"romain.seguy@gmail.com","name":"Romain Seguy"}],"excerpt":"This plugin allows Jenkins to invoke IBM WebSphere Application Server's *wsadmin* as a build step.","gav":"org.jenkins-ci.plugins:was-builder:1.6.1","labels":["builder"],"name":"was-builder","previousTimestamp":"2011-08-07T14:05:02.00Z","previousVersion":"1.6","releaseTimestamp":"2011-10-20T14:19:58.00Z","requiredCore":"1.409","scm":"svn.jenkins-ci.org","sha1":"ZjWAGywEpaL+0rhmyGNmBS5yyVg=","title":"WAS Builder Plugin","url":"http://updates.jenkins-ci.org/download/plugins/was-builder/1.6.1/was-builder.hpi","version":"1.6.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/WAS+Builder+Plugin"},"weblogic-deployer-plugin":{"buildDate":"Aug 13, 2012","dependencies":[{"name":"javadoc","optional":false,"version":"1.0"},{"name":"maven-plugin","optional":false,"version":"1.445"}],"developers":[{"developerId":"RaphC","email":"rcr@orange.fr","name":"Raphael CHAUMIER"}],"excerpt":"This plugin deploy artifacts built on Jenkins to a weblogic target (managed server, cluster ...) as an application or a library component.","gav":"org.jenkins-ci.plugins:weblogic-deployer-plugin:1.3","labels":["upload"],"name":"weblogic-deployer-plugin","previousTimestamp":"2012-08-03T02:55:06.00Z","previousVersion":"1.2","releaseTimestamp":"2012-08-13T15:10:08.00Z","requiredCore":"1.445","scm":"github.com","sha1":"29LRrlQIYYCvuOKhmrDw1/h9WMw=","title":"WebLogic Deployer Plugin","url":"http://updates.jenkins-ci.org/download/plugins/weblogic-deployer-plugin/1.3/weblogic-deployer-plugin.hpi","version":"1.3","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/WebLogic+Deployer+Plugin"},"websocket":{"buildDate":"Apr 16, 2012","dependencies":[],"developers":[{"developerId":"mzp","email":"mzp@ocaml.jp","name":"MIZUNO Hiroki"}],"excerpt":"This plugin notifies build results via Websocket. ","gav":"org.codefirst.jenkins.wsnotifier:websocket:1.0.4","labels":["notifier"],"name":"websocket","previousTimestamp":"2011-12-22T02:42:40.00Z","previousVersion":"1.0.3","releaseTimestamp":"2012-04-17T03:24:28.00Z","requiredCore":"1.398","scm":"github.com","sha1":"AfxgPKM9HbT8gcM1DREHhWP15ZE=","title":"Websocket Plugin","url":"http://updates.jenkins-ci.org/download/plugins/websocket/1.0.4/websocket.hpi","version":"1.0.4","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Websocket+Plugin"},"webtestpresenter":{"buildDate":"Jan 15, 2010","dependencies":[],"developers":[{"developerId":"aambrose","name":"Adam Ambrose"}],"excerpt":"This plugin publishes the reports generated by the Canoo WebTest<\/a> tool for each build.","gav":"org.jvnet.hudson.plugins:webtestpresenter:0.23","labels":["report"],"name":"webtestpresenter","previousTimestamp":"2008-07-13T21:48:18.00Z","previousVersion":"0.22","releaseTimestamp":"2010-01-16T03:53:06.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"NcPT6lv6p4WnZU43WeB8mZ59rc4=","title":"WebTest Presenter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/webtestpresenter/0.23/webtestpresenter.hpi","version":"0.23","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/WebTest+Presenter+Plugin"},"whitesource":{"buildDate":"Oct 28, 2012","dependencies":[{"name":"git","optional":true,"version":"1.1.14"},{"name":"maven-plugin","optional":false,"version":"1.466"},{"name":"javadoc","optional":false,"version":"1.0"}],"developers":[{"developerId":"edoshor","email":"edo.shor@whitesourcesoftware.com","name":"Edo Shor"},{"developerId":"sramakrishna","email":"ramakrishna.sharvirala@gmail.com","name":"Ramakrishna Sharvirala"}],"excerpt":"The plugin brings automatic open source management to Jenkins users. ","gav":"org.jenkins-ci.plugins:whitesource:1.0","labels":["report","external"],"name":"whitesource","releaseTimestamp":"2012-10-28T20:49:24.00Z","requiredCore":"1.466","scm":"github.com","sha1":"LwObWjeNtTiWHq4Q2h/Rcm2r/JQ=","title":"Whitesource Plugin","url":"http://updates.jenkins-ci.org/download/plugins/whitesource/1.0/whitesource.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Whitesource+Plugin"},"windmill":{"buildDate":"Feb 06, 2010","dependencies":[],"developers":[{"developerId":"admc","name":"Adam Christian"}],"excerpt":"This plugin allows you to configure and run Windmill<\/a> functional tests.","gav":"org.jvnet.hudson.plugins:windmill:1.5","labels":["external"],"name":"windmill","previousTimestamp":"2009-06-25T20:40:46.00Z","previousVersion":"1.4","releaseTimestamp":"2010-02-06T13:59:22.00Z","requiredCore":"1.319","scm":"svn.dev.java.net","sha1":"npNnBKCCpnFCi+Tsw/QA1mQyyyI=","title":"Windmill Plugin","url":"http://updates.jenkins-ci.org/download/plugins/windmill/1.5/windmill.hpi","version":"1.5","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Windmill+Plugin"},"ws-cleanup":{"buildDate":"Jul 17, 2012","dependencies":[],"developers":[{"developerId":"vjuranek","name":"Vojtech Juranek"}],"excerpt":"This plugin deletes the workspace before the build or when a build is finished and artifacts saved.","gav":"org.jenkins-ci.plugins:ws-cleanup:0.10","labels":["post-build","buildwrapper"],"name":"ws-cleanup","previousTimestamp":"2012-07-16T00:16:06.00Z","previousVersion":"0.9","releaseTimestamp":"2012-07-17T12:33:36.00Z","requiredCore":"1.398","scm":"github.com","sha1":"mVyDxN2UnpD37CyW0jVGzyVLzro=","title":"Workspace Cleanup Plugin","url":"http://updates.jenkins-ci.org/download/plugins/ws-cleanup/0.10/ws-cleanup.hpi","version":"0.10","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Workspace+Cleanup+Plugin"},"xcode-plugin":{"buildDate":"Mar 27, 2012","dependencies":[{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"rayhilton","email":"ray.hilton@gmail.com","name":"Ray Yamamoto Hilton"},{"developerId":"aheritier","email":"aheritier@apache.org","name":"Arnaud Heritier"}],"excerpt":"This plugin adds the ability to call Xcode command line tools to automate build and packaging iOS applications (iPhone, iPad, ...).","gav":"org.jenkins-ci.plugins:xcode-plugin:1.3.1","labels":["builder","ios"],"name":"xcode-plugin","previousTimestamp":"2012-01-21T04:39:04.00Z","previousVersion":"1.3","releaseTimestamp":"2012-03-27T15:20:08.00Z","requiredCore":"1.398","scm":"github.com","sha1":"xowe0SZoM1pTFOwlco3MFywYxKA=","title":"Xcode Plugin","url":"http://updates.jenkins-ci.org/download/plugins/xcode-plugin/1.3.1/xcode-plugin.hpi","version":"1.3.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin"},"xfpanel":{"buildDate":"Dec 30, 2012","dependencies":[{"name":"claim","optional":false,"version":"1.7"}],"developers":[{"developerId":"jrenaut","email":"julienrenaut@gmail.com","name":"Julien RENAUT"},{"developerId":"hoodja","email":"hoodja@gmail.com","name":"James Hood"},{"developerId":"nikom","email":"niko.mahle@googlemail.com","name":"Niko Mahle"}],"excerpt":"This plugin provides an eXtreme Feedback Panel that can be used to expose the status of a selected number of Jobs.","gav":"org.jenkins-ci.plugins:xfpanel:1.1.6","labels":["report","ui"],"name":"xfpanel","previousTimestamp":"2012-08-30T13:20:34.00Z","previousVersion":"1.1.4","releaseTimestamp":"2012-12-30T16:19:48.00Z","requiredCore":"1.475","scm":"github.com","sha1":"BUAx4bYHHxWUa1YYfpccEkrCSAc=","title":"eXtreme Feedback Panel Plugin","url":"http://updates.jenkins-ci.org/download/plugins/xfpanel/1.1.6/xfpanel.hpi","version":"1.1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/eXtreme+Feedback+Panel+Plugin"},"xframe-filter-plugin":{"buildDate":"Sep 27, 2011","dependencies":[],"developers":[{"developerId":"jieryn","email":"jieryn@gmail.com","name":"Jesse Farinacci"}],"excerpt":"Provides a very simple filter which adds a response header indicating how frame/iframe requests should be handled.","gav":"org.jenkins-ci.plugins:xframe-filter-plugin:1.0","labels":["page-decorator","misc"],"name":"xframe-filter-plugin","releaseTimestamp":"2011-09-27T14:26:38.00Z","requiredCore":"1.429","scm":"github.com","sha1":"2gp6AD6zeY8gei7owGX4JiQu5yI=","title":"XFrame Filter Plugin","url":"http://updates.jenkins-ci.org/download/plugins/xframe-filter-plugin/1.0/xframe-filter-plugin.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/XFrame+Filter+Plugin"},"xpath-config-viewer":{"buildDate":"May 21, 2012","dependencies":[],"developers":[{"developerId":"ffromm","email":"frederik.fromm@gmail.com","name":"Frederik Fromm"}],"excerpt":"This plugin adds a new link \"XPath Configuration Viewer\" to the Jenkins Managagement page. It provides a simple and easy way to check job configurations having a huge number of jobs.","gav":"org.jenkins-ci.plugins:xpath-config-viewer:1.1.1","labels":["misc"],"name":"xpath-config-viewer","previousTimestamp":"2012-03-07T13:35:10.00Z","previousVersion":"1.1.0","releaseTimestamp":"2012-05-21T22:03:38.00Z","requiredCore":"1.424","scm":"github.com","sha1":"DSL/usWSQU9THJRxm1rd5Uw2Yi4=","title":"XPath Configuration Viewer","url":"http://updates.jenkins-ci.org/download/plugins/xpath-config-viewer/1.1.1/xpath-config-viewer.hpi","version":"1.1.1","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/XPath+Configuration+Viewer"},"xpdev":{"buildDate":"Jun 26, 2012","dependencies":[{"name":"git","optional":false,"version":"1.1.17"},{"name":"mercurial","optional":false,"version":"1.41"},{"name":"subversion","optional":false,"version":"1.40"}],"developers":[{"developerId":"ndeloof","name":"Nicolas De Loof"}],"excerpt":"","gav":"com.cloudbees.jenkins.plugins:xpdev:1.0","labels":[],"name":"xpdev","releaseTimestamp":"2012-06-26T15:42:22.00Z","requiredCore":"1.447","scm":"github.com","sha1":"jtb/FToA+IR4YXH/lTCNu6uBW5Y=","title":"XP-Dev plugin","url":"http://updates.jenkins-ci.org/download/plugins/xpdev/1.0/xpdev.hpi","version":"1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/XP-Dev+plugin"},"xshell":{"buildDate":"Apr 11, 2012","dependencies":[],"developers":[{"developerId":"mambu","email":"marco.ambu+jenkins@gmail.com","name":"Marco Ambu"}],"excerpt":"This plugin defines a new build type to execute a shell command in a cross-platform environment.","gav":"org.jenkins-ci.plugins:xshell:0.8","labels":["builder"],"name":"xshell","previousTimestamp":"2011-12-29T14:06:08.00Z","previousVersion":"0.7","releaseTimestamp":"2012-04-11T23:05:22.00Z","requiredCore":"1.459","scm":"github.com","sha1":"75P8ZCPx1gUmfdn3yDtkcfv4nQU=","title":"XShell Plugin","url":"http://updates.jenkins-ci.org/download/plugins/xshell/0.8/xshell.hpi","version":"0.8","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/XShell+Plugin"},"xtrigger":{"buildDate":"Jul 28, 2012","dependencies":[{"name":"ivytrigger","optional":false,"version":"0.22"},{"name":"buildresult-trigger","optional":false,"version":"0.8"},{"name":"scripttrigger","optional":false,"version":"0.21"},{"name":"urltrigger","optional":false,"version":"0.24"},{"name":"fstrigger","optional":false,"version":"0.33"}],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"The XTrigger plugin makes it possible to monitor different environments (filesystem, jobs result, url response, binary repository and so on) and triggers a build if there is at least one change between two checks.","gav":"org.jenkins-ci.plugins:xtrigger:0.53","labels":["trigger"],"name":"xtrigger","previousTimestamp":"2012-07-25T05:48:36.00Z","previousVersion":"0.52","releaseTimestamp":"2012-07-28T04:28:14.00Z","requiredCore":"1.461","scm":"github.com","sha1":"KnVb1JdGNwPSPYtKWE4/GRu9wR8=","title":"XTrigger Plugin","url":"http://updates.jenkins-ci.org/download/plugins/xtrigger/0.53/xtrigger.hpi","version":"0.53","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/XTrigger+Plugin"},"xunit":{"buildDate":"Dec 25, 2012","dependencies":[],"developers":[{"developerId":"gbois","email":"gregory.boissinot@gmail.com","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to publish the test results of an execution of a testing tool in Jenkins.","gav":"org.jenkins-ci.plugins:xunit:1.52","labels":["report"],"name":"xunit","previousTimestamp":"2012-11-16T03:29:28.00Z","previousVersion":"1.51","releaseTimestamp":"2012-12-26T01:12:36.00Z","requiredCore":"1.410","scm":"github.com","sha1":"kwvF7bSixnldzX+bUNxEkm2bYHg=","title":"xUnit Plugin","url":"http://updates.jenkins-ci.org/download/plugins/xunit/1.52/xunit.hpi","version":"1.52","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/xUnit+Plugin"},"xvfb":{"buildDate":"Dec 09, 2012","dependencies":[],"developers":[{"developerId":"zregvart","email":"zregvart+xvfbjenkins@gmail.com","name":"Zoran Regvart"}],"excerpt":"Lets you control Xvfb<\/a> virtual frame buffer X11 server with each build. It starts Xvfb before the build starts, and stops it with the build. This is very useful if your build requires X11 access, for instance runs tests that require GUI. ","gav":"org.jenkins-ci.plugins:xvfb:1.0.7","labels":["buildwrapper","xvfb"],"name":"xvfb","previousTimestamp":"2012-11-05T21:29:48.00Z","previousVersion":"1.0.6","releaseTimestamp":"2012-12-09T22:02:50.00Z","requiredCore":"1.398","scm":"github.com","sha1":"xvjq4QhP8vwy8uFkvoKFrbMg2vs=","title":"Xvfb Plugin","url":"http://updates.jenkins-ci.org/download/plugins/xvfb/1.0.7/xvfb.hpi","version":"1.0.7","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Xvfb+Plugin"},"xvnc":{"buildDate":"Jul 19, 2010","dependencies":[],"developers":[{"developerId":"jglick","email":"jglick@dev.java.net","name":"Jesse Glick"}],"excerpt":"This plugin lets you run an Xvnc<\/a> session during a build. This is handy if your build includes UI testing that needs a display available. ","gav":"org.jvnet.hudson.plugins:xvnc:1.10","labels":["buildwrapper"],"name":"xvnc","previousTimestamp":"2010-06-21T21:56:56.00Z","previousVersion":"1.9","releaseTimestamp":"2010-07-19T16:30:16.00Z","requiredCore":"1.367","scm":"svn.dev.java.net","sha1":"WWb7foXJ/b2XN+P3Oj9sdMuluAs=","title":"Xvnc Plugin","url":"http://updates.jenkins-ci.org/download/plugins/xvnc/1.10/xvnc.hpi","version":"1.10","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Xvnc+Plugin"},"yammer":{"buildDate":"Jun 24, 2012","dependencies":[{"name":"ruby-runtime","optional":false,"version":"0.10"},{"name":"token-macro","optional":false,"version":"1.5.1"}],"developers":[{"developerId":"matthewriley"}],"excerpt":"Sends build notifications to Yammer.","gav":"org.jenkins-ci.ruby-plugins:yammer:0.1.0","labels":["notifier"],"name":"yammer","previousTimestamp":"2012-06-16T13:06:54.00Z","previousVersion":"0.0.9","releaseTimestamp":"2012-06-24T17:15:50.00Z","requiredCore":"1.432","scm":"github.com","sha1":"TDIP0bT1BxtPTk+MXtZThc0BzMw=","title":"Yammer Plugin","url":"http://updates.jenkins-ci.org/download/plugins/yammer/0.1.0/yammer.hpi","version":"0.1.0","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Yammer+Plugin"},"zentimestamp":{"buildDate":"Mar 10, 2012","dependencies":[],"developers":[{"developerId":"gbois","name":"Gregory Boissinot"}],"excerpt":"This plugin makes it possible to change the Jenkins build timestamp format (provided by the Jenkins BUILD_ID variable). ","gav":"org.jenkins-ci.plugins:zentimestamp:3.2","labels":["buildwrapper"],"name":"zentimestamp","previousTimestamp":"2012-03-07T06:19:08.00Z","previousVersion":"3.1","releaseTimestamp":"2012-03-11T03:07:40.00Z","requiredCore":"1.410","scm":"github.com","sha1":"FWWOFxUNKWjmW2Skj8CTfIoPbtE=","title":"ZenTimestamp Plugin","url":"http://updates.jenkins-ci.org/download/plugins/zentimestamp/3.2/zentimestamp.hpi","version":"3.2","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/ZenTimestamp+Plugin"},"zubhium":{"buildDate":"Aug 15, 2012","dependencies":[],"developers":[{"developerId":"derFunk","email":"mail@derfunk.com","name":"Andreas Katzig"}],"excerpt":"This plugin uses the Zubhium upload API to allow uploading your Android .apk files to www.Zubhium.com<\/a> ","gav":"org.jenkins-ci.plugins:zubhium:0.1.6","labels":["upload","android"],"name":"zubhium","previousTimestamp":"2012-08-12T19:45:38.00Z","previousVersion":"0.1.5","releaseTimestamp":"2012-08-15T17:16:34.00Z","requiredCore":"1.398","scm":"github.com","sha1":"F1InB9TBBOnv3K8gF/XGJPklCZI=","title":"Zubhium Plugin","url":"http://updates.jenkins-ci.org/download/plugins/zubhium/0.1.6/zubhium.hpi","version":"0.1.6","wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Zubhium+Plugin"}},"signature":{"certificates":["MIIDezCCAmMCBQDerb7xMA0GCSqGSIb3DQEBBAUAMIGKMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8GA1UEBxMIU2FuIEpvc2UxGDAWBgNVBAoTD0plbmtpbnMgUHJvamVjdDEaMBgGA1UEAxMRS29oc3VrZSBLYXdhZ3VjaGkxHTAbBgkqhkiG9w0BCQEWDmtrQGtvaHN1a2Uub3JnMB4XDTEyMDQxOTA5MjEwMVoXDTEzMDQxOTA5MjEwMVoweDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExGDAWBgNVBAoTD0plbmtpbnMgUHJvamVjdDEeMBwGA1UECxMVRGVmYXVsdCBVcGRhdGUgQ2VudGVyMRowGAYDVQQDExFLb2hzdWtlIEthd2FndWNoaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANRDu439lC/Ie+LlQ42vYICZZ9aIA8+poXhJLt1Mhosz+zFGCdljWTvO3/wxNx7uA053YTIKu73cSAxVjWK8Qfhv19hKXNKe7wvHZF0y6VbSKqKctjXsm/4nWrGr61FTIxr3LcM3byx/vJ0tykQmiDc5/oov7MmUpBLSg1yCyO70t1/NxyYy7xCreU2G1x2w+RxFakfIaLK9r33FcFH+mrEzQZHxoxlg3AuLn1WDz9+mRMvCEEZU6AQh07gBG8f8dOV9ot2vaknkF+w4OTsDdUdXY5sNghr6yQTLU8++0u/f9N8j+cP07C39OWnIjloBt3WVuhSuw83IqOJHoYh85wUCAwEAATANBgkqhkiG9w0BAQQFAAOCAQEAYTNwxggebhQaZwitsj1tfPpV7T6gQ6m/Bo/hV9OpvvP3jolZ79OFB79gg6HZbhZUwdBtHMWHiwMI/+DoAWgDQpRgFapTZmEtu/4LREXmgl9aTWDkiQ5M+7PCrowwkH8Jwwk+8cqiaCrrKkLUYsQkVqAUUD5EtxOgz6X7lH3nnALpo5A00Tvt3V0Q0vfiiPsSZiQ3go709dA6nrToPimEOBLgPPZw/A2gCQ8GbfB4vl0Zl5Yy7gPf36kMurG90XxbhmEZH75Hv9oERsD7Cr3z97fRTDxickg4cXTsdRwmqbCvFpXpMs6Vqyz2IsoysFqpP1FgFqPgFJYaFjBea0CPIQ=="],"correct_digest":"+df0KPa3c0veuRdkXz2aGqxDIQs=","correct_signature":"iOYiY07a/h+Nswnp179nqDM7r1E0YBDCyUPsWC6C5WIUSzL/thIZhhRp4cM90JtcsEEaaZHpOuEh17KKgFxTkmLqTdFQJbEtdb8yq1hnPD5aQPamqmgSmWyHetVT6vEk/i6zKsm/2XJ8bfy3dBjX43HRRnXctr+ZOM2l0M99PUwM4Xt8Afl3WmTbCC+284VeowFJcfSVJEL84beWnLYoqGAMdviDfp+I59dxz4KbSbLwxMDhd1qb6WHLSd3sFaYfQoimClZQAdzIUqIVN3jQ8ROpqT5VI7jvGZgPGjzS8e6SP4Uk9laPRvKeq8jniXOQGrdRYdYuOlXyBRnCPgtiqQ==","digest":"LLV63zIYt9GTGyMgnHzIpoAjFlc=","signature":"LLy9yGf+zWGfTKmbtSQWewYaCYd9WOMqxMW9zY0Gjntn/ulThrgnwOJXFZFhH53+cNr+Cs0MIsi9XjZ8n1MD6olg/3E0e7YW0rai8GQ1Y8jotyMLwjhdyVM8t8McMiVxcypyAOYOf/sSXtB1ZTV2kw4FmngaMULOv3lFGpNKWNlKbtBm/e0AC5xheyyI67aDGNfxzGbVuexaFJDSczBIkrpVP3SsAYTmLgEkx6RR1cCzAc2nQpMSdz9k0IQAbtaT9Oabear15nd9+gtFasIotHAyWIyaWfv/ag9wBpjO1W0qqS4j2MVYYYt11o6mubhtXvK+shhvzlmXW5lhd9hfmw=="},"updateCenterVersion":"1"} diff -Nru boost1.81-1.81.0/libs/libraries.htm boost1.81-1.81.0/libs/libraries.htm --- boost1.81-1.81.0/libs/libraries.htm 2023-08-04 06:01:45.000000000 +0000 +++ boost1.81-1.81.0/libs/libraries.htm 1970-01-01 00:00:00.000000000 +0000 @@ -1,667 +0,0 @@ - - - - - - - - -Boost Libraries - - - - - - - - - - -
- - boost.png (6897 bytes) - Libraries -
- - - - - -
Getting Started    -      Tools    -      Web Site    -      News    -      Community    -      - FAQ    -      More Info
- -
-
Libraries Listed Alphabetically
-
Libraries Listed by Category
-
-
Algorithms
-
Broken compiler workarounds
-
Concurrent Programming
-
Containers
-
Correctness and testing
-
Data structures
-
Domain Specific
-
Error handling and recovery
-
Function objects and higher-order programming
-
Generic Programming
-
Image processing
-
Input/Output
-
Inter-language support
-
Iterators
-
Language Features Emulation
-
Math and numerics
-
Memory
-
Parsing
-
Patterns and Idioms
-
Preprocessor Metaprogramming
-
Programming Interfaces
-
State Machines
-
String and text processing
-
System
-
Template Metaprogramming
-
Miscellaneous
-
-
Libraries Retired from Boost
-
- -

See Getting Started page to find out -how to download, build, and install the libraries.

- -
- -

Libraries Listed Alphabetically

- -
    -
  • Accumulators - Framework for incremental calculation, and collection of statistical accumulators, from Eric Niebler
  • -
  • Algorithm - A collection of useful generic algorithms, from Marshall Clow
  • -
  • Align - Memory alignment functions, allocators, traits, from Glen Fernandes
  • -
  • Any - Safe, generic container for single values of different value types, from Kevlin Henney
  • -
  • Array - STL compliant container wrapper for arrays of constant size, from Nicolai Josuttis
  • -
  • Asio - Portable networking and other low-level I/O, including sockets, timers, hostname resolution, socket iostreams, serial ports, file descriptors and Windows HANDLEs, from Chris Kohlhoff
  • -
  • Assert - Customizable assert macros, from Peter Dimov
  • -
  • Assign - Filling containers with constant or generated data has never been easier, from Thorsten Ottosen
  • -
  • Atomic - C++11-style atomic<>, from Helge Bahmann, Tim Blechmann and Andrey Semashev
  • -
  • Beast - Portable HTTP, WebSocket, and network operations using only C++11 and Boost.Asio, from Vinnie Falco
  • -
  • Bimap - Bidirectional maps library for C++. With Boost.Bimap you can create associative containers in which both types can be used as key, from Matias Capeletto
  • -
  • Bind - boost::bind is a generalization of the standard functions std::bind1st and std::bind2nd. It supports arbitrary function objects, functions, function pointers, and member function pointers, and is able to bind any argument to a specific value or route input arguments into arbitrary positions, from Peter Dimov
  • -
  • Call Traits - Defines types for passing parameters, from John Maddock, Howard Hinnant, et al
  • -
  • CallableTraits - A spiritual successor to Boost.FunctionTypes, Boost.CallableTraits is a header-only C++11 library for the compile-time inspection and manipulation of all 'callable' types. Additional support for C++17 features, from Barrett Adair
  • -
  • Chrono - Useful time utilities. C++11, from Howard Hinnant, Beman Dawes and Vicente J. Botet Escriba
  • -
  • Circular Buffer - A STL compliant container also known as ring or cyclic buffer, from Jan Gaspar
  • -
  • Compatibility - Help for non-conforming standard libraries, from Ralf Grosse-Kunstleve and Jens Maurer
  • -
  • Compressed Pair - Empty member optimization, from John Maddock, Howard Hinnant, et al
  • -
  • Compute - Parallel/GPU-computing library, from Kyle Lutz
  • -
  • Concept Check - Tools for generic programming, from Jeremy Siek
  • -
  • Config - Helps Boost library developers adapt to compiler idiosyncrasies; not intended for library users
  • -
  • Container - Standard library containers and extensions, from Ion Gaztañaga
  • -
  • Container Hash - An STL-compatible hash function object that can be extended to hash user defined types, from Daniel James
  • -
  • Context - (C++11) Context switching library, from Oliver Kowalke
  • -
  • Contract - Contract programming for C++. All contract programming features are supported: Subcontracting, class invariants, postconditions (with old and return values), preconditions, customizable actions on assertion failure (e.g., terminate or throw), optional compilation and checking of assertions, etc, from Lorenzo Caminiti
  • -
  • Conversion - Polymorphic casts, from Dave Abrahams and Kevlin Henney
  • -
  • Convert - An extendible and configurable type-conversion framework, from Vladimir Batov
  • -
  • Core - A collection of simple core utilities with minimal dependencies, from Peter Dimov, Glen Fernandes and Andrey Semashev
  • -
  • Coroutine - Coroutine library, from Oliver Kowalke
  • -
  • Coroutine2 - (C++11) Coroutine library, from Oliver Kowalke
  • -
  • CRC - The Boost CRC Library provides two implementations of CRC (cyclic redundancy code) computation objects and two implementations of CRC computation functions. The implementations are template-based, from Daryle Walker
  • -
  • Date Time - A set of date-time libraries based on generic programming concepts, from Jeff Garland
  • -
  • Describe - A C++14 reflection library, from Peter Dimov
  • -
  • DLL - Library for comfortable work with DLL and DSO, from Antony Polukhin and Renato Tegon Forti
  • -
  • Dynamic Bitset - The dynamic_bitset class represents a set of bits. It provides accesses to the value of individual bits via an operator[] and provides all of the bitwise operators that one can apply to builtin integers, such as operator& and operator<<. The number of bits in the set is specified at runtime via a parameter to the constructor of the dynamic_bitset, from Jeremy Siek and Chuck Allison
  • -
  • Enable If - Selective inclusion of function template overloads, from Jaakko Järvi, Jeremiah Willcock and Andrew Lumsdaine
  • -
  • Endian - Types and conversion functions for correct byte ordering and more regardless of processor endianness, from Beman Dawes
  • -
  • Exception - The Boost Exception library supports transporting of arbitrary data in exception objects, and transporting of exceptions between threads, from Emil Dotchevski
  • -
  • Fiber - (C++11) Userland threads library, from Oliver Kowalke
  • -
  • Filesystem - The Boost Filesystem Library provides portable facilities to query and manipulate paths, files, and directories, from Beman Dawes
  • -
  • Flyweight - Design pattern to manage large quantities of highly redundant objects, from Joaquín M López Muñoz
  • -
  • Foreach - In C++, writing a loop that iterates over a sequence is tedious. We can either use iterators, which requires a considerable amount of boiler-plate, or we can use the std::for_each() algorithm and move our loop body into a predicate, which requires no less boiler-plate and forces us to move our logic far from where it will be used. In contrast, some other languages, like Perl, provide a dedicated "foreach" construct that automates this process. BOOST_FOREACH is just such a construct for C++. It iterates over sequences for us, freeing us from having to deal directly with iterators or write predicates, from Eric Niebler
  • -
  • Format - The format library provides a type-safe mechanism for formatting arguments according to a printf-like format-string, from Samuel Krempp
  • -
  • Function - Function object wrappers for deferred calls or callbacks, from Doug Gregor
  • -
  • Function Types - Boost.FunctionTypes provides functionality to classify, decompose and synthesize function, function pointer, function reference and pointer to member types, from Tobias Schwinger
  • -
  • Functional - The Boost.Function library contains a family of class templates that are function object wrappers, from Mark Rodgers
  • -
  • Functional/Factory - Function object templates for dynamic and static object creation, from Glen Fernandes and Tobias Schwinger
  • -
  • Functional/Forward - Adapters to allow generic function objects to accept arbitrary arguments, from Tobias Schwinger
  • -
  • Functional/Overloaded Function - Overload different functions into a single function object, from Lorenzo Caminiti
  • -
  • Fusion - Library for working with tuples, including various containers, algorithms, etc, from Joel de Guzman, Dan Marsden and Tobias Schwinger
  • -
  • Geometry - The Boost.Geometry library provides geometric algorithms, primitives and spatial index, from Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz, Menelaos Karavelas and Vissarion Fisikopoulos
  • -
  • GIL - (C++14) Generic Image Library, from Lubomir Bourdev, Hailin Jin and Christian Henning
  • -
  • Graph - The BGL graph interface and graph components are generic, in the same sense as the Standard Template Library (STL), from Jeremy Siek and a University of Notre Dame team.
  • -
  • GraphParallel - The PBGL graph interface and graph components are generic, in the same sense as the Standard Template Library (STL), from Jeremy Siek, Doug Gregor, and a University of Notre Dame team.
  • -
  • Hana - A modern C++ metaprogramming library. It provides high level algorithms to manipulate heterogeneous sequences, allows writing type-level computations with a natural syntax, provides tools to introspect user-defined types and much more, from Louis Dionne
  • -
  • Heap - Priority queue data structures, from Tim Blechmann
  • -
  • Histogram - Fast multi-dimensional histogram with convenient interface for C++14, from Hans Dembinski
  • -
  • HOF - Higher-order functions for C++, from Paul Fultz II
  • -
  • ICL - Interval Container Library, interval sets and maps and aggregation of associated values, from Joachim Faulhaber
  • -
  • Identity Type - Wrap types within round parenthesis so they can always be passed as macro parameters, from Lorenzo Caminiti
  • -
  • In Place Factory, Typed In Place Factory - Generic in-place construction of contained objects with a variadic argument-list, from Fernando Cacciola
  • -
  • Integer - The organization of boost integer headers and classes is designed to take advantage of <stdint.h> types from the 1999 C standard without resorting to undefined behavior in terms of the 1998 C++ standard. The header <boost/cstdint.hpp> makes the standard integer types safely available in namespace boost without placing any names in namespace std
  • -
  • Interprocess - Shared memory, memory mapped files, process-shared mutexes, condition variables, containers and allocators, from Ion Gaztañaga
  • -
  • Interval - Extends the usual arithmetic functions to mathematical intervals, from Guillaume Melquiond, Hervé Brönnimann and Sylvain Pion
  • -
  • Intrusive - Intrusive containers and algorithms, from Ion Gaztañaga
  • -
  • IO - Utilities for the standard I/O library, from Daryle Walker, Beman Dawes and Glen Fernandes
  • -
  • Iostreams - Boost.IOStreams provides a framework for defining streams, stream buffers and i/o filters, from Jonathan Turkanis
  • -
  • Iterator - The Boost Iterator Library contains two parts. The first is a system of concepts which extend the C++ standard iterator requirements. The second is a framework of components for building iterators based on these extended concepts and includes several useful iterator adaptors, from Dave Abrahams, Jeremy Siek and Thomas Witt
  • -
  • JSON - JSON parsing, serialization, and DOM in C++11, from Vinnie Falco and Krystian Stasiowski
  • -
  • Lambda - Define small unnamed function objects at the actual call site, and more, from Jaakko Järvi and Gary Powell
  • -
  • Lambda2 - A C++14 lambda library, from Peter Dimov
  • -
  • LEAF - A lightweight error handling library for C++11, from Emil Dotchevski
  • -
  • Lexical Cast - General literal text conversions, such as an int represented a string, or vice-versa, from Kevlin Henney
  • -
  • Local Function - Program functions locally, within other functions, directly within the scope where they are needed, from Lorenzo Caminiti
  • -
  • Locale - Provide localization and Unicode handling tools for C++, from Artyom Beilis
  • -
  • Lockfree - Lockfree data structures, from Tim Blechmann
  • -
  • Log - Logging library, from Andrey Semashev
  • -
  • Math - Boost.Math includes several contributions in the domain of mathematics: The Greatest Common Divisor and Least Common Multiple library provides run-time and compile-time evaluation of the greatest common divisor (GCD) or least common multiple (LCM) of two integers. The Special Functions library currently provides eight templated special functions, in namespace boost. The Complex Number Inverse Trigonometric Functions are the inverses of trigonometric functions currently present in the C++ standard. Quaternions are a relative of complex numbers often used to parameterise rotations in three dimentional space. Octonions, like quaternions, are a relative of complex numbers, from various
  • -
  • Math Common Factor - Greatest common divisor and least common multiple, from Daryle Walker
  • -
  • Math Octonion - Octonions, from Hubert Holin
  • -
  • Math Quaternion - Quaternions, from Hubert Holin
  • -
  • Math/Special Functions - A wide selection of mathematical special functions, from John Maddock, Paul Bristow, Hubert Holin and Xiaogang Zhang
  • -
  • Math/Statistical Distributions - A wide selection of univariate statistical distributions and functions that operate on them, from John Maddock and Paul Bristow
  • -
  • Member Function - Generalized binders for function/object/pointers and member functions, from Peter Dimov
  • -
  • Meta State Machine - A very high-performance library for expressive UML2 finite state machines, from Christophe Henry
  • -
  • Metaparse - A library for generating compile time parsers parsing embedded DSL code as part of the C++ compilation process, from Abel Sinkovics
  • -
  • Min-Max - Standard library extensions for simultaneous min/max and min/max element computations, from Hervé Brönnimann
  • -
  • Move - Portable move semantics for C++03 and C++11 compilers, from Ion Gaztañaga
  • -
  • Mp11 - A C++11 metaprogramming library, from Peter Dimov
  • -
  • MPI - Message Passing Interface library, for use in distributed-memory parallel application programming, from Douglas Gregor and Matthias Troyer
  • -
  • MPL - The Boost.MPL library is a general-purpose, high-level C++ template metaprogramming framework of compile-time algorithms, sequences and metafunctions. It provides a conceptual foundation and an extensive set of powerful and coherent tools that make doing explict metaprogramming in C++ as easy and enjoyable as possible within the current language, from Aleksey Gurtovoy
  • -
  • Multi-Array - Boost.MultiArray provides a generic N-dimensional array concept definition and common implementations of that interface, from Ron Garcia
  • -
  • Multi-Index - The Boost Multi-index Containers Library provides a class template named multi_index_container which enables the construction of containers maintaining one or more indices with different sorting and access semantics, from Joaquín M López Muñoz
  • -
  • Multiprecision - Extended precision arithmetic types for floating point, integer andrational arithmetic, from John Maddock and Christopher Kormanyos
  • -
  • Nowide - Standard library functions with UTF-8 API on Windows, from Artyom Beilis
  • -
  • Numeric Conversion - Optimized Policy-based Numeric Conversions, from Fernando Cacciola
  • -
  • Odeint - Solving ordinary differential equations, from Karsten Ahnert and Mario Mulansky
  • -
  • Operators - Templates ease arithmetic classes and iterators, from Dave Abrahams and Jeremy Siek
  • -
  • Optional - A value-semantic, type-safe wrapper for representing 'optional' (or 'nullable') objects of a given type. An optional object may or may not contain a value of the underlying type, from Fernando Cacciola
  • -
  • Outcome - A deterministic failure handling library partially simulating lightweight exceptions, from Niall Douglas
  • -
  • Parameter - Boost.Parameter Library - Write functions that accept arguments by name, from David Abrahams and Daniel Wallin
  • -
  • Parameter Python Bindings - Boost.Parameter Library Python bindings, from David Abrahams and Daniel Wallin
  • -
  • PFR - Basic reflection for user defined types, from Antony Polukhin
  • -
  • Phoenix - Define small unnamed function objects at the actual call site, and more, from Joel de Guzman, Dan Marsden, Thomas Heller and John Fletcher
  • -
  • Pointer Container - Containers for storing heap-allocated polymorphic objects to ease OO-programming, from Thorsten Ottosen
  • -
  • PolyCollection - Fast containers of polymorphic objects, from Joaquín M López Muñoz
  • -
  • Polygon - Voronoi diagram construction and booleans/clipping, resizing/offsetting and more for planar polygons with integral coordinates, from Lucanus Simonson and Andrii Sydorchuk
  • -
  • Pool - Memory pool management, from Steve Cleary
  • -
  • Predef - This library defines a set of compiler, architecture, operating system, library, and other version numbers from the information it can gather of C, C++, Objective C, and Objective C++ predefined macros or those defined in generally available headers, from René Ferdinand Rivera Morell
  • -
  • Preprocessor - Preprocessor metaprogramming tools including repetition and recursion, from Vesa Karvonen and Paul Mensonides
  • -
  • Process - Library to create processes in a portable way, from Merino Vidal, Ilya Sokolov, Felipe Tanus, Jeff Flinn, Thomas Jarosch, Boris Schaeling and Klemens D. Morgenstern
  • -
  • Program Options - The program_options library allows program developers to obtain program options, that is (name, value) pairs from the user, via conventional methods such as command line and config file, from Vladimir Prus
  • -
  • Property Map - Concepts defining interfaces which map key objects to value objects, from Jeremy Siek
  • -
  • Property Map (Parallel) - Parallel extensions to Property Map for use with Parallel Graph, from Jeremy Siek
  • -
  • Property Tree - A tree data structure especially suited to storing configuration data, from Marcin Kalicinski and Sebastian Redl
  • -
  • Proto - Expression template library and compiler construction toolkit for domain-specific embedded languages, from Eric Niebler
  • -
  • Python - The Boost Python Library is a framework for interfacing Python and C++. It allows you to quickly and seamlessly expose C++ classes functions and objects to Python, and vice-versa, using no special tools -- just your C++ compiler, from Dave Abrahams
  • -
  • QVM - Generic C++ library for working with Quaternions Vectors and Matrices, from Emil Dotchevski
  • -
  • Random - A complete system for random number generation, from Jens Maurer
  • -
  • Range - A new infrastructure for generic algorithms that builds on top of the new iterator concepts, from Niel Groves and Thorsten Ottosen
  • -
  • Ratio - Compile time rational arithmetic. C++11, from Howard Hinnant, Beman Dawes and Vicente J. Botet Escriba
  • -
  • Rational - A rational number class, from Paul Moore
  • -
  • Ref - A utility library for passing references to generic functions, from Jaako Järvi, Peter Dimov, Doug Gregor and Dave Abrahams
  • -
  • Regex - Regular expression library, from John Maddock
  • -
  • Result Of - Determines the type of a function call expression
  • -
  • Safe Numerics - Guaranteed Correct Integer Arithmetic, from Robert Ramey
  • -
  • Scope Exit - Execute arbitrary code at scope exit, from Alexander Nasonov
  • -
  • Serialization - Serialization for persistence and marshalling, from Robert Ramey
  • -
  • Signals2 - Managed signals & slots callback implementation (thread-safe version 2), from Frank Mori Hess
  • -
  • Smart Ptr - Smart pointer class templates, from Greg Colvin, Beman Dawes, Peter Dimov, Darin Adler and Glen Fernandes
  • -
  • Sort - High-performance templated sort functions, from Steven Ross
  • -
  • Spirit - LL parser framework represents parsers directly as EBNF grammars in inlined C++, from Joel de Guzman, Hartmut Kaiser and Dan Nuffer
  • -
  • Spirit Classic - LL parser framework represents parsers directly as EBNF grammars in inlined C++, from Joel de Guzman, Hartmut Kaiser and Dan Nuffer
  • -
  • Spirit Repository - The Spirit repository is a community effort collecting different reusable components (primitives, directives, grammars, etc.) for Qi parsers and Karma generators, from Joel de Guzman, Hartmut Kaiser and Dan Nuffer
  • -
  • Stacktrace - Gather, store, copy and print backtraces, from Antony Polukhin
  • -
  • Statechart - Boost.Statechart - Arbitrarily complex finite state machines can be implemented in easily readable and maintainable C++ code, from Andreas Huber Dönni
  • -
  • Static Assert - Static assertions (compile time assertions), from John Maddock
  • -
  • Static String - A fixed capacity dynamically sized string, from Krystian Stasiowski and Vinnie Falco
  • -
  • Stl_interfaces - C++14 and later CRTP templates for defining iterators, views, and containers, from T. Zachary Laine
  • -
  • String Algo - String algorithms library, from Pavol Droba
  • -
  • String_ref - String view templates, from Marshall Clow
  • -
  • Swap - Enhanced generic swap function, from Joseph Gauterin
  • -
  • System - Extensible error reporting, from Beman Dawes
  • -
  • Test - Support for simple program testing, full unit testing, and for program execution monitoring, from Gennadiy Rozental and Raffi Enficiaud
  • -
  • Thread - Portable C++ multi-threading. C++03, C++11, C++14, C++17, from Anthony Williams and Vicente J. Botet Escriba
  • -
  • ThrowException - A common infrastructure for throwing exceptions from Boost libraries, from Emil Dotchevski and Peter Dimov
  • -
  • Timer - Event timer, progress timer, and progress display classes, from Beman Dawes
  • -
  • Tokenizer - Break of a string or other character sequence into a series of tokens, from John Bandela
  • -
  • Tribool - 3-state boolean type library, from Doug Gregor
  • -
  • TTI - Type Traits Introspection library, from Edward Diener
  • -
  • Tuple - Ease definition of functions returning multiple values, and more, from Jaakko Järvi
  • -
  • Type Erasure - Runtime polymorphism based on concepts, from Steven Watanabe
  • -
  • Type Index - Runtime/Compile time copyable type info, from Antony Polukhin
  • -
  • Type Traits - Templates for fundamental properties of types, from John Maddock, Steve Cleary, et al
  • -
  • Typeof - Typeof operator emulation, from Arkadiy Vertleyb and Peder Holt
  • -
  • uBLAS - uBLAS provides tensor, matrix, and vector classes as well as basic linear algebra routines. Several dense, packed and sparse storage schemes are supported, from Joerg Walter and Mathias Koch
  • -
  • Units - Zero-overhead dimensional analysis and unit/quantity manipulation and conversion, from Matthias Schabel and Steven Watanabe
  • -
  • Unordered - Unordered associative containers, from Daniel James
  • -
  • URL - URL parsing in C++11, from Vinnie Falco and Alan de Freitas
  • -
  • Utility - Class noncopyable plus checked_delete(), checked_array_delete(), next(), prior() function templates, plus base-from-member idiom, from Dave Abrahams and others
  • -
  • Uuid - A universally unique identifier, from Andy Tompkins
  • -
  • Value Initialized - Wrapper for uniform-syntax value initialization, based on the original idea of David Abrahams, from Fernando Cacciola
  • -
  • Variant - Safe, generic, stack-based discriminated union container, from Eric Friedman and Itay Maman
  • -
  • Variant2 - A never-valueless, strong guarantee implementation of std::variant, from Peter Dimov
  • -
  • VMD - Variadic Macro Data library, from Edward Diener
  • -
  • Wave - The Boost.Wave library is a Standards conformant, and highly configurable implementation of the mandated C99/C++ preprocessor functionality packed behind an easy to use iterator interface, from Hartmut Kaiser
  • -
  • Xpressive - Regular expressions that can be written as strings or as expression templates, and which can refer to each other and themselves recursively with the power of context-free grammars, from Eric Niebler
  • -
  • YAP - An expression template library for C++14 and later, from T. Zachary Laine
  • -
- -
- -

Libraries Listed by Category

- -

Algorithms

- -
    -
  • Algorithm - A collection of useful generic algorithms, from Marshall Clow
  • -
  • Foreach - In C++, writing a loop that iterates over a sequence is tedious. We can either use iterators, which requires a considerable amount of boiler-plate, or we can use the std::for_each() algorithm and move our loop body into a predicate, which requires no less boiler-plate and forces us to move our logic far from where it will be used. In contrast, some other languages, like Perl, provide a dedicated "foreach" construct that automates this process. BOOST_FOREACH is just such a construct for C++. It iterates over sequences for us, freeing us from having to deal directly with iterators or write predicates, from Eric Niebler
  • -
  • Geometry - The Boost.Geometry library provides geometric algorithms, primitives and spatial index, from Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz, Menelaos Karavelas and Vissarion Fisikopoulos
  • -
  • GIL - (C++14) Generic Image Library, from Lubomir Bourdev, Hailin Jin and Christian Henning
  • -
  • Graph - The BGL graph interface and graph components are generic, in the same sense as the Standard Template Library (STL), from Jeremy Siek and a University of Notre Dame team.
  • -
  • GraphParallel - The PBGL graph interface and graph components are generic, in the same sense as the Standard Template Library (STL), from Jeremy Siek, Doug Gregor, and a University of Notre Dame team.
  • -
  • Histogram - Fast multi-dimensional histogram with convenient interface for C++14, from Hans Dembinski
  • -
  • Min-Max - Standard library extensions for simultaneous min/max and min/max element computations, from Hervé Brönnimann
  • -
  • Polygon - Voronoi diagram construction and booleans/clipping, resizing/offsetting and more for planar polygons with integral coordinates, from Lucanus Simonson and Andrii Sydorchuk
  • -
  • QVM - Generic C++ library for working with Quaternions Vectors and Matrices, from Emil Dotchevski
  • -
  • Range - A new infrastructure for generic algorithms that builds on top of the new iterator concepts, from Niel Groves and Thorsten Ottosen
  • -
  • Sort - High-performance templated sort functions, from Steven Ross
  • -
  • String Algo - String algorithms library, from Pavol Droba
  • -
  • Utility - Class noncopyable plus checked_delete(), checked_array_delete(), next(), prior() function templates, plus base-from-member idiom, from Dave Abrahams and others
  • -
- -

Broken compiler workarounds

- -
    -
  • Compatibility - Help for non-conforming standard libraries, from Ralf Grosse-Kunstleve and Jens Maurer
  • -
  • Config - Helps Boost library developers adapt to compiler idiosyncrasies; not intended for library users
  • -
- -

Concurrent Programming

- -
    -
  • Asio - Portable networking and other low-level I/O, including sockets, timers, hostname resolution, socket iostreams, serial ports, file descriptors and Windows HANDLEs, from Chris Kohlhoff
  • -
  • Atomic - C++11-style atomic<>, from Helge Bahmann, Tim Blechmann and Andrey Semashev
  • -
  • Beast - Portable HTTP, WebSocket, and network operations using only C++11 and Boost.Asio, from Vinnie Falco
  • -
  • Compute - Parallel/GPU-computing library, from Kyle Lutz
  • -
  • Context - (C++11) Context switching library, from Oliver Kowalke
  • -
  • Coroutine - Coroutine library, from Oliver Kowalke
  • -
  • Coroutine2 - (C++11) Coroutine library, from Oliver Kowalke
  • -
  • Fiber - (C++11) Userland threads library, from Oliver Kowalke
  • -
  • Interprocess - Shared memory, memory mapped files, process-shared mutexes, condition variables, containers and allocators, from Ion Gaztañaga
  • -
  • Lockfree - Lockfree data structures, from Tim Blechmann
  • -
  • MPI - Message Passing Interface library, for use in distributed-memory parallel application programming, from Douglas Gregor and Matthias Troyer
  • -
  • Thread - Portable C++ multi-threading. C++03, C++11, C++14, C++17, from Anthony Williams and Vicente J. Botet Escriba
  • -
- -

Containers

- -
    -
  • Array - STL compliant container wrapper for arrays of constant size, from Nicolai Josuttis
  • -
  • Bimap - Bidirectional maps library for C++. With Boost.Bimap you can create associative containers in which both types can be used as key, from Matias Capeletto
  • -
  • Circular Buffer - A STL compliant container also known as ring or cyclic buffer, from Jan Gaspar
  • -
  • Container - Standard library containers and extensions, from Ion Gaztañaga
  • -
  • Dynamic Bitset - The dynamic_bitset class represents a set of bits. It provides accesses to the value of individual bits via an operator[] and provides all of the bitwise operators that one can apply to builtin integers, such as operator& and operator<<. The number of bits in the set is specified at runtime via a parameter to the constructor of the dynamic_bitset, from Jeremy Siek and Chuck Allison
  • -
  • GIL - (C++14) Generic Image Library, from Lubomir Bourdev, Hailin Jin and Christian Henning
  • -
  • Graph - The BGL graph interface and graph components are generic, in the same sense as the Standard Template Library (STL), from Jeremy Siek and a University of Notre Dame team.
  • -
  • GraphParallel - The PBGL graph interface and graph components are generic, in the same sense as the Standard Template Library (STL), from Jeremy Siek, Doug Gregor, and a University of Notre Dame team.
  • -
  • ICL - Interval Container Library, interval sets and maps and aggregation of associated values, from Joachim Faulhaber
  • -
  • Intrusive - Intrusive containers and algorithms, from Ion Gaztañaga
  • -
  • JSON - JSON parsing, serialization, and DOM in C++11, from Vinnie Falco and Krystian Stasiowski
  • -
  • Multi-Array - Boost.MultiArray provides a generic N-dimensional array concept definition and common implementations of that interface, from Ron Garcia
  • -
  • Multi-Index - The Boost Multi-index Containers Library provides a class template named multi_index_container which enables the construction of containers maintaining one or more indices with different sorting and access semantics, from Joaquín M López Muñoz
  • -
  • Pointer Container - Containers for storing heap-allocated polymorphic objects to ease OO-programming, from Thorsten Ottosen
  • -
  • PolyCollection - Fast containers of polymorphic objects, from Joaquín M López Muñoz
  • -
  • Property Map - Concepts defining interfaces which map key objects to value objects, from Jeremy Siek
  • -
  • Property Map (Parallel) - Parallel extensions to Property Map for use with Parallel Graph, from Jeremy Siek
  • -
  • Property Tree - A tree data structure especially suited to storing configuration data, from Marcin Kalicinski and Sebastian Redl
  • -
  • String_ref - String view templates, from Marshall Clow
  • -
  • Unordered - Unordered associative containers, from Daniel James
  • -
  • URL - URL parsing in C++11, from Vinnie Falco and Alan de Freitas
  • -
  • Variant - Safe, generic, stack-based discriminated union container, from Eric Friedman and Itay Maman
  • -
  • Variant2 - A never-valueless, strong guarantee implementation of std::variant, from Peter Dimov
  • -
- -

Correctness and testing

- -
    -
  • Assert - Customizable assert macros, from Peter Dimov
  • -
  • Concept Check - Tools for generic programming, from Jeremy Siek
  • -
  • Contract - Contract programming for C++. All contract programming features are supported: Subcontracting, class invariants, postconditions (with old and return values), preconditions, customizable actions on assertion failure (e.g., terminate or throw), optional compilation and checking of assertions, etc, from Lorenzo Caminiti
  • -
  • Safe Numerics - Guaranteed Correct Integer Arithmetic, from Robert Ramey
  • -
  • Stacktrace - Gather, store, copy and print backtraces, from Antony Polukhin
  • -
  • Static Assert - Static assertions (compile time assertions), from John Maddock
  • -
  • Test - Support for simple program testing, full unit testing, and for program execution monitoring, from Gennadiy Rozental and Raffi Enficiaud
  • -
- -

Data structures

- -
    -
  • Any - Safe, generic container for single values of different value types, from Kevlin Henney
  • -
  • Bimap - Bidirectional maps library for C++. With Boost.Bimap you can create associative containers in which both types can be used as key, from Matias Capeletto
  • -
  • Compressed Pair - Empty member optimization, from John Maddock, Howard Hinnant, et al
  • -
  • Container - Standard library containers and extensions, from Ion Gaztañaga
  • -
  • Fusion - Library for working with tuples, including various containers, algorithms, etc, from Joel de Guzman, Dan Marsden and Tobias Schwinger
  • -
  • Geometry - The Boost.Geometry library provides geometric algorithms, primitives and spatial index, from Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz, Menelaos Karavelas and Vissarion Fisikopoulos
  • -
  • Heap - Priority queue data structures, from Tim Blechmann
  • -
  • Histogram - Fast multi-dimensional histogram with convenient interface for C++14, from Hans Dembinski
  • -
  • ICL - Interval Container Library, interval sets and maps and aggregation of associated values, from Joachim Faulhaber
  • -
  • JSON - JSON parsing, serialization, and DOM in C++11, from Vinnie Falco and Krystian Stasiowski
  • -
  • Multi-Index - The Boost Multi-index Containers Library provides a class template named multi_index_container which enables the construction of containers maintaining one or more indices with different sorting and access semantics, from Joaquín M López Muñoz
  • -
  • Optional - A value-semantic, type-safe wrapper for representing 'optional' (or 'nullable') objects of a given type. An optional object may or may not contain a value of the underlying type, from Fernando Cacciola
  • -
  • PFR - Basic reflection for user defined types, from Antony Polukhin
  • -
  • Pointer Container - Containers for storing heap-allocated polymorphic objects to ease OO-programming, from Thorsten Ottosen
  • -
  • Polygon - Voronoi diagram construction and booleans/clipping, resizing/offsetting and more for planar polygons with integral coordinates, from Lucanus Simonson and Andrii Sydorchuk
  • -
  • Property Tree - A tree data structure especially suited to storing configuration data, from Marcin Kalicinski and Sebastian Redl
  • -
  • Tuple - Ease definition of functions returning multiple values, and more, from Jaakko Järvi
  • -
  • Type Erasure - Runtime polymorphism based on concepts, from Steven Watanabe
  • -
  • URL - URL parsing in C++11, from Vinnie Falco and Alan de Freitas
  • -
  • Uuid - A universally unique identifier, from Andy Tompkins
  • -
  • Variant - Safe, generic, stack-based discriminated union container, from Eric Friedman and Itay Maman
  • -
  • Variant2 - A never-valueless, strong guarantee implementation of std::variant, from Peter Dimov
  • -
- -

Domain Specific

- -
    -
  • Chrono - Useful time utilities. C++11, from Howard Hinnant, Beman Dawes and Vicente J. Botet Escriba
  • -
  • CRC - The Boost CRC Library provides two implementations of CRC (cyclic redundancy code) computation objects and two implementations of CRC computation functions. The implementations are template-based, from Daryle Walker
  • -
  • Date Time - A set of date-time libraries based on generic programming concepts, from Jeff Garland
  • -
  • Units - Zero-overhead dimensional analysis and unit/quantity manipulation and conversion, from Matthias Schabel and Steven Watanabe
  • -
  • Uuid - A universally unique identifier, from Andy Tompkins
  • -
- -

Error handling and recovery

- -
    -
  • Assert - Customizable assert macros, from Peter Dimov
  • -
  • LEAF - A lightweight error handling library for C++11, from Emil Dotchevski
  • -
  • System - Extensible error reporting, from Beman Dawes
  • -
  • ThrowException - A common infrastructure for throwing exceptions from Boost libraries, from Emil Dotchevski and Peter Dimov
  • -
- -

Function objects and higher-order programming

- -
    -
  • Bind - boost::bind is a generalization of the standard functions std::bind1st and std::bind2nd. It supports arbitrary function objects, functions, function pointers, and member function pointers, and is able to bind any argument to a specific value or route input arguments into arbitrary positions, from Peter Dimov
  • -
  • Container Hash - An STL-compatible hash function object that can be extended to hash user defined types, from Daniel James
  • -
  • Function - Function object wrappers for deferred calls or callbacks, from Doug Gregor
  • -
  • Functional - The Boost.Function library contains a family of class templates that are function object wrappers, from Mark Rodgers
  • -
  • Functional/Factory - Function object templates for dynamic and static object creation, from Glen Fernandes and Tobias Schwinger
  • -
  • Functional/Forward - Adapters to allow generic function objects to accept arbitrary arguments, from Tobias Schwinger
  • -
  • Functional/Overloaded Function - Overload different functions into a single function object, from Lorenzo Caminiti
  • -
  • HOF - Higher-order functions for C++, from Paul Fultz II
  • -
  • Lambda - Define small unnamed function objects at the actual call site, and more, from Jaakko Järvi and Gary Powell
  • -
  • Lambda2 - A C++14 lambda library, from Peter Dimov
  • -
  • Local Function - Program functions locally, within other functions, directly within the scope where they are needed, from Lorenzo Caminiti
  • -
  • Member Function - Generalized binders for function/object/pointers and member functions, from Peter Dimov
  • -
  • Phoenix - Define small unnamed function objects at the actual call site, and more, from Joel de Guzman, Dan Marsden, Thomas Heller and John Fletcher
  • -
  • Ref - A utility library for passing references to generic functions, from Jaako Järvi, Peter Dimov, Doug Gregor and Dave Abrahams
  • -
  • Result Of - Determines the type of a function call expression
  • -
  • Signals2 - Managed signals & slots callback implementation (thread-safe version 2), from Frank Mori Hess
  • -
  • Utility - Class noncopyable plus checked_delete(), checked_array_delete(), next(), prior() function templates, plus base-from-member idiom, from Dave Abrahams and others
  • -
- -

Generic Programming

- -
    -
  • Call Traits - Defines types for passing parameters, from John Maddock, Howard Hinnant, et al
  • -
  • Concept Check - Tools for generic programming, from Jeremy Siek
  • -
  • Enable If - Selective inclusion of function template overloads, from Jaakko Järvi, Jeremiah Willcock and Andrew Lumsdaine
  • -
  • Function Types - Boost.FunctionTypes provides functionality to classify, decompose and synthesize function, function pointer, function reference and pointer to member types, from Tobias Schwinger
  • -
  • GIL - (C++14) Generic Image Library, from Lubomir Bourdev, Hailin Jin and Christian Henning
  • -
  • In Place Factory, Typed In Place Factory - Generic in-place construction of contained objects with a variadic argument-list, from Fernando Cacciola
  • -
  • Operators - Templates ease arithmetic classes and iterators, from Dave Abrahams and Jeremy Siek
  • -
  • Property Map - Concepts defining interfaces which map key objects to value objects, from Jeremy Siek
  • -
  • Property Map (Parallel) - Parallel extensions to Property Map for use with Parallel Graph, from Jeremy Siek
  • -
  • QVM - Generic C++ library for working with Quaternions Vectors and Matrices, from Emil Dotchevski
  • -
  • Static Assert - Static assertions (compile time assertions), from John Maddock
  • -
  • Stl_interfaces - C++14 and later CRTP templates for defining iterators, views, and containers, from T. Zachary Laine
  • -
  • TTI - Type Traits Introspection library, from Edward Diener
  • -
  • Type Traits - Templates for fundamental properties of types, from John Maddock, Steve Cleary, et al
  • -
  • YAP - An expression template library for C++14 and later, from T. Zachary Laine
  • -
- -

Image processing

- -
    -
  • GIL - (C++14) Generic Image Library, from Lubomir Bourdev, Hailin Jin and Christian Henning
  • -
- -

Input/Output

- -
    -
  • Asio - Portable networking and other low-level I/O, including sockets, timers, hostname resolution, socket iostreams, serial ports, file descriptors and Windows HANDLEs, from Chris Kohlhoff
  • -
  • Assign - Filling containers with constant or generated data has never been easier, from Thorsten Ottosen
  • -
  • Beast - Portable HTTP, WebSocket, and network operations using only C++11 and Boost.Asio, from Vinnie Falco
  • -
  • Endian - Types and conversion functions for correct byte ordering and more regardless of processor endianness, from Beman Dawes
  • -
  • Format - The format library provides a type-safe mechanism for formatting arguments according to a printf-like format-string, from Samuel Krempp
  • -
  • IO - Utilities for the standard I/O library, from Daryle Walker, Beman Dawes and Glen Fernandes
  • -
  • Iostreams - Boost.IOStreams provides a framework for defining streams, stream buffers and i/o filters, from Jonathan Turkanis
  • -
  • JSON - JSON parsing, serialization, and DOM in C++11, from Vinnie Falco and Krystian Stasiowski
  • -
  • Program Options - The program_options library allows program developers to obtain program options, that is (name, value) pairs from the user, via conventional methods such as command line and config file, from Vladimir Prus
  • -
  • Serialization - Serialization for persistence and marshalling, from Robert Ramey
  • -
  • URL - URL parsing in C++11, from Vinnie Falco and Alan de Freitas
  • -
- -

Inter-language support

- -
    -
  • Python - The Boost Python Library is a framework for interfacing Python and C++. It allows you to quickly and seamlessly expose C++ classes functions and objects to Python, and vice-versa, using no special tools -- just your C++ compiler, from Dave Abrahams
  • -
- -

Iterators

- -
    -
  • GIL - (C++14) Generic Image Library, from Lubomir Bourdev, Hailin Jin and Christian Henning
  • -
  • Graph - The BGL graph interface and graph components are generic, in the same sense as the Standard Template Library (STL), from Jeremy Siek and a University of Notre Dame team.
  • -
  • GraphParallel - The PBGL graph interface and graph components are generic, in the same sense as the Standard Template Library (STL), from Jeremy Siek, Doug Gregor, and a University of Notre Dame team.
  • -
  • Iterator - The Boost Iterator Library contains two parts. The first is a system of concepts which extend the C++ standard iterator requirements. The second is a framework of components for building iterators based on these extended concepts and includes several useful iterator adaptors, from Dave Abrahams, Jeremy Siek and Thomas Witt
  • -
  • Operators - Templates ease arithmetic classes and iterators, from Dave Abrahams and Jeremy Siek
  • -
  • Tokenizer - Break of a string or other character sequence into a series of tokens, from John Bandela
  • -
- -

Language Features Emulation

- -
    -
  • Describe - A C++14 reflection library, from Peter Dimov
  • -
  • Exception - The Boost Exception library supports transporting of arbitrary data in exception objects, and transporting of exceptions between threads, from Emil Dotchevski
  • -
  • Foreach - In C++, writing a loop that iterates over a sequence is tedious. We can either use iterators, which requires a considerable amount of boiler-plate, or we can use the std::for_each() algorithm and move our loop body into a predicate, which requires no less boiler-plate and forces us to move our logic far from where it will be used. In contrast, some other languages, like Perl, provide a dedicated "foreach" construct that automates this process. BOOST_FOREACH is just such a construct for C++. It iterates over sequences for us, freeing us from having to deal directly with iterators or write predicates, from Eric Niebler
  • -
  • Move - Portable move semantics for C++03 and C++11 compilers, from Ion Gaztañaga
  • -
  • Outcome - A deterministic failure handling library partially simulating lightweight exceptions, from Niall Douglas
  • -
  • Parameter - Boost.Parameter Library - Write functions that accept arguments by name, from David Abrahams and Daniel Wallin
  • -
  • Parameter Python Bindings - Boost.Parameter Library Python bindings, from David Abrahams and Daniel Wallin
  • -
  • Scope Exit - Execute arbitrary code at scope exit, from Alexander Nasonov
  • -
  • ThrowException - A common infrastructure for throwing exceptions from Boost libraries, from Emil Dotchevski and Peter Dimov
  • -
  • Type Index - Runtime/Compile time copyable type info, from Antony Polukhin
  • -
  • Typeof - Typeof operator emulation, from Arkadiy Vertleyb and Peder Holt
  • -
- -

Math and numerics

- -
    -
  • Accumulators - Framework for incremental calculation, and collection of statistical accumulators, from Eric Niebler
  • -
  • Endian - Types and conversion functions for correct byte ordering and more regardless of processor endianness, from Beman Dawes
  • -
  • Geometry - The Boost.Geometry library provides geometric algorithms, primitives and spatial index, from Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz, Menelaos Karavelas and Vissarion Fisikopoulos
  • -
  • Histogram - Fast multi-dimensional histogram with convenient interface for C++14, from Hans Dembinski
  • -
  • Integer - The organization of boost integer headers and classes is designed to take advantage of <stdint.h> types from the 1999 C standard without resorting to undefined behavior in terms of the 1998 C++ standard. The header <boost/cstdint.hpp> makes the standard integer types safely available in namespace boost without placing any names in namespace std
  • -
  • Interval - Extends the usual arithmetic functions to mathematical intervals, from Guillaume Melquiond, Hervé Brönnimann and Sylvain Pion
  • -
  • Math - Boost.Math includes several contributions in the domain of mathematics: The Greatest Common Divisor and Least Common Multiple library provides run-time and compile-time evaluation of the greatest common divisor (GCD) or least common multiple (LCM) of two integers. The Special Functions library currently provides eight templated special functions, in namespace boost. The Complex Number Inverse Trigonometric Functions are the inverses of trigonometric functions currently present in the C++ standard. Quaternions are a relative of complex numbers often used to parameterise rotations in three dimentional space. Octonions, like quaternions, are a relative of complex numbers, from various
  • -
  • Math Common Factor - Greatest common divisor and least common multiple, from Daryle Walker
  • -
  • Math Octonion - Octonions, from Hubert Holin
  • -
  • Math Quaternion - Quaternions, from Hubert Holin
  • -
  • Math/Special Functions - A wide selection of mathematical special functions, from John Maddock, Paul Bristow, Hubert Holin and Xiaogang Zhang
  • -
  • Math/Statistical Distributions - A wide selection of univariate statistical distributions and functions that operate on them, from John Maddock and Paul Bristow
  • -
  • Multi-Array - Boost.MultiArray provides a generic N-dimensional array concept definition and common implementations of that interface, from Ron Garcia
  • -
  • Multiprecision - Extended precision arithmetic types for floating point, integer andrational arithmetic, from John Maddock and Christopher Kormanyos
  • -
  • Numeric Conversion - Optimized Policy-based Numeric Conversions, from Fernando Cacciola
  • -
  • Odeint - Solving ordinary differential equations, from Karsten Ahnert and Mario Mulansky
  • -
  • Operators - Templates ease arithmetic classes and iterators, from Dave Abrahams and Jeremy Siek
  • -
  • Polygon - Voronoi diagram construction and booleans/clipping, resizing/offsetting and more for planar polygons with integral coordinates, from Lucanus Simonson and Andrii Sydorchuk
  • -
  • QVM - Generic C++ library for working with Quaternions Vectors and Matrices, from Emil Dotchevski
  • -
  • Random - A complete system for random number generation, from Jens Maurer
  • -
  • Ratio - Compile time rational arithmetic. C++11, from Howard Hinnant, Beman Dawes and Vicente J. Botet Escriba
  • -
  • Rational - A rational number class, from Paul Moore
  • -
  • Safe Numerics - Guaranteed Correct Integer Arithmetic, from Robert Ramey
  • -
  • uBLAS - uBLAS provides tensor, matrix, and vector classes as well as basic linear algebra routines. Several dense, packed and sparse storage schemes are supported, from Joerg Walter and Mathias Koch
  • -
- -

Memory

- -
    -
  • Align - Memory alignment functions, allocators, traits, from Glen Fernandes
  • -
  • Pool - Memory pool management, from Steve Cleary
  • -
  • Smart Ptr - Smart pointer class templates, from Greg Colvin, Beman Dawes, Peter Dimov, Darin Adler and Glen Fernandes
  • -
  • Utility - Class noncopyable plus checked_delete(), checked_array_delete(), next(), prior() function templates, plus base-from-member idiom, from Dave Abrahams and others
  • -
- -

Parsing

- -
    -
  • Spirit - LL parser framework represents parsers directly as EBNF grammars in inlined C++, from Joel de Guzman, Hartmut Kaiser and Dan Nuffer
  • -
  • Spirit Classic - LL parser framework represents parsers directly as EBNF grammars in inlined C++, from Joel de Guzman, Hartmut Kaiser and Dan Nuffer
  • -
  • Spirit Repository - The Spirit repository is a community effort collecting different reusable components (primitives, directives, grammars, etc.) for Qi parsers and Karma generators, from Joel de Guzman, Hartmut Kaiser and Dan Nuffer
  • -
- -

Patterns and Idioms

- -
    -
  • Compressed Pair - Empty member optimization, from John Maddock, Howard Hinnant, et al
  • -
  • Flyweight - Design pattern to manage large quantities of highly redundant objects, from Joaquín M López Muñoz
  • -
  • Outcome - A deterministic failure handling library partially simulating lightweight exceptions, from Niall Douglas
  • -
  • Signals2 - Managed signals & slots callback implementation (thread-safe version 2), from Frank Mori Hess
  • -
  • Utility - Class noncopyable plus checked_delete(), checked_array_delete(), next(), prior() function templates, plus base-from-member idiom, from Dave Abrahams and others
  • -
- -

Preprocessor Metaprogramming

- -
    -
  • Identity Type - Wrap types within round parenthesis so they can always be passed as macro parameters, from Lorenzo Caminiti
  • -
  • Preprocessor - Preprocessor metaprogramming tools including repetition and recursion, from Vesa Karvonen and Paul Mensonides
  • -
  • VMD - Variadic Macro Data library, from Edward Diener
  • -
- -

Programming Interfaces

- -
    -
  • Function - Function object wrappers for deferred calls or callbacks, from Doug Gregor
  • -
  • Outcome - A deterministic failure handling library partially simulating lightweight exceptions, from Niall Douglas
  • -
  • Parameter - Boost.Parameter Library - Write functions that accept arguments by name, from David Abrahams and Daniel Wallin
  • -
  • Parameter Python Bindings - Boost.Parameter Library Python bindings, from David Abrahams and Daniel Wallin
  • -
  • System - Extensible error reporting, from Beman Dawes
  • -
- -

State Machines

- -
    -
  • Meta State Machine - A very high-performance library for expressive UML2 finite state machines, from Christophe Henry
  • -
  • Statechart - Boost.Statechart - Arbitrarily complex finite state machines can be implemented in easily readable and maintainable C++ code, from Andreas Huber Dönni
  • -
- -

String and text processing

- -
    -
  • Convert - An extendible and configurable type-conversion framework, from Vladimir Batov
  • -
  • Format - The format library provides a type-safe mechanism for formatting arguments according to a printf-like format-string, from Samuel Krempp
  • -
  • Iostreams - Boost.IOStreams provides a framework for defining streams, stream buffers and i/o filters, from Jonathan Turkanis
  • -
  • Lexical Cast - General literal text conversions, such as an int represented a string, or vice-versa, from Kevlin Henney
  • -
  • Locale - Provide localization and Unicode handling tools for C++, from Artyom Beilis
  • -
  • Regex - Regular expression library, from John Maddock
  • -
  • Spirit - LL parser framework represents parsers directly as EBNF grammars in inlined C++, from Joel de Guzman, Hartmut Kaiser and Dan Nuffer
  • -
  • Spirit Classic - LL parser framework represents parsers directly as EBNF grammars in inlined C++, from Joel de Guzman, Hartmut Kaiser and Dan Nuffer
  • -
  • Spirit Repository - The Spirit repository is a community effort collecting different reusable components (primitives, directives, grammars, etc.) for Qi parsers and Karma generators, from Joel de Guzman, Hartmut Kaiser and Dan Nuffer
  • -
  • Static String - A fixed capacity dynamically sized string, from Krystian Stasiowski and Vinnie Falco
  • -
  • String Algo - String algorithms library, from Pavol Droba
  • -
  • Tokenizer - Break of a string or other character sequence into a series of tokens, from John Bandela
  • -
  • Wave - The Boost.Wave library is a Standards conformant, and highly configurable implementation of the mandated C99/C++ preprocessor functionality packed behind an easy to use iterator interface, from Hartmut Kaiser
  • -
  • Xpressive - Regular expressions that can be written as strings or as expression templates, and which can refer to each other and themselves recursively with the power of context-free grammars, from Eric Niebler
  • -
- -

System

- -
    -
  • Chrono - Useful time utilities. C++11, from Howard Hinnant, Beman Dawes and Vicente J. Botet Escriba
  • -
  • Context - (C++11) Context switching library, from Oliver Kowalke
  • -
  • Date Time - A set of date-time libraries based on generic programming concepts, from Jeff Garland
  • -
  • DLL - Library for comfortable work with DLL and DSO, from Antony Polukhin and Renato Tegon Forti
  • -
  • Fiber - (C++11) Userland threads library, from Oliver Kowalke
  • -
  • Filesystem - The Boost Filesystem Library provides portable facilities to query and manipulate paths, files, and directories, from Beman Dawes
  • -
  • Nowide - Standard library functions with UTF-8 API on Windows, from Artyom Beilis
  • -
  • Process - Library to create processes in a portable way, from Merino Vidal, Ilya Sokolov, Felipe Tanus, Jeff Flinn, Thomas Jarosch, Boris Schaeling and Klemens D. Morgenstern
  • -
  • Stacktrace - Gather, store, copy and print backtraces, from Antony Polukhin
  • -
  • System - Extensible error reporting, from Beman Dawes
  • -
  • Thread - Portable C++ multi-threading. C++03, C++11, C++14, C++17, from Anthony Williams and Vicente J. Botet Escriba
  • -
- -

Template Metaprogramming

- -
    -
  • CallableTraits - A spiritual successor to Boost.FunctionTypes, Boost.CallableTraits is a header-only C++11 library for the compile-time inspection and manipulation of all 'callable' types. Additional support for C++17 features, from Barrett Adair
  • -
  • Describe - A C++14 reflection library, from Peter Dimov
  • -
  • Function Types - Boost.FunctionTypes provides functionality to classify, decompose and synthesize function, function pointer, function reference and pointer to member types, from Tobias Schwinger
  • -
  • Fusion - Library for working with tuples, including various containers, algorithms, etc, from Joel de Guzman, Dan Marsden and Tobias Schwinger
  • -
  • Hana - A modern C++ metaprogramming library. It provides high level algorithms to manipulate heterogeneous sequences, allows writing type-level computations with a natural syntax, provides tools to introspect user-defined types and much more, from Louis Dionne
  • -
  • HOF - Higher-order functions for C++, from Paul Fultz II
  • -
  • Metaparse - A library for generating compile time parsers parsing embedded DSL code as part of the C++ compilation process, from Abel Sinkovics
  • -
  • Mp11 - A C++11 metaprogramming library, from Peter Dimov
  • -
  • MPL - The Boost.MPL library is a general-purpose, high-level C++ template metaprogramming framework of compile-time algorithms, sequences and metafunctions. It provides a conceptual foundation and an extensive set of powerful and coherent tools that make doing explict metaprogramming in C++ as easy and enjoyable as possible within the current language, from Aleksey Gurtovoy
  • -
  • PFR - Basic reflection for user defined types, from Antony Polukhin
  • -
  • Proto - Expression template library and compiler construction toolkit for domain-specific embedded languages, from Eric Niebler
  • -
  • Static Assert - Static assertions (compile time assertions), from John Maddock
  • -
  • TTI - Type Traits Introspection library, from Edward Diener
  • -
  • Type Traits - Templates for fundamental properties of types, from John Maddock, Steve Cleary, et al
  • -
  • YAP - An expression template library for C++14 and later, from T. Zachary Laine
  • -
- -

Miscellaneous

- -
    -
  • Conversion - Polymorphic casts, from Dave Abrahams and Kevlin Henney
  • -
  • Convert - An extendible and configurable type-conversion framework, from Vladimir Batov
  • -
  • Core - A collection of simple core utilities with minimal dependencies, from Peter Dimov, Glen Fernandes and Andrey Semashev
  • -
  • Endian - Types and conversion functions for correct byte ordering and more regardless of processor endianness, from Beman Dawes
  • -
  • Lexical Cast - General literal text conversions, such as an int represented a string, or vice-versa, from Kevlin Henney
  • -
  • Log - Logging library, from Andrey Semashev
  • -
  • Numeric Conversion - Optimized Policy-based Numeric Conversions, from Fernando Cacciola
  • -
  • Predef - This library defines a set of compiler, architecture, operating system, library, and other version numbers from the information it can gather of C, C++, Objective C, and Objective C++ predefined macros or those defined in generally available headers, from René Ferdinand Rivera Morell
  • -
  • Program Options - The program_options library allows program developers to obtain program options, that is (name, value) pairs from the user, via conventional methods such as command line and config file, from Vladimir Prus
  • -
  • Swap - Enhanced generic swap function, from Joseph Gauterin
  • -
  • Timer - Event timer, progress timer, and progress display classes, from Beman Dawes
  • -
  • Tribool - 3-state boolean type library, from Doug Gregor
  • -
  • Utility - Class noncopyable plus checked_delete(), checked_array_delete(), next(), prior() function templates, plus base-from-member idiom, from Dave Abrahams and others
  • -
  • Value Initialized - Wrapper for uniform-syntax value initialization, based on the original idea of David Abrahams, from Fernando Cacciola
  • -
- - -

[Category suggestions from Aleksey Gurtovoy, Beman Dawes and Vicente J. Botet Escribá]

- -
- -

Libraries Retired from Boost

- -
    -
  • compose - Functional composition adapters for the STL, - from Nicolai Josuttis. Removed in Boost version 1.32. - Please use Bind or Lambda instead.
  • -
  • signals (v1) - Managed signals and slots callback implementation, from - Doug Gregor. Removed in Boost version 1.69. Please use - Signals2 instead.
  • -
- -
- -

Revised -19 Feb 2015

- -

© Copyright Beman Dawes 2000-2004

-

Distributed under the Boost Software License, Version 1.0. -(See file LICENSE_1_0.txt -or www.boost.org/LICENSE_1_0.txt) -

- - - diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/boost-no-inspect boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/boost-no-inspect --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/boost-no-inspect 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/boost-no-inspect 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_ab.html boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_ab.html --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_ab.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_ab.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ - - - -
- - - diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_ab.js boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_ab.js --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_ab.js 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_ab.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,15596 +0,0 @@ -var negative_ab = { - "data": [ - { - "mode": "markers", - "name": "> 16384", - "type": "scatter3d", - "xsrc": "JohnMaddock:40:45a10d", - "x": [ - "-667.763", - "-746.438", - "-414.052", - "-291.775", - "-809.068", - "-380.045", - "-333.803", - "-828.753", - "-182.994", - "-297.38", - "-839.144", - "-540.279", - "-444.794", - "-762.73", - "-347.585", - "-966.871", - "-645.381", - "-915.425", - "-599.874", - "-770.249", - "-470.736", - "-971.582", - "-194.998", - "-976.473", - "-855.145", - "-904.18", - "-605.695", - "-346.195", - "-309.6", - "-275.786", - "-257.626", - "-82.9996", - "-551.433", - "-600.765", - "-747.94", - "-621.793", - "-510.571", - "-445.726", - "-755.42", - "-428.193", - "-955.199", - "-286.112", - "-768.278", - "-146", - "-164.035", - "-749.475" - ], - "ysrc": "JohnMaddock:40:cc365c", - "y": [ - "-281.278", - "-498.925", - "-439.238", - "-910.198", - "-39.3615", - "-910.033", - "-874.089", - "-678.955", - "-34.659", - "-122.495", - "-518.289", - "-416.792", - "-777.396", - "-115.362", - "-952.513", - "-547.067", - "-3.96839", - "-17.2214", - "-968.699", - "-731.999", - "-227.733", - "-625.001", - "-155.884", - "-579.999", - "-841.155", - "-731.001", - "-474.041", - "-117.806", - "-0.768809", - "-214.394", - "-5.16597", - "-6.19764", - "-295.209", - "-58.2458", - "-239.065", - "-226.06", - "-142.168", - "-22.7567", - "-386.843", - "-372", - "-711", - "-79.557", - "-43.9745", - "-13.7871", - "-0.383838", - "-998.188" - ], - "zsrc": "JohnMaddock:40:15978c", - "z": [ - "504.726", - "406.656", - "425.604", - "567.216", - "687.666", - "615.476", - "507.987", - "269.736", - "968.502", - "363.421", - "263.033", - "452.571", - "555.115", - "30.4776", - "542.734", - "354.119", - "74.0162", - "908.142", - "721.909", - "92.2775", - "176.446", - "44.0563", - "688.09", - "92.039", - "687.331", - "144.087", - "351.227", - "609.612", - "773.73", - "428.676", - "467.646", - "361.998", - "397.379", - "953.115", - "307.041", - "46.036", - "94.033", - "890.262", - "432.402", - "141.954", - "180.681", - "938.573", - "615.201", - "914.554", - "147.431", - "831.785" - ], - "marker": { - "size": 3, - "color": "rgb(194, 5, 5)" - } - }, - { - "mode": "markers", - "name": " 8192 - 16384", - "type": "scatter3d", - "xsrc": "JohnMaddock:43:63f763", - "x": [ - "-594.993", - "-500.875", - "-68.8825", - "-612.327", - "-355.446", - "-258.139", - "-803.241", - "-38.4515", - "-42.6352", - "-476.497", - "-257.039", - "-653.135", - "-599.003", - "-619.906", - "-14.0119", - "-434.119", - "-12.2335", - "-523.816", - "-296.09", - "-86.5867", - "-265.94", - "-692.447", - "-502.39", - "-156.603", - "-627.448", - "-183.634", - "-99.4839", - "-564.529", - "-145.349", - "-305.939", - "-230.93", - "-126.819", - "-339.462", - "-258.074", - "-373.187", - "-668.181", - "-376.399", - "-226.838", - "-557.697", - "-75.606", - "-565.044", - "-176.298", - "-710.286", - "-114.152", - "-476.669", - "-689.782", - "-534.083", - "-113.211", - "-753.959", - "-627.457", - "-454.837", - "-506.285", - "-105.264", - "-346.064", - "-101.837", - "-328.208", - "-110.446", - "-357.546", - "-735.548", - "-264.936", - "-410.893", - "-711.788", - "-231.894", - "-133.438", - "-68.0542", - "-735.632", - "-481.91", - "-181.123", - "-242.041", - "-391.362", - "-81.6338", - "-173.385", - "-11.2328", - "-204.612", - "-734.174", - "-223.245", - "-190.253", - "-420.42", - "-922.194", - "-278.161", - "-312.156", - "-553.307", - "-528.341", - "-563.545", - "-247.411", - "-552.158", - "-106.524", - "-10.3759", - "-550.708", - "-82.2756", - "-621.466", - "-601.048", - "-90.4012", - "-84.8411", - "-310.161", - "-428.329", - "-143.415", - "-517.013", - "-144.514", - "-147.694", - "-466.405", - "-575.806", - "-157.084", - "-508.513", - "-595.238", - "-354.098", - "-262.288", - "-443.628", - "-309.368", - "-305.727", - "-575.998", - "-171.943", - "-62.4174", - "-0.0410364", - "-535.809", - "-381.952", - "-399.867", - "-507.361", - "-225.411", - "-695.758", - "-271.387", - "-108.782", - "-210.157", - "-113.262", - "-252.868", - "-967.467", - "-221.068", - "-316.359", - "-587.161", - "-738.59", - "-379.43", - "-18.6555", - "-331.215", - "-781.486", - "-111.556", - "-138.518", - "-416.299", - "-374.88", - "-673.963", - "-402.451", - "-635.264", - "-226.102", - "-704.273", - "-540.16", - "-37.8186", - "-190.321", - "-485.46", - "-31.2728", - "-555.433", - "-302.174", - "-886.197", - "-368.501", - "-261.378", - "-433.118", - "-252.086", - "-217.129", - "-312.063", - "-319.024", - "-587.843", - "-243.313", - "-558.225", - "-301.001", - "-601.519", - "-282.635", - "-132.138", - "-127.842", - "-90.9983", - "-656.828", - "-647.645", - "-399.436", - "-554.579", - "-760.592", - "-112.634", - "-972.25", - "-57.8375", - "-479.584", - "-186.236", - "-754.368", - "-54.3537", - "-315.932", - "-208.214", - "-720.54", - "-611.568", - "-116.907", - "-380.642", - "-735.745", - "-594", - "-638.473", - "-615.405", - "-339.274", - "-359.673", - "-64.903", - "-423.17", - "-19.3247", - "-290.382", - "-456.2", - "-96.4133", - "-990.528", - "-250.22", - "-104.997", - "-328.438", - "-206.74", - "-699.373", - "-45.7845", - "-18.8046", - "-153.326", - "-225.136", - "-736.615", - "-887.103", - "-528.024", - "-494.092", - "-225.849", - "-212.812", - "-98.8747", - "-539.695", - "-114.077", - "-976.575", - "-350.548", - "-178.005", - "-75.6426", - "-184.004", - "-485.125", - "-218.002", - "-432.208", - "-522.76", - "-905.726", - "-406.425" - ], - "ysrc": "JohnMaddock:43:9a545e", - "y": [ - "-761.239", - "-878.537", - "-753.996", - "-796.815", - "-740.232", - "-759.392", - "-943.785", - "-868.767", - "-777.513", - "-902.153", - "-986.593", - "-423.248", - "-951.211", - "-981.671", - "-518.61", - "-796.433", - "-828.016", - "-49.0354", - "-937.796", - "-804.823", - "-884.673", - "-967.349", - "-833.073", - "-997.637", - "-722.308", - "-996.624", - "-981.309", - "-892.631", - "-781.309", - "-909.414", - "-129.866", - "-719.266", - "-785.011", - "-975.865", - "-793.394", - "-766.655", - "-816.875", - "-879.992", - "-12.0987", - "-862.932", - "-2.0398", - "-870.477", - "-862.344", - "-969.329", - "-999.639", - "-927.844", - "-933.899", - "-732.777", - "-847.56", - "-902.628", - "-943.309", - "-863.929", - "-985.315", - "-232.058", - "-991.8", - "-921.775", - "-894.579", - "-747.618", - "-912.063", - "-904.932", - "-913.07", - "-83.4428", - "-927.43", - "-869.561", - "-919.003", - "-799.622", - "-778.993", - "-978.47", - "-118.1", - "-894.826", - "-849.954", - "-947.269", - "-891.153", - "-681.56", - "-699.002", - "-993.652", - "-966.869", - "-965.764", - "-803.391", - "-917.39", - "-955.975", - "-799.179", - "-944.749", - "-917.609", - "-24.5017", - "-739.713", - "-882.898", - "-890.766", - "-749.195", - "-981.715", - "-909.104", - "-360.614", - "-913.281", - "-944.068", - "-192.164", - "-919.761", - "-977.32", - "-883.458", - "-857.352", - "-832.408", - "-799.191", - "-964.721", - "-833.137", - "-970.378", - "-970.508", - "-969.566", - "-905.234", - "-879.954", - "-857.162", - "-786.552", - "-951.92", - "-883.343", - "-949.659", - "-821.348", - "-635.507", - "-817.741", - "-776.629", - "-910.21", - "-987.937", - "-919.751", - "-924.565", - "-962.405", - "-783.137", - "-931.974", - "-983.873", - "-506.002", - "-0.892273", - "-976.117", - "-786.848", - "-870.893", - "-879.227", - "-867.513", - "-849.546", - "-868.56", - "-754.023", - "-987.021", - "-936.835", - "-677.248", - "-792.071", - "-830.779", - "-712.349", - "-737.058", - "-896.827", - "-142.475", - "-982.573", - "-919.208", - "-904.881", - "-987.55", - "-957.064", - "-984.195", - "-64.6436", - "-866.611", - "-860.116", - "-821.341", - "-907.182", - "-997.059", - "-788.409", - "-894.855", - "-989.461", - "-981.182", - "-709.397", - "-247.78", - "-919.306", - "-913.209", - "-880.53", - "-948.1", - "-10.1631", - "-850.694", - "-23.3584", - "-839.64", - "-778.319", - "-917.694", - "-899.473", - "-798.999", - "-983.798", - "-991.307", - "-934.615", - "-983.179", - "-847.075", - "-779.963", - "-948.52", - "-957.198", - "-919.243", - "-969.983", - "-867.895", - "-1.91446", - "-997.943", - "-50.5953", - "-181.267", - "-310.552", - "-997.941", - "-878.06", - "-910.405", - "-993.713", - "-888.465", - "-993.078", - "-987.274", - "-318.408", - "-864.93", - "-5.70254", - "-983.998", - "-919.748", - "-919.771", - "-737.985", - "-979.621", - "-785.475", - "-904.965", - "-941.212", - "-781.999", - "-205.358", - "-910.74", - "-919.465", - "-993.727", - "-919.138", - "-126.397", - "-983.288", - "-926.999", - "-256.482", - "-39.6472", - "-904.039", - "-51.3657", - "-960.281", - "-89.6092", - "-345.274", - "-28.4338", - "-808.609", - "-69.9926" - ], - "zsrc": "JohnMaddock:43:3d5fc4", - "z": [ - "809.263", - "832.735", - "379.067", - "719.163", - "481.553", - "419.599", - "889.206", - "491.654", - "484.712", - "811.093", - "503.725", - "388.391", - "811.465", - "837.396", - "249.319", - "575.95", - "317.111", - "706.564", - "503.362", - "383.845", - "667.944", - "892.413", - "611.236", - "591.252", - "788.21", - "664.816", - "428.802", - "709.387", - "508.331", - "565.41", - "138.525", - "558.545", - "601.403", - "569.329", - "512.342", - "741.689", - "742.609", - "672.336", - "318.212", - "429.948", - "825.554", - "470.207", - "793.134", - "559.323", - "720.219", - "775.527", - "733.083", - "508.133", - "805.951", - "741.911", - "787.407", - "814.734", - "586.809", - "705.719", - "509.447", - "754.414", - "396.731", - "571.483", - "876.553", - "622.446", - "592.091", - "208.936", - "699.231", - "485.684", - "478.759", - "759.7", - "732.166", - "578.348", - "725.917", - "636.426", - "395.256", - "629.917", - "412.509", - "407.896", - "356.698", - "574.517", - "637.929", - "815.661", - "451.029", - "666.585", - "555.278", - "833.896", - "721.942", - "815.903", - "829.474", - "692.578", - "419.871", - "274.841", - "813.308", - "369.834", - "845.304", - "398.373", - "530.058", - "494.768", - "504.594", - "624.929", - "417.892", - "700.174", - "536.052", - "509.164", - "670.419", - "882.217", - "519.876", - "749.73", - "858.777", - "663.934", - "519.216", - "745.576", - "608.677", - "566.493", - "868.262", - "477.66", - "477.687", - "399.209", - "713.773", - "669.081", - "541.609", - "643.057", - "696.829", - "876.68", - "576.853", - "507.955", - "552.486", - "459.268", - "555.193", - "73.7314", - "148.079", - "647.719", - "784.263", - "846.713", - "690.254", - "316.989", - "537.644", - "828.397", - "459.22", - "409.552", - "749.322", - "474.98", - "824.419", - "592.523", - "661.479", - "475.874", - "807.152", - "643.771", - "368.698", - "530.993", - "634.519", - "477.084", - "740.634", - "529.468", - "852.329", - "645.315", - "670.933", - "768.682", - "605.589", - "515.871", - "620.134", - "684.729", - "744.714", - "629.928", - "609.73", - "646.631", - "711.397", - "578.146", - "561.42", - "517.132", - "703.228", - "789.152", - "53.7793", - "774.196", - "662.626", - "815.988", - "512.16", - "227.459", - "465.478", - "755.135", - "486.582", - "885.853", - "505.064", - "637.15", - "603.417", - "899.732", - "773.674", - "571.083", - "710.732", - "657.153", - "830.382", - "666.339", - "38.709", - "415.424", - "723", - "346.06", - "776.828", - "391.641", - "605.274", - "850.823", - "444.413", - "298.46", - "689.698", - "829.202", - "570.143", - "485.284", - "789.182", - "317.41", - "474.187", - "397.816", - "651.276", - "845.699", - "23.0218", - "198.758", - "781.061", - "531.608", - "646.836", - "444.954", - "411.705", - "455.675", - "540.068", - "696.06", - "896.138", - "538.263", - "817.406", - "641.194", - "742.693", - "471.013", - "678.329", - "486.381", - "704.544" - ], - "marker": { - "size": 3 - } - }, - { - "mode": "markers", - "name": " 4096 -  8192", - "type": "scatter3d", - "xsrc": "JohnMaddock:44:85ee94", - "x": [ - "-257.9", - "-57.4891", - "-147.78", - "-228.407", - "-62.0397", - "-755.237", - "-609.083", - "-166.716", - "-159.765", - "-70.8266", - "-205.958", - "-242.851", - "-106.945", - "-275.92", - "-11.0359", - "-188.681", - "-270.695", - "-471.985", - "-910.88", - "-101.319", - "-310.422", - "-517.11", - "-220.8", - "-414.846", - "-176.221", - "-357.208", - "-347.735", - "-599", - "-496.069", - "-218.948", - "-552.428", - "-472.667", - "-351.318", - "-140.501", - "-459.965", - "-581.359", - "-109.105", - "-515.713", - "-681.853", - "-313.009", - "-188.393", - "-373.249", - "-333.881", - "-359.658", - "-163.691", - "-273.843", - "-83.8612", - "-744.119", - "-680.464", - "-482.318", - "-589.068", - "-420.797", - "-726.058", - "-525.991", - "-279.027", - "-499.174", - "-88.6295", - "-256.48", - "-2.24589", - "-404.6", - "-406.201", - "-319.284", - "-551.55", - "-863.7", - "-816.867", - "-118.231", - "-548.798", - "-444.924", - "-330.057", - "-197.289", - "-433.862", - "-613.173", - "-35.9424", - "-304.893", - "-528.819", - "-60.5102", - "-218.69", - "-236.961", - "-211.926", - "-225.597", - "-553.285", - "-205.343", - "-66.3338", - "-71.966", - "-223.299", - "-233.16", - "-262.658", - "-289.62", - "-365.115", - "-320.528", - "-225.756", - "-45.338", - "-229.812", - "-76.972", - "-262.092", - "-63.2687", - "-355.51", - "-25.736", - "-549.112", - "-248.249", - "-379.389", - "-459.825", - "-411.327", - "-909.17", - "-193.921", - "-307.816", - "-290.878", - "-278.521", - "-577.904", - "-135.087", - "-358.058", - "-225.166", - "-388.397", - "-194.994", - "-203.787", - "-293.738", - "-58.6651", - "-556.358", - "-375.743", - "-639.557", - "-651.315", - "-146.448", - "-578.5", - "-368.933", - "-517.57", - "-523.79", - "-367.018", - "-78.9995", - "-433.355", - "-165.468", - "-120.687", - "-278.384", - "-65.122", - "-64.3968", - "-136.053", - "-800.836", - "-326.797", - "-422.258", - "-240.755", - "-190.881", - "-109.498", - "-210.337", - "-50.6577", - "-777.018", - "-265.934", - "-6.41476", - "-697.409", - "-76.6881", - "-172.615", - "-604.827", - "-440.586", - "-253.28", - "-94.0463", - "-676.622", - "-258.31", - "-247.89", - "-398.698", - "-6.12561", - "-276.963", - "-186.18", - "-608.738", - "-523.12", - "-53.3478", - "-111.481", - "-299.416", - "-342.955", - "-104.759", - "-417.137", - "-492.519", - "-373.782", - "-705.107", - "-21.619", - "-542.383", - "-284.427", - "-196.542", - "-384.194", - "-113.719", - "-33.6255", - "-606.225", - "-125.983", - "-574.953", - "-277.15", - "-689.136", - "-148.457", - "-221.577", - "-171.391", - "-753.244", - "-104.955", - "-336.547", - "-288.508", - "-557.849", - "-411.152", - "-215.085", - "-18.9902", - "-95.9332", - "-54.9786", - "-321.801", - "-100.149", - "-431.326", - "-439.045", - "-293.896", - "-108.684", - "-418.49", - "-345.514", - "-171.202", - "-139.955", - "-229.934", - "-357.127", - "-691.053", - "-490.807", - "-521.197", - "-212.788", - "-300.251", - "-159.801", - "-390.838", - "-73.5721", - "-246.395", - "-124.392", - "-451.938", - "-670.841", - "-498.353", - "-250.196", - "-310.57", - "-456.561", - "-560.669", - "-227.148", - "-283.946", - "-159.745", - "-212.7", - "-503.005", - "-194.696", - "-380.349", - "-701.809", - "-367.422", - "-626.448", - "-291.646", - "-558.624", - "-331.803", - "-363.383", - "-49.1892", - "-145.112", - "-308.234", - "-675.737", - "-6.7886", - "-559.686", - "-830.429", - "-342.593", - "-210.373", - "-24.482", - "-352.526", - "-45.6445", - "-127.274", - "-240.854", - "-321.724", - "-257.448", - "-97.8288", - "-184.248", - "-282.927", - "-421.774", - "-293.538", - "-362.143", - "-244.492", - "-314.527", - "-182.25", - "-425.97", - "-200.33", - "-32.2159", - "-416.709", - "-579.892", - "-256.644", - "-595.061", - "-428.642", - "-195.185", - "-367.778", - "-505.219", - "-24.8272", - "-850.371", - "-203.534", - "-445.169", - "-533.297", - "-324.227", - "-482.846", - "-91.2617", - "-779.695", - "-422.427", - "-224.693", - "-551.322", - "-281.325", - "-503.54", - "-293.667", - "-378.305", - "-500.256", - "-365.716", - "-531.03", - "-434.755", - "-347.367", - "-201.646", - "-480.224", - "-395.42", - "-639.665", - "-558.123", - "-382.804", - "-441.643", - "-697.553", - "-396.924", - "-473.487", - "-96.4454", - "-213.341", - "-109.402", - "-368.778", - "-128.884", - "-596.117", - "-567.739", - "-491.478", - "-386.456", - "-556.666", - "-201.059", - "-17.2244", - "-89.4181", - "-57.8157", - "-419.387", - "-593.753", - "-10.2745", - "-414.803", - "-64.0299", - "-72.9862", - "-91.1575", - "-939.233", - "-80.1155", - "-638.947", - "-122.325", - "-575.398", - "-108.364", - "-314.79", - "-210.012", - "-282.481", - "-294.523", - "-365.654", - "-441.181", - "-390.039", - "-251.687", - "-138.368", - "-336.666", - "-485.063", - "-798.276", - "-716.317", - "-587.32", - "-213.378", - "-157.112", - "-334.188", - "-190.537", - "-491.277", - "-473.248", - "-487.375", - "-379.304", - "-14.8557", - "-37.6603", - "-606.465", - "-680.559", - "-198.625", - "-185.544", - "-183.046", - "-584.986", - "-101.016", - "-87.5201", - "-478.726", - "-22.1253", - "-354.392", - "-118.33", - "-87.1031", - "-480.241", - "-397.047", - "-391.795", - "-549.05", - "-508.734", - "-268.744", - "-369.32", - "-475.144", - "-128.908", - "-63.5479", - "-476.238", - "-342.187", - "-224.362", - "-641.323", - "-250.777", - "-373.572", - "-3.96893", - "-28.5849", - "-273.596", - "-405.554", - "-496.273", - "-158.596", - "-300.037", - "-790.334", - "-346.315", - "-402.697", - "-407.446", - "-422.486", - "-665.858", - "-362.404", - "-199.763", - "-676.901", - "-34.6489", - "-282.717", - "-701.277", - "-175.279", - "-337.482", - "-495.56", - "-300.88", - "-65.424", - "-67.5877", - "-357.498", - "-187.362", - "-505.69", - "-356.085", - "-585.156", - "-342.259", - "-146.187", - "-10.5599", - "-193.874", - "-390.027", - "-473.732", - "-487.475", - "-286.687", - "-274.8", - "-968.525", - "-206.233", - "-378.332", - "-95.1798", - "-503.375", - "-186.773", - "-148.863", - "-491.103", - "-380.358", - "-166.029", - "-475.197", - "-397.035", - "-439.861", - "-789.009", - "-96.8329", - "-393.718", - "-95.138", - "-437.842", - "-464.928", - "-764.794", - "-448.523", - "-645.977", - "-293.957", - "-171.927", - "-191.022", - "-152.372", - "-361.051", - "-356.831", - "-402.017", - "-571.602", - "-148.433", - "-303.366", - "-693.819", - "-627.586", - "-53.0881", - "-295.814", - "-141.91", - "-0.558937", - "-290.701", - "-470.919", - "-125.976", - "-367.994", - "-420.076", - "-406.035", - "-61.8927", - "-89.847", - "-25.919", - "-616.921", - "-94.0177", - "-450.649", - "-621.132", - "-21.4452", - "-240.934", - "-70.39", - "-620.081", - "-337.677", - "-516.217", - "-146.307", - "-537.108", - "-496.627", - "-15.5367", - "-160.148", - "-243.502", - "-579.319", - "-237.039", - "-452.359", - "-78.9684", - "-483.783", - "-177.878", - "-428.331", - "-827.274", - "-325.504", - "-44.0145", - "-26.6799", - "-41.827", - "-166.994", - "-95.9609", - "-276.445", - "-189.019", - "-267.826", - "-151.508", - "-145.805", - "-346.323", - "-331.923", - "-468.927", - "-368.843", - "-430.964", - "-204.488", - "-222.459", - "-21.1872", - "-638.463", - "-71.3572", - "-446.316", - "-104.767", - "-66.8769", - "-474.735", - "-708.795", - "-80.157", - "-96.4898", - "-212.577", - "-477.152", - "-106.002", - "-91.8201", - "-289.089", - "-306.274", - "-74.0529", - "-416.978", - "-149.346", - "-180.983", - "-146.309", - "-530.729", - "-41.6348", - "-519.916", - "-182.326", - "-449.763", - "-215.012", - "-505.669", - "-329.634", - "-41.0793", - "-326.991", - "-395.608", - "-240.022", - "-319.28", - "-275.356", - "-518.243", - "-462.959", - "-350.225", - "-42.1041", - "-529.537", - "-965.491", - "-578.181", - "-357.655", - "-114.927", - "-306.911", - "-311.005", - "-422.619", - "-152.334", - "-349.975", - "-615.503", - "-103.349", - "-462.012", - "-120.741", - "-516.87", - "-523.097", - "-279.486", - "-289.119", - "-676.692", - "-697.011", - "-149.186", - "-513.045", - "-447.506", - "-416.605", - "-245.511", - "-212.245", - "-57.268", - "-231.213", - "-143.938", - "-89.6571", - "-678.23", - "-274.238", - "-572.38", - "-283.05", - "-502.504", - "-652.533", - "-499.153", - "-509.16", - "-121.303", - "-535.099", - "-249.043", - "-288.494", - "-165.514", - "-647.755", - "-373.796", - "-167.609", - "-478.161", - "-472.723", - "-466.4", - "-358.946", - "-228.616", - "-30.7638", - "-317.02", - "-243.022", - "-431.219", - "-170.373", - "-363.008", - "-186.3", - "-228.784", - "-292.362", - "-610.357", - "-492.257", - "-521.035", - "-222.608", - "-648.627", - "-355.397", - "-313.535", - "-169.222", - "-81.5348", - "-152.319", - "-404.579", - "-758.231", - "-649.432", - "-513.051", - "-383.777", - "-557.983", - "-613.414", - "-47.8794", - "-197.321", - "-20.6598", - "-363.988", - "-175.775", - "-242.899", - "-307.025", - "-7.09369", - "-419.348", - "-147.038", - "-599.06", - "-154.741", - "-409.27", - "-724.224", - "-41.4164", - "-31.2372", - "-469.29", - "-284.979", - "-413.87", - "-944.457", - "-131.694", - "-14.9964", - "-478.719", - "-336.671", - "-464.751", - "-415.157", - "-500.91", - "-586.984", - "-325.345", - "-76.0441", - "-536.873", - "-278.635", - "-175.707", - "-615.338", - "-336.849", - "-107.604", - "-330.069", - "-26.4197", - "-493.506", - "-87.9432", - "-272.966", - "-713.195", - "-169.403", - "-522.282", - "-395.887", - "-168.633", - "-163.321", - "-648.75", - "-409.77", - "-2.94437", - "-300.041", - "-188.727", - "-721.263", - "-153.616", - "-216.78", - "-184.401", - "-341.512", - "-231.821", - "-412.172", - "-38.6155", - "-389.344", - "-239.657", - "-577.257", - "-621.394", - "-810.588", - "-619.183", - "-702.754", - "-115.158", - "-95.9814", - "-523.462", - "-185.724", - "-456.681", - "-76.5415", - "-121.822", - "-81.4025", - "-358.669", - "-238.345", - "-123.284", - "-478.136", - "-267.644", - "-211.755", - "-145.032", - "-334.782", - "-520.348", - "-409.428", - "-125.614", - "-614.327", - "-279.609", - "-475.326", - "-67.1263", - "-494.486", - "-230.451", - "-531.95", - "-509.078", - "-295.936", - "-50.6365", - "-103.986", - "-487.457", - "-278.548", - "-27.2056", - "-635.572", - "-597.656", - "-151.013", - "-61.0729", - "-375.715", - "-5.06513", - "-623.55", - "-48.1729", - "-162.995", - "-102.779", - "-45.1486", - "-35.3745", - "-606.927", - "-231.932", - "-246.78", - "-70.2172", - "-587.449", - "-188.229", - "-382.759", - "-226.521", - "-337.944", - "-409.052", - "-149.295", - "-583.878", - "-287.951", - "-23.9588", - "-549.626", - "-623.146", - "-445.738", - "-284.711", - "-289.777", - "-759.037", - "-255.56", - "-677.321", - "-308.715", - "-586.485", - "-872.52", - "-48.9708", - "-575.19", - "-65.7898", - "-198.363", - "-339.603", - "-3.15705", - "-473.53", - "-345.42", - "-409.164", - "-622.878", - "-31.3768", - "-627.821", - "-285.132", - "-257.546", - "-388.039", - "-260.253", - "-162.716", - "-200.58", - "-239.459", - "-201.12", - "-583.746", - "-448.08", - "-517.907", - "-516.112", - "-235.791", - "-698.026", - "-558.194", - "-227.325", - "-379.027", - "-369.269", - "-148.589", - "-63.052", - "-169.829", - "-470.832", - "-715.575", - "-313.314", - "-551.879", - "-23.5474", - "-439.315", - "-276.589", - "-347.226", - "-24.1895", - "-466.175", - "-360.995", - "-381.213", - "-670.45", - "-425.925", - "-251.112", - "-426.929", - "-631.144", - "-85.5931", - "-252.157", - "-388.227", - "-408.604", - "-376.445", - "-111.75", - "-36.4977", - "-427.097", - "-70.9976", - "-456.943", - "-498.87", - "-226.106", - "-380.785", - "-176.769", - "-322.583", - "-551.911", - "-217.249", - "-201.712", - "-41.3805", - "-330.669", - "-286.528", - "-53.3844", - "-493.022", - "-60.9791", - "-567.144", - "-372.089", - "-401.486", - "-278.928", - "-404.528", - "-222.652", - "-481.482", - "-427.362", - "-335.139", - "-86.7586", - "-57.6854", - "-210.008", - "-590.005", - "-652.484", - "-126.248", - "-74.362", - "-293.667", - "-180.632", - "-186.389", - "-42.0695", - "-393.879", - "-31.8107", - "-204.004", - "-504.838", - "-259.074", - "-531.431", - "-265.208", - "-195.229", - "-460.118", - "-143.137", - "-293.126", - "-416.709", - "-478.445", - "-468.986", - "-343.869", - "-239.818", - "-483.379", - "-599.585", - "-410.131", - "-44.3109", - "-404.44", - "-74.2855", - "-511.851", - "-157.668", - "-501.546", - "-78.5489", - "-473.794", - "-528.636", - "-118.013", - "-693.612", - "-36.9839", - "-626.392", - "-425.889", - "-34.444", - "-337.901", - "-266.712", - "-504.742", - "-237.701", - "-379.889", - "-449.163", - "-503.283", - "-274.366", - "-176.045", - "-31.8234", - "-278.553", - "-167.16", - "-3.52643", - "-590.957", - "-666.811", - "-571.547", - "-135.542", - "-78.5575", - "-219.931", - "-252.695", - "-253.98", - "-640.5", - "-722.974", - "-695.677", - "-221.287", - "-445.3", - "-572.089", - "-210.75", - "-319.596", - "-232.83", - "-584.394", - "-224.954", - "-427.943", - "-319.887", - "-115.35", - "-29.3557", - "-626", - "-535.184", - "-408.596", - "-287.674", - "-325.128", - "-246.328", - "-674.737", - "-348.859", - "-479.144", - "-287.539", - "-336.074", - "-722.315", - "-2.35406", - "-186.33", - "-279.819", - "-291.936", - "-200.627", - "-843.528", - "-161.357", - "-493.112", - "-375.696", - "-483.149", - "-563.599", - "-268.788", - "-711.749", - "-46.1292", - "-752.523", - "-22.8969", - "-39.364", - "-372.285", - "-366.65", - "-511.566", - "-364.277", - "-113.81", - "-316.266", - "-349.162", - "-83.9282", - "-413.209", - "-152.63", - "-151.667", - "-56.7791", - "-326.136", - "-450.237", - "-147.174", - "-664.368", - "-321.928", - "-294.373", - "-523.438", - "-138.203", - "-59.5207", - "-513.894", - "-602.726", - "-307.378", - "-119.612", - "-23.401", - "-270.691", - "-422.886", - "-724.496", - "-500.464", - "-463.822", - "-415.294", - "-690.573", - "-113.296", - "-124.202", - "-450.35", - "-509.018", - "-127.479", - "-144.988", - "-682.99", - "-195.629", - "-349.07", - "-208.323", - "-491.799", - "-328.78", - "-451.7", - "-597.62", - "-473.443", - "-234.128", - "-454.864", - "-289.29", - "-522.456", - "-149.984", - "-289.767", - "-261.153", - "-644.145", - "-251.49", - "-58.2139", - "-363.204", - "-429.74", - "-359.562", - "-546.297", - "-36.1434", - "-38.0317", - "-537.555", - "-182.499", - "-432.15", - "-187.005", - "-421.562", - "-195.672", - "-8.0011", - "-140.012", - "-85.1887", - "-462.122", - "-560.68", - "-19.7875", - "-169.038", - "-175.315", - "-574.362", - "-666.396", - "-473.076", - "-300.894", - "-187.738", - "-272.023", - "-343.678", - "-114.507", - "-146.924", - "-444.659", - "-772.797", - "-531.463", - "-553.45", - "-490.396", - "-118.386", - "-62.4878", - "-704.27", - "-727.208", - "-510.555", - "-257.966", - "-39.2388", - "-163.008", - "-382.581", - "-352.992", - "-360.611", - "-562.452", - "-157.724", - "-178.103", - "-695.483", - "-330.338", - "-406.211", - "-953.057", - "-75.1658", - "-224.216", - "-592.213", - "-115.941", - "-574.726", - "-204.049", - "-633.846", - "-598.28", - "-489.075", - "-67.6065", - "-463.164", - "-549.51", - "-648.767", - "-400.496", - "-364.985", - "-361.767", - "-601.616", - "-254.536", - "-610.518", - "-13.005", - "-144.06", - "-71.058", - "-570.172", - "-377.125", - "-444.037", - "-630.52", - "-169.767", - "-731.655", - "-575.789", - "-131.395", - "-132.414", - "-319.43", - "-664.191", - "-360.145", - "-673.201", - "-570.934", - "-282.407", - "-962.189", - "-101.159", - "-33.7613", - "-471.038", - "-654.905", - "-221.586", - "-481.832", - "-133.205", - "-238.29", - "-379.194", - "-103.426", - "-494.891", - "-220.576", - "-344.738", - "-55.6208", - "-316.473", - "-78.349", - "-589.833", - "-479.996", - "-111.12", - "-793.55", - "-74.5638", - "-461.471", - "-92.9367", - "-370.253", - "-453.613", - "-591.817", - "-180.697", - "-58.9385", - "-339.421", - "-57.7337", - "-280.522", - "-0.000355532", - "-325.839", - "-130.505", - "-147.419", - "-271.261", - "-96.9238", - "-412.834", - "-224.699", - "-402.923", - "-235.92", - "-107.118", - "-706.326", - "-320.543", - "-215.906", - "-114.569", - "-73.0834", - "-61.6713", - "-228.307", - "-292.015", - "-216.975", - "-623.713", - "-304.757", - "-253.952", - "-359.291", - "-276.892", - "-327.035", - "-284.709", - "-792.446", - "-362.001", - "-509.754", - "-141.212", - "-601.993", - "-45.7345", - "-171.949", - "-387.855", - "-129.063", - "-335.777", - "-940.228", - "-552.45", - "-375.675", - "-434.367", - "-2.31887", - "-139.32", - "-234.942", - "-53.7495", - "-138.225", - "-330.044", - "-16.518", - "-321.661", - "-468.583", - "-664.659", - "-224.962", - "-587.487", - "-416.599", - "-183.275", - "-3.38542", - "-264.805", - "-273.816", - "-616.813", - "-71.569", - "-289.697", - "-414.453", - "-456.864", - "-544.852", - "-619.281", - "-366.346", - "-774.875", - "-360.974", - "-89.5671", - "-339.361", - "-59.4509", - "-57.2949", - "-555.702", - "-201.023", - "-37.7763", - "-31.4278", - "-637.096", - "-429.94", - "-117.921", - "-213.075", - "-531.167", - "-627.015", - "-677.048", - "-201.374", - "-460.191", - "-101.808", - "-52.8908", - "-230.627", - "-430.968", - "-430.997", - "-460.556", - "-72.4066", - "-176.433", - "-292.365", - "-526.123", - "-244.574", - "-583.932", - "-677.658", - "-304.73", - "-233.598", - "-273.709", - "-372.068", - "-156.113", - "-283.992", - "-453.347", - "-504.463", - "-366.525", - "-540.83", - "-161.616", - "-341.535", - "-625.545", - "-115.735", - "-459.316", - "-230.485", - "-180.114", - "-576.432", - "-376.995", - "-3.33724", - "-318.205", - "-142.523", - "-373.675", - "-450.581", - "-264.063", - "-183.102", - "-120.037", - "-204.519", - "-393.765", - "-177.159", - "-562.261", - "-619.323", - "-526.57", - "-371.471", - "-190.784", - "-387.332", - "-753.078", - "-585.803", - "-4.32494", - "-477.04", - "-380.054", - "-0.740255", - "-19.9141", - "-397.458", - "-30.0533", - "-521.403", - "-405.441", - "-345.399", - "-322.238", - "-410.071", - "-217.67", - "-368.831", - "-214.012", - "-413.646", - "-362.288", - "-169.216", - "-207.964", - "-847.566", - "-246.492", - "-223.741", - "-39.168", - "-299.073", - "-243.87", - "-541.467", - "-739.051", - "-203.886", - "-4.89215", - "-366.579", - "-416.032", - "-285.031", - "-643.409", - "-0.648811", - "-89.023", - "-481.27", - "-198.84", - "-172.398", - "-0.430254", - "-440.092", - "-431.992", - "-371.73", - "-287.127", - "-11.3937", - "-603.248", - "-367.444", - "-507.992", - "-485.382", - "-579.737", - "-276.454", - "-269.255", - "-420.418", - "-535.772", - "-176.456", - "-533.168", - "-380.743", - "-542.835", - "-250.91", - "-149.312", - "-795.658", - "-362.678", - "-141.058", - "-506.142", - "-603.066", - "-219.37", - "-594.152", - "-538.315", - "-167.876", - "-366.496", - "-349.438", - "-314.594", - "-374.639", - "-83.4255", - "-382.385", - "-106.126", - "-245.298", - "-126.328", - "-186.798", - "-400.756", - "-392.949", - "-294.849", - "-740.809", - "-82.0253", - "-215.995", - "-85.9007", - "-698.203", - "-0.0466798", - "-388.908", - "-263.072", - "-564.911", - "-571.821", - "-417.393", - "-350.151", - "-3.62889", - "-297.412", - "-655.382", - "-426.027", - "-386.709", - "-453.844", - "-517.275", - "-649.056", - "-655.441", - "-253.314", - "-650.13", - "-335.674", - "-586.665", - "-182.636", - "-428.742", - "-97.4241", - "-509.155", - "-214.143", - "-310.353", - "-418.958", - "-206.135", - "-332.51", - "-525.623", - "-140.691", - "-290.995", - "-159.232", - "-337.926", - "-378.843", - "-606.851", - "-488.134", - "-143.737", - "-409.043", - "-17.7177", - "-466.573", - "-409.042", - "-300.577", - "-176.005", - "-131.016", - "-699.897", - "-119.505", - "-498.221", - "-474.347", - "-373.829", - "-617.299", - "-441.202", - "-266.372", - "-581.231", - "-659.008", - "-348.284", - "-285.593", - "-268.785", - "-405.875", - "-209.97", - "-89.0759", - "-12.8914", - "-349.48", - "-144.577", - "-96.9577", - "-168.638", - "-352.145", - "-681.11", - "-317.163", - "-26.5489", - "-329.615", - "-127.374", - "-216", - "-131.775", - "-177.744", - "-474.366", - "-713.06", - "-535.072", - "-280.806", - "-128.989", - "-141.373", - "-7.55797", - "-404.178", - "-9.86946", - "-420.008", - "-703.299", - "-52.5946", - "-729.433", - "-62.6262", - "-345.174", - "-216.448", - "-550.646", - "-359.17", - "-833.648", - "-225.713", - "-400.926", - "-556.674", - "-83.9952", - "-426.414", - "-427.459", - "-520.78", - "-701.058", - "-365.872", - "-72.542", - "-155.38", - "-28.0475", - "-174.143", - "-296.652", - "-774.826", - "-225.197", - "-117.914", - "-315.01", - "-347.825", - "-445.119", - "-84.629", - "-645.96", - "-184.754", - "-603.957", - "-519.492", - "-319.192", - "-266.377", - "-570.431", - "-169.087", - "-576.762", - "-420.97", - "-394.205", - "-544.345", - "-30.2551", - "-609.875", - "-639.647", - "-279.68", - "-279.899", - "-155.617", - "-551.36", - "-347.857", - "-456.487", - "-368.39", - "-44.5887", - "-553.482", - "-322.26", - "-497.961", - "-298.696", - "-444.978", - "-122.119", - "-582.577", - "-288.918", - "-39.2139", - "-490.515", - "-381.49", - "-211.391", - "-21.9768", - "-46.1462", - "-121.851", - "-66.4156", - "-248.861", - "-249.096", - "-194.558", - "-349.461", - "-99.9324", - "-376.88", - "-348.175", - "-19.6485", - "-225.576", - "-529.966", - "-523.128", - "-164.316", - "-397.71", - "-80.1035", - "-952.306", - "-348.154", - "-380.072", - "-251.002", - "-285.84", - "-338.232", - "-587.351", - "-413.684", - "-544.063", - "-328.074", - "-300.396", - "-630.344", - "-539.668", - "-760.831", - "-23.7231", - "-105.743", - "-713.944", - "-581.642", - "-22.906", - "-118.619", - "-0.586452", - "-703.395", - "-351.979", - "-412.981", - "-639.307", - "-770.85", - "-17.9859", - "-57.7977", - "-353.559", - "-452.361", - "-118.003", - "-588.676", - "-428.377", - "-589.213", - "-631.509", - "-4.41209", - "-87.9995", - "-368.326", - "-275.429", - "-594.068", - "-17.9461", - "-92.2019", - "-406.699", - "-149.706", - "-154.633", - "-206.557", - "-59.3107", - "-227.279", - "-29.2851", - "-163.294", - "-91.2739", - "-379.911", - "-406.767", - "-225.503", - "-626.221", - "-566.03", - "-582.984", - "-414.129", - "-646.03", - "-8.68862", - "-599.072", - "-312.644", - "-586.166", - "-157.343", - "-60.1748", - "-110.878", - "-237.158", - "-500.279", - "-694.015", - "-942.222", - "-410.705", - "-557.152", - "-421.73", - "-550.255", - "-45.3675", - "-361.45", - "-356.349", - "-415.717", - "-241.927", - "-100.604", - "-488.522", - "-135.039", - "-779.05", - "-310.292", - "-379.005", - "-790.873", - "-614.863", - "-373.628", - "-677.746", - "-505.818", - "-537.504", - "-699.259", - "-438.481", - "-162.6", - "-788.549", - "-271.977", - "-417.716", - "-151.461", - "-393.468", - "-688.779", - "-382.086", - "-154.518", - "-650.553", - "-699.287", - "-207.611", - "-803.038", - "-529.08", - "-154.785", - "-559.25", - "-756.656", - "-266.121", - "-662.002", - "-256.059", - "-337.786", - "-69.2093", - "-84.274", - "-605.584", - "-344.592", - "-510.289", - "-160.47", - "-459.147", - "-419.698", - "-204.56", - "-581.104", - "-497.284", - "-371.402", - "-487.669", - "-579.626", - "-403.792" - ], - "ysrc": "JohnMaddock:44:db40db", - "y": [ - "-459.563", - "-647.393", - "-907.821", - "-732.952", - "-475.09", - "-963.375", - "-898.326", - "-848.369", - "-671.166", - "-893.569", - "-752.983", - "-899.985", - "-539.655", - "-607.148", - "-744.578", - "-923.824", - "-758.848", - "-985.053", - "-559.693", - "-769.828", - "-693.746", - "-644.601", - "-711.032", - "-938.629", - "-726.712", - "-845.084", - "-580.238", - "-679.191", - "-806.101", - "-457.47", - "-963.647", - "-718.188", - "-688.92", - "-758.772", - "-950.624", - "-945.624", - "-955.99", - "-893.634", - "-909.565", - "-540.465", - "-538.091", - "-761.533", - "-597.417", - "-826.146", - "-582.595", - "-583.856", - "-850.744", - "-245.2", - "-949.963", - "-979.319", - "-944.831", - "-496.582", - "-906.851", - "-936.984", - "-656.864", - "-836.641", - "-990.428", - "-975.381", - "-554.991", - "-37.1863", - "-748.846", - "-960.718", - "-811.002", - "-640.132", - "-911.496", - "-846.837", - "-862.555", - "-687.315", - "-950.037", - "-742.007", - "-659.335", - "-896.625", - "-502.861", - "-389.217", - "-678.025", - "-846.212", - "-770.675", - "-376.339", - "-856.624", - "-992.575", - "-988.324", - "-976.184", - "-991.241", - "-695.474", - "-646.254", - "-525.244", - "-897.592", - "-918.937", - "-982.764", - "-763.487", - "-939.605", - "-573.792", - "-496.982", - "-830.449", - "-633.932", - "-849.058", - "-978.043", - "-549.101", - "-637.423", - "-677.747", - "-877.674", - "-670.38", - "-466.009", - "-898.008", - "-791.224", - "-608.455", - "-895.26", - "-839.54", - "-704.419", - "-668.798", - "-806.443", - "-668.285", - "-939.468", - "-528.776", - "-981.684", - "-513.365", - "-821.651", - "-682.312", - "-774.323", - "-758.207", - "-12.2981", - "-574.353", - "-913.967", - "-706.083", - "-996.187", - "-792.714", - "-895.027", - "-537.409", - "-914.347", - "-560.71", - "-843.14", - "-824.853", - "-952.481", - "-976.95", - "-904.582", - "-725.998", - "-596.894", - "-971.939", - "-871.167", - "-513.455", - "-617.821", - "-560.403", - "-685.456", - "-144.585", - "-984.858", - "-854.674", - "-763.922", - "-742.654", - "-420.328", - "-984.387", - "-776.885", - "-882.811", - "-750.168", - "-762.937", - "-677.448", - "-781.548", - "-468.65", - "-809.008", - "-587.578", - "-937.957", - "-762.491", - "-900.166", - "-969.26", - "-620.61", - "-695.699", - "-842.438", - "-712.927", - "-978.345", - "-923.219", - "-992.269", - "-814.479", - "-620.761", - "-723.094", - "-913.471", - "-974.42", - "-649.794", - "-889.575", - "-853.348", - "-826.367", - "-747.891", - "-923.264", - "-656.074", - "-982.094", - "-865.514", - "-787.901", - "-902.546", - "-865.69", - "-559.059", - "-865.75", - "-935.366", - "-810.464", - "-677.885", - "-949.379", - "-531.757", - "-985.536", - "-767.928", - "-995.316", - "-805.733", - "-618.49", - "-964.581", - "-806.63", - "-537.896", - "-785.321", - "-664.154", - "-619.3", - "-932.342", - "-871.358", - "-867.225", - "-504.932", - "-738.739", - "-715.751", - "-495.256", - "-783.001", - "-617.967", - "-872.368", - "-854.653", - "-696.061", - "-672.068", - "-653.494", - "-816.015", - "-933.7", - "-572.271", - "-866.601", - "-835.121", - "-774.509", - "-436.828", - "-750.731", - "-837.876", - "-624.425", - "-712.355", - "-848.266", - "-769.944", - "-998.725", - "-771.398", - "-842.498", - "-730.383", - "-871.698", - "-868.144", - "-572.424", - "-888.318", - "-598.998", - "-965.555", - "-971.999", - "-484.315", - "-751.645", - "-627.074", - "-437.672", - "-929.691", - "-469.435", - "-456.538", - "-389.864", - "-940.578", - "-847.705", - "-999.685", - "-753.37", - "-959.756", - "-964.837", - "-730.641", - "-43.9051", - "-827.543", - "-750.783", - "-999.898", - "-783.575", - "-410.44", - "-723.354", - "-656.494", - "-534.933", - "-963.253", - "-719.037", - "-982.324", - "-812.376", - "-816.578", - "-992.478", - "-654.948", - "-175.365", - "-907.64", - "-769.005", - "-435.923", - "-691.517", - "-658.874", - "-567.543", - "-902.687", - "-714.565", - "-907.877", - "-786.337", - "-492.515", - "-992.741", - "-783.591", - "-700.615", - "-557.07", - "-764.916", - "-882.034", - "-423.085", - "-649.065", - "-734.154", - "-897.101", - "-840.416", - "-660.143", - "-948.034", - "-909.399", - "-25.4195", - "-981.211", - "-875.168", - "-982.331", - "-572.941", - "-936.648", - "-952.689", - "-816.84", - "-713.752", - "-518.26", - "-805.215", - "-782.563", - "-911.748", - "-948.234", - "-874.628", - "-747.326", - "-905.755", - "-664.544", - "-945.887", - "-801.439", - "-767.437", - "-766.957", - "-595.376", - "-924.939", - "-700.489", - "-541.832", - "-794.643", - "-496.031", - "-913.119", - "-822.488", - "-800.934", - "-934.305", - "-413", - "-882.615", - "-470.583", - "-838.518", - "-983.046", - "-937.648", - "-955.168", - "-985.772", - "-975.881", - "-720.739", - "-817.753", - "-887.454", - "-990.829", - "-914.614", - "-870.269", - "-618.401", - "-572.94", - "-936.107", - "-593.186", - "-577.01", - "-697.034", - "-918.761", - "-702.571", - "-978.056", - "-886.752", - "-659.195", - "-953.873", - "-152.531", - "-954.885", - "-945.803", - "-909.273", - "-620.291", - "-907.494", - "-607.073", - "-559.742", - "-653.887", - "-940.348", - "-777.38", - "-956.907", - "-964.35", - "-799.762", - "-714.848", - "-966.3", - "-695.363", - "-490.079", - "-998.99", - "-944.749", - "-811.017", - "-620.651", - "-757.63", - "-710.156", - "-861.667", - "-665.743", - "-995.006", - "-877", - "-860.648", - "-475.723", - "-489.048", - "-597.595", - "-621.846", - "-779.257", - "-908.187", - "-809.442", - "-673.272", - "-483.825", - "-852.75", - "-910.168", - "-758.32", - "-732.136", - "-955.687", - "-746.43", - "-438.873", - "-901.229", - "-955.61", - "-773.681", - "-887.263", - "-767.505", - "-910.546", - "-490.816", - "-420.727", - "-744.042", - "-889.603", - "-865.644", - "-367.695", - "-661.619", - "-948.821", - "-598.303", - "-844.046", - "-807.618", - "-626.661", - "-995.191", - "-437.677", - "-673.471", - "-788.005", - "-952.982", - "-551.872", - "-974.709", - "-790.797", - "-955.264", - "-443.999", - "-818.053", - "-864.764", - "-829.239", - "-709.228", - "-506.171", - "-804.265", - "-761.01", - "-799.817", - "-985.433", - "-505.746", - "-907.924", - "-923.802", - "-855.09", - "-695.529", - "-989.827", - "-922.221", - "-771.41", - "-615.912", - "-902.587", - "-821.7", - "-550.396", - "-834.274", - "-611.441", - "-585.035", - "-950.784", - "-970.805", - "-792.904", - "-985.389", - "-707.873", - "-590.497", - "-637.893", - "-841.71", - "-917.366", - "-664.152", - "-615.563", - "-992.101", - "-792.655", - "-830.011", - "-737.731", - "-564.565", - "-992.376", - "-459.444", - "-799.506", - "-972.723", - "-982.94", - "-686.1", - "-873.02", - "-834.511", - "-756.6", - "-970.915", - "-598.648", - "-686.256", - "-676.266", - "-958.489", - "-947.798", - "-820.714", - "-829.368", - "-541.09", - "-399.997", - "-675.775", - "-874.673", - "-829.22", - "-483.799", - "-792.003", - "-666.472", - "-911.942", - "-714.065", - "-569.402", - "-4.05874", - "-583.238", - "-753.756", - "-714.758", - "-52.3944", - "-944.143", - "-909.416", - "-580.836", - "-832.018", - "-787.809", - "-437.476", - "-744.855", - "-966.883", - "-948.306", - "-514.79", - "-715.807", - "-508.077", - "-555.083", - "-735.224", - "-912.612", - "-931.888", - "-779.007", - "-676.774", - "-782.021", - "-708.298", - "-717.646", - "-982.68", - "-720.154", - "-754.333", - "-624.931", - "-987.028", - "-840.931", - "-855.401", - "-47.7364", - "-965.29", - "-962.387", - "-767.884", - "-873.683", - "-626.356", - "-787.02", - "-746.957", - "-845.909", - "-830.771", - "-993.995", - "-746.756", - "-934.493", - "-958.918", - "-872.928", - "-868.709", - "-872.001", - "-662.458", - "-694.797", - "-433.356", - "-719.673", - "-953.003", - "-718.435", - "-545.166", - "-791.975", - "-914.609", - "-917.148", - "-651.757", - "-955.397", - "-949.545", - "-764.284", - "-727.502", - "-636.081", - "-905.57", - "-747.9", - "-818.287", - "-682.752", - "-847.505", - "-749.827", - "-840.41", - "-999.986", - "-728.906", - "-668.181", - "-892.228", - "-986.239", - "-953.238", - "-743.671", - "-761.033", - "-942.237", - "-534.926", - "-820.808", - "-756.35", - "-694.616", - "-734.434", - "-728.074", - "-786.896", - "-860.302", - "-935.528", - "-861.681", - "-851.281", - "-731.464", - "-831.064", - "-913.836", - "-964.338", - "-446.436", - "-747.434", - "-743.963", - "-590.98", - "-649.965", - "-787.345", - "-995.106", - "-818.469", - "-635.63", - "-758.078", - "-613.882", - "-976.572", - "-851.643", - "-984.494", - "-70.7371", - "-803.883", - "-637.524", - "-883.009", - "-618.783", - "-902.415", - "-251.704", - "-976.424", - "-683.909", - "-414.662", - "-625.895", - "-834.576", - "-675.153", - "-958.826", - "-930.75", - "-782.871", - "-646.939", - "-999.453", - "-843.858", - "-893.29", - "-872.178", - "-713.213", - "-718.948", - "-691.869", - "-983.417", - "-384.095", - "-598.869", - "-90.7542", - "-814.324", - "-966.585", - "-831.119", - "-501.729", - "-944.137", - "-818.563", - "-822.023", - "-849.913", - "-672.282", - "-698.659", - "-616.992", - "-730.842", - "-449.523", - "-648.88", - "-923.558", - "-992.185", - "-688.7", - "-886.89", - "-865.288", - "-882.948", - "-916.067", - "-661.62", - "-971.584", - "-552.859", - "-863.23", - "-841.728", - "-910.526", - "-837.186", - "-992.925", - "-907.898", - "-582.101", - "-796.548", - "-907.858", - "-648.452", - "-746.819", - "-748.416", - "-667.033", - "-802.779", - "-932.803", - "-497.437", - "-964.699", - "-503.963", - "-977.285", - "-809.227", - "-752.941", - "-800.855", - "-754.24", - "-526.604", - "-918.073", - "-743.515", - "-785.98", - "-924.256", - "-673.254", - "-987.344", - "-943.867", - "-808.995", - "-867.756", - "-957.477", - "-863.359", - "-862.102", - "-972.152", - "-733.386", - "-936.45", - "-853.841", - "-953.149", - "-803.58", - "-895.036", - "-876.408", - "-927.779", - "-578.135", - "-699.247", - "-524.087", - "-599.768", - "-954.184", - "-858.586", - "-954.514", - "-980.376", - "-663.781", - "-112.622", - "-625.367", - "-878.332", - "-669.882", - "-608.638", - "-724.964", - "-997.207", - "-782.026", - "-699.652", - "-791.175", - "-975.096", - "-487.963", - "-891.666", - "-833.526", - "-741.399", - "-0.806104", - "-833.328", - "-893.22", - "-957.563", - "-963.143", - "-964.675", - "-20.7196", - "-490.63", - "-725.888", - "-766.214", - "-761.172", - "-856.933", - "-803.151", - "-937.622", - "-870.33", - "-929.47", - "-506.343", - "-654.258", - "-784.494", - "-806.804", - "-538.003", - "-948.045", - "-654.691", - "-719.349", - "-709.14", - "-896.792", - "-711.667", - "-961.92", - "-808.714", - "-883.515", - "-667.156", - "-813.635", - "-749.173", - "-955.429", - "-748.524", - "-642.686", - "-845.057", - "-734.137", - "-575.922", - "-791.59", - "-781.481", - "-960.429", - "-833.313", - "-869.306", - "-810.205", - "-783.214", - "-803.551", - "-730.521", - "-933.044", - "-583.778", - "-429.843", - "-446.018", - "-701.091", - "-714.778", - "-950.353", - "-958.144", - "-758.031", - "-925.623", - "-577.883", - "-934.281", - "-329.117", - "-945.222", - "-691.815", - "-743.679", - "-798.24", - "-906.574", - "-992.782", - "-610.066", - "-758.312", - "-943.446", - "-970.51", - "-713.238", - "-848.006", - "-747.764", - "-974.498", - "-999.158", - "-809.477", - "-879.431", - "-555.331", - "-496.808", - "-773.853", - "-599.359", - "-844.794", - "-950.864", - "-949.69", - "-837.582", - "-912.114", - "-988.163", - "-976.23", - "-856.091", - "-979.763", - "-969.692", - "-660.526", - "-784.408", - "-515.753", - "-838.806", - "-865.706", - "-797.695", - "-900.098", - "-426.645", - "-696.029", - "-599.386", - "-908.651", - "-796.674", - "-986.054", - "-883.999", - "-802.908", - "-932.67", - "-719.011", - "-702.587", - "-829.153", - "-547.836", - "-827.251", - "-754.398", - "-776.449", - "-957.376", - "-693.831", - "-926.33", - "-986.039", - "-768.415", - "-816.678", - "-908.228", - "-893.497", - "-820.777", - "-925.861", - "-865.702", - "-875.578", - "-658.396", - "-995.952", - "-919.961", - "-972.658", - "-989.364", - "-656.623", - "-804.137", - "-841.058", - "-652.557", - "-811.272", - "-854.668", - "-872.187", - "-788.285", - "-816.99", - "-341.001", - "-807.147", - "-645.823", - "-979.615", - "-699.732", - "-854.28", - "-855.937", - "-874.243", - "-885.272", - "-969.107", - "-684.286", - "-840.684", - "-913.417", - "-781.593", - "-708.347", - "-780.18", - "-908.883", - "-847.894", - "-665.987", - "-964.915", - "-882.933", - "-658.826", - "-680.406", - "-910.108", - "-991.751", - "-778.18", - "-738.599", - "-776.852", - "-986.647", - "-744.648", - "-758.395", - "-893.758", - "-697.309", - "-634.422", - "-990.652", - "-687.302", - "-959.011", - "-922.278", - "-822.467", - "-481.228", - "-884.522", - "-836.176", - "-699.952", - "-742.38", - "-918.381", - "-926.02", - "-760.778", - "-724.379", - "-809.057", - "-496.231", - "-865.414", - "-937.86", - "-559.179", - "-985.611", - "-826.595", - "-895.993", - "-783.482", - "-941.291", - "-549.49", - "-793.782", - "-516.909", - "-536.867", - "-197.591", - "-770.724", - "-807.782", - "-896.783", - "-872.583", - "-841.879", - "-765.523", - "-815.273", - "-458.509", - "-780.204", - "-818.157", - "-723.523", - "-927.905", - "-705.002", - "-629.565", - "-196.839", - "-976.888", - "-515.977", - "-808.864", - "-957.771", - "-877.837", - "-462.213", - "-954.198", - "-913.976", - "-891.047", - "-660.959", - "-819.993", - "-982.051", - "-705.694", - "-734.956", - "-742.037", - "-783.807", - "-945.509", - "-868.916", - "-930.788", - "-749.715", - "-842.298", - "-665.341", - "-488.332", - "-732.051", - "-846.383", - "-996.084", - "-755.396", - "-825.76", - "-697.613", - "-528.297", - "-840.289", - "-803.727", - "-660.074", - "-910.313", - "-815.735", - "-892.31", - "-652.449", - "-951.804", - "-643.32", - "-912.946", - "-590.458", - "-881.108", - "-730.694", - "-735.591", - "-859.182", - "-624.123", - "-626.762", - "-867.512", - "-944.753", - "-760.639", - "-905.33", - "-891.17", - "-884.122", - "-929.705", - "-754.83", - "-653.292", - "-765.211", - "-430.139", - "-829.313", - "-696.093", - "-723.546", - "-840.793", - "-939.679", - "-681.999", - "-824.061", - "-972.946", - "-934.991", - "-795.969", - "-920.161", - "-964.509", - "-850.135", - "-901.338", - "-937.497", - "-972.26", - "-884.98", - "-808.744", - "-833.962", - "-673.584", - "-968.971", - "-896.648", - "-865.683", - "-918.377", - "-874.684", - "-789.833", - "-996.782", - "-675.412", - "-965.915", - "-910.932", - "-953.996", - "-712.304", - "-890.711", - "-815.588", - "-921.197", - "-780.696", - "-698.942", - "-857.365", - "-987.275", - "-959.642", - "-757.083", - "-968.654", - "-734.74", - "-682.655", - "-954.36", - "-770.919", - "-886.024", - "-613.943", - "-956.192", - "-721.712", - "-890.53", - "-496.976", - "-993.738", - "-895.717", - "-916.414", - "-653.398", - "-792.985", - "-927.746", - "-784.616", - "-854.51", - "-904.003", - "-959.143", - "-689.42", - "-842.738", - "-942.005", - "-743.548", - "-785.638", - "-905.073", - "-851.84", - "-718.201", - "-602.141", - "-625.553", - "-825.254", - "-916.663", - "-941.671", - "-924.547", - "-844.446", - "-846.612", - "-919.847", - "-964.283", - "-497.95", - "-992.438", - "-692.413", - "-715.414", - "-877.584", - "-991.994", - "-867.946", - "-791.669", - "-890.895", - "-734.636", - "-945.57", - "-964.488", - "-496.252", - "-912.922", - "-649.943", - "-841.108", - "-771.327", - "-751.519", - "-733.489", - "-758.536", - "-754.911", - "-960.082", - "-832.818", - "-985.959", - "-831.214", - "-734.896", - "-616.011", - "-936.57", - "-683.114", - "-855.819", - "-903.103", - "-798.647", - "-832.709", - "-788.758", - "-503.206", - "-711.858", - "-844.04", - "-733.641", - "-758.995", - "-758.25", - "-783.808", - "-715.185", - "-998.612", - "-919.108", - "-856.951", - "-795.108", - "-725.335", - "-897.001", - "-833.497", - "-506.169", - "-861.34", - "-851.381", - "-909.296", - "-787.514", - "-787.334", - "-686.827", - "-963.217", - "-963.381", - "-714.981", - "-932.079", - "-950.609", - "-997.929", - "-702.978", - "-822.173", - "-916.003", - "-931.877", - "-584.187", - "-757.652", - "-961.602", - "-898.502", - "-798.301", - "-831.486", - "-977.596", - "-783.802", - "-804.746", - "-820.761", - "-854.346", - "-363.087", - "-903.941", - "-957.915", - "-706.011", - "-986.434", - "-503.375", - "-993.223", - "-425.667", - "-967.928", - "-720.055", - "-0.787061", - "-739.737", - "-672.947", - "-651.313", - "-981.716", - "-904.002", - "-845.572", - "-898.159", - "-860.076", - "-801.561", - "-770.997", - "-938.729", - "-565.919", - "-940.628", - "-793.571", - "-993.921", - "-547.453", - "-882.459", - "-985.565", - "-975.995", - "-933.133", - "-747.483", - "-844.524", - "-817.912", - "-993.39", - "-625.493", - "-843.702", - "-653.088", - "-788.593", - "-851.839", - "-873.445", - "-837.558", - "-902.867", - "-946.677", - "-797.637", - "-690.771", - "-729.592", - "-766.619", - "-900.817", - "-796.058", - "-923.828", - "-779.083", - "-981.504", - "-930.12", - "-924.87", - "-405.023", - "-882.567", - "-981.842", - "-741.199", - "-475.087", - "-733.706", - "-879.304", - "-801.377", - "-969.907", - "-737.498", - "-814.947", - "-496.766", - "-766.059", - "-1.18394", - "-610.87", - "-8.29165", - "-675.392", - "-858.053", - "-705.533", - "-884.461", - "-991.127", - "-863.726", - "-733.747", - "-965.806", - "-708.312", - "-981.405", - "-816.337", - "-939.822", - "-787.464", - "-768.096", - "-968.669", - "-518.002", - "-936.821", - "-249.343", - "-817.623", - "-978.557", - "-740.547", - "-917.68", - "-957.472", - "-961.773", - "-666.406", - "-918.909", - "-921.168", - "-680.885", - "-867.812", - "-655.379", - "-846.239", - "-852.381", - "-791.484", - "-670.335", - "-744.848", - "-814.945", - "-969.855", - "-911.485", - "-498.783", - "-997.594", - "-727.961", - "-990.418", - "-860.835", - "-822.191", - "-614.743", - "-673.363", - "-734.3", - "-946.415", - "-505.843", - "-723.451", - "-806.628", - "-848.826", - "-806.081", - "-835.751", - "-738.89", - "-765.368", - "-820.069", - "-160.29", - "-931.546", - "-915.018", - "-755.881", - "-931.513", - "-781.606", - "-863.295", - "-829.44", - "-871.284", - "-956.502", - "-745.247", - "-987.051", - "-765.912", - "-719.146", - "-806.408", - "-775.19", - "-948.754", - "-804.251", - "-878.616", - "-479.162", - "-797.035", - "-989.114", - "-675.566", - "-741.426", - "-894.392", - "-988.384", - "-749.516", - "-750.314", - "-868.212", - "-775.641", - "-750.512", - "-864.62", - "-785.141", - "-936.998", - "-738.459", - "-382.002", - "-772.282", - "-895.613", - "-801.431", - "-691.422", - "-962.712", - "-964.414", - "-881.294", - "-904.215", - "-824.379", - "-750.119", - "-671.494", - "-701.9", - "-958.662", - "-886.566", - "-923.412", - "-976.373", - "-891.332", - "-891.392", - "-812.359", - "-778.568", - "-656.858", - "-741.971", - "-920.679", - "-879.213", - "-941.673", - "-773.831", - "-968.179", - "-821.939", - "-665.228", - "-759.123", - "-745.358", - "-823.105", - "-814.107", - "-910.916", - "-326.902", - "-936.887", - "-77.6078", - "-829.328", - "-805.23", - "-676.666", - "-861.417", - "-850.243", - "-809.323", - "-778.051", - "-944.933", - "-872.033", - "-994.044", - "-852.794", - "-764.065", - "-980.172", - "-987.005", - "-845.23", - "-789.878", - "-606.508", - "-939.204", - "-645.161", - "-975.761", - "-986.351", - "-820.612", - "-942.282", - "-867.426", - "-760.764", - "-837.975", - "-979.4", - "-776.517", - "-760.897", - "-983.402", - "-983.104", - "-968.691", - "-461.888", - "-901.966", - "-888.965", - "-925.464", - "-559.589", - "-4.66443", - "-765.665", - "-909.51", - "-888.768", - "-903.614", - "-908.743", - "-855.205", - "-705.756", - "-976.544", - "-845.517", - "-959.478", - "-949.317", - "-971.882", - "-718.255", - "-856.427", - "-865.464", - "-878.305", - "-836.738", - "-880.235", - "-999.504", - "-30.6569", - "-776.661", - "-779.919", - "-737.574", - "-898.008", - "-975.431", - "-937.476", - "-844.608", - "-913.919", - "-105.605", - "-955.338", - "-414.453", - "-685.7", - "-791.151", - "-940.494", - "-991.163", - "-973.888", - "-866.827", - "-932.098", - "-785.616", - "-963.277", - "-915.408", - "-885.69", - "-936.973", - "-847.229", - "-797.254", - "-677.847", - "-937.541", - "-833.121", - "-908.053", - "-819.998", - "-906.642", - "-680.479", - "-851.491", - "-955.888", - "-831.129", - "-913.118", - "-880.829", - "-853.874", - "-644.399", - "-933.654", - "-783.8", - "-738.137", - "-747.784", - "-935.567", - "-959.324", - "-916.5", - "-732.925", - "-805.441", - "-706.024", - "-777.566", - "-928.018", - "-845.155", - "-824.006", - "-791.073", - "-750.056", - "-719.095", - "-980.119", - "-935.152", - "-808.737", - "-997.393", - "-983.313", - "-906.579", - "-960.212", - "-770.112", - "-853.937", - "-75.0884", - "-745.626", - "-917.588", - "-883.907", - "-744.335", - "-913.821", - "-439.999", - "-919.286", - "-604.268", - "-872.796", - "-949.36", - "-950.887", - "-880.644", - "-879.583", - "-956.478", - "-756.135", - "-898.423", - "-473.72", - "-715.849", - "-987.292", - "-799.836", - "-957.081", - "-777.848", - "-665.147", - "-873.994", - "-977.238", - "-978.821", - "-919.955", - "-963.383", - "-503.669", - "-847.531", - "-580.436", - "-748.859", - "-907.231", - "-895.53", - "-801.556", - "-760.868", - "-903.507", - "-665.681", - "-307.455", - "-749.582", - "-689.328", - "-840.822", - "-876.285", - "-503.318", - "-939.854", - "-796.182", - "-791.269", - "-971.997", - "-933.723", - "-954.883", - "-919.77", - "-867.855", - "-746.933", - "-994.98", - "-945.071", - "-866.592", - "-835.742", - "-948.39", - "-742.986", - "-894.07", - "-809.869", - "-755.121", - "-904.118", - "-910.018", - "-926.122", - "-899.299", - "-852.943", - "-959.522", - "-44.6065", - "-768.694", - "-761.133", - "-783.435", - "-665.678", - "-773.965", - "-913.683", - "-932.704", - "-910.268", - "-800.358", - "-945.41", - "-916.172", - "-836.467", - "-952.361", - "-678.275", - "-845.245", - "-656.463", - "-857.874", - "-764.072", - "-779.035", - "-946.647", - "-956.874", - "-824.648", - "-843.687", - "-704.835", - "-747.118", - "-918.522", - "-835.709", - "-30.3527", - "-895.801", - "-997.645", - "-805.082", - "-810.137", - "-708.951", - "-747.375", - "-997.488", - "-964.306", - "-842.821", - "-170.324", - "-759.87", - "-917.409", - "-999.669", - "-764.564", - "-789.221", - "-836.281", - "-995.793", - "-781.152", - "-749.354", - "-738.622", - "-991.481", - "-816.592", - "-995.606", - "-896.209", - "-984.885", - "-997.918", - "-707.997", - "-913.91", - "-890.714", - "-873.031", - "-875.701", - "-826.63", - "-872.991", - "-761.466", - "-947.262", - "-557.233", - "-964.214", - "-984.349", - "-888.923", - "-735.557", - "-809.716", - "-958.782", - "-936.623", - "-868.743", - "-910.104", - "-754.252", - "-981.223", - "-844.525", - "-983.085", - "-788.226", - "-968.27", - "-775.14", - "-969.64", - "-953.428", - "-987.362", - "-874.318", - "-949.97", - "-779.478", - "-776.958", - "-887.852", - "-705.703", - "-979.014", - "-745.34", - "-742.359", - "-945.085", - "-777.615", - "-939.786", - "-961.481", - "-771.447", - "-867.03" - ], - "zsrc": "JohnMaddock:44:44dc18", - "z": [ - "604.738", - "442.54", - "560.076", - "593.98", - "463.587", - "916.321", - "836.536", - "612.787", - "431.19", - "377.671", - "631.55", - "670.325", - "504.713", - "509.178", - "238.566", - "636.853", - "677.712", - "717.493", - "25.9451", - "323.963", - "435.443", - "583.171", - "391.176", - "659.911", - "527.58", - "534.981", - "711.736", - "693.635", - "795.728", - "444.74", - "720.071", - "667.136", - "576.33", - "436.382", - "730.195", - "770.138", - "407.183", - "704.919", - "775.692", - "584.752", - "480.985", - "592.273", - "514.53", - "616.259", - "308.001", - "490.339", - "529.899", - "266.352", - "823.4", - "732.506", - "827.941", - "492.032", - "825.923", - "828.96", - "626.664", - "715.794", - "405.604", - "530.347", - "211.258", - "70.1613", - "565.863", - "617.348", - "706.242", - "12.508", - "859.318", - "579.985", - "779.693", - "594.467", - "683.992", - "376.698", - "675.337", - "771.211", - "290.445", - "525.188", - "645.709", - "411.917", - "545.604", - "495.013", - "636.208", - "706.937", - "726.855", - "687.258", - "443.072", - "303.712", - "365.811", - "401.283", - "466.666", - "705.986", - "732.437", - "705.545", - "539.252", - "451.695", - "334.102", - "335.468", - "509.557", - "361.07", - "696.364", - "300.189", - "753.512", - "617.735", - "613.984", - "606.765", - "656.805", - "258.874", - "643.016", - "702.276", - "594.739", - "665.301", - "644.785", - "508.506", - "642.469", - "447.743", - "582.649", - "520.717", - "552.558", - "638.793", - "328.356", - "651.261", - "697.913", - "680.698", - "836.821", - "471.184", - "827.366", - "627.156", - "776.7", - "696.999", - "613.604", - "457.254", - "614.586", - "528.527", - "470.604", - "589.597", - "507.41", - "450.258", - "446.423", - "274.111", - "582.854", - "821.882", - "549.046", - "418.426", - "424.832", - "510.802", - "340.872", - "667.762", - "713.379", - "311.153", - "729.432", - "492.312", - "544.876", - "731.319", - "675.068", - "560.67", - "360.667", - "793.608", - "419.265", - "593.179", - "554.537", - "275.365", - "675.9", - "421.629", - "712.412", - "755.447", - "367.249", - "388.966", - "636.908", - "712.64", - "364.048", - "743.402", - "748.84", - "576.253", - "820.01", - "368.213", - "773.768", - "690.065", - "477.875", - "579.497", - "355.577", - "451.434", - "782.414", - "434.749", - "778.473", - "407.69", - "869.367", - "460.418", - "434.415", - "504.632", - "809.692", - "496.134", - "572.417", - "638.968", - "642.964", - "598.086", - "612.548", - "187.287", - "466.174", - "497.804", - "712.143", - "534.401", - "683.336", - "641.879", - "586.603", - "497.791", - "740.99", - "603.259", - "455.012", - "388.575", - "488.13", - "750.553", - "299.331", - "684.235", - "751.997", - "520.705", - "527.763", - "509.953", - "599.248", - "519.186", - "469.866", - "444.962", - "743.819", - "718.284", - "751.616", - "557.128", - "541.622", - "685.155", - "667.33", - "615.032", - "583.55", - "468.844", - "379.201", - "695.629", - "491.866", - "536.037", - "842.931", - "751.455", - "802.476", - "595.489", - "799.885", - "693.195", - "702.396", - "453.543", - "296.786", - "763.171", - "882.971", - "301.83", - "820.053", - "395.346", - "618.389", - "677.886", - "269.549", - "441.046", - "306.994", - "467.842", - "577.789", - "634.711", - "431.483", - "447.869", - "626.582", - "583.128", - "491.482", - "614.215", - "588.989", - "633.056", - "707.755", - "435.579", - "567.134", - "454.718", - "381.914", - "783.748", - "804.16", - "671.579", - "688.591", - "765.031", - "562.477", - "667.394", - "381.599", - "484.23", - "49.082", - "353.535", - "685.088", - "773.891", - "581.899", - "686.988", - "431.402", - "873.779", - "659.135", - "493.628", - "782.355", - "692.336", - "671.385", - "631.097", - "547.576", - "691.916", - "609.51", - "703.408", - "685.14", - "676.285", - "456.924", - "715.405", - "738.793", - "823.007", - "598.965", - "619.586", - "624.049", - "803.746", - "488.246", - "842.181", - "408.02", - "481.867", - "315.696", - "540.327", - "381.864", - "813.783", - "836.431", - "853.655", - "751.164", - "678.204", - "435.797", - "261.902", - "571.435", - "444.038", - "581.792", - "652.379", - "198.629", - "802.686", - "393.443", - "372.062", - "424.659", - "193.831", - "477.762", - "799.971", - "347.862", - "739.385", - "432.799", - "648.096", - "580.473", - "579.779", - "712.07", - "580.598", - "677.344", - "659.765", - "684.823", - "560.521", - "569.043", - "648.291", - "904.648", - "887.926", - "779.224", - "382.847", - "408.792", - "649.759", - "476.033", - "674.856", - "562.368", - "834.257", - "727.442", - "450.203", - "488.754", - "647.352", - "771.774", - "57.6439", - "465.006", - "575.982", - "800.016", - "524.546", - "438.746", - "678.565", - "314.761", - "572.139", - "560.313", - "466.019", - "769.039", - "778.732", - "779.213", - "792.883", - "709.27", - "601.815", - "649.56", - "745.455", - "585.935", - "459.639", - "605.252", - "606.58", - "606.693", - "860.237", - "641.078", - "572.488", - "419.369", - "360.093", - "525.829", - "595.452", - "545.129", - "390.914", - "615.319", - "836.194", - "550.987", - "511.444", - "587.337", - "723.071", - "852.516", - "636.028", - "521.381", - "908.724", - "280.718", - "450.808", - "835.07", - "424.884", - "521.501", - "742.027", - "595.099", - "385.569", - "397.922", - "423.092", - "393.114", - "669.863", - "743.939", - "500.541", - "573.231", - "510.351", - "290.85", - "464.71", - "699.093", - "544.286", - "760.868", - "622.898", - "526.521", - "49.3825", - "533.647", - "560.556", - "471.438", - "780.043", - "632.881", - "552.986", - "751.61", - "679.65", - "560.283", - "660.555", - "698.03", - "706.487", - "157.646", - "323.58", - "763.581", - "342.189", - "774.595", - "763.989", - "815.773", - "581.191", - "791.98", - "657.112", - "415.197", - "576.249", - "414.841", - "683.984", - "609.754", - "769.452", - "674.792", - "505.262", - "579.043", - "863.525", - "764.912", - "379.407", - "490.081", - "430.663", - "349.107", - "570.821", - "765.953", - "317.387", - "656.527", - "737.827", - "551.179", - "364.115", - "519.396", - "417.222", - "838.648", - "352.898", - "588.741", - "913.128", - "357.063", - "476.255", - "346.583", - "822.328", - "612.742", - "719.202", - "451.064", - "762.834", - "758.401", - "347.353", - "567.668", - "457.229", - "673.796", - "498.855", - "169.233", - "477.932", - "790.847", - "536.851", - "635.555", - "68.482", - "553.769", - "340.699", - "284.221", - "390.662", - "896.406", - "319.433", - "430.041", - "585.776", - "760.431", - "549.082", - "563.764", - "631.937", - "539.766", - "702.964", - "682.694", - "615.96", - "488.986", - "675.223", - "241.008", - "676.086", - "378.965", - "732.692", - "441.31", - "377.215", - "786.873", - "763.744", - "454.42", - "519.063", - "628.964", - "715.31", - "400.523", - "465.278", - "621.078", - "548.428", - "523.61", - "681.103", - "584.915", - "844.615", - "597.493", - "804.824", - "377.27", - "774.112", - "538.916", - "641.012", - "636.422", - "839.57", - "645.635", - "466.934", - "517.972", - "576.714", - "622.17", - "519.81", - "468.888", - "687.717", - "680.617", - "566.118", - "346.456", - "779.217", - "613.273", - "688.997", - "556.413", - "448.184", - "524.98", - "700.265", - "514.569", - "550.551", - "762.524", - "792.568", - "508.389", - "630.11", - "469.802", - "724.308", - "760.505", - "667.646", - "549.338", - "730.898", - "809.501", - "470.173", - "600.042", - "764.044", - "652.954", - "523.759", - "690.752", - "431.232", - "541.626", - "575.496", - "419.171", - "743.531", - "566.988", - "755.973", - "675.33", - "801.145", - "811.487", - "768.638", - "792.557", - "359.122", - "795.276", - "468.31", - "646.307", - "535.995", - "786.607", - "557.069", - "424.566", - "718.933", - "732.399", - "768.816", - "700.481", - "483.864", - "418.949", - "550.582", - "540.245", - "635.344", - "482.185", - "709.026", - "623.81", - "424.033", - "552.081", - "716.87", - "742.89", - "703.806", - "495.868", - "31.7048", - "775.748", - "650.17", - "429.915", - "423.844", - "582.854", - "542.528", - "853.657", - "880.262", - "678.452", - "666.749", - "740.502", - "788.694", - "393.087", - "444.404", - "274.508", - "601.103", - "415.736", - "583.271", - "561.605", - "330.027", - "841.889", - "451.046", - "838.869", - "447.094", - "490.053", - "883.791", - "421.012", - "269.649", - "728.091", - "596.946", - "719.345", - "46.6647", - "342.726", - "247.86", - "565.099", - "577.031", - "749.832", - "755.212", - "633.614", - "869.09", - "597.578", - "428.102", - "656.032", - "514.692", - "396.465", - "699.235", - "730.415", - "387.127", - "574.978", - "314.242", - "701.081", - "314.553", - "451.613", - "787.465", - "386.634", - "789.291", - "725.153", - "437.847", - "467.915", - "837.026", - "462.447", - "359.92", - "423.255", - "459.443", - "807.791", - "547.579", - "580.666", - "612.567", - "466.47", - "566.732", - "687.356", - "270.693", - "703.925", - "534.478", - "849.728", - "847.758", - "200.846", - "838.687", - "821.255", - "487.883", - "384.182", - "786.311", - "537.567", - "692.965", - "522.109", - "491.352", - "409.785", - "554.593", - "586.129", - "384.078", - "644.03", - "506.272", - "313.855", - "403.872", - "721.982", - "819.468", - "821.551", - "463.584", - "740.782", - "600.09", - "595.137", - "345.288", - "618.365", - "466.424", - "615.938", - "800.407", - "525.594", - "381.574", - "434.078", - "665.918", - "646.89", - "314.063", - "748.509", - "683.977", - "790.234", - "514.831", - "654.15", - "436.648", - "851.217", - "328.089", - "790.283", - "265.054", - "375.982", - "466.845", - "819.865", - "439.873", - "637.627", - "505.877", - "704.695", - "587.078", - "669.392", - "535.201", - "609.961", - "748.409", - "346.781", - "785.759", - "548.829", - "426.503", - "649.436", - "852.653", - "566.589", - "688.203", - "567.477", - "823.108", - "565.083", - "816.528", - "503.356", - "848.261", - "520.47", - "370.768", - "728.749", - "295.818", - "578.843", - "559.507", - "340.999", - "711.833", - "600.622", - "642.182", - "818.335", - "285.661", - "845.297", - "617.137", - "474.802", - "681.869", - "383.238", - "425.993", - "484.595", - "501.599", - "566.726", - "761.696", - "732.443", - "826.323", - "556.294", - "655.919", - "116.046", - "758.347", - "431.07", - "522.342", - "704.077", - "452.941", - "543.82", - "314.355", - "648.692", - "886.635", - "672.166", - "675.201", - "325.292", - "672.172", - "545.594", - "637.03", - "325.601", - "660.856", - "445.422", - "665.589", - "729.737", - "723.036", - "589.478", - "764.396", - "874.423", - "501.877", - "575.109", - "676.86", - "652.492", - "591.835", - "572.481", - "433.214", - "567.101", - "445.594", - "541.24", - "734.971", - "584.897", - "669.68", - "579.69", - "570.529", - "673.399", - "495.584", - "445.061", - "273.476", - "565.215", - "495.506", - "462.19", - "827.347", - "295.012", - "657.324", - "661.914", - "500.852", - "645.904", - "718.627", - "513.828", - "848.347", - "633.27", - "581.868", - "533.967", - "391.798", - "514.635", - "771.108", - "858.341", - "477.516", - "385.324", - "514.365", - "515.62", - "442.686", - "514.282", - "670.784", - "364.606", - "534.086", - "682.867", - "525.679", - "676.838", - "556.619", - "638.444", - "672.207", - "467.821", - "487.951", - "713.038", - "30.4765", - "778.461", - "533.655", - "617.858", - "715.428", - "688.797", - "740.655", - "427.729", - "636.779", - "443.183", - "597.225", - "494.297", - "798.702", - "479.121", - "610.437", - "768.556", - "494.464", - "782.181", - "263.276", - "770.96", - "699.476", - "243.855", - "553.017", - "623.542", - "674.207", - "549.575", - "584.427", - "721.766", - "668.64", - "561.338", - "404.562", - "293.417", - "459.19", - "468.419", - "456.146", - "726.034", - "821.791", - "842.621", - "458.52", - "292.317", - "640.716", - "587.378", - "627.803", - "698.906", - "809.602", - "822.793", - "408.46", - "614.712", - "771.948", - "534.784", - "721.304", - "463.503", - "564.757", - "646.503", - "769.305", - "508.486", - "454.256", - "422.499", - "289.555", - "792.197", - "674.248", - "517.5", - "53.0996", - "672.792", - "783.698", - "602.023", - "660.965", - "680.008", - "709.962", - "776.79", - "218.71", - "631.828", - "628.594", - "520.398", - "616.43", - "223.868", - "577.85", - "646.576", - "805.864", - "569.018", - "698.428", - "619.7", - "774.52", - "282.569", - "824.324", - "422.113", - "403.066", - "730.027", - "681.132", - "761.617", - "676.561", - "310.963", - "646.265", - "687.312", - "371.483", - "750.386", - "491.798", - "549.054", - "440.83", - "665.575", - "506.985", - "433.424", - "839.442", - "593.791", - "624.229", - "731.042", - "519.498", - "219.536", - "708.726", - "698.325", - "428.478", - "555.893", - "406.973", - "616.273", - "575.654", - "869.281", - "730.546", - "840.596", - "695.477", - "768.648", - "509.312", - "407.045", - "587.604", - "760.14", - "460.09", - "613.19", - "878.572", - "504.241", - "586.533", - "637.761", - "827.488", - "729.415", - "566.642", - "721.252", - "635.466", - "554.912", - "617.792", - "587.722", - "633.618", - "513.844", - "505.035", - "504.014", - "747.245", - "637.102", - "488.801", - "575.113", - "669.172", - "637.263", - "667.381", - "465.044", - "378.571", - "855.078", - "553.655", - "741.482", - "634.198", - "541.466", - "562.259", - "418.781", - "603.485", - "398.224", - "601.668", - "809.383", - "454.894", - "482.542", - "625.581", - "785.632", - "857.022", - "680.765", - "732.4", - "617.859", - "502.405", - "540.459", - "528.19", - "511.598", - "734.363", - "881.321", - "720.319", - "809.483", - "665.362", - "502.394", - "362.171", - "764.327", - "829.182", - "543.135", - "527.22", - "249.789", - "572.088", - "522.569", - "617.247", - "640.06", - "790.799", - "546.146", - "420.019", - "851.005", - "669.227", - "609.404", - "212.072", - "362.537", - "550.556", - "792.817", - "590.428", - "782.375", - "625.757", - "732.145", - "845.222", - "566.595", - "353.664", - "652.644", - "781.302", - "876.876", - "802.54", - "630.768", - "684.897", - "752.996", - "548.336", - "737.524", - "367.21", - "522.326", - "434.564", - "735.388", - "583.261", - "654.891", - "733.209", - "509.626", - "802.813", - "658.635", - "409.235", - "528.939", - "460.259", - "749.289", - "494.533", - "740.192", - "735.839", - "681.17", - "20.47", - "304.878", - "301.691", - "792.403", - "787.157", - "530.954", - "823.293", - "493.249", - "454.136", - "721.661", - "372.871", - "626.047", - "494.002", - "566.182", - "371.123", - "516.284", - "371.791", - "692.577", - "651.665", - "556.19", - "476.682", - "363.942", - "628.987", - "338.496", - "782.165", - "645.567", - "860.481", - "608.747", - "421.748", - "534.813", - "381.968", - "577.874", - "401.582", - "672.102", - "373.716", - "430.341", - "592.631", - "423.416", - "776.957", - "682.328", - "663.976", - "609.905", - "430.991", - "885.59", - "548.204", - "551.202", - "419.892", - "356.096", - "390.862", - "535.676", - "624.83", - "538.202", - "817.465", - "540.917", - "704.412", - "697.42", - "566.497", - "687.004", - "592", - "214.344", - "674.332", - "836.689", - "451.338", - "840.586", - "242.924", - "626.211", - "434.996", - "573.203", - "602.709", - "198.981", - "747.57", - "481.968", - "665.279", - "291.26", - "548.807", - "513.237", - "520.99", - "491.135", - "650.245", - "343.522", - "654.345", - "501.372", - "860.851", - "549.115", - "762.273", - "588.552", - "473.766", - "465.748", - "550.089", - "598.107", - "791.177", - "427.617", - "677.501", - "759.155", - "607.128", - "757.146", - "747.457", - "506.97", - "812.366", - "676.131", - "451.383", - "668.345", - "400.528", - "393.625", - "722.241", - "376.611", - "396.019", - "290.425", - "793.834", - "813.01", - "372.247", - "487.17", - "840.465", - "803.164", - "249.95", - "579.941", - "793.338", - "337.423", - "288.527", - "550.814", - "728.634", - "666.086", - "798.105", - "407.787", - "609.654", - "478.289", - "690.347", - "801.071", - "686.96", - "971.607", - "515.724", - "680.058", - "567.95", - "564.985", - "517.187", - "520.553", - "747.167", - "672.367", - "499.988", - "690.524", - "576.956", - "578.686", - "699.764", - "457.431", - "646.094", - "330.04", - "624.532", - "45.4227", - "641.828", - "318.781", - "561.781", - "391.881", - "724.118", - "706.942", - "426.375", - "652.929", - "527.993", - "430.198", - "747.235", - "457.058", - "668.873", - "851.913", - "621.434", - "514.82", - "422.68", - "654.214", - "880.007", - "758.518", - "177.409", - "727.924", - "598.044", - "458.343", - "377.155", - "572.7", - "238.783", - "722.421", - "563.136", - "742.026", - "416.74", - "553.454", - "636.009", - "673.964", - "565.871", - "639.701", - "645.911", - "367.506", - "444.585", - "507.513", - "534.783", - "678.13", - "288.621", - "702.435", - "645.103", - "677.99", - "788.39", - "547.712", - "298.503", - "504.357", - "641.849", - "593.279", - "777.017", - "267.918", - "479.298", - "664.846", - "514.854", - "426.868", - "148.441", - "700.637", - "751.972", - "598.958", - "595.971", - "381.215", - "735.19", - "599.332", - "672.98", - "649.209", - "727.621", - "586.098", - "711.691", - "626.585", - "778.148", - "486.275", - "83.7099", - "588.617", - "789.935", - "488.699", - "378.973", - "866.863", - "616.184", - "476.368", - "857.359", - "678.455", - "424.429", - "688.848", - "745.898", - "524.885", - "632.558", - "642.537", - "697.623", - "660.874", - "390.099", - "554.331", - "456.385", - "519.623", - "378.221", - "560.235", - "792.449", - "678.332", - "653.146", - "827.102", - "478.235", - "563.271", - "350.476", - "755.384", - "371.614", - "751.648", - "486.857", - "458.355", - "853.821", - "858.393", - "712.759", - "311.458", - "552.074", - "806.992", - "684.698", - "763.566", - "619.698", - "745.283", - "781.03", - "916.489", - "574.341", - "783.319", - "740.714", - "751.177", - "414.369", - "717.22", - "470.587", - "689.401", - "542.199", - "525.774", - "665.36", - "402.16", - "607.811", - "746.491", - "347.704", - "493.47", - "578.239", - "611.293", - "535.017", - "769.018", - "848.059", - "465.725", - "568.805", - "311.548", - "746.511", - "623.389", - "465.589", - "939.217", - "453.905", - "778.559", - "467.475", - "853.607", - "797.433", - "688.161", - "717.366", - "731.069", - "638.248", - "766.374", - "789.33", - "737.786", - "522.787", - "612.213", - "724.858", - "622.344", - "497.636", - "438.751", - "704.904", - "497.417", - "317.577", - "429.135", - "672.218", - "752.474", - "577.179", - "472.707", - "684.746", - "551.621", - "377.461", - "576.402", - "392.383", - "774.693", - "785.376", - "830.277", - "747.003", - "450.951", - "486.401", - "375.935", - "648.121", - "330.588", - "669.734", - "822.128", - "375.719", - "788.61", - "397.677", - "592.972", - "487.267", - "781.474", - "566.528", - "586.165", - "585.491", - "598.28", - "690.755", - "542.309", - "764.872", - "754.914", - "769.8", - "848.989", - "638.139", - "452.682", - "397.266", - "354.829", - "547.881", - "524.059", - "838.005", - "506.046", - "561.104", - "705.019", - "689.444", - "580.713", - "539.236", - "812.823", - "574.161", - "688.152", - "639.414", - "709.272", - "679.348", - "813.153", - "381.441", - "787.64", - "641.033", - "619.491", - "778.824", - "274.142", - "799.029", - "304.422", - "573.808", - "650.216", - "524.356", - "788.981", - "780.307", - "29.6327", - "720.093", - "348.638", - "823.629", - "642.633", - "748.038", - "689.708", - "759.238", - "479.078", - "823.414", - "735.438", - "379.522", - "683.993", - "627.381", - "545.234", - "447.292", - "290.942", - "417.126", - "487.465", - "676.473", - "605.732", - "523.347", - "739.286", - "393.885", - "690.175", - "434.398", - "234.668", - "631.906", - "701.39", - "764.722", - "394.859", - "799.663", - "265.502", - "92.4297", - "728.439", - "513.89", - "688.984", - "583.857", - "637.599", - "792.566", - "645.517", - "651.537", - "564.8", - "721.872", - "825.543", - "867.09", - "803.047", - "241.07", - "431.15", - "832.061", - "705.265", - "368.502", - "401.081", - "296.407", - "781.835", - "649.05", - "734.735", - "764.811", - "868.929", - "426.076", - "380.03", - "720.619", - "645.742", - "407.169", - "746.359", - "780.363", - "742.384", - "684.697", - "362.026", - "499.034", - "689.171", - "711.766", - "719.448", - "425.24", - "432.22", - "752.902", - "553.451", - "461.39", - "494.172", - "476.737", - "537.461", - "322.074", - "521.937", - "440.086", - "681.376", - "715.653", - "506.632", - "667.554", - "676.903", - "785.137", - "765.336", - "349.603", - "457.357", - "910.569", - "728.267", - "808.185", - "407.239", - "448.651", - "468.31", - "600.144", - "656.034", - "454.212", - "295.417", - "628.321", - "726.754", - "707.38", - "695.191", - "493.057", - "753.821", - "502.521", - "568.553", - "445.302", - "493.991", - "663.794", - "609.032", - "860.369", - "617.992", - "625.728", - "59.819", - "755.456", - "605.724", - "855.116", - "763.598", - "833.265", - "815.644", - "788.716", - "445.753", - "263.005", - "738.607", - "736.613", - "556.646", - "562.754", - "731.049", - "749.445", - "551.422", - "851.993", - "801.959", - "408.431", - "884.871", - "638.304", - "495.28", - "648.946", - "843.69", - "479.995", - "795.456", - "519.126", - "649.019", - "456.782", - "413.305", - "793.043", - "708.274", - "706.653", - "379.584", - "768.432", - "697.361", - "429.407", - "842.345", - "803.399", - "645.517", - "787.636", - "750.558", - "751.153" - ], - "marker": { - "size": 3, - "color": "rgb(233, 225, 141)" - } - }, - { - "mode": "markers", - "name": "2048 - 4096", - "type": "scatter3d", - "xsrc": "JohnMaddock:42:9bf5b8", - "x": [ - "-90.1537", - "-147.219", - "-613.57", - "-12.4858", - "-268.263", - "-72.9405", - "-973.105", - "-33.4447", - "-347.956", - "-72.9481", - "-271.339", - "-193.953", - "-113.149", - "-736.774", - "-29.9215", - "-648.906", - "-326.106", - "-495.768", - "-254.664", - "-273.478", - "-39.3723", - "-649.346", - "-180.606", - "-265.046", - "-378.485", - "-584.132", - "-47.8164", - "-234.773", - "-684.539", - "-240.708", - "-749.443", - "-263.913", - "-532.278", - "-195.009", - "-40.5444", - "-100.648", - "-529.629", - "-360.964", - "-891.281", - "-293.028", - "-668.263", - "-101.388", - "-879.474", - "-336.215", - "-117.312", - "-216.335", - "-301.648", - "-59.421", - "-220.757", - "-376.093", - "-768.874", - "-29.7877", - "-320.156", - "-28.2731", - "-993.756", - "-578.636", - "-29.757", - "-235.254", - "-79.4122", - "-253.396", - "-524.549", - "-233.465", - "-99.4265", - "-322.29", - "-974.129", - "-284.011", - "-639.211", - "-211.682", - "-754.858", - "-598.974", - "-605.653", - "-85.2552", - "-230.136", - "-343.362", - "-305.152", - "-477.31", - "-355.517", - "-399.984", - "-165.022", - "-288.469", - "-432.263", - "-391.052", - "-474.625", - "-365.421", - "-957.74", - "-305.292", - "-567.741", - "-573.873", - "-238.749", - "-263.394", - "-570.994", - "-145.941", - "-383.67", - "-145.326", - "-286.624", - "-379.615", - "-284.476", - "-43.2799", - "-176.414", - "-280.927", - "-125.058", - "-224.009", - "-243.424", - "-697.097", - "-908.521", - "-345.074", - "-860.168", - "-721.507", - "-188.789", - "-177.467", - "-304.949", - "-741.733", - "-190.452", - "-989.312", - "-325.074", - "-296.909", - "-170.578", - "-475.922", - "-71.11", - "-33.7399", - "-409.363", - "-873.911", - "-354.658", - "-27.4756", - "-156.311", - "-264.298", - "-61.9619", - "-816.641", - "-278.816", - "-695.656", - "-125.835", - "-610.419", - "-29.3228", - "-882.403", - "-149.041", - "-908.23", - "-179.656", - "-119.7", - "-257.257", - "-597.985", - "-267.547", - "-69.8304", - "-355.577", - "-173.194", - "-986.603", - "-249.23", - "-262.04", - "-849.109", - "-167.526", - "-640.352", - "-262.583", - "-53.4428", - "-199.709", - "-197.147", - "-370.406", - "-143.567", - "-220.713", - "-416.404", - "-461.473", - "-250.529", - "-278.668", - "-316.806", - "-366.867", - "-282.243", - "-93.3457", - "-136.388", - "-274.143", - "-521.048", - "-231.608", - "-435.751", - "-204.51", - "-76.5528", - "-81.0409", - "-631.579", - "-482.639", - "-243.087", - "-1.43376", - "-135.545", - "-89.6682", - "-392.839", - "-109.908", - "-441.521", - "-247.577", - "-102.652", - "-227.031", - "-351.039", - "-384.157", - "-123.945", - "-358.022", - "-155.364", - "-306.382", - "-288.539", - "-236.488", - "-147.61", - "-607.186", - "-617.79", - "-440.481", - "-189.963", - "-126.534", - "-279.516", - "-948.308", - "-180.141", - "-74.7636", - "-314.168", - "-146.829", - "-362.78", - "-672.913", - "-384.002", - "-711.5", - "-251.412", - "-464.219", - "-169.983", - "-58.5332", - "-13.2275", - "-521.764", - "-185.979", - "-176.724", - "-645.733", - "-162.038", - "-551.145", - "-122.888", - "-266.621", - "-127.974", - "-92.6762", - "-67.1511", - "-530.245", - "-215.852", - "-217.39", - "-208.061", - "-427.033", - "-596.432", - "-411.425", - "-51.1966", - "-73.0808", - "-246.758", - "-265.407", - "-76.0646", - "-125.261", - "-557.882", - "-446.106", - "-220.602", - "-202.725", - "-116.97", - "-133.267", - "-549.338", - "-462.258", - "-614.467", - "-239.503", - "-182.084", - "-794.78", - "-228.473", - "-224.066", - "-17.3422", - "-370.459", - "-792.172", - "-331.967", - "-44.9744", - "-253.789", - "-495.942", - "-49", - "-308.489", - "-218.499", - "-479.019", - "-156.497", - "-506.668", - "-650.775", - "-352.201", - "-477.558", - "-511.006", - "-516.013", - "-172.018", - "-212.161", - "-316.713", - "-80.1287", - "-369.836", - "-447.775", - "-178.81", - "-284.576", - "-58.3445", - "-216.065", - "-189.454", - "-634.509", - "-80.2569", - "-223.058", - "-215.857", - "-295.021", - "-339.858", - "-438.061", - "-416.846", - "-798.112", - "-219.324", - "-97.6291", - "-428.171", - "-130.364", - "-511.534", - "-421.998", - "-29.9892", - "-311.36", - "-134.737", - "-177.492", - "-100.359", - "-111.9", - "-399.876", - "-282.382", - "-150.789", - "-521.329", - "-374.058", - "-120.289", - "-630.497", - "-62.6847", - "-480.625", - "-583.034", - "-358.94", - "-328.162", - "-102.614", - "-13.0719", - "-476.983", - "-177.813", - "-671.616", - "-471.697", - "-231.263", - "-435.843", - "-341.332", - "-153.181", - "-752.963", - "-500.035", - "-979.799", - "-64.765", - "-249.168", - "-77.7919", - "-397.211", - "-833.75", - "-552.018", - "-434.953", - "-334.984", - "-299.63", - "-472.838", - "-104.085", - "-195.267", - "-481.828", - "-308.324", - "-26.1666", - "-78.3684", - "-407.217", - "-240.549", - "-283.763", - "-78.7945", - "-421.019", - "-89.4268", - "-956.908", - "-332.222", - "-382.559", - "-322.49", - "-374.539", - "-90.1558", - "-484.989", - "-358.09", - "-169.066", - "-949.057", - "-579.387", - "-246.968", - "-122.031", - "-154.746", - "-119.074", - "-136.523", - "-74.3593", - "-410.771", - "-414.09", - "-529.269", - "-5.2446", - "-371.894", - "-481.557", - "-68.4528", - "-409.1", - "-375.33", - "-268.094", - "-456.34", - "-221.21", - "-267.408", - "-540.597", - "-909.003", - "-400.172", - "-202.261", - "-898.874", - "-430.376", - "-399.374", - "-417.348", - "-182.099", - "-885.833", - "-317.204", - "-156.242", - "-338.169", - "-405.205", - "-138.129", - "-88.7981", - "-753.638", - "-506.114", - "-332.047", - "-106.166", - "-165.752", - "-658.102", - "-457.418", - "-144.093", - "-329.601", - "-279.359", - "-525.442", - "-386.898", - "-244.841", - "-438.838", - "-371.463", - "-542.194", - "-331.331", - "-41.7239", - "-669.597", - "-495.201", - "-325.933", - "-130.114", - "-32.5524", - "-189.193", - "-911.774", - "-37.2853", - "-137.373", - "-324.129", - "-96.517", - "-73.6997", - "-33.5604", - "-157.015", - "-337.932", - "-221.804", - "-311.008", - "-757.258", - "-359.004", - "-208.437", - "-301.419", - "-479.723", - "-20.5969", - "-226.672", - "-362.501", - "-90.1284", - "-472.923", - "-121.418", - "-26.3622", - "-184.701", - "-246.623", - "-153.099", - "-295.39", - "-386.048", - "-67.8914", - "-640.652", - "-962.084", - "-145.981", - "-434.181", - "-698.795", - "-221.884", - "-132.019", - "-506.665", - "-425.022", - "-515.965", - "-205.159", - "-234.79", - "-281.016", - "-570.157", - "-48.3944", - "-355.738", - "-60.1763", - "-451.662", - "-217.679", - "-24.7917", - "-265.957", - "-700.111", - "-441.807", - "-370.818", - "-67.1932", - "-587.083", - "-658.096", - "-278.756", - "-242.882", - "-132.005", - "-52.4854", - "-184.65", - "-170.644", - "-112.683", - "-342.396", - "-981.308", - "-251.284", - "-106.848", - "-295.567", - "-122.55", - "-22.9884", - "-414.621", - "-143.788", - "-91.4223", - "-370.397", - "-179.262", - "-248.189", - "-268.893", - "-129.494", - "-278.357", - "-210.41", - "-489.388", - "-331.134", - "-330.395", - "-132.145", - "-328.975", - "-573.362", - "-507.069", - "-196.962", - "-395.702", - "-105.343", - "-371.649", - "-177.504", - "-179.306", - "-359.537", - "-203.118", - "-884.874", - "-156.177", - "-682.354", - "-386.971", - "-564.181", - "-256.283", - "-546.566", - "-81.7295", - "-116.63", - "-468.52", - "-343.581", - "-350.139", - "-196.488", - "-224.475", - "-485.07", - "-35.1597", - "-520.475", - "-51.5403", - "-989.709", - "-396.371", - "-203.58", - "-159.124", - "-155.813", - "-240.466", - "-175", - "-602.894", - "-325.215", - "-170.349", - "-439.456", - "-229.825", - "-117.171", - "-371.323", - "-259.002", - "-561.975", - "-342.297", - "-105.314", - "-157.107", - "-308.006", - "-110.739", - "-189.599", - "-235.408", - "-204.425", - "-263.896", - "-189.435", - "-239.476", - "-452.599", - "-274.225", - "-478.413", - "-145.12", - "-351.682", - "-123.798", - "-705.128", - "-331.459", - "-59.674", - "-930.147", - "-489.087", - "-559.837", - "-157.953", - "-365.448", - "-159.146", - "-249.628", - "-254.987", - "-120.344", - "-354.186", - "-387.002", - "-304.224", - "-326.195", - "-261.096", - "-484.219", - "-558.586", - "-232.578", - "-270.167", - "-182.237", - "-438.659", - "-223.033", - "-655.598", - "-731.167", - "-253.4", - "-443.974", - "-464.494", - "-385.184", - "-412.391", - "-84.0866", - "-80.4816", - "-429.277", - "-262.529", - "-50.1013", - "-292.743", - "-311.998", - "-80.0041", - "-527.549", - "-266.36", - "-413.369", - "-814.319", - "-684.157", - "-191.283", - "-601.312", - "-76.4789", - "-474.904", - "-993.77", - "-82.0006", - "-310.412", - "-395.772", - "-409.515", - "-496.372", - "-361.537", - "-223.956", - "-518.623", - "-515.048", - "-611.291", - "-515.068", - "-366.294", - "-155.586", - "-288.278", - "-299.991", - "-149.59", - "-564.454", - "-874.703", - "-186.203", - "-229.614", - "-688.007", - "-197.558", - "-166.046", - "-95.8922", - "-874.292", - "-633.222", - "-291.256", - "-482.24", - "-230.588", - "-147.996", - "-457.227", - "-338.429", - "-648.81", - "-360.848", - "-539.025", - "-320.604", - "-31.0799", - "-157.167", - "-63.646", - "-328.36", - "-527.048", - "-48.6469", - "-228.766", - "-62.7802", - "-720.152", - "-33.5033", - "-598.374", - "-394.337", - "-72.7793", - "-491.446", - "-447.052", - "-307.018", - "-279.555", - "-128.937", - "-717.534", - "-21.0439", - "-403.918", - "-300.172", - "-472.368", - "-508.204", - "-533.231", - "-136.181", - "-655.133", - "-251.215", - "-307.347", - "-415.09", - "-429.248", - "-287.729", - "-475.261", - "-209.303", - "-474.917", - "-650.757", - "-153.205", - "-269.376", - "-899.902", - "-433.733", - "-65.1117", - "-34.035", - "-11.8669", - "-358.649", - "-143.453", - "-233.521", - "-247.433", - "-305.124", - "-535.972", - "-385.597", - "-202.242", - "-504.659", - "-297.736", - "-135.5", - "-593.46", - "-301.11", - "-898.353", - "-153.553", - "-512.286", - "-394.842", - "-315.991", - "-283.367", - "-504.005", - "-249.36", - "-168.469", - "-140.587", - "-61.9578", - "-396.153", - "-339.088", - "-213.921", - "-402.224", - "-397.75", - "-262.922", - "-3.80576", - "-695.929", - "-564.386", - "-322.188", - "-216.821", - "-276.741", - "-520.826", - "-461.032", - "-13.0351", - "-244.863", - "-408.891", - "-483.767", - "-501.203", - "-84.4537", - "-322.479", - "-34.8604", - "-641.141", - "-64.8372", - "-491.386", - "-227.623", - "-89.6187", - "-147.124", - "-14.5519", - "-161.849", - "-221.943", - "-132.759", - "-272.973", - "-396.088", - "-284.946", - "-590.031", - "-283.597", - "-342.078", - "-151.62", - "-548.608", - "-92.1068", - "-352.684", - "-136.159", - "-339.97", - "-487.342", - "-223.443", - "-117.307", - "-403.326", - "-294.479", - "-145.252", - "-491.446", - "-149.217", - "-47.3764", - "-236.808", - "-801.065", - "-851.724", - "-14.519", - "-191.219", - "-257.341", - "-357.344", - "-301.042", - "-288.578", - "-835.463", - "-198.489", - "-473.334", - "-128.713", - "-17.9503", - "-202.065", - "-264.552", - "-398.245", - "-865.581", - "-114.827", - "-916.422", - "-581.763", - "-98.8897", - "-267.421", - "-246.699", - "-14.3188", - "-438.414", - "-355.711", - "-261.848", - "-480.443", - "-458.704", - "-87.5994", - "-256.531", - "-401.806", - "-52.0279", - "-344.73", - "-33.9213", - "-28.9139", - "-179.973", - "-819.68", - "-904.641", - "-54.696", - "-380.648", - "-194.2", - "-230.977", - "-111.529", - "-666.333", - "-152.462", - "-208.406", - "-471.678", - "-399.5", - "-16.0087", - "-579.279", - "-277.974", - "-139.071", - "-913.895", - "-578.875", - "-443.268", - "-599.44", - "-108.577", - "-997.579", - "-696.927", - "-410.417", - "-179.678", - "-241.707", - "-179.889", - "-303.808", - "-100.902", - "-645.498", - "-30.1955", - "-406.042", - "-162.752", - "-773.496", - "-25.3105", - "-403.021", - "-315.861", - "-570.1", - "-198.44", - "-130.949", - "-490.99", - "-908.941", - "-193.278", - "-130.245", - "-342.475", - "-208.872", - "-739.316", - "-161.588", - "-202.179", - "-220.265", - "-338.661", - "-136.591", - "-230.247", - "-351.814", - "-473.292", - "-54.6213", - "-406.734", - "-79.6325", - "-219.322", - "-64.8654", - "-366.163", - "-5.73403", - "-465.903", - "-235.365", - "-192.414", - "-185.073", - "-115.017", - "-203.271", - "-45.3408", - "-207.309", - "-294.266", - "-379.6", - "-184.987", - "-435.15", - "-132.147", - "-640.502", - "-463.912", - "-3.68356", - "-160.813", - "-177.552", - "-121.795", - "-786.86", - "-413.22", - "-412.791", - "-262.241", - "-943.944", - "-459.146", - "-523.73", - "-171.502", - "-418.392", - "-80.1522", - "-589.291", - "-351.02", - "-301.52", - "-594.532", - "-235.702", - "-257.392", - "-753.006", - "-502.436", - "-360.561", - "-627.984", - "-92.9168", - "-174.947", - "-38.0536", - "-382.372", - "-80.9631", - "-147.093", - "-552.543", - "-488.16", - "-298.054", - "-357.349", - "-120.91", - "-463.762", - "-14.8949", - "-342.309", - "-290.247", - "-144.292", - "-287.243", - "-579.18", - "-87.2679", - "-35.8958", - "-214.153", - "-582.842", - "-999.17", - "-55.5683", - "-370.696", - "-275.43", - "-78.6073", - "-528.521", - "-293.208", - "-884.415", - "-133.716", - "-38.1566", - "-315.747", - "-505.229", - "-303.076", - "-193.287", - "-116.794", - "-368.897", - "-282.437", - "-230.788", - "-26.1934", - "-449.862", - "-415.253", - "-188.751", - "-628.605", - "-477.405", - "-144.359", - "-121.973", - "-656.693", - "-793.916", - "-893.548", - "-289.274", - "-311.065", - "-214.06", - "-24.1879", - "-206.595", - "-205.053", - "-280.818", - "-142.271", - "-338.83", - "-734.459", - "-998.253", - "-57.5491", - "-435.938", - "-131.452", - "-368.921", - "-648.512", - "-289.668", - "-137.79", - "-198.911", - "-563.481", - "-156.48", - "-128.719", - "-344.227", - "-327.42", - "-328.705", - "-364.671", - "-324.065", - "-187.471", - "-161.392", - "-309.457", - "-414.279", - "-415.172", - "-379.513", - "-406.458", - "-6.70672", - "-370.51", - "-171.589", - "-489.629", - "-108.802", - "-589.919", - "-293.29", - "-211.793", - "-167.703", - "-533.423", - "-193", - "-180.182", - "-78.5419", - "-86.6677", - "-122.098", - "-132.08", - "-217.147", - "-771.613", - "-295.758", - "-157.562", - "-482.536", - "-805.711", - "-418.174", - "-689.205", - "-469.032", - "-398.405", - "-203.249", - "-203.538", - "-130.758", - "-258.981", - "-286.091", - "-192.286", - "-440.517", - "-444.863", - "-211.523", - "-349.794", - "-156.154", - "-388.455", - "-80.8724", - "-168.457", - "-219.421", - "-398.593", - "-582.662", - "-269.009", - "-472.369", - "-187.122", - "-429.762", - "-207.177", - "-241.401", - "-64.2931", - "-349.68", - "-241.283", - "-643.873", - "-130.953", - "-346.861", - "-516.17", - "-772.292", - "-728.517", - "-526.615", - "-580.729", - "-50.3476", - "-255.582", - "-455.598", - "-295.161", - "-549.941", - "-302.314", - "-476.736", - "-107.534", - "-1.56076", - "-569.27", - "-322.876", - "-696.916", - "-136.564", - "-175.202", - "-164.629", - "-98.4512", - "-194.61", - "-354.989", - "-923.843", - "-151.838", - "-273.787", - "-593.655", - "-632.453", - "-239.848", - "-518.804", - "-668.44", - "-606.779", - "-144.77", - "-220.417", - "-256.621", - "-245.438", - "-118.446", - "-54.3981", - "-17.3892", - "-189.322", - "-664.976", - "-193.92", - "-108.107", - "-156.202", - "-211.958", - "-327.275", - "-370.067", - "-220.425", - "-198.205", - "-146.519", - "-179.907", - "-677.232", - "-239.512", - "-342.658", - "-546.001", - "-105.115", - "-74.5752", - "-3.92877", - "-469.876", - "-190.762", - "-508.135", - "-475.467", - "-199.457", - "-327.445", - "-414.632", - "-132.701", - "-477.257", - "-441.94", - "-174.022", - "-149.598", - "-636.158", - "-297.034", - "-126.755", - "-4.0682", - "-509.884", - "-900.562", - "-347.017", - "-274.619", - "-336.845", - "-19.3568", - "-45.0402", - "-281.101", - "-171.649", - "-481.183", - "-625.03", - "-329.864", - "-117.206", - "-254.234", - "-209.52", - "-440.294", - "-324.454", - "-109.986", - "-740.574", - "-486.868", - "-39.2325", - "-396.619", - "-259.578", - "-291.721", - "-72.0085", - "-445.709", - "-283.228", - "-204.611", - "-7.41773", - "-259.542", - "-406.551", - "-119.485", - "-424.275", - "-295.147", - "-183.103", - "-135.873", - "-612.609", - "-439.685", - "-378.718", - "-74.1232", - "-231.648", - "-102.68", - "-436.158", - "-62.6861", - "-216.51", - "-218.696", - "-214.688", - "-162.681", - "-153.852", - "-331.733", - "-94.5626", - "-586.341", - "-212.262", - "-265.066", - "-422.98", - "-584.589", - "-257.778", - "-14.2059", - "-256.509", - "-200.628", - "-457.17", - "-575.76", - "-144.075", - "-623.694", - "-222.534", - "-712.58", - "-47.292", - "-61.6474", - "-428.746", - "-22.0265", - "-330.545", - "-242.456", - "-421.849", - "-74.3112", - "-140.402", - "-460.876", - "-63.4821", - "-376.8", - "-711.72", - "-255.182", - "-317.116", - "-119.263", - "-386.124", - "-356", - "-446.623", - "-412.363", - "-414.271", - "-248.388", - "-374.027", - "-236.984", - "-4.51246", - "-221.151", - "-442.859", - "-422.29", - "-351.666", - "-280.87", - "-452.542", - "-90.3545", - "-366.443", - "-384.724", - "-644.193", - "-323.502", - "-181.89", - "-293.502", - "-610.647", - "-520.353", - "-177.428", - "-204.892", - "-108.673", - "-43.8684", - "-183.357", - "-34.1512", - "-722.335", - "-372.299", - "-222.876", - "-63.9577", - "-281.368", - "-383.022", - "-446.659", - "-48.7093", - "-380.676", - "-83.8497", - "-567.857", - "-309.641", - "-514.072", - "-427.27", - "-181.258", - "-222.701", - "-807.891", - "-168.875", - "-170.803", - "-108.675", - "-261.209", - "-363.013", - "-452.213", - "-240.994", - "-515.491", - "-235.714", - "-12.4084", - "-388.729", - "-311.013", - "-431.752", - "-224.689", - "-297.867", - "-174.119", - "-630.79", - "-255.934", - "-251.596", - "-208.771", - "-120.745", - "-62.6173", - "-401.875", - "-32.7262", - "-39.8263", - "-371.96", - "-2.35075", - "-421.691", - "-266.098", - "-160.715", - "-6.66527", - "-129.632", - "-426.68", - "-587.092", - "-127.817", - "-88.3647", - "-211.382", - "-201.17", - "-237.903", - "-272.23", - "-483.284", - "-934.375", - "-776.684", - "-31.7821", - "-456.962", - "-175.697", - "-461.195", - "-261.194", - "-138.189", - "-747.231", - "-329.638", - "-185.015", - "-174.379", - "-363.597", - "-172.616", - "-447.404", - "-208.413", - "-284.114", - "-168.562", - "-449.106", - "-135.739", - "-207.86", - "-986.609", - "-264.153", - "-8.23682", - "-45.8042", - "-247.811", - "-294.673", - "-188.838", - "-112.911", - "-526.541", - "-186.028", - "-88.7847", - "-289.527", - "-293.298", - "-369.678", - "-355.496", - "-48.64", - "-156.017", - "-488.765", - "-451.023", - "-101.236", - "-108.139", - "-423.269", - "-83.0737", - "-76.6499", - "-642.249", - "-33.2722", - "-25.4764", - "-165.538", - "-304.695", - "-148.132", - "-435.526", - "-142.225", - "-103.583", - "-115.489", - "-395.061", - "-153.843", - "-143.419", - "-252.056", - "-391.028", - "-409.721", - "-300.701", - "-448.606", - "-458.319", - "-117.983", - "-199.704", - "-456.66", - "-978.123", - "-192.564", - "-398.332", - "-386.704", - "-193.71", - "-444.116", - "-138.141", - "-628.672", - "-450.103", - "-145.038", - "-301.02", - "-43.2947", - "-432.819", - "-375.95", - "-226.878", - "-291.511", - "-321.894", - "-124.384", - "-689.138", - "-464.784", - "-288.11", - "-351.533", - "-21.7709", - "-211.579", - "-70.8979", - "-91.9306", - "-995.962", - "-415.248", - "-301.874", - "-327.058", - "-311.185", - "-31.1684", - "-248.064", - "-350.042", - "-326.981", - "-501.193", - "-252.881", - "-331.885", - "-218.137", - "-634.897", - "-72.3606", - "-325.83", - "-482.57", - "-123.984", - "-308.1", - "-194.539", - "-737.106", - "-10.8495", - "-220.808", - "-742.028", - "-364.282", - "-73.297", - "-989.166", - "-662.974", - "-259.587", - "-464.696", - "-131.612", - "-542.828", - "-223.412", - "-447.945", - "-281.64", - "-489.649", - "-581.164", - "-461.865", - "-315.992", - "-369.106", - "-534.845", - "-625.569", - "-5.99512", - "-344.693", - "-379.981", - "-96.8663", - "-171.292", - "-287.731", - "-134.865", - "-996.227", - "-285.052", - "-101.986", - "-214.735", - "-543.686", - "-148.674", - "-316.76", - "-526.22", - "-827.399", - "-357.141", - "-72.8802", - "-223.811", - "-323.197", - "-300.232", - "-214.445", - "-167.42", - "-37.852", - "-541.397", - "-207.102", - "-256.263", - "-243.578", - "-350.809", - "-51.1181", - "-388.291", - "-441.181", - "-860.173", - "-432.59", - "-275.757", - "-17.951", - "-265.671", - "-479.662", - "-303.245", - "-767.95", - "-239.114", - "-93.8653", - "-267.374", - "-113.635", - "-607.136", - "-63.4473", - "-402.359", - "-713.22", - "-258.768", - "-257.337", - "-757.829", - "-142.05", - "-191.046", - "-23.934", - "-541.786", - "-289.642", - "-92.4026", - "-166.723", - "-612.45", - "-401.918", - "-332.042", - "-99.3841", - "-184.996", - "-98.0574", - "-533.262", - "-698.826", - "-180.807", - "-308.329", - "-481.826", - "-85.2918", - "-472.048", - "-299.295", - "-315.911", - "-73.4244", - "-312.374", - "-428.642", - "-135.009", - "-164.541", - "-77.638", - "-285.913", - "-380.957", - "-543.478", - "-85.8624", - "-384.613", - "-140.326", - "-109.338", - "-362.148", - "-177.694", - "-552.44", - "-72.3392", - "-479.088", - "-481.128", - "-507.539", - "-225.88", - "-321.395", - "-238.611", - "-321.224", - "-629.462", - "-408.685", - "-132.358", - "-5.07602", - "-212.77", - "-168.805", - "-2.54893", - "-284.138", - "-641.691", - "-21.8474", - "-346.024", - "-438.478", - "-587.512", - "-486.776", - "-129.959", - "-391.981", - "-132.551", - "-281.097", - "-42.3047", - "-172.001", - "-300.229", - "-417.63", - "-665.329", - "-173.663", - "-138.336", - "-380.998", - "-225.69", - "-639.905", - "-154.599", - "-120.612", - "-334.912", - "-91.5767", - "-746.589", - "-302.054", - "-337.348", - "-557.815", - "-136.32", - "-269.466", - "-230.653", - "-151.02", - "-133.432", - "-651.85", - "-230.935", - "-140.136", - "-229.874", - "-645.235", - "-457.145", - "-119.722", - "-470.349", - "-255.246", - "-125.611", - "-379.687", - "-267.992", - "-128.045", - "-483.963", - "-108.436", - "-408.904", - "-580.151", - "-475.434", - "-146.308", - "-101.991", - "-797.42", - "-175.814", - "-177.091", - "-172.528", - "-379.255", - "-178.556", - "-160.057", - "-71.3069", - "-79.7639", - "-322.652", - "-92.0938", - "-70.6691", - "-412.751", - "-434.488", - "-282.507", - "-659.746", - "-24.9976", - "-162.354", - "-593.017", - "-152.308", - "-209.01", - "-18.194", - "-595.947", - "-294.231", - "-185.057", - "-285.511", - "-123.129", - "-176.971", - "-78.6033", - "-137.494", - "-549.214", - "-245.229", - "-431.883", - "-79.2444", - "-114.669", - "-559.087", - "-234.189", - "-500.543", - "-733.651", - "-81.1513", - "-110.889", - "-112.915", - "-506.803", - "-309.504", - "-283.913", - "-358.731", - "-380.344", - "-221.84", - "-56.0576", - "-127.201", - "-686.22", - "-849.043", - "-808.001", - "-438.606", - "-212.407", - "-240.755", - "-322.713", - "-95.8238", - "-500.508", - "-218.904", - "-364.306", - "-746.518", - "-449.459", - "-50.9957", - "-407.957", - "-203.633", - "-965.005", - "-169.778", - "-127.637", - "-560.551", - "-640.5", - "-139.551", - "-766.28", - "-566.115", - "-45.4147", - "-115.169", - "-655.012", - "-297.932", - "-364.691", - "-21.6236", - "-256.124", - "-355.168", - "-16.4232", - "-281.491", - "-135.381", - "-558.025", - "-558.753", - "-519.561", - "-102.196", - "-52.4604", - "-913.469", - "-480.641", - "-123.469", - "-37.8439", - "-301.129", - "-148.73", - "-238.457", - "-522.942", - "-415.079", - "-370.16", - "-240.007", - "-404.356", - "-222.216", - "-22.356", - "-578.159", - "-164.493", - "-172.543", - "-421.628", - "-93.9122", - "-13.81", - "-29.3752", - "-367.356", - "-197.544", - "-127.946", - "-540.249", - "-627.527", - "-108.457", - "-546.289", - "-499.783", - "-254.1", - "-292.346", - "-690.403", - "-254.321", - "-498.33", - "-456.701", - "-210.908", - "-208.677", - "-153.204", - "-25.487", - "-152.752", - "-532.328", - "-99.9388", - "-365.249", - "-144.245", - "-819.747", - "-581.225", - "-302.832", - "-544.96", - "-489.704", - "-107.98", - "-126.006", - "-659.718", - "-545.698", - "-178.45", - "-298.009", - "-251.111", - "-25.8766", - "-700.01", - "-547.805", - "-198.003", - "-558.359", - "-64.6802", - "-78.1781", - "-76.9375", - "-80.38", - "-325.538", - "-123.647", - "-292.886", - "-289.421", - "-124.052", - "-55.5421", - "-461.4", - "-68.6517", - "-179.853", - "-153.092", - "-187.386", - "-100.3", - "-14.8381", - "-499.507", - "-401.14", - "-615.393", - "-914.23", - "-6.75407", - "-588.744", - "-83.1492", - "-585.173", - "-249.959", - "-220.368", - "-953.304", - "-462.325", - "-79.4164", - "-956.76", - "-525.888", - "-146.084", - "-197.79", - "-237.681", - "-25.5936", - "-195.862", - "-437.548", - "-235.527", - "-390.88", - "-200.454", - "-487.507", - "-88.4525", - "-90.7379", - "-370.317", - "-514.144", - "-378.654", - "-24.195", - "-189.557", - "-131.698", - "-797.393", - "-120.181", - "-377.989", - "-268.532", - "-242.324", - "-49.4659", - "-313.921", - "-283.104", - "-427.975", - "-192.283", - "-114.968", - "-424.429", - "-151.648", - "-8.86097", - "-491.621", - "-462.718", - "-867.39", - "-807.463", - "-258.343", - "-116.25", - "-594.657", - "-274.164", - "-374.057", - "-60.7481", - "-133.518", - "-216.597", - "-592.139", - "-728.519", - "-371.24", - "-180.272", - "-491.495", - "-8.81259", - "-131.384", - "-160.386", - "-508.221", - "-221.304", - "-285.269", - "-397.075", - "-356.557", - "-120.785", - "-94.9204", - "-362.339", - "-701.412", - "-599.983", - "-50.7164", - "-93.7728", - "-546.603", - "-31.5426", - "-269.747", - "-411.35", - "-368.657", - "-393.778", - "-445.127", - "-31.8967", - "-491.175", - "-462.628", - "-297.641", - "-597.245", - "-411.457", - "-410.301", - "-430.566", - "-775.515", - "-670.659", - "-398.578", - "-452.51", - "-26.7445", - "-671.6", - "-442.836", - "-348.481", - "-493.392", - "-450.019", - "-206.253", - "-35.9951", - "-286.939", - "-299.633", - "-458.217", - "-369.404", - "-246.235", - "-592.39", - "-465.1", - "-560.258", - "-131.749", - "-413.588", - "-165.006", - "-274.651", - "-15.1597", - "-776.574", - "-151.08", - "-473.449", - "-409.909", - "-212.733", - "-264.14", - "-558.957", - "-58.8854", - "-607.817", - "-9.02225", - "-64.3929", - "-535.902", - "-568.909", - "-265.862", - "-55.1996", - "-81.5229", - "-302.509", - "-425.657", - "-318.73", - "-137.92", - "-21.5137", - "-340.993", - "-255.711", - "-686.794", - "-222.585", - "-133.154", - "-193.544", - "-337.204", - "-146.967", - "-446.382", - "-526.216", - "-579.153", - "-148.135", - "-90.8417", - "-554.482", - "-411.647", - "-141.851", - "-100.481", - "-236.303", - "-79.2482", - "-670.031", - "-517.408", - "-37.6941", - "-136.065", - "-137.269", - "-654.225", - "-289.67", - "-302.229", - "-30.584", - "-793.487", - "-511.633", - "-245.271", - "-430.089", - "-401.901", - "-173.617", - "-593.283", - "-562.565", - "-320.669", - "-578.816", - "-50.6667", - "-234.238", - "-495.412", - "-389.813", - "-473.377", - "-313.773", - "-458.792", - "-867.695", - "-709.769", - "-590.529", - "-710.211", - "-408.543", - "-60.9979", - "-159.857", - "-475.886", - "-586.471", - "-360.334", - "-60.6753", - "-412.622", - "-431.887", - "-572.799", - "-192.062", - "-188.052", - "-704.841", - "-302.1", - "-385.561", - "-205.619", - "-480.949", - "-631.892", - "-464.27", - "-40.299", - "-167.463", - "-118.311", - "-388.087", - "-566.142", - "-565.912", - "-384.445", - "-462.925", - "-131.732", - "-683.147", - "-441.575", - "-376.032", - "-236.041", - "-35.9221", - "-530.999", - "-371.538", - "-127.247", - "-819.588", - "-458.797", - "-312.464", - "-637.831", - "-203.759", - "-314.257", - "-60.9779", - "-544.494", - "-94.8255", - "-320.369", - "-238.004", - "-170.765", - "-735.418", - "-347.743", - "-334.599", - "-42.6728", - "-423.89", - "-67.0426", - "-0.620611", - "-389.099", - "-373.444", - "-245.488", - "-513.27", - "-418.758", - "-380.073", - "-517.64", - "-561.968", - "-693.548", - "-376.565", - "-70.5645", - "-631.981", - "-158.789", - "-229.771", - "-436.491", - "-981.659", - "-183.977", - "-503.911", - "-2.38454", - "-321.079", - "-542.496", - "-105.722", - "-909.545", - "-342.615", - "-345.248", - "-77.2414", - "-525.823", - "-281.255", - "-171.851", - "-480.163", - "-114.471", - "-34.5662", - "-232.436", - "-358.948", - "-438.249", - "-243.275", - "-177.347", - "-413.574", - "-157.254", - "-233.168", - "-553.736", - "-61.3236", - "-31.2103", - "-221.775", - "-133.198", - "-460.41", - "-183.362", - "-70.8143", - "-605.686", - "-156.176", - "-174.384", - "-389.241", - "-483.243", - "-459.887", - "-535.698", - "-305.846", - "-293.808", - "-340.433", - "-18.8352", - "-567.354", - "-244.674", - "-434.441", - "-198.582", - "-609.935", - "-285.825", - "-240.226", - "-43.0157", - "-111.572", - "-259.935", - "-610.317", - "-629.507", - "-209.968", - "-310.699", - "-467.025", - "-562.081", - "-331.793", - "-451.771", - "-811.129", - "-364.041", - "-194.791", - "-313.548", - "-25.7302", - "-516.987", - "-78.3952", - "-608.067", - "-215.107", - "-24.0752", - "-22.0772", - "-173.745", - "-6.30377", - "-458.671", - "-67.7938", - "-421.932", - "-451.944", - "-584.641", - "-513.65", - "-401.04", - "-461.99", - "-502.546", - "-349.293", - "-440.419", - "-445.435", - "-187.195", - "-428.508", - "-408.053", - "-803.385", - "-698.988", - "-309.205", - "-505.578", - "-164.11", - "-546.229", - "-325.402", - "-288.404", - "-721.106", - "-12.9438", - "-460.059", - "-41.7324", - "-284.201", - "-311.453", - "-438.557", - "-244.1", - "-587.714", - "-290.595", - "-143.012", - "-265.35", - "-687.738", - "-597.619", - "-213.528", - "-480.488", - "-608.339", - "-263.015", - "-940.862", - "-273.564", - "-454.014", - "-437.519", - "-112.343", - "-95.0839", - "-421.915", - "-71.836", - "-65.6278", - "-451.473", - "-234.574", - "-742.225", - "-480.482", - "-212.11", - "-165.393", - "-729.892", - "-162.916", - "-148.294", - "-367.997", - "-646.597", - "-612.296", - "-752.069", - "-82.4601", - "-138.186", - "-885.841", - "-312.763", - "-257.998", - "-454.633", - "-37.0068", - "-284.704", - "-279.209", - "-692.519", - "-653.414", - "-103.264", - "-524.589", - "-413.123", - "-658.26", - "-265.385", - "-208.671", - "-51.9076", - "-504.888", - "-754.31", - "-424.438", - "-257.211", - "-312.57", - "-195.414", - "-181.636", - "-359.225", - "-249.753", - "-412.874", - "-234.016", - "-54.2048", - "-457.253", - "-14.9364", - "-409.331", - "-353.113", - "-39.5737", - "-156.403", - "-343.347", - "-487.089", - "-126.767", - "-55.1383", - "-478.767", - "-55.2587", - "-259.513", - "-421.465", - "-269.175", - "-237.783", - "-310.811", - "-235.815", - "-335.158", - "-99.733", - "-235.009", - "-371.139", - "-443.365", - "-241.729", - "-303.05", - "-418.905", - "-188.474", - "-116.895", - "-96.8353", - "-615.013", - "-646.983", - "-609.756", - "-50.8208", - "-74.9548", - "-178.411", - "-480.864", - "-538.957", - "-308.288", - "-673.893", - "-22.6411", - "-463.236", - "-349.581", - "-694.506", - "-164.528", - "-277.732", - "-722.018", - "-2.44825", - "-39.5138", - "-391.073", - "-540.723", - "-611.901", - "-513.999", - "-556.521", - "-189.073", - "-85.5847", - "-581.514", - "-497.628", - "-25.2007", - "-537.924", - "-254.579", - "-169.837", - "-36.769", - "-134.566", - "-18.9765", - "-255.844", - "-563.518", - "-81.277", - "-258.375", - "-640.842", - "-359.178", - "-150.488", - "-336.507", - "-160.686", - "-213.194", - "-392.253", - "-181.629", - "-601.334", - "-529.294", - "-316.842", - "-602.172", - "-698.064", - "-352.662", - "-130.898", - "-195.201", - "-363.003", - "-127.013", - "-175.202", - "-395.038", - "-263.636", - "-566.333", - "-384.793", - "-555.741", - "-505.355", - "-75.4545", - "-28.9164", - "-146.736", - "-614.19", - "-348.415", - "-122.227", - "-116.763", - "-64.3581", - "-366.776", - "-287.168", - "-775.424", - "-271.645", - "-983.569", - "-69.8183", - "-207.914", - "-39.8723", - "-643.011", - "-219.564", - "-491.746", - "-461.332", - "-720.141", - "-123.31", - "-202.096", - "-304.799", - "-497.582", - "-369.633", - "-540.151", - "-529.216", - "-471.332", - "-624.126", - "-77.78", - "-32.8077", - "-126.807", - "-128.126", - "-450.626", - "-111.991", - "-162.182", - "-6.06486", - "-406.643", - "-151", - "-169.014", - "-418.745", - "-352.439", - "-210.759", - "-324.182", - "-359.69", - "-104.995", - "-687.239", - "-295.901", - "-33.4849", - "-215.399", - "-98.7709", - "-519.208", - "-289.953", - "-21.4145", - "-530.304", - "-47.3225", - "-584.292", - "-45.5305", - "-318.889", - "-213.079", - "-379.64", - "-104.318", - "-375.819", - "-947.378", - "-387.576", - "-579.724", - "-275.555", - "-258.001", - "-218.042", - "-155.778", - "-545.893", - "-311.217", - "-695.186", - "-92.2232", - "-43.2308", - "-395.194", - "-268.313", - "-352.953", - "-556.971", - "-460.13", - "-588.446", - "-2.52148", - "-404.036", - "-766.015", - "-550.206", - "-156.212", - "-662.694", - "-580.563", - "-278.717", - "-80.7882", - "-311.349", - "-182.625", - "-156.838", - "-564.002", - "-415.859", - "-376.807", - "-322.485", - "-192.902", - "-635.735", - "-133.159", - "-184.611", - "-389.267", - "-982.417", - "-516.801", - "-372.452", - "-394.472", - "-461.454", - "-121.746", - "-292.563", - "-397.303", - "-405.917", - "-276.986", - "-35.0369", - "-59.8342", - "-172.95", - "-350.807", - "-355.55", - "-485.396", - "-568.552", - "-314.695", - "-48.4268", - "-335.691", - "-390.018", - "-322.235", - "-44.3796", - "-48.6214", - "-30.4571", - "-308.489", - "-21.2363", - "-181.016", - "-417.097", - "-29.4554", - "-129.851", - "-529.918", - "-587.681", - "-623.022", - "-215.374", - "-188.268", - "-236.995", - "-224.77", - "-325.98", - "-4.16105", - "-77.2354", - "-532.008", - "-206.102", - "-526.595", - "-353.115", - "-485.968", - "-709.425", - "-454.603", - "-414.795", - "-272.788", - "-370.399", - "-324.53", - "-615.39", - "-462.316", - "-450.685", - "-395.698", - "-997.903", - "-306.995", - "-198.925", - "-902.423", - "-513.88", - "-212.56", - "-182.164", - "-236.171", - "-458.085", - "-442.848", - "-60.3012", - "-490.703", - "-537.281", - "-457.277", - "-296.266", - "-559.783", - "-561.757", - "-146.605", - "-166.421", - "-852.245", - "-25.8299", - "-411.656", - "-672.191", - "-53.9012", - "-619.842", - "-100.258", - "-390.117", - "-104.34", - "-71.2735", - "-253.107", - "-593.146", - "-616.848", - "-177.423", - "-221.228", - "-126.936", - "-184.771", - "-542.538", - "-559.186", - "-559.407", - "-441.283", - "-353.128", - "-376.172", - "-498.864", - "-103.422", - "-326.476", - "-87.8434", - "-208.468", - "-215.159", - "-188.917", - "-382.219", - "-117.103", - "-441.476", - "-7.04984", - "-117.801", - "-138.07", - "-44.4798", - "-242.451", - "-645.028", - "-700.319", - "-506.423", - "-674.879", - "-344.267", - "-268.548", - "-697.524", - "-601.652", - "-441.406", - "-311.582", - "-56.189", - "-425.461", - "-140.41", - "-568.268", - "-492.669", - "-9.54549", - "-339.994", - "-38.6656", - "-338.061", - "-303.322", - "-33.4975", - "-277.203", - "-7.13951", - "-503.709", - "-294.022", - "-179.241", - "-494.698", - "-80.749", - "-250.56", - "-377.692", - "-411.1", - "-405.826", - "-264.789", - "-268.759", - "-341.3", - "-93.4686", - "-749.938", - "-210.408", - "-47.6824", - "-11.8811", - "-369.572", - "-138.983", - "-104.498", - "-488.821", - "-540.69", - "-204.51", - "-293.412", - "-557.114", - "-254.605", - "-564.297", - "-48.6608", - "-584.382", - "-297.649", - "-529.89", - "-388.618", - "-609.374", - "-639.262", - "-24.7663", - "-433.22", - "-49.6089", - "-511.593", - "-299.321", - "-444.099", - "-4.46902", - "-299.721", - "-460.017", - "-454.692", - "-473.471", - "-143.255", - "-62.5161", - "-459.547", - "-597.248", - "-635.145", - "-684.404", - "-379.438", - "-335.336", - "-510.186", - "-697.623", - "-516.651", - "-585.23", - "-25.0313", - "-486.605", - "-266.32", - "-48.0002", - "-82.3851", - "-91.0538", - "-514.503", - "-41.0165", - "-229.647", - "-219.327", - "-247.076", - "-817.022", - "-18.1893", - "-18.7414", - "-436.186", - "-333.669", - "-713.136", - "-65.9717", - "-32.787", - "-504.041", - "-599.089", - "-676.574", - "-339.508", - "-432.845", - "-189.949", - "-251.725", - "-573.666", - "-375.313", - "-116.057", - "-305.189", - "-228.263", - "-92.8273", - "-23.2141", - "-335.408", - "-419.247", - "-108.044", - "-485.22", - "-237.843", - "-72.6956", - "-617.677", - "-646.507", - "-250.723", - "-389.438", - "-206.999", - "-453.902", - "-226.089", - "-229.891", - "-132.328", - "-266.568", - "-218.72", - "-257.514", - "-692.194", - "-552.319", - "-177.197", - "-504.518", - "-177.186", - "-63.1207", - "-370.089", - "-579.278", - "-254.204", - "-423.659", - "-111.607", - "-112.815", - "-257.677", - "-408.316", - "-310.127", - "-432.798", - "-90.7188", - "-56.9155", - "-668.593", - "-310.964", - "-206.637", - "-108.67", - "-315.466", - "-409.802", - "-277.658", - "-160.866", - "-402.019", - "-557.282", - "-601.667", - "-550.548", - "-106.318", - "-77.6981", - "-311.882", - "-313.76", - "-40.8847", - "-74.0105", - "-383.048", - "-387.946", - "-218.105", - "-536.125", - "-298.403", - "-148.079", - "-54.9226", - "-768.016", - "-420.565", - "-53.2049", - "-425.377", - "-0.695744", - "-680.827", - "-255.062", - "-388.297", - "-729.845", - "-30.4698", - "-208.946", - "-91.6125", - "-151.836", - "-603.863", - "-160.804", - "-161.289", - "-582.509", - "-333.607", - "-363.366", - "-620.895", - "-400.018", - "-70.3663", - "-403.498", - "-360.936", - "-97.2037", - "-421.814", - "-346.539", - "-563.6", - "-303.341", - "-485.912", - "-445.96", - "-382.252", - "-672.343", - "-565.95", - "-150.882", - "-368.945", - "-208.198", - "-614.424", - "-15.1268", - "-288.06", - "-398.224", - "-120.833", - "-169.08", - "-553.676", - "-532.86", - "-478.846", - "-640.73", - "-654.417", - "-490.562", - "-66.2367", - "-322.888", - "-201.018", - "-324.006", - "-537.848", - "-154.833", - "-592.501", - "-432.476", - "-580.635", - "-519.26", - "-315.247", - "-711.306", - "-103.475", - "-406.894", - "-64.6295", - "-209.963", - "-68.7579", - "-214.726", - "-519.066", - "-173.597", - "-844.973", - "-193.035", - "-200.756", - "-387.296", - "-669.667", - "-541.49", - "-44.365", - "-605.104", - "-516.026", - "-358.809", - "-28.3265", - "-474.281", - "-349.109", - "-21.1216", - "-215.098", - "-171.465", - "-108.58", - "-251.069", - "-149.926", - "-666.131", - "-280.125", - "-341.927", - "-310.566", - "-421.736", - "-119.046", - "-61.4801", - "-413.683", - "-431.376", - "-236.868", - "-260.703", - "-200.107", - "-319.458", - "-630.94", - "-223.039", - "-644.669", - "-464.967", - "-253.172", - "-371.447", - "-724.495", - "-565.918", - "-6.16534", - "-355.426", - "-217.137", - "-324.962", - "-5.30048", - "-658.443", - "-181.886", - "-32.6839", - "-555.152", - "-271.456", - "-212.369", - "-920.083", - "-12.3721", - "-90.2323", - "-187.325", - "-193.432", - "-492.649", - "-315.878", - "-267.21", - "-458.756", - "-134.347", - "-412.83", - "-408.8", - "-299.514", - "-41.2041", - "-620.36", - "-62.3746", - "-246.423", - "-83.2856", - "-704.73", - "-461.147", - "-5.75401", - "-145.844", - "-252.125", - "-129.045", - "-532.294", - "-499.896", - "-618.055", - "-332.105", - "-218.302", - "-355.918", - "-100.051", - "-520.733", - "-283.439", - "-219.779", - "-131.347", - "-619.604", - "-369.253", - "-504.805", - "-255.96", - "-635.137", - "-264.857", - "-788.666", - "-123.654", - "-495.464", - "-690.307", - "-207.579", - "-487.755", - "-407.12", - "-473.728", - "-503.038", - "-150.795", - "-303.674", - "-467.849", - "-315.176", - "-300.134", - "-247.294", - "-168.438", - "-520.332", - "-30.5567", - "-429.284", - "-470.238", - "-357.511", - "-593.127", - "-74.3432", - "-456.957", - "-633.945", - "-338.431", - "-355.111", - "-73.1978", - "-36.3012", - "-420.482", - "-72.5206", - "-225.655", - "-393.996", - "-239.727", - "-415.984", - "-20.6054", - "-441.362", - "-775.082", - "-317.543", - "-512.658", - "-594.248", - "-622.609", - "-347.579", - "-431.9", - "-624.963", - "-126.929", - "-150.821", - "-386.548", - "-463.464", - "-205.822", - "-97.8487", - "-297", - "-319.186", - "-53.2952", - "-560.33", - "-92.4521", - "-139.471", - "-189.74", - "-270.809", - "-185.388", - "-134.996", - "-440.378", - "-188.705", - "-289.554", - "-523.086", - "-236.724", - "-90.9976", - "-73.1216", - "-587.232", - "-615.731", - "-405.084", - "-230.234", - "-94.9638", - "-790.693", - "-28.6371", - "-769.116", - "-123.739", - "-240.621", - "-139.539", - "-129.816", - "-536.971", - "-309.187", - "-501.146", - "-312.844", - "-386.996", - "-187.329", - "-36.1931", - "-438.689", - "-358.882", - "-440.585", - "-514.567", - "-559.937", - "-339.145", - "-171.879", - "-85.9401", - "-21.786", - "-421.255", - "-528.805", - "-229.595", - "-25.1076", - "-150.744", - "-625.338", - "-424.508", - "-160.633", - "-330.577", - "-901.594", - "-272.288", - "-396.516", - "-524.477", - "-81.387", - "-18.5835", - "-258.35", - "-433.855", - "-184.992", - "-24.7433", - "-34.0518", - "-628.037", - "-174.588", - "-608.076", - "-308.438", - "-841.402", - "-9.12113", - "-594.674", - "-426.795", - "-778.008", - "-349.468", - "-539.025", - "-133.157", - "-102.728", - "-16.4841", - "-332.877", - "-721.607", - "-745.398", - "-159.022", - "-276.391", - "-499.766", - "-355.795", - "-389.264", - "-540.519", - "-97.4305", - "-179.272", - "-349.42", - "-642.78", - "-119.838", - "-336.44", - "-174.266", - "-337.272", - "-513.489", - "-230.462", - "-371.407", - "-81.7925", - "-712.716", - "-667.792", - "-61.7365", - "-98.3641", - "-202.156", - "-182.667", - "-522.22", - "-277.47", - "-797.005", - "-332.139", - "-300.572", - "-235.247", - "-422.787", - "-505.38", - "-535.53", - "-631.104", - "-315.205", - "-356.485", - "-19.7989", - "-183.272", - "-645.837", - "-57.0219", - "-50.8907", - "-589.334", - "-186.482", - "-169.259", - "-298.078", - "-710.508", - "-182.671", - "-504.536", - "-75.6058", - "-419.441", - "-511.425", - "-327.091", - "-242.564", - "-117.98", - "-228.074", - "-21.0332", - "-453.983", - "-337.056", - "-460.818", - "-55.6223", - "-166.677", - "-49.4885", - "-481.262", - "-432.301", - "-662.394", - "-91.2794", - "-322.311", - "-49.5159", - "-698.214", - "-68.4011", - "-76.5969", - "-453.49", - "-429.093", - "-293.081", - "-345.997", - "-291.426", - "-803.117", - "-278.282" - ], - "ysrc": "JohnMaddock:42:e2afb6", - "y": [ - "-298.943", - "-433.349", - "-994.859", - "-820.812", - "-480.847", - "-837.945", - "-600.454", - "-745.459", - "-907.151", - "-426.846", - "-825.214", - "-516.02", - "-767.115", - "-443.004", - "-976.635", - "-433.557", - "-71.6743", - "-908.238", - "-657.221", - "-653.95", - "-354.495", - "-895.919", - "-796.72", - "-358.74", - "-921.619", - "-683.036", - "-363.124", - "-950.602", - "-587.004", - "-511.263", - "-444.091", - "-465.56", - "-995.44", - "-504.99", - "-249.821", - "-496.92", - "-714.733", - "-397.74", - "-616.511", - "-474.387", - "-736.388", - "-287.919", - "-104.469", - "-587.025", - "-376.116", - "-579.66", - "-906.061", - "-518.486", - "-368.821", - "-456.454", - "-907.555", - "-676.355", - "-693.415", - "-631.885", - "-700.49", - "-60.8553", - "-479.343", - "-52.3821", - "-718.786", - "-482.294", - "-689.098", - "-757.249", - "-934.463", - "-728.303", - "-374.132", - "-494.305", - "-706.979", - "-856.755", - "-428.967", - "-721.679", - "-706.883", - "-298.58", - "-614.559", - "-907.808", - "-601.831", - "-729.627", - "-863.07", - "-605.214", - "-476.344", - "-855.709", - "-844.026", - "-983.081", - "-706.639", - "-425.134", - "-543.477", - "-446.13", - "-767.092", - "-809.364", - "-310.684", - "-245.807", - "-610.808", - "-464.119", - "-728.389", - "-310.32", - "-925.188", - "-198.433", - "-376.128", - "-588.02", - "-232.241", - "-579.818", - "-611.023", - "-581.127", - "-611.607", - "-891.646", - "-523.836", - "-689.672", - "-582.541", - "-913.767", - "-657.727", - "-611.03", - "-604.063", - "-483.752", - "-685.021", - "-309.882", - "-903.992", - "-500.355", - "-590.557", - "-539.981", - "-578.343", - "-630.884", - "-441.031", - "-53.5723", - "-892.845", - "-353.609", - "-392.62", - "-608.81", - "-727.243", - "-95.8609", - "-450.872", - "-917.355", - "-290.248", - "-713.338", - "-566.021", - "-539.248", - "-913.726", - "-559.232", - "-437.815", - "-955.424", - "-341.619", - "-618.405", - "-305.19", - "-199.668", - "-473.707", - "-393.388", - "-450.521", - "-894.504", - "-738.676", - "-403.03", - "-933.514", - "-19.2167", - "-384.502", - "-464.273", - "-356.988", - "-434.062", - "-625.194", - "-388.849", - "-724.984", - "-475.087", - "-847.9", - "-414.04", - "-692.967", - "-709.508", - "-446.294", - "-637.173", - "-970.484", - "-914.084", - "-576.346", - "-605.162", - "-321.993", - "-802.235", - "-838.849", - "-760.938", - "-603.073", - "-892.95", - "-680.419", - "-722.688", - "-400.876", - "-868.995", - "-902.8", - "-631.454", - "-784.921", - "-990.23", - "-578.998", - "-486.949", - "-666.864", - "-291.889", - "-650.744", - "-577.5", - "-679.762", - "-420.864", - "-795.465", - "-531.966", - "-360.975", - "-391.216", - "-637.444", - "-673.513", - "-926.531", - "-982.488", - "-782.533", - "-458.639", - "-746.019", - "-432.475", - "-851.015", - "-905.615", - "-357.467", - "-516.201", - "-918.469", - "-835.414", - "-806.843", - "-343.126", - "-682.704", - "-77.9688", - "-308.874", - "-694.32", - "-817.433", - "-428.834", - "-693.533", - "-954.142", - "-706.017", - "-836.467", - "-505.184", - "-506.903", - "-758.578", - "-723.637", - "-922.391", - "-615.889", - "-630.926", - "-453.941", - "-655.794", - "-491.232", - "-671.105", - "-903.554", - "-223.431", - "-761.405", - "-550.17", - "-433.886", - "-770.24", - "-599.393", - "-823.238", - "-961.754", - "-572.294", - "-436.725", - "-345.767", - "-476.036", - "-749.264", - "-769.235", - "-957.622", - "-531.131", - "-406.263", - "-541.665", - "-369.042", - "-808.542", - "-872.277", - "-800.589", - "-779.994", - "-603.146", - "-861.884", - "-368.759", - "-681.936", - "-375.37", - "-360.253", - "-347.526", - "-628.348", - "-920.372", - "-781.071", - "-85.9264", - "-775.318", - "-908.238", - "-601.222", - "-790.372", - "-446.826", - "-394.192", - "-540.494", - "-468.753", - "-727.974", - "-810.103", - "-826.259", - "-488.206", - "-212.72", - "-35.1941", - "-809.521", - "-905.812", - "-275.361", - "-565.926", - "-691.895", - "-488.164", - "-569.896", - "-464.855", - "-909.132", - "-413.885", - "-997.321", - "-637.156", - "-330.75", - "-486.414", - "-629.568", - "-474.085", - "-828.194", - "-734.681", - "-322.657", - "-380.844", - "-889.204", - "-909.876", - "-644.848", - "-936.626", - "-418.385", - "-881.46", - "-675.57", - "-687.427", - "-834.37", - "-733.71", - "-559.753", - "-668.586", - "-529.841", - "-841.581", - "-801.481", - "-405.703", - "-539.884", - "-874.168", - "-289.017", - "-895.067", - "-615.519", - "-574.446", - "-843.735", - "-964.298", - "-432.379", - "-803.939", - "-201.989", - "-469.508", - "-492.894", - "-993.075", - "-798.544", - "-684.575", - "-972.57", - "-728.613", - "-580.573", - "-496.413", - "-529.326", - "-399.9", - "-520.045", - "-863.807", - "-556.322", - "-842.256", - "-392.092", - "-974.601", - "-724.56", - "-946.857", - "-687.113", - "-505.473", - "-813.783", - "-680.179", - "-622.669", - "-692.846", - "-395.563", - "-697.734", - "-429.567", - "-672.928", - "-768.407", - "-334.907", - "-570.683", - "-282.558", - "-474.053", - "-745.542", - "-686.046", - "-783.068", - "-703.254", - "-662.409", - "-545.051", - "-517.62", - "-755.982", - "-502.678", - "-457.997", - "-529.218", - "-588.856", - "-572.209", - "-543.446", - "-978.119", - "-593.986", - "-674.553", - "-519.415", - "-355.318", - "-375.997", - "-671.382", - "-594.398", - "-588.814", - "-919.607", - "-432.41", - "-876.447", - "-584.694", - "-619.988", - "-961.429", - "-913.272", - "-396.95", - "-834.885", - "-522.808", - "-461", - "-503.333", - "-632.129", - "-57.1", - "-593.565", - "-272.697", - "-845.459", - "-638.044", - "-868.275", - "-729.194", - "-455.654", - "-741.178", - "-436.195", - "-497.022", - "-545.671", - "-956.131", - "-798.691", - "-373.338", - "-783.104", - "-862.446", - "-620.288", - "-603.656", - "-496.586", - "-992.288", - "-714.095", - "-638", - "-851.914", - "-922.106", - "-673.792", - "-657.972", - "-387.187", - "-373.159", - "-369.238", - "-959.144", - "-342.175", - "-788.211", - "-518.999", - "-521.472", - "-354.567", - "-546.036", - "-654.608", - "-616.62", - "-314.792", - "-436.797", - "-484.711", - "-587.648", - "-992.18", - "-364.435", - "-994.471", - "-418.483", - "-426.498", - "-943.997", - "-584.466", - "-478.874", - "-687.566", - "-509.834", - "-416.263", - "-861.119", - "-840.114", - "-628.344", - "-12.6444", - "-968.259", - "-532.872", - "-605.073", - "-916.031", - "-791.863", - "-718.766", - "-757.475", - "-565.237", - "-750.603", - "-713.567", - "-632.934", - "-981.115", - "-317.049", - "-509.701", - "-862.421", - "-698.974", - "-550.592", - "-774.978", - "-744.457", - "-815.459", - "-794.504", - "-458.309", - "-427.653", - "-723.638", - "-539.484", - "-321.641", - "-628.605", - "-839.255", - "-327.698", - "-697.689", - "-552.24", - "-638.751", - "-934.621", - "-503.221", - "-733.905", - "-672.353", - "-876.389", - "-755.183", - "-809.456", - "-539.956", - "-839.722", - "-696.701", - "-669.668", - "-293.919", - "-774.404", - "-527.275", - "-530.75", - "-693.655", - "-712.351", - "-671.049", - "-562.282", - "-994.527", - "-818.377", - "-319.984", - "-628.558", - "-865.71", - "-607.106", - "-760.293", - "-840.92", - "-187.009", - "-575.272", - "-745.692", - "-816.76", - "-621.639", - "-423.368", - "-918.32", - "-530.469", - "-934.197", - "-767.066", - "-774.569", - "-20.53", - "-964.719", - "-803.496", - "-610.324", - "-332.992", - "-705.278", - "-315.633", - "-11.4233", - "-517.604", - "-776.493", - "-663.318", - "-367.319", - "-618.244", - "-792.664", - "-492.135", - "-787.723", - "-449.319", - "-834.226", - "-777.577", - "-304.146", - "-749.748", - "-372.163", - "-876.367", - "-377.597", - "-512.487", - "-441.117", - "-896.825", - "-502.901", - "-294.617", - "-663.323", - "-508.49", - "-457.581", - "-762.865", - "-613.482", - "-617.421", - "-990.299", - "-551.058", - "-907.076", - "-587.667", - "-452.218", - "-731.552", - "-668.839", - "-310.452", - "-183.19", - "-839.198", - "-950.936", - "-346.232", - "-915.863", - "-706.276", - "-710.931", - "-501.249", - "-298.416", - "-533.253", - "-875.445", - "-512.861", - "-568.457", - "-391.177", - "-705.779", - "-492.222", - "-378.791", - "-747.02", - "-374.797", - "-629.775", - "-660.678", - "-798.133", - "-862.321", - "-576.173", - "-575.857", - "-285.76", - "-713.888", - "-659.28", - "-507.843", - "-341.947", - "-552.392", - "-697.597", - "-812.043", - "-607.81", - "-768.182", - "-327.984", - "-636.193", - "-674.405", - "-662.919", - "-966.628", - "-733.524", - "-238.24", - "-962.758", - "-275.149", - "-709.184", - "-848.004", - "-787.904", - "-455.133", - "-617.885", - "-453.527", - "-970.384", - "-648.954", - "-842.858", - "-842.098", - "-661.301", - "-630.112", - "-857.033", - "-654.434", - "-319.212", - "-653.42", - "-642.251", - "-425.652", - "-872.994", - "-446.623", - "-381.771", - "-476.106", - "-744.206", - "-212.731", - "-322.198", - "-581.698", - "-41.002", - "-815.429", - "-568.732", - "-814.501", - "-423.016", - "-483.071", - "-595.316", - "-485.054", - "-116.581", - "-491.966", - "-808.325", - "-908.278", - "-531.455", - "-272.468", - "-874.594", - "-718.538", - "-748.69", - "-725.932", - "-927.111", - "-649.413", - "-686.998", - "-542.021", - "-741.426", - "-497.269", - "-302.897", - "-845.562", - "-883.168", - "-861.513", - "-919.296", - "-684.16", - "-938.455", - "-794.633", - "-828.678", - "-870.284", - "-600.936", - "-957.519", - "-870.828", - "-350.414", - "-940.163", - "-920.876", - "-468.602", - "-704.524", - "-823.713", - "-365.341", - "-636.531", - "-718.47", - "-886.828", - "-931.733", - "-869.334", - "-419.378", - "-360.922", - "-571.26", - "-770.179", - "-577.704", - "-520.34", - "-998.336", - "-733.307", - "-942.443", - "-668.256", - "-515.781", - "-647.705", - "-649.683", - "-955.313", - "-959.814", - "-641.719", - "-424.88", - "-775.413", - "-46.8712", - "-431.558", - "-426.918", - "-696.619", - "-697.851", - "-387.986", - "-661.431", - "-1.61684", - "-508.264", - "-876.013", - "-654.774", - "-258.353", - "-864.061", - "-928.499", - "-637.482", - "-425.859", - "-539.004", - "-455.275", - "-775.99", - "-964.545", - "-650.699", - "-551.406", - "-916.455", - "-293.193", - "-130.146", - "-582.081", - "-709.207", - "-347.639", - "-480.148", - "-611.244", - "-592.353", - "-653.113", - "-875.406", - "-582.065", - "-927.663", - "-677.016", - "-820.333", - "-404.411", - "-685.418", - "-432.537", - "-685.813", - "-664.383", - "-375.567", - "-647.985", - "-466.795", - "-494.235", - "-445.449", - "-506.44", - "-905.117", - "-385.143", - "-385.653", - "-984.972", - "-807.044", - "-597.047", - "-431.213", - "-609.698", - "-842.317", - "-338.14", - "-545.416", - "-644.949", - "-589.575", - "-998.5", - "-601.692", - "-494.043", - "-764.719", - "-912.607", - "-603.994", - "-421.294", - "-799.288", - "-897.291", - "-903.353", - "-430.475", - "-359.303", - "-537.635", - "-208.665", - "-748.83", - "-733.195", - "-454.719", - "-459.994", - "-543.745", - "-986.627", - "-839.187", - "-824.748", - "-739.19", - "-569.933", - "-831.009", - "-336.015", - "-419.264", - "-408.35", - "-384.677", - "-878.058", - "-466.144", - "-707.057", - "-562.208", - "-675.694", - "-488.721", - "-323.253", - "-465.482", - "-704.202", - "-783.968", - "-953.905", - "-593.792", - "-293.904", - "-962.01", - "-225.66", - "-563.132", - "-569.229", - "-321.942", - "-335.748", - "-218.29", - "-726.69", - "-811.801", - "-466.506", - "-870.134", - "-808.799", - "-261.483", - "-608.421", - "-504.192", - "-609.136", - "-601.983", - "-815.044", - "-665.295", - "-810.168", - "-462.991", - "-934.993", - "-573.571", - "-550.634", - "-646.325", - "-636.705", - "-378.092", - "-605.977", - "-266.254", - "-947.357", - "-346.917", - "-550.771", - "-266.596", - "-445.291", - "-420.94", - "-749.618", - "-674.047", - "-552.823", - "-715.165", - "-72.9582", - "-940.365", - "-86.5813", - "-310.486", - "-742.338", - "-447.298", - "-534.164", - "-834.712", - "-697.415", - "-426.293", - "-524.283", - "-439.386", - "-431.461", - "-703.23", - "-492.248", - "-561.281", - "-495.742", - "-659.564", - "-717.925", - "-443.903", - "-920.677", - "-677.406", - "-493.709", - "-870.664", - "-815.628", - "-275.416", - "-378.138", - "-654.931", - "-799.45", - "-950.499", - "-805.903", - "-675.45", - "-764.617", - "-596.189", - "-842.89", - "-376.727", - "-688.999", - "-858.199", - "-452.623", - "-987.666", - "-253.562", - "-739.769", - "-596.873", - "-699.917", - "-824.555", - "-670.084", - "-826.011", - "-586.279", - "-801.911", - "-574.88", - "-673.858", - "-337.486", - "-796.19", - "-415.381", - "-595.876", - "-91.511", - "-820.868", - "-471.12", - "-865.725", - "-638.949", - "-420.586", - "-840.843", - "-276.968", - "-490.679", - "-445.559", - "-476.366", - "-911.369", - "-579.964", - "-586.121", - "-642.469", - "-927.606", - "-495.356", - "-427.1", - "-971.563", - "-991.731", - "-464.334", - "-975.161", - "-454.465", - "-647.027", - "-841.422", - "-506.317", - "-462.373", - "-366.598", - "-857.771", - "-561.895", - "-369.707", - "-954.668", - "-603.264", - "-640.349", - "-980.215", - "-817.67", - "-443.745", - "-356.102", - "-598.098", - "-471.594", - "-650.028", - "-389.34", - "-857.771", - "-980.567", - "-420.352", - "-862.424", - "-648.424", - "-453.397", - "-875.869", - "-528.482", - "-704.937", - "-905.468", - "-807.434", - "-433.036", - "-308.167", - "-673.86", - "-309.209", - "-695.21", - "-731.308", - "-770.69", - "-728.139", - "-341.853", - "-672.82", - "-937.876", - "-544.866", - "-944.952", - "-443.424", - "-580.416", - "-871.876", - "-479.856", - "-648.675", - "-495.088", - "-990.686", - "-875.605", - "-570.331", - "-440.139", - "-810.727", - "-784.104", - "-835.848", - "-830.212", - "-749.189", - "-559.828", - "-717.991", - "-977", - "-26.5672", - "-769.437", - "-871.708", - "-885.91", - "-928.657", - "-434.149", - "-943.958", - "-886.283", - "-445.793", - "-434.22", - "-640.586", - "-666.797", - "-483.02", - "-879.98", - "-334.62", - "-596.577", - "-613.309", - "-897.584", - "-888.927", - "-957.157", - "-292.008", - "-702.621", - "-526.051", - "-977.314", - "-754.324", - "-970.144", - "-881.362", - "-356.638", - "-665.407", - "-742.626", - "-502.642", - "-841.204", - "-718.96", - "-589.407", - "-564.957", - "-449.379", - "-495.874", - "-381.726", - "-915.452", - "-832.291", - "-470.808", - "-504.305", - "-643.171", - "-841.648", - "-458.642", - "-528.336", - "-684.479", - "-807.354", - "-610.56", - "-924.548", - "-895.701", - "-651.249", - "-962.37", - "-824.097", - "-928.5", - "-829.534", - "-716.318", - "-916.268", - "-718.131", - "-684.637", - "-822.006", - "-599.696", - "-686.166", - "-757.323", - "-992.861", - "-819.046", - "-553.798", - "-525.416", - "-867.285", - "-764.127", - "-861.93", - "-429.37", - "-880.087", - "-498.028", - "-607.442", - "-725.458", - "-748.193", - "-557.007", - "-951.746", - "-866.791", - "-485.706", - "-658.574", - "-321.964", - "-382.225", - "-590.766", - "-689.14", - "-25.9154", - "-398.961", - "-509.818", - "-749.878", - "-959.239", - "-512.445", - "-804.056", - "-877.352", - "-547.997", - "-851.294", - "-915.238", - "-366.131", - "-482.263", - "-606.684", - "-782.835", - "-834.906", - "-350.072", - "-987.221", - "-860.371", - "-933.988", - "-783.609", - "-450.246", - "-508.397", - "-946.35", - "-380.706", - "-683.034", - "-473.58", - "-395.594", - "-759.564", - "-710.245", - "-802.999", - "-626.452", - "-473.812", - "-376.395", - "-556.39", - "-885.74", - "-663.41", - "-791.574", - "-829.554", - "-654.073", - "-464.512", - "-611.469", - "-814.75", - "-775.359", - "-572.878", - "-514.918", - "-603.516", - "-856.386", - "-485.063", - "-781.039", - "-986.614", - "-633.259", - "-248.571", - "-838.25", - "-515.599", - "-744.579", - "-372.927", - "-308.154", - "-599.664", - "-946.47", - "-635.839", - "-920.722", - "-977.533", - "-740.382", - "-686.323", - "-576.749", - "-2.68932", - "-526.019", - "-605.961", - "-23.5286", - "-535.352", - "-832.599", - "-760.38", - "-855.276", - "-374.531", - "-328.461", - "-933.687", - "-619.864", - "-619.462", - "-445.882", - "-370.43", - "-822.38", - "-488.369", - "-541.722", - "-446.512", - "-730.985", - "-305.684", - "-257.739", - "-554.134", - "-906.251", - "-310.042", - "-874.171", - "-773.852", - "-809.61", - "-655.922", - "-782.382", - "-506.358", - "-708.34", - "-274.074", - "-799.587", - "-822.324", - "-922.645", - "-878.321", - "-587.435", - "-370.208", - "-950.465", - "-778.23", - "-858.046", - "-443.431", - "-773.493", - "-939.914", - "-509.46", - "-742.954", - "-448.444", - "-967.17", - "-581.517", - "-871.906", - "-656.442", - "-606.924", - "-677.528", - "-821.937", - "-601.196", - "-776.738", - "-747.824", - "-293.505", - "-399.238", - "-687.196", - "-433.802", - "-434.181", - "-880.715", - "-512.894", - "-395.352", - "-396.636", - "-844.519", - "-516.745", - "-708.387", - "-534.068", - "-688.436", - "-639.387", - "-982.097", - "-163.372", - "-514.486", - "-459.029", - "-952.324", - "-21.8108", - "-558.359", - "-550.615", - "-792.19", - "-620.252", - "-582.694", - "-855.6", - "-847.034", - "-834.797", - "-763.781", - "-759.315", - "-733.07", - "-672.289", - "-859.362", - "-571.644", - "-606.948", - "-639.191", - "-391.918", - "-993.092", - "-915.822", - "-499.946", - "-629.984", - "-743.852", - "-567.253", - "-622.69", - "-605.989", - "-572.749", - "-619.686", - "-855.019", - "-929.188", - "-575.202", - "-839.749", - "-896.295", - "-400.868", - "-691.075", - "-53.2555", - "-514.338", - "-535.544", - "-654.901", - "-762.097", - "-728.12", - "-538.42", - "-186.84", - "-584.868", - "-862.087", - "-873.17", - "-421.596", - "-605.408", - "-486.768", - "-569.274", - "-640.137", - "-509.216", - "-875.216", - "-565.628", - "-468.06", - "-833.816", - "-420.719", - "-723.093", - "-619.975", - "-562.532", - "-662.078", - "-748.357", - "-730.076", - "-707.89", - "-559.915", - "-604.958", - "-617.278", - "-594.539", - "-870.137", - "-824.559", - "-897.188", - "-518.014", - "-510.5", - "-620.125", - "-971.194", - "-65.4324", - "-617.994", - "-428.085", - "-985.505", - "-832.987", - "-582.694", - "-455.233", - "-940.367", - "-575.047", - "-712.316", - "-848.853", - "-540.21", - "-815.509", - "-549.178", - "-857.974", - "-606.95", - "-879.606", - "-487.758", - "-518.407", - "-544.92", - "-504.965", - "-588.035", - "-332.921", - "-948.007", - "-818.061", - "-613.475", - "-718.797", - "-952.659", - "-540.859", - "-827.601", - "-909.681", - "-574.084", - "-253.698", - "-249.42", - "-332.745", - "-536.008", - "-666.265", - "-652.612", - "-713.838", - "-730.378", - "-737.425", - "-812.97", - "-858.405", - "-511.542", - "-950.506", - "-471.851", - "-681.665", - "-706.729", - "-629.497", - "-684.644", - "-462.951", - "-522.276", - "-789.665", - "-515.133", - "-607.97", - "-433.811", - "-884.956", - "-720.772", - "-490.155", - "-676.291", - "-907.724", - "-576.896", - "-530.895", - "-610.596", - "-768.01", - "-616.363", - "-30.0096", - "-622.563", - "-897.65", - "-426.37", - "-456.324", - "-898.279", - "-498.121", - "-596.435", - "-46.7696", - "-581.624", - "-724.475", - "-635.096", - "-375.198", - "-436.196", - "-806.271", - "-939.826", - "-818.559", - "-894.928", - "-565.613", - "-711.219", - "-561.71", - "-862.01", - "-934.249", - "-518.124", - "-664.073", - "-875.286", - "-989.125", - "-842.579", - "-871.217", - "-490.915", - "-985.707", - "-639.294", - "-931.07", - "-386.303", - "-565.975", - "-365.087", - "-434.386", - "-492.892", - "-716.795", - "-421.853", - "-954.314", - "-835.146", - "-918.099", - "-656.783", - "-362.798", - "-621.914", - "-530.337", - "-596.689", - "-775.769", - "-826.67", - "-452.743", - "-582.644", - "-614.863", - "-819.265", - "-843.982", - "-564.638", - "-743.304", - "-735.804", - "-938.452", - "-798.595", - "-968.84", - "-448.881", - "-848.74", - "-629.908", - "-950.036", - "-810.638", - "-877.787", - "-156.466", - "-714.088", - "-777.508", - "-823.465", - "-517.489", - "-444.211", - "-652.083", - "-928.69", - "-576.55", - "-640.68", - "-589.937", - "-576.421", - "-962.128", - "-657.477", - "-401.424", - "-985.496", - "-512.227", - "-899.145", - "-605.536", - "-574.931", - "-834.738", - "-719.188", - "-528.766", - "-709.272", - "-973.783", - "-412.896", - "-395.929", - "-397.285", - "-697.131", - "-985.525", - "-498.859", - "-475.985", - "-426.194", - "-421.986", - "-737.272", - "-602.663", - "-486.602", - "-999.222", - "-678.152", - "-467.772", - "-565.463", - "-856.147", - "-666.212", - "-499.522", - "-654.765", - "-728.476", - "-735.936", - "-462.948", - "-946.864", - "-860.839", - "-481.443", - "-738.14", - "-550.892", - "-815.688", - "-942.768", - "-850.314", - "-419.398", - "-598.037", - "-945.467", - "-574.107", - "-736.347", - "-930.269", - "-468.103", - "-907.124", - "-506.027", - "-565.303", - "-824.591", - "-478.92", - "-720.622", - "-758.609", - "-961.757", - "-744.296", - "-935.653", - "-323.905", - "-891.403", - "-949.31", - "-927.547", - "-446.493", - "-721.633", - "-745.028", - "-509.862", - "-710.878", - "-830.042", - "-804.661", - "-8.33419", - "-949.011", - "-753.113", - "-414.472", - "-617.85", - "-453.863", - "-402.943", - "-443.283", - "-853.742", - "-682.37", - "-950.638", - "-697.219", - "-552.785", - "-358.761", - "-565.838", - "-487.469", - "-660.248", - "-925.358", - "-573.53", - "-779.314", - "-878.395", - "-407.939", - "-632.331", - "-481.986", - "-381.22", - "-803.568", - "-249.672", - "-840.528", - "-558.54", - "-757.231", - "-926.783", - "-617.405", - "-650.423", - "-626.455", - "-481.507", - "-709.722", - "-690.965", - "-952.578", - "-469.96", - "-678.275", - "-907.295", - "-508.647", - "-456.805", - "-735.965", - "-907.028", - "-751.575", - "-797.391", - "-642.606", - "-826.429", - "-837.203", - "-486.418", - "-561.696", - "-796.631", - "-508.14", - "-964.804", - "-809.007", - "-968.251", - "-759.169", - "-777.34", - "-903.342", - "-275.308", - "-687.762", - "-878.207", - "-821.057", - "-907.104", - "-648.43", - "-925.499", - "-604.014", - "-64.5806", - "-926.808", - "-809.2", - "-573.426", - "-564.978", - "-734.96", - "-815.144", - "-673.753", - "-647.677", - "-928.192", - "-697.998", - "-758.876", - "-554.161", - "-699.286", - "-717.829", - "-889.081", - "-496.117", - "-695.977", - "-668.617", - "-368.922", - "-882.065", - "-969.512", - "-904.26", - "-857.151", - "-863.258", - "-705.6", - "-737.844", - "-435.38", - "-884.462", - "-658.508", - "-109.91", - "-876.149", - "-823.415", - "-965.376", - "-881.022", - "-420.663", - "-499.357", - "-715.273", - "-819.285", - "-832.224", - "-678.045", - "-905.574", - "-699.346", - "-494.358", - "-440.585", - "-831.571", - "-636.581", - "-753.521", - "-949.118", - "-435.731", - "-584.667", - "-654.937", - "-701.941", - "-650.964", - "-939.382", - "-422.895", - "-452.006", - "-421.24", - "-696.564", - "-541.187", - "-878.663", - "-570.39", - "-960.192", - "-689.235", - "-966.096", - "-700.124", - "-457.057", - "-434.486", - "-959.185", - "-626.622", - "-757.518", - "-460.133", - "-781.367", - "-603.576", - "-713.934", - "-510.296", - "-884.008", - "-770.301", - "-774.178", - "-686.636", - "-901.034", - "-741.204", - "-832.772", - "-130.007", - "-964.996", - "-843.615", - "-761.608", - "-780.935", - "-541.531", - "-962.3", - "-994.904", - "-584.658", - "-749.068", - "-735.529", - "-551.684", - "-688.527", - "-781.303", - "-894.956", - "-406.121", - "-577.546", - "-847.009", - "-822.994", - "-468.25", - "-827.984", - "-577.004", - "-410.772", - "-808.489", - "-794.729", - "-994.544", - "-589.192", - "-925.004", - "-786.306", - "-411.743", - "-756.868", - "-671.31", - "-602.249", - "-573.263", - "-777.351", - "-404.42", - "-453.779", - "-450.659", - "-691.619", - "-827.46", - "-337.842", - "-752.414", - "-662.506", - "-668.034", - "-788.773", - "-562.141", - "-365.389", - "-525.503", - "-912.819", - "-904.686", - "-538.91", - "-732.503", - "-653.201", - "-838.06", - "-513.163", - "-826.826", - "-722.342", - "-603.353", - "-777.235", - "-424.12", - "-425.676", - "-995.844", - "-823.604", - "-876.846", - "-771.832", - "-701.67", - "-701.345", - "-620.975", - "-957.075", - "-705.544", - "-636.341", - "-992.782", - "-426.945", - "-508.276", - "-764.972", - "-577.379", - "-986.636", - "-608.61", - "-932.97", - "-648.421", - "-608.487", - "-239.103", - "-743.714", - "-677.492", - "-738.549", - "-773.993", - "-494.077", - "-408.722", - "-895.87", - "-834.393", - "-837.972", - "-612.071", - "-704.354", - "-492.164", - "-619.909", - "-581.164", - "-0.692883", - "-810.864", - "-680.401", - "-833.913", - "-519.62", - "-848.301", - "-978.883", - "-989.596", - "-310.248", - "-939.991", - "-170.068", - "-690.216", - "-453.325", - "-608.526", - "-396.589", - "-780.465", - "-745.386", - "-713.875", - "-425.947", - "-623.378", - "-489.188", - "-704.054", - "-666.933", - "-636.767", - "-800.819", - "-827.66", - "-554.735", - "-836.923", - "-576.826", - "-620.858", - "-955.612", - "-986.277", - "-17.0774", - "-636.212", - "-469.951", - "-478.702", - "-520.936", - "-843.26", - "-442.54", - "-646.503", - "-518.758", - "-724.004", - "-634.301", - "-980.242", - "-476.879", - "-781.948", - "-611.152", - "-971.697", - "-561.335", - "-977.788", - "-370.906", - "-632.522", - "-900.826", - "-957.425", - "-741.101", - "-641.157", - "-788.24", - "-870.635", - "-829.573", - "-92.9496", - "-924.639", - "-517.529", - "-973.561", - "-635.837", - "-391.729", - "-650.026", - "-763.336", - "-560.341", - "-750.715", - "-582.158", - "-613.49", - "-509.169", - "-404.668", - "-554.952", - "-813.327", - "-727.989", - "-307.14", - "-799.103", - "-659.838", - "-586.402", - "-834.727", - "-608.537", - "-559.325", - "-722.064", - "-981.962", - "-458.291", - "-801.06", - "-876.789", - "-728.187", - "-914.076", - "-740.678", - "-702.998", - "-896.964", - "-946.658", - "-906.722", - "-993.269", - "-585.5", - "-709.799", - "-771.134", - "-836.869", - "-573.043", - "-935.491", - "-641.907", - "-652.353", - "-575.085", - "-620.248", - "-653.407", - "-990.59", - "-854.607", - "-651.398", - "-620.557", - "-828.335", - "-993.808", - "-777.655", - "-774.004", - "-484.264", - "-815.881", - "-786.297", - "-929.054", - "-588.813", - "-697.875", - "-606.99", - "-613.751", - "-986.958", - "-698.617", - "-988.606", - "-918.06", - "-744.042", - "-828.19", - "-919.567", - "-899.809", - "-805.723", - "-946.18", - "-982.889", - "-729.158", - "-826.923", - "-365.956", - "-831.704", - "-985.811", - "-869.685", - "-916.317", - "-323.86", - "-951.579", - "-648.806", - "-855.917", - "-361.297", - "-421.343", - "-702.428", - "-937.368", - "-696.716", - "-721.431", - "-445.396", - "-862.217", - "-745.105", - "-596.689", - "-532.41", - "-640.948", - "-383.583", - "-893.282", - "-598.592", - "-543.524", - "-769.985", - "-649.398", - "-805.056", - "-684.222", - "-428.11", - "-552.338", - "-427.576", - "-734.922", - "-437.391", - "-995.982", - "-488.902", - "-791.725", - "-989.383", - "-657.923", - "-728.272", - "-942.842", - "-546.201", - "-518.346", - "-940.91", - "-896.158", - "-929.483", - "-885.523", - "-918.88", - "-719.188", - "-901.977", - "-846.203", - "-956.49", - "-929.803", - "-964.446", - "-845.033", - "-743.834", - "-658.495", - "-700.604", - "-722.683", - "-524.493", - "-625.93", - "-818.459", - "-403.762", - "-560.661", - "-880.977", - "-462.86", - "-993.522", - "-679.552", - "-749.884", - "-901.898", - "-621.985", - "-521.721", - "-569.976", - "-307.557", - "-912.218", - "-916.535", - "-100.36", - "-591.214", - "-906.977", - "-761.282", - "-863.367", - "-843.03", - "-488.538", - "-415.965", - "-690.853", - "-600.403", - "-942.652", - "-497.876", - "-610.402", - "-656.742", - "-942.969", - "-894.615", - "-726.928", - "-898.911", - "-528.777", - "-990.587", - "-537.142", - "-623.515", - "-673.565", - "-798.751", - "-889.472", - "-673.976", - "-844.548", - "-626.431", - "-811.242", - "-429.724", - "-453.842", - "-824.803", - "-436.372", - "-464.481", - "-717.213", - "-902.125", - "-953.773", - "-889.358", - "-981.09", - "-955.453", - "-648.277", - "-781.974", - "-941.185", - "-913.221", - "-787.939", - "-477.178", - "-469.848", - "-896.622", - "-816.648", - "-798.589", - "-795.187", - "-908.714", - "-828.963", - "-526.132", - "-560.23", - "-491.68", - "-474.004", - "-637.345", - "-734.308", - "-336.001", - "-604.136", - "-712.16", - "-457.396", - "-358.751", - "-887.342", - "-948.999", - "-776.829", - "-392.13", - "-622.02", - "-788.002", - "-984.656", - "-823.225", - "-997.512", - "-715.092", - "-404.368", - "-587.139", - "-496.067", - "-900.178", - "-681.267", - "-656.471", - "-664.778", - "-603.683", - "-924.876", - "-996.621", - "-692.244", - "-732.331", - "-436.546", - "-379.44", - "-703.067", - "-623.878", - "-813.916", - "-548.132", - "-458.302", - "-577.33", - "-848.179", - "-667.366", - "-433.373", - "-599.15", - "-350.949", - "-304.455", - "-999.901", - "-689.897", - "-412.383", - "-992.941", - "-932.146", - "-589.382", - "-605.415", - "-567.044", - "-953.401", - "-897.249", - "-767.183", - "-882.965", - "-865.011", - "-878.242", - "-636.1", - "-780.667", - "-932.335", - "-979.731", - "-494.563", - "-539.086", - "-681.449", - "-912.948", - "-431.974", - "-814.148", - "-718.495", - "-737.924", - "-987.48", - "-573.4", - "-965.308", - "-885.547", - "-974.05", - "-711.729", - "-537.047", - "-564.779", - "-554.637", - "-525.059", - "-871.241", - "-105.316", - "-694.519", - "-963.645", - "-822.126", - "-647.217", - "-723.17", - "-770.799", - "-584.385", - "-524.71", - "-624.061", - "-744.059", - "-544.755", - "-669.742", - "-577.234", - "-668.258", - "-870.879", - "-726.152", - "-117.148", - "-987.443", - "-916.43", - "-927.941", - "-590.939", - "-609.109", - "-975.431", - "-935.363", - "-478.298", - "-599.577", - "-990.828", - "-628.078", - "-799.283", - "-528.577", - "-524.114", - "-838.099", - "-355.715", - "-732.428", - "-737.448", - "-957.799", - "-830.549", - "-692.602", - "-596.572", - "-873.703", - "-556.695", - "-918.389", - "-395.886", - "-971.257", - "-978.033", - "-637.362", - "-870.864", - "-398.176", - "-463.777", - "-2.12857", - "-478.719", - "-977.706", - "-427.554", - "-537.79", - "-834.924", - "-840.345", - "-984.392", - "-600.172", - "-698.781", - "-553.407", - "-840.514", - "-979.068", - "-702.751", - "-892.886", - "-818.083", - "-894.685", - "-903.768", - "-665.502", - "-591.03", - "-605.338", - "-650.401", - "-696.308", - "-692.837", - "-713.865", - "-912.195", - "-657.271", - "-922.846", - "-525.971", - "-877.425", - "-672.61", - "-496.068", - "-519.477", - "-868.507", - "-762.527", - "-350.633", - "-887.268", - "-762.669", - "-369.596", - "-789.981", - "-696.59", - "-416.552", - "-787.533", - "-925.444", - "-590.977", - "-695.479", - "-886.164", - "-948.711", - "-614.78", - "-837.711", - "-938.724", - "-913.269", - "-725.19", - "-870.722", - "-811.757", - "-815.156", - "-757.76", - "-770.353", - "-788.955", - "-600.69", - "-656.155", - "-746.922", - "-956.834", - "-656.607", - "-524.605", - "-856.225", - "-797.43", - "-945.181", - "-490.304", - "-715.029", - "-980.09", - "-688.317", - "-897.138", - "-511.061", - "-600.496", - "-522.259", - "-834.387", - "-692.79", - "-850.816", - "-957.231", - "-789.988", - "-894.784", - "-710.033", - "-907.126", - "-511.892", - "-828.318", - "-531.001", - "-564.401", - "-927.499", - "-713.416", - "-570.809", - "-327.533", - "-758.338", - "-749.471", - "-652.615", - "-996.171", - "-555.574", - "-302.09", - "-579.058", - "-821.585", - "-835.847", - "-774.132", - "-483.965", - "-781.719", - "-912.609", - "-509.667", - "-963.629", - "-888.727", - "-867.898", - "-734.894", - "-575.333", - "-571.742", - "-488.234", - "-497.801", - "-954.922", - "-851.594", - "-676.676", - "-792.795", - "-595.099", - "-862.458", - "-667.679", - "-747.181", - "-278.828", - "-720.36", - "-739.616", - "-609.5", - "-744.507", - "-494.549", - "-505.181", - "-441.373", - "-977.736", - "-462.278", - "-235.222", - "-595.892", - "-747.396", - "-360.233", - "-777.358", - "-907.974", - "-807.536", - "-799.734", - "-655.806", - "-764.174", - "-536.984", - "-936.121", - "-570.536", - "-471.514", - "-820.229", - "-565.423", - "-959.911", - "-800.753", - "-975.238", - "-423.139", - "-573.481", - "-492.55", - "-589.386", - "-553.904", - "-831.923", - "-642.053", - "-517.28", - "-490.125", - "-460.355", - "-673.822", - "-551.82", - "-808.638", - "-497.034", - "-973.172", - "-585.713", - "-923.65", - "-819.22", - "-762.558", - "-912.498", - "-809.377", - "-550.09", - "-876.03", - "-408.483", - "-618.848", - "-610.07", - "-142.315", - "-971.122", - "-953.779", - "-562.71", - "-556.483", - "-713.389", - "-690.264", - "-517.544", - "-893.072", - "-973.974", - "-434.864", - "-808.653", - "-616.206", - "-468.191", - "-993.711", - "-983.763", - "-910.55", - "-663.275", - "-966.107", - "-673.724", - "-396.595", - "-754.295", - "-860.453", - "-910.649", - "-604.394", - "-996.861", - "-477.999", - "-871.78", - "-763.018", - "-792.903", - "-710.07", - "-637.377", - "-908.377", - "-981.492", - "-731.054", - "-481.192", - "-860.549", - "-792.099", - "-887.519", - "-908.347", - "-653.787", - "-488.897", - "-844.875", - "-942.489", - "-800.146", - "-426.035", - "-529.804", - "-806.899", - "-824.838", - "-539.931", - "-630.275", - "-528.701", - "-582.714", - "-460.624", - "-673.559", - "-431.311", - "-481.673", - "-696.651", - "-805.098", - "-717.691", - "-481.636", - "-656.016", - "-700.926", - "-395.344", - "-932.506", - "-657.07", - "-959.496", - "-623.313", - "-633.407", - "-446.5", - "-593.96", - "-698.535", - "-694.751", - "-6.16509", - "-758.681", - "-804.524", - "-538.912", - "-703.07", - "-863.499", - "-793.312", - "-529.932", - "-878.107", - "-982.684", - "-418.656", - "-709.602", - "-979.607", - "-466.586", - "-950.167", - "-649.022", - "-851.184", - "-613.881", - "-792.968", - "-728.423", - "-704.672", - "-842.39", - "-396.143", - "-627.652", - "-494.981", - "-830.722", - "-571.336", - "-789.49", - "-432.823", - "-170.196", - "-651.276", - "-904.459", - "-741.051", - "-650.045", - "-848.621", - "-323.875", - "-435.507", - "-517.868", - "-852.103", - "-551.817", - "-662.171", - "-653.136", - "-857.767", - "-800.404", - "-756.641", - "-858.195", - "-910.108", - "-524.395", - "-722.707", - "-469.628", - "-510.657", - "-974.277", - "-770.653", - "-951.331", - "-535.278", - "-717.211", - "-777.745", - "-921.229", - "-522.862", - "-751.41", - "-739.035", - "-528.116", - "-892.783", - "-656.676", - "-720.433", - "-857.48", - "-649.788", - "-918.613", - "-566.824", - "-854.839", - "-493.577", - "-740.562", - "-608.448", - "-862.409", - "-502.407", - "-640.459", - "-525.568", - "-640.16", - "-564.318", - "-619.494", - "-891.957", - "-869.872", - "-721.604", - "-862.166", - "-378.075", - "-716.252", - "-866.307", - "-952.519", - "-829.679", - "-978.468", - "-560.569", - "-752.059", - "-894.704", - "-953.069", - "-711.526", - "-763.852", - "-998.336", - "-562.183", - "-500.388", - "-660.485", - "-635.896", - "-754.393", - "-757.547", - "-768.651", - "-544.481", - "-924.223", - "-965.621", - "-848.77", - "-938.582", - "-895.429", - "-731.035", - "-732.724", - "-890.033", - "-762.695", - "-418.295", - "-636.126", - "-821.779", - "-442.534", - "-852.22", - "-395.054", - "-487.164", - "-774.45", - "-401.199", - "-629.987", - "-817.073", - "-462.245", - "-707.894", - "-863.187", - "-604.32", - "-894.872", - "-630.896", - "-731.522", - "-812.437", - "-835.168", - "-683.91", - "-825.469", - "-672.513", - "-712.285", - "-804.026", - "-871.799", - "-777.957", - "-731.962", - "-719.615", - "-876.216", - "-731.61", - "-771.695", - "-701.232", - "-498.34", - "-532.822", - "-936.408", - "-874.684", - "-842.866", - "-799.871", - "-882.362", - "-504.782", - "-949.511", - "-974.462", - "-681.457", - "-904.626", - "-211.194", - "-553.738", - "-435.525", - "-666.912", - "-870.531", - "-602.003", - "-886.684", - "-668.21", - "-644.316", - "-567.052", - "-503.127", - "-802.713", - "-771.771", - "-617.596", - "-556.485", - "-987.73", - "-751.543", - "-544.28", - "-736.744", - "-754.631", - "-886.448", - "-607.024", - "-785.333", - "-458.953", - "-663.021", - "-738.219", - "-575.773", - "-97.0398", - "-786.867", - "-611.647", - "-559.857", - "-980.649", - "-955.216", - "-673.512", - "-751.321", - "-810.909", - "-739.268", - "-693.703", - "-736.149", - "-692.771", - "-555.989", - "-726.958", - "-504.676", - "-637.125", - "-793.042", - "-787.64", - "-794.799", - "-25.1412", - "-935.624", - "-603.741", - "-968.599", - "-931.724", - "-960.276", - "-362.631", - "-356.805", - "-626.769", - "-653.011", - "-949.845", - "-985.453", - "-809.429", - "-658.886", - "-680.522", - "-550.024", - "-740.435", - "-817.631", - "-687.015", - "-933.57", - "-742.024", - "-430.638", - "-463.245", - "-994.846", - "-433.38", - "-878.305", - "-991.472", - "-758.639", - "-889.407", - "-870.351", - "-754.323", - "-954.36", - "-562.362", - "-645.387", - "-887.649", - "-851.012", - "-448.894", - "-545.345", - "-922.006", - "-652.462", - "-204.194", - "-821.179", - "-744.43", - "-651.875", - "-963.03", - "-537.157", - "-911.74", - "-893.891", - "-473.045", - "-989.669", - "-619.297", - "-634.438", - "-582.021", - "-785.728", - "-195.663", - "-500.537", - "-623.355", - "-959.366", - "-814.51", - "-950.906", - "-973.822", - "-916.768", - "-667.747", - "-510.369", - "-822.907", - "-448.356", - "-683.322", - "-963.544", - "-687.529", - "-368.736", - "-740.631", - "-951.989", - "-452.991", - "-662.491", - "-866.517", - "-528.108", - "-692.325", - "-999.171", - "-693.154", - "-984.386", - "-710.838", - "-884.672", - "-911.001", - "-722.829", - "-739.071", - "-917.56", - "-788.382", - "-838.066", - "-434.389", - "-496.655", - "-738.588", - "-870.526", - "-739.761", - "-461.893", - "-592.472", - "-572.041", - "-938.016", - "-658.834", - "-635.122", - "-681.57", - "-459.408", - "-949.946", - "-786.634", - "-853.941", - "-460.292", - "-631.134", - "-612.446", - "-647.043", - "-785.781", - "-745.456", - "-714.101", - "-824.821", - "-739.6", - "-656.413", - "-968.34", - "-975.406", - "-750.662", - "-518.123", - "-457.183", - "-518.101", - "-642.029", - "-595.841", - "-761.877", - "-629.004", - "-710.604", - "-635.065", - "-839.272", - "-189.938", - "-577.438", - "-490.86", - "-969.091", - "-832.26", - "-782.204", - "-871.719", - "-844.517", - "-750.522", - "-592.528", - "-757.864", - "-887.792", - "-775.892", - "-719.811", - "-484.146", - "-1.10223", - "-635.009", - "-836.923", - "-564.901", - "-702.983", - "-675.756", - "-686.294", - "-436.667", - "-787.117", - "-926.934", - "-682.004", - "-705.029", - "-581.18", - "-921.61", - "-683.57", - "-729.258", - "-994.672", - "-753.199", - "-559.314", - "-37.9675", - "-649.368", - "-498.571", - "-723.257", - "-766.968", - "-915.01", - "-897.847", - "-838.365", - "-721.122", - "-478.191", - "-818.196", - "-750.484", - "-462.173", - "-485.309", - "-985.539", - "-468.332", - "-798.93", - "-810.437", - "-559.348", - "-875.636", - "-970.106", - "-568.638", - "-673.864", - "-538.365", - "-462.94", - "-395.649", - "-791.084", - "-869.713", - "-518.105", - "-708.358", - "-613.935", - "-832.331", - "-575.912", - "-678.619", - "-889.451", - "-686.663", - "-502.43", - "-691.071", - "-770.869", - "-711.013", - "-739.587", - "-712.193", - "-973.887", - "-673.583", - "-711.744", - "-452.719", - "-779.832", - "-931.447", - "-905.382", - "-784.836", - "-583.643", - "-916.27", - "-860.762", - "-991.13", - "-276.747", - "-833.006", - "-763.782", - "-982.24", - "-809.895", - "-722.292", - "-471.658", - "-822.574", - "-597.391", - "-894.351", - "-639.9", - "-600.608", - "-513.183", - "-902.59", - "-985.079", - "-647.616", - "-965.828", - "-741.207", - "-579.682", - "-767.763", - "-764.132", - "-779.674", - "-768.793", - "-856.29", - "-721.737", - "-961.511", - "-814.982", - "-510.996", - "-522.673", - "-838.845", - "-468.193", - "-672.589", - "-927.912", - "-935.653", - "-954.48", - "-953.871", - "-845.121", - "-393.838", - "-657.023", - "-652.998", - "-909.138", - "-857.147", - "-928.333", - "-573.998", - "-949.167", - "-791.023", - "-465.277", - "-718.871", - "-860.198", - "-675.225", - "-718.225", - "-606.52", - "-650.286", - "-702.014", - "-931.3", - "-803.6", - "-580.179", - "-931.071", - "-609.606", - "-858.487", - "-59.0204", - "-498.55", - "-491.117", - "-686.478", - "-817.829", - "-634.074", - "-506.681", - "-423.531", - "-911.846", - "-663.026", - "-563.828", - "-839.773", - "-6.29047", - "-585.54", - "-609.538", - "-814.984", - "-730.739", - "-550.629", - "-854.266", - "-930.543", - "-808.552", - "-540.68", - "-984.956", - "-439.052", - "-913.484", - "-834.039", - "-602.1", - "-798.712", - "-703.306", - "-971.595", - "-751.626", - "-671.486", - "-683.937", - "-541.612", - "-492.818", - "-884.622", - "-526.985", - "-734.158", - "-699.948", - "-717.568", - "-741.433", - "-211.501", - "-833.01", - "-855.214", - "-832.844", - "-805.996", - "-772.345", - "-998.388", - "-919.501", - "-746.983", - "-975.337", - "-606.625", - "-597.347", - "-2.59373", - "-969.675", - "-849.024", - "-906.002", - "-850.365", - "-980.611", - "-888.189", - "-365.724", - "-641.947", - "-841.87", - "-910.119", - "-854.866", - "-23.4144", - "-877.326", - "-704.817", - "-909.752", - "-663.065", - "-800.582", - "-950.149", - "-429.434", - "-793.535", - "-781.292", - "-703.823", - "-671.025", - "-992.979", - "-915.168", - "-557.289", - "-730.268", - "-596.243", - "-916.154", - "-708.396", - "-517.61", - "-491.306", - "-208.947", - "-599.485", - "-468.391", - "-958.536", - "-913.764", - "-794.8", - "-18.379", - "-681.153", - "-372.493", - "-763.742", - "-836.086", - "-36.9789", - "-408.68", - "-980.708", - "-673.624", - "-745.899", - "-740.347", - "-933.937", - "-960.231", - "-734.675", - "-756.601", - "-941.233", - "-922.283", - "-926.094", - "-917.838", - "-732.736", - "-820.527", - "-942.355", - "-844.698", - "-473.963", - "-792.095", - "-927.192", - "-975.008", - "-425.714", - "-990.073", - "-443.612", - "-466.181", - "-963.107", - "-488.42", - "-644.573", - "-712.383", - "-730.378", - "-569.432", - "-777.77", - "-426.668", - "-557.6", - "-471.943", - "-633.427", - "-914.567", - "-886.405", - "-744.977", - "-808.56", - "-538.045", - "-986.817", - "-601.505", - "-827.628", - "-922.675", - "-736.563", - "-827.125", - "-471.006", - "-791.242", - "-457.147", - "-858.951", - "-724.998", - "-407.952" - ], - "zsrc": "JohnMaddock:42:7ab5e9", - "z": [ - "223.979", - "541.091", - "823.098", - "400.492", - "409.767", - "373.581", - "24.405", - "258.366", - "622.076", - "410.099", - "632.594", - "597.87", - "496.089", - "76.414", - "359.647", - "13.9062", - "758.52", - "673.543", - "466.715", - "644.974", - "351.468", - "881.921", - "620.435", - "416.417", - "785.429", - "707.232", - "194.352", - "627.785", - "120.627", - "496.06", - "33.811", - "563.04", - "727.061", - "575.893", - "439.155", - "254.122", - "637.329", - "708.981", - "22.9403", - "635.086", - "756.581", - "241.569", - "586.197", - "545.865", - "531.989", - "475.871", - "627.464", - "375.736", - "494.808", - "543.898", - "839.467", - "319.16", - "573.76", - "321.599", - "30.2523", - "744.906", - "237.739", - "624.144", - "440.719", - "547.705", - "739.886", - "647.616", - "502.674", - "619.714", - "106.654", - "487.74", - "662.721", - "657.964", - "8.93439", - "783.2", - "656.05", - "312.741", - "440.838", - "678.196", - "506.902", - "582.006", - "564.642", - "545.063", - "460.323", - "696.259", - "613.432", - "728.39", - "721.114", - "655.292", - "30.8603", - "523.526", - "744.415", - "660.605", - "443.057", - "708.757", - "653.981", - "410.564", - "564.261", - "202.676", - "647.918", - "559.993", - "328.347", - "265.825", - "224.403", - "505.317", - "394.83", - "343.217", - "494.107", - "772.349", - "32.9587", - "571.526", - "10.6743", - "869.066", - "497.029", - "329.668", - "525.929", - "19.8646", - "439.106", - "29.9096", - "524.048", - "621.93", - "497.506", - "651.208", - "328.578", - "229.483", - "437.658", - "597.291", - "570.291", - "206.311", - "403.206", - "646.081", - "423.339", - "272.011", - "585.981", - "819.529", - "404.193", - "659.155", - "335.638", - "18.5856", - "456.76", - "18.0436", - "591.012", - "527.813", - "411.833", - "696.761", - "330.945", - "453.621", - "450.321", - "533.427", - "34.3836", - "525.286", - "453.03", - "26.3311", - "555.691", - "715.933", - "319.284", - "217.946", - "294.751", - "518.15", - "614.585", - "320.529", - "540.165", - "572.143", - "681.198", - "462.541", - "526.239", - "467.83", - "477.571", - "542.235", - "505.346", - "586.675", - "575.735", - "646.001", - "432.749", - "558.373", - "491.588", - "367.281", - "431.689", - "756.56", - "653.303", - "542.073", - "140.753", - "389.032", - "390.607", - "614.747", - "458.193", - "706.664", - "454.967", - "496.859", - "398.144", - "7.67855", - "673.573", - "294.683", - "591.837", - "260.31", - "682.385", - "541.889", - "480.709", - "426.743", - "685.028", - "684.531", - "684.03", - "611.727", - "527.459", - "476.597", - "4.72518", - "321.144", - "441.579", - "566.268", - "239.943", - "577.93", - "849.895", - "588.683", - "752.419", - "498.137", - "714.033", - "841.83", - "236.887", - "410.519", - "681.573", - "459.06", - "359.055", - "895.895", - "431.355", - "791.937", - "292.142", - "552.319", - "406.862", - "409.17", - "435.057", - "655.916", - "577.61", - "300.088", - "435.809", - "641.033", - "730.196", - "779.006", - "162.835", - "456.784", - "349.398", - "468.329", - "415.286", - "406.562", - "809.525", - "797.509", - "452.855", - "409.253", - "370.933", - "395.716", - "670.646", - "618.324", - "774.671", - "400.537", - "349.278", - "17.2522", - "310.468", - "478.887", - "390.004", - "653.739", - "47.0074", - "492.525", - "400.862", - "388.781", - "583.798", - "242.644", - "641.221", - "388.231", - "639.266", - "631.71", - "778.437", - "708.642", - "593.901", - "675.32", - "625.327", - "719.849", - "379.58", - "509.015", - "559.047", - "361.491", - "670.325", - "631.983", - "483.395", - "363.045", - "259.12", - "803.712", - "499.848", - "814.983", - "207.456", - "553.254", - "387.852", - "610.253", - "510.174", - "505.945", - "802.941", - "127.348", - "696.911", - "389.765", - "4.92825", - "490.394", - "632.315", - "490.789", - "322.032", - "465.127", - "328.552", - "510.587", - "355.939", - "369.895", - "528.918", - "696.463", - "358.422", - "767.766", - "655.453", - "500.389", - "812.285", - "328.481", - "563.378", - "668.746", - "610.673", - "542.241", - "521.791", - "197.653", - "524.587", - "441.392", - "11.8272", - "751.35", - "522.427", - "684.485", - "736.872", - "495.775", - "33.3119", - "782.5", - "113.45", - "453.574", - "487.849", - "470.211", - "571.227", - "20.1849", - "788.29", - "615.268", - "469.974", - "421.418", - "704.344", - "499.206", - "436.9", - "724.826", - "676.974", - "325.884", - "478.372", - "822.34", - "443.275", - "673.068", - "494.185", - "587.289", - "330.811", - "30.1904", - "683.42", - "492.412", - "633.198", - "712.451", - "205.985", - "696.712", - "619.993", - "265.528", - "8.25366", - "375.604", - "491.428", - "423.996", - "380.714", - "486.451", - "452.532", - "283.913", - "465.299", - "496.029", - "775.137", - "238.056", - "672.815", - "575.258", - "434.593", - "736.607", - "613.091", - "683.465", - "557.863", - "479.827", - "589.923", - "25.2467", - "16.6571", - "563.917", - "594.509", - "7.34577", - "817.933", - "688.666", - "675.702", - "494.197", - "169.64", - "659.326", - "517.612", - "429.321", - "776.542", - "467.134", - "433.082", - "32.5971", - "768.926", - "815.68", - "345.032", - "599.511", - "792.121", - "543.193", - "507.188", - "464.797", - "454.236", - "811.873", - "624.945", - "493.161", - "602.931", - "699.416", - "773.578", - "615.534", - "442.212", - "816.597", - "537.969", - "432.802", - "288.26", - "360.376", - "409.884", - "26.4633", - "441.984", - "589.646", - "518.338", - "370.827", - "405.371", - "167.421", - "479.609", - "610.284", - "409.954", - "478.301", - "50.1703", - "651.448", - "259.155", - "657.418", - "686.262", - "261.043", - "403.377", - "658.681", - "278.397", - "604.617", - "586.335", - "181.539", - "500.417", - "525.284", - "301.513", - "615.859", - "602.611", - "435.482", - "730.692", - "16.9036", - "396.435", - "609.04", - "821.021", - "475.785", - "766.582", - "830.985", - "646.408", - "643.509", - "445.4", - "480.308", - "471.435", - "724.27", - "452.345", - "626.634", - "379.184", - "701.011", - "505.997", - "185.523", - "514.442", - "787.321", - "748.021", - "660.589", - "469.998", - "781.548", - "766.418", - "616.837", - "342.15", - "532.419", - "293.391", - "483.508", - "294.409", - "466.284", - "509.996", - "349.252", - "513.919", - "310.409", - "458.789", - "491.11", - "210.903", - "523.027", - "551.99", - "526.959", - "507.404", - "504.53", - "632.449", - "458.352", - "346.616", - "511.745", - "623.282", - "737.178", - "685.49", - "633.442", - "411.234", - "605.187", - "702.565", - "702.759", - "456.093", - "606.974", - "426.701", - "551.154", - "594.821", - "411.374", - "679.126", - "558.04", - "34.7608", - "314.02", - "713.741", - "706.393", - "632.474", - "556.497", - "798.18", - "404.351", - "566.219", - "655.532", - "589.998", - "945.605", - "525.196", - "657.102", - "760.131", - "144.85", - "794.25", - "317.024", - "921.055", - "657.869", - "411.349", - "408.718", - "514.598", - "568", - "501.987", - "22.1067", - "650.989", - "514.142", - "643.394", - "454.389", - "339.841", - "754.341", - "663.667", - "817.247", - "619.073", - "260.304", - "369.983", - "523.23", - "345.868", - "573.849", - "436.969", - "605.902", - "435.867", - "416.428", - "620.723", - "665.167", - "678.384", - "719.005", - "408.408", - "491.197", - "358.172", - "717.491", - "686.86", - "303.221", - "237.649", - "743.86", - "794.644", - "284.078", - "640.943", - "437.782", - "559.065", - "441.813", - "445.136", - "641.493", - "651.862", - "626.091", - "478.711", - "478.95", - "650.184", - "25.5536", - "499.24", - "511.521", - "299.113", - "661.391", - "440.808", - "795.559", - "846.109", - "381.865", - "702.787", - "16.181", - "737.629", - "587.787", - "328.649", - "421.598", - "734.564", - "672.153", - "288.285", - "609.122", - "519.473", - "427.367", - "775.23", - "405.414", - "563.618", - "873.746", - "767.458", - "312.585", - "828.435", - "415.914", - "612.994", - "236.435", - "362.773", - "367.521", - "562.921", - "622.821", - "833.077", - "547.88", - "566.711", - "634.849", - "602.52", - "626.124", - "736.199", - "608.213", - "484.754", - "481.633", - "636.918", - "448.916", - "815.352", - "28.704", - "374.224", - "585.359", - "786.937", - "202.083", - "484.542", - "443.954", - "938.656", - "744.764", - "520.301", - "673.24", - "295.575", - "305.152", - "741.911", - "551.972", - "86.6971", - "417.592", - "751.168", - "680.388", - "275.075", - "234.96", - "310.902", - "494.738", - "664.732", - "267.787", - "589.765", - "337.796", - "257.765", - "321.631", - "815.866", - "509.813", - "299.619", - "809.657", - "666.914", - "708.99", - "660.87", - "429.639", - "883.908", - "349.594", - "704.839", - "610.409", - "616.988", - "856.056", - "854.004", - "553.141", - "760.951", - "652.194", - "445.208", - "704.085", - "698.351", - "674.799", - "544.874", - "537.948", - "819.451", - "844.698", - "387.073", - "594.81", - "289.731", - "552.5", - "368.447", - "264.943", - "353.518", - "598.177", - "372.031", - "550.198", - "514.41", - "412.207", - "635.158", - "635.816", - "599.585", - "782.024", - "549.638", - "364.062", - "743.264", - "891.55", - "39.1228", - "532.995", - "794.948", - "663.376", - "612.347", - "527.074", - "991.789", - "441.978", - "451.556", - "497.862", - "265.116", - "784.192", - "771.186", - "520.819", - "461.404", - "638.085", - "587.83", - "360.949", - "852.685", - "622.5", - "644.285", - "528.584", - "328.161", - "610.769", - "748.377", - "414.361", - "315.871", - "556.682", - "569.518", - "596.861", - "406.139", - "530.175", - "387.906", - "898.702", - "382.791", - "775.352", - "602.201", - "333.95", - "443.804", - "361.554", - "429.955", - "417.192", - "471.638", - "527.234", - "676.831", - "564.094", - "15.0512", - "591.136", - "623.003", - "552.686", - "717.794", - "480.223", - "436.502", - "266.695", - "686.554", - "646.124", - "486.653", - "413.259", - "720.134", - "539.209", - "432.665", - "753.507", - "485.444", - "383.649", - "552.429", - "68.8309", - "38.2516", - "314.572", - "478.669", - "653.182", - "540.45", - "652.498", - "385.186", - "76.6558", - "516.248", - "773.453", - "318.315", - "172.169", - "579.404", - "600.935", - "559.283", - "637.154", - "320.976", - "40.2698", - "662.518", - "249.588", - "556.615", - "574.684", - "161.085", - "612.162", - "584.899", - "435.779", - "731.471", - "533.612", - "344.466", - "452.593", - "645.488", - "400.148", - "664.624", - "317.186", - "328.23", - "291.437", - "883.623", - "57.9728", - "267.935", - "492.273", - "431.517", - "290.703", - "199.752", - "743.67", - "535.899", - "296.96", - "610.569", - "557.969", - "174.924", - "728.877", - "642.849", - "362.453", - "99.2026", - "747.012", - "544.834", - "689.275", - "415.867", - "39.3446", - "18.5933", - "564.285", - "558.567", - "399.009", - "550.652", - "631.974", - "506.48", - "887.293", - "370.766", - "548.169", - "442.829", - "146.93", - "201.188", - "716.761", - "479.568", - "16.0325", - "418.548", - "794.05", - "672.901", - "195.663", - "636.845", - "323.963", - "549.18", - "420.202", - "780.899", - "503.061", - "590.355", - "520.383", - "441.273", - "416.596", - "539.633", - "674.346", - "598.034", - "247.47", - "615.73", - "278.592", - "295.757", - "528.396", - "699.738", - "178.848", - "668.517", - "475.066", - "615.639", - "458.29", - "372.104", - "399.301", - "355.821", - "473.876", - "634.697", - "531.996", - "390.54", - "750.654", - "311.088", - "749.016", - "601.09", - "142.574", - "630.573", - "349.814", - "366.546", - "15.1617", - "606.149", - "785.75", - "628.379", - "314.424", - "612.202", - "739.585", - "517.444", - "759.269", - "338.661", - "816.378", - "467.635", - "631.668", - "343.611", - "568.815", - "346.889", - "814.226", - "736.846", - "539.08", - "813.785", - "400.898", - "292.241", - "230.655", - "627.905", - "460.968", - "349.619", - "565.777", - "675.825", - "611.751", - "529.854", - "284.717", - "656.723", - "493.853", - "559.412", - "511.112", - "435.244", - "682.013", - "838.079", - "223.574", - "207.46", - "402.739", - "767.775", - "114.042", - "335.914", - "736.297", - "417.077", - "436.689", - "869.884", - "467.16", - "34.6906", - "244.005", - "269.565", - "407.248", - "715.121", - "604.554", - "558.052", - "579.186", - "671.636", - "513.576", - "430.715", - "238.965", - "653.075", - "580.92", - "542.113", - "737.43", - "775.997", - "442.145", - "530.146", - "705.049", - "37.0446", - "16.2918", - "550.853", - "462.834", - "452.805", - "355.433", - "442.514", - "444.5", - "402.761", - "397.57", - "646.443", - "13.4656", - "413.349", - "463.356", - "543.315", - "337.712", - "665.019", - "811.103", - "526.146", - "337.886", - "619.366", - "770.594", - "446.529", - "416.353", - "591.685", - "601.868", - "499.809", - "763.089", - "16.2343", - "484.862", - "547.897", - "678.545", - "680.977", - "566.335", - "619.263", - "769.014", - "259.031", - "574.151", - "444.644", - "666.013", - "499.323", - "802.725", - "686.313", - "477.236", - "437.268", - "834.511", - "625.713", - "499.333", - "504.759", - "303.528", - "419.884", - "479.536", - "618.924", - "908.099", - "626.028", - "561.894", - "753.901", - "27.3025", - "500.356", - "841.47", - "728.406", - "625.809", - "540.672", - "313.781", - "522.303", - "563.344", - "624.907", - "500.961", - "680.608", - "614.881", - "627.518", - "610.463", - "269.044", - "435.97", - "467.59", - "460.914", - "452.428", - "765.807", - "865.995", - "588.798", - "841.125", - "541.728", - "818.365", - "582.46", - "623.301", - "384.955", - "623.636", - "521.493", - "818.953", - "352.424", - "704.482", - "602.159", - "852.9", - "792.435", - "596.026", - "18.6634", - "339.558", - "588.688", - "597.98", - "597.308", - "736.01", - "617.907", - "729.134", - "316.169", - "215.383", - "61.0135", - "550.347", - "807.796", - "265.471", - "483.143", - "508.147", - "470.865", - "482.064", - "543.571", - "749.044", - "330.253", - "510.23", - "660.798", - "905.306", - "408.206", - "632.255", - "811.263", - "108.325", - "542.284", - "468.297", - "611.063", - "446.679", - "489.751", - "371.752", - "435.003", - "592.997", - "894.418", - "498.492", - "477.348", - "531.844", - "322.934", - "549.384", - "784.829", - "620.482", - "407.806", - "497.192", - "427.206", - "762.338", - "436.672", - "537.118", - "667.59", - "282.961", - "226.733", - "163.933", - "711.15", - "428.2", - "684.777", - "656.572", - "518.984", - "440.12", - "629.709", - "477.682", - "693.248", - "488.978", - "564.284", - "321.093", - "741.16", - "641.822", - "333.67", - "353.432", - "757.008", - "14.268", - "621.84", - "538.185", - "479.579", - "210.207", - "383.127", - "595.252", - "452.656", - "532.746", - "840.289", - "654.58", - "476.958", - "539.661", - "416.737", - "941.014", - "647.608", - "444.247", - "853.704", - "517.913", - "436.929", - "761.291", - "453.393", - "576.123", - "217.7", - "773.03", - "427.568", - "479.293", - "287.773", - "465.766", - "751.14", - "536.558", - "501.115", - "348.671", - "456.382", - "390.144", - "41.9282", - "593.73", - "632.78", - "393.447", - "664.664", - "530.184", - "582.394", - "305.305", - "584.455", - "412.721", - "594.19", - "565.967", - "417.923", - "731.201", - "563.827", - "822.374", - "564.295", - "627.616", - "760.89", - "701.586", - "634.203", - "332.871", - "466.673", - "613.569", - "682.735", - "682.378", - "458.796", - "872.295", - "612.792", - "857.539", - "388.08", - "294.094", - "546.936", - "458.578", - "437.594", - "619.937", - "634.624", - "444.169", - "265.27", - "576.688", - "227.67", - "510.274", - "843.773", - "530.251", - "573.014", - "270.934", - "774.299", - "666.826", - "712.471", - "536.735", - "553.389", - "663.965", - "642.961", - "761.941", - "180.322", - "543.422", - "761.001", - "839.682", - "651.984", - "558.389", - "591.372", - "475.526", - "700.667", - "629.555", - "859.436", - "650.494", - "447.475", - "669.157", - "657.24", - "766.208", - "456.434", - "505.844", - "449.55", - "413.941", - "263.44", - "424.961", - "805.579", - "523.188", - "514.466", - "438.012", - "644.164", - "486.583", - "520.622", - "403.927", - "695.592", - "490.929", - "777.213", - "415.462", - "689.466", - "761.743", - "342.993", - "441.021", - "152.524", - "478.587", - "408.921", - "332.293", - "503.398", - "667.12", - "703.48", - "716.437", - "544.15", - "601.155", - "438.113", - "714.902", - "570.614", - "569.747", - "596.837", - "626.118", - "418.284", - "730.386", - "385.716", - "568.371", - "642.81", - "291.216", - "443.265", - "478.29", - "287.41", - "248.287", - "555.789", - "399.457", - "599.742", - "661.163", - "553.898", - "285.696", - "527.616", - "644.606", - "777.409", - "586.114", - "273.397", - "335.43", - "388.56", - "630.909", - "712.076", - "657.152", - "36.6079", - "856.269", - "408.901", - "705.753", - "270.283", - "769.608", - "490.247", - "370.973", - "816.7", - "636.766", - "617.245", - "407.494", - "677.964", - "376.537", - "725.259", - "330.374", - "517.29", - "523.249", - "516.682", - "464.549", - "410.208", - "262.098", - "627.085", - "264.664", - "406.445", - "640.95", - "409.031", - "516.204", - "424.631", - "732.672", - "527.491", - "237.207", - "310.912", - "591.904", - "476.732", - "487.936", - "390.895", - "570.063", - "682.591", - "572.766", - "410.526", - "345.488", - "684.204", - "361.706", - "299.228", - "670.585", - "409.553", - "246.119", - "434.478", - "577.934", - "358.702", - "640.722", - "347.324", - "234.556", - "445.326", - "575.336", - "569.287", - "366.971", - "473.111", - "708.168", - "505.166", - "696.756", - "649.149", - "513.229", - "811.841", - "403.659", - "687.904", - "32.8571", - "597.899", - "601.27", - "498.436", - "447.097", - "837.512", - "316.644", - "694.232", - "524.756", - "327.318", - "552.756", - "314.508", - "673.525", - "578.938", - "594.243", - "424.209", - "704.615", - "438.187", - "783.368", - "748.962", - "463.053", - "603.312", - "449.951", - "479.85", - "474.101", - "519.54", - "31.7594", - "782.366", - "570.204", - "524.818", - "604.628", - "218.466", - "305.335", - "465.225", - "521.931", - "598.854", - "645.028", - "582.932", - "420.055", - "754.38", - "254.889", - "535.751", - "658.046", - "346.708", - "691.541", - "452.843", - "799.221", - "357.331", - "415.096", - "17.7089", - "558.876", - "446.598", - "27.5318", - "771.359", - "528.205", - "753.215", - "360.309", - "708.88", - "628.542", - "708.416", - "413.187", - "850.235", - "836.034", - "817.963", - "344.127", - "530.77", - "777.436", - "827.99", - "347.493", - "461.227", - "485.881", - "463.943", - "412.723", - "615.223", - "329.446", - "44.7633", - "701.959", - "294.345", - "363.033", - "864.963", - "409.943", - "591.799", - "682.389", - "17.2567", - "528.258", - "273.309", - "616.552", - "540.798", - "675.218", - "362.468", - "442.15", - "316.408", - "749.896", - "492.118", - "580.151", - "646.142", - "465.858", - "440.723", - "507.82", - "522.268", - "26.3731", - "815.667", - "594.139", - "389.772", - "651.038", - "826.258", - "538.772", - "132.655", - "486.345", - "369.322", - "638.374", - "335.198", - "736.967", - "347.532", - "440.482", - "755.42", - "490.54", - "501.442", - "869.589", - "447.115", - "380.98", - "275.635", - "704.808", - "489.425", - "378.6", - "432.635", - "27.3322", - "647.464", - "695.064", - "322.624", - "433.688", - "354.295", - "669.315", - "777.116", - "619.217", - "497.968", - "806.939", - "275.419", - "750.102", - "692.118", - "596.866", - "384.506", - "611.402", - "647.056", - "257.917", - "417.038", - "325.427", - "560.952", - "473.515", - "811.757", - "457.408", - "448.941", - "316.966", - "273.14", - "468.527", - "481.426", - "758.198", - "299.883", - "700.719", - "582.456", - "526.031", - "495.4", - "444.432", - "592.343", - "671.549", - "737.463", - "665.358", - "349.258", - "279.303", - "376.54", - "426.274", - "306.937", - "341.2", - "702.202", - "287.962", - "564.092", - "652.769", - "710.694", - "647.453", - "449.08", - "484.562", - "420.24", - "399.013", - "443.281", - "406.658", - "531.348", - "622.842", - "700.229", - "621.078", - "263.808", - "681.166", - "493.642", - "745.595", - "527.912", - "517.398", - "525.687", - "359.248", - "789.778", - "558.911", - "581.381", - "822.842", - "266.92", - "733.591", - "603.609", - "620.004", - "343.019", - "814.247", - "476.563", - "252.678", - "392.804", - "748.028", - "789.387", - "437.656", - "669.538", - "684.467", - "524.788", - "973.65", - "493.971", - "340.076", - "741.839", - "468.75", - "621.063", - "779.97", - "632.628", - "539.286", - "548.917", - "80.0088", - "397.894", - "463.756", - "538.477", - "584.401", - "402.348", - "416.811", - "389.149", - "407.678", - "548.357", - "512.469", - "394.655", - "801.143", - "610.557", - "553.285", - "743.608", - "428.407", - "456.406", - "772.724", - "429.443", - "751.353", - "436.969", - "784.025", - "740.124", - "523.271", - "444.252", - "249.925", - "504.144", - "349.557", - "539.439", - "683.624", - "478.453", - "635.987", - "417.066", - "507.255", - "809.824", - "650.165", - "675.724", - "904.598", - "319.079", - "314.033", - "490.067", - "790.827", - "552.532", - "513.607", - "679.944", - "406.808", - "562.867", - "364.339", - "503.345", - "878.325", - "21.7639", - "871.301", - "522.379", - "676.352", - "648.973", - "684.088", - "220.904", - "746.273", - "430.359", - "619.673", - "376.24", - "711.988", - "411.028", - "764.09", - "429.286", - "46.0256", - "446.471", - "499.827", - "749.053", - "871.136", - "458.143", - "813.907", - "702.825", - "506.396", - "363.229", - "749.13", - "666.869", - "708.192", - "447.834", - "497.529", - "612.61", - "320.75", - "664.312", - "434.84", - "629.601", - "714.275", - "705.836", - "295.978", - "297.273", - "104.282", - "618.569", - "377.921", - "300.018", - "573.983", - "271.949", - "429.101", - "696.902", - "618.753", - "541.085", - "584.841", - "759.961", - "395.472", - "252.331", - "655.047", - "430.589", - "526.058", - "623.931", - "417.52", - "267.448", - "388.479", - "543.708", - "557.526", - "494.022", - "634.67", - "713.83", - "376.068", - "692.609", - "579.181", - "553.837", - "628.473", - "875.581", - "616.227", - "620.355", - "735.88", - "508.823", - "557.247", - "395.184", - "461.317", - "568.755", - "685.414", - "425.202", - "560.893", - "272.737", - "877.837", - "830.286", - "699.712", - "624.209", - "699.5", - "464.587", - "388.16", - "881.416", - "670.226", - "462.324", - "670.436", - "595.746", - "308.602", - "762.037", - "655.766", - "510.018", - "724.582", - "441.22", - "434.152", - "258.595", - "444.897", - "559.892", - "513.93", - "484.778", - "625.969", - "390.471", - "360.845", - "761.89", - "360.028", - "388.511", - "331.463", - "624.519", - "507.866", - "399.695", - "699.434", - "169.674", - "706.334", - "23.2434", - "277.004", - "22.8165", - "353.714", - "839.753", - "630.902", - "360.875", - "198.933", - "348.167", - "282.269", - "29.2163", - "746.324", - "448.718", - "422.198", - "561.46", - "396.062", - "548.751", - "701.877", - "487.774", - "629.151", - "583.085", - "742.308", - "528.503", - "340.995", - "467.114", - "710.795", - "500.001", - "266.951", - "628.268", - "429.729", - "853.179", - "497.536", - "683.749", - "453.071", - "434.291", - "324.697", - "539.95", - "597.233", - "724.66", - "621.97", - "352.405", - "766.843", - "362.157", - "363.243", - "634.445", - "843.657", - "12.3559", - "908.278", - "516.551", - "534.692", - "745.053", - "592.436", - "645.395", - "375.77", - "432.712", - "618.275", - "697.491", - "133.471", - "630.384", - "316.43", - "718.716", - "194.869", - "347.666", - "365.101", - "669.733", - "354.801", - "444.255", - "647.379", - "500.112", - "469.732", - "253.867", - "494.35", - "746.075", - "668.648", - "329.889", - "485.355", - "783.47", - "333.332", - "598.76", - "563.432", - "472.328", - "673.909", - "642.848", - "176.241", - "704.68", - "823.161", - "610.862", - "755.086", - "756.523", - "683.321", - "715.868", - "864.23", - "802.233", - "645.657", - "529.547", - "252.938", - "809.811", - "680.288", - "474.07", - "775.697", - "634.588", - "418.526", - "440.299", - "613.421", - "691.219", - "757.884", - "637.084", - "404.059", - "736.54", - "617.936", - "778.799", - "528.703", - "756.111", - "279.646", - "573.139", - "322.926", - "847.731", - "320.783", - "731.117", - "715.622", - "573.199", - "543.964", - "771.624", - "473.103", - "757.376", - "299.289", - "416.061", - "754.291", - "785.644", - "461.89", - "500.145", - "432.161", - "608.294", - "742.615", - "424.918", - "446.712", - "363.974", - "538.163", - "569.211", - "234.454", - "600.601", - "299.216", - "548.152", - "482.252", - "328.705", - "660.403", - "695.391", - "719.728", - "357.761", - "445.205", - "821.529", - "548.61", - "349.037", - "420.891", - "638.605", - "339.723", - "793.784", - "554.265", - "321.771", - "423.989", - "533.532", - "842.136", - "678.678", - "438.372", - "417.699", - "28.1139", - "646.66", - "360.184", - "628.284", - "594.657", - "421.975", - "835.178", - "760.417", - "710.542", - "810.377", - "313.465", - "403.367", - "727.216", - "634.021", - "623.604", - "626.03", - "619.342", - "25.2041", - "773.045", - "782.049", - "796.513", - "608.108", - "416.2", - "616.076", - "646.502", - "613.029", - "572.549", - "491.049", - "475.977", - "635.811", - "846.011", - "604.835", - "550.836", - "763.546", - "581.042", - "729.414", - "544.866", - "768.762", - "849.513", - "635.704", - "254.677", - "525.189", - "272.885", - "709.811", - "880.904", - "683.584", - "464.47", - "608.081", - "542.221", - "796.452", - "718.101", - "453.612", - "450.428", - "386.409", - "667.676", - "631.644", - "464.093", - "23.5989", - "707.23", - "631.685", - "795.934", - "378.371", - "632.82", - "467.862", - "810.12", - "394.204", - "499.313", - "460.614", - "402.028", - "805.107", - "689.456", - "749.776", - "242.046", - "735.291", - "342.941", - "129.331", - "708.314", - "610.011", - "414.669", - "744.81", - "798.923", - "655.855", - "773.393", - "865.018", - "871.974", - "488.133", - "308.047", - "782.894", - "472.717", - "503.952", - "603.642", - "29.1924", - "509.192", - "614.539", - "308.729", - "501.225", - "710.965", - "533.921", - "118.223", - "546.477", - "567.169", - "393.215", - "767.738", - "649.199", - "401.822", - "741.833", - "539.765", - "202.604", - "345.793", - "679.924", - "628.969", - "676.092", - "459.567", - "650.678", - "428.212", - "673.622", - "830.063", - "449.266", - "307.498", - "588.632", - "547.704", - "620.261", - "511.433", - "488.069", - "626.772", - "461.395", - "485.199", - "687.886", - "659.031", - "677.756", - "660.376", - "360.303", - "665.045", - "470.989", - "395.06", - "729.255", - "347.785", - "507.773", - "552.431", - "863.161", - "595.32", - "470.337", - "289.321", - "245.16", - "422.568", - "896.269", - "691.12", - "389.153", - "536.484", - "797.182", - "648.294", - "666.616", - "743.844", - "861.145", - "687.693", - "559.925", - "521.583", - "432.533", - "762.854", - "253.829", - "802.376", - "608.405", - "418.715", - "325.155", - "308.388", - "225.772", - "744.484", - "458.674", - "704.432", - "727.876", - "730.585", - "727.492", - "658.869", - "812.373", - "686.154", - "552.438", - "774.71", - "711.203", - "576.554", - "712.162", - "531.095", - "827.174", - "40.7491", - "530.183", - "662.239", - "439.607", - "667.748", - "512.767", - "611.712", - "239.008", - "368.721", - "710.059", - "289.709", - "631.276", - "463.229", - "541.338", - "577.169", - "807.003", - "572.271", - "308.404", - "624.118", - "820.429", - "814.444", - "539.135", - "550.26", - "881.698", - "689.022", - "3.83413", - "487.559", - "631.134", - "754.532", - "476.584", - "460.782", - "703.652", - "485.311", - "168.831", - "602.763", - "457.775", - "831.353", - "800.586", - "626.77", - "507.744", - "839.832", - "472.715", - "419.955", - "633.35", - "895.47", - "905.056", - "29.7744", - "490.941", - "326.269", - "20.0008", - "849.849", - "402.304", - "697.771", - "387.842", - "473.101", - "657.334", - "802.485", - "765.672", - "477.712", - "687.637", - "733.258", - "741.011", - "604.91", - "366.552", - "512.823", - "667.271", - "844.798", - "815.281", - "561.803", - "462.717", - "358.197", - "350.743", - "508.881", - "594.836", - "663.774", - "473.8", - "389.946", - "650.988", - "396.285", - "610.275", - "599.626", - "235.047", - "290.238", - "692.399", - "774.452", - "520.455", - "396.557", - "655.033", - "259.59", - "479.793", - "596.27", - "613.562", - "467.741", - "511.93", - "599.604", - "532.882", - "381.111", - "666.582", - "646.816", - "779.768", - "548.341", - "519.441", - "540.19", - "569.026", - "565.111", - "382.106", - "819.123", - "788.351", - "697.137", - "297.676", - "290.124", - "363.992", - "837.867", - "685.575", - "491.878", - "748.328", - "368.356", - "757.561", - "410.069", - "734.76", - "617.958", - "583.425", - "792.827", - "300.04", - "426.734", - "518.418", - "842.32", - "713.968", - "713.501", - "829.586", - "453.077", - "423.161", - "718.853", - "709.377", - "415.362", - "806.044", - "611.25", - "473.66", - "348.644", - "375.356", - "381.184", - "403.028", - "795.07", - "401.862", - "471.668", - "883.315", - "554.67", - "467.596", - "612.773", - "375.114", - "472.791", - "685.357", - "294.829", - "758.313", - "785.271", - "613.189", - "849.182", - "867.78", - "669.771", - "331.209", - "433.252", - "482.769", - "533.297", - "481.852", - "678.767", - "466.184", - "626.61", - "614.64", - "630.436", - "696.961", - "260.882", - "448.197", - "196.57", - "701.555", - "521.168", - "474.206", - "378.345", - "321.72", - "612.03", - "639.75", - "904.965", - "505.648", - "148.123", - "261.217", - "491.231", - "240.43", - "755.978", - "657.065", - "789.624", - "640.032", - "19.6738", - "451.399", - "427.554", - "645.157", - "529.923", - "407.728", - "829.793", - "590.02", - "789.848", - "782.99", - "466.693", - "267.7", - "325.461", - "355.04", - "744.467", - "425.498", - "449.135", - "379.389", - "625.952", - "341.68", - "434.161", - "598.494", - "554.456", - "550.809", - "428.356", - "669.258", - "304.202", - "884.324", - "478.417", - "315.141", - "574.236", - "511.718", - "676.307", - "702.175", - "360.439", - "757.817", - "232.23", - "12.3268", - "427.281", - "671.264", - "365.618", - "601.451", - "472.903", - "665.173", - "28.8802", - "783.529", - "767.14", - "506.412", - "647.322", - "636.848", - "390.368", - "870.717", - "752.296", - "889.398", - "510.122", - "493.016", - "739.423", - "346.425", - "683.883", - "711.949", - "715.269", - "643.837", - "304.302", - "566.788", - "808.467", - "654.932", - "494.703", - "677.822", - "617.557", - "679.342", - "564.518", - "471.87", - "310.895", - "607.318", - "817.541", - "637.344", - "633.217", - "496.199", - "593.819", - "716.851", - "572.09", - "436.592", - "425.522", - "102.24", - "784.014", - "571.76", - "641.247", - "647.494", - "500.053", - "566.252", - "421.413", - "552.3", - "381.26", - "217.494", - "291.485", - "489.666", - "725.917", - "634.942", - "591.378", - "645.403", - "438.262", - "358.787", - "722.162", - "645.679", - "553.017", - "302.057", - "229.402", - "306.418", - "589.795", - "371.986", - "808.991", - "665.91", - "455.161", - "535.12", - "717.413", - "730.191", - "840.588", - "369.345", - "638.012", - "639.115", - "534.482", - "524.19", - "413.894", - "284.406", - "875.337", - "451.063", - "644.389", - "608.221", - "587.733", - "721.948", - "711.472", - "623.905", - "598.546", - "534.716", - "592.561", - "764.602", - "575.758", - "655.018", - "562.676", - "55.3235", - "436.516", - "481.21", - "30.6608", - "655.901", - "448.488", - "281.831", - "638.475", - "577.098", - "816.864", - "324.144", - "722.699", - "579.101", - "640.379", - "667.548", - "754.497", - "719.273", - "400.065", - "324.472", - "27.1137", - "269.797", - "470.468", - "826.146", - "401.699", - "830.179", - "421.351", - "642.554", - "368.438", - "515.545", - "466.426", - "648.598", - "697.702", - "320.1", - "583.411", - "437.587", - "602.564", - "734.572", - "755.001", - "715.2", - "596.282", - "759.05", - "676.618", - "625.133", - "510.969", - "507.662", - "482.267", - "403.885", - "339.692", - "528.72", - "491.719", - "521.161", - "699.532", - "320.449", - "549.278", - "581.66", - "189.583", - "564.456", - "839.248", - "891.086", - "735.228", - "819.918", - "430.551", - "477.285", - "813.433", - "746.68", - "755.176", - "492.396", - "353.12", - "657.355", - "427.258", - "647.772", - "715.803", - "346.257", - "720.434", - "446.287", - "526.63", - "619.112", - "444.543", - "673.779", - "450.988", - "845.999", - "459.753", - "433.704", - "714.417", - "407.792", - "485.725", - "581.33", - "577.683", - "422.467", - "513.586", - "429.255", - "677.063", - "520.217", - "85.1679", - "412.546", - "457.669", - "371.211", - "662.138", - "384.106", - "494.622", - "816.759", - "681.545", - "617.646", - "520.849", - "795.172", - "603.854", - "672.278", - "316.489", - "632.007", - "595.753", - "772.622", - "674.346", - "676.079", - "735.404", - "455.263", - "768.947", - "387.075", - "721.647", - "614.689", - "715.277", - "455.129", - "569.469", - "648.141", - "739.638", - "837.342", - "518.927", - "493.212", - "654.165", - "682.797", - "726.14", - "538.088", - "654.851", - "458.548", - "777.548", - "756.088", - "555.587", - "798.471", - "232.906", - "734.437", - "398.862", - "342.332", - "405.109", - "529.278", - "732.006", - "437.217", - "612.571", - "557.302", - "636.585", - "27.0429", - "272.411", - "302.623", - "649.593", - "680.541", - "11.5491", - "342.351", - "322.713", - "732.026", - "461.716", - "784.913", - "495.199", - "490.204", - "596.094", - "660.937", - "695.749", - "576.79", - "522.601", - "536.269", - "525.14", - "293.924", - "356.803", - "623.585", - "536.995", - "256.218", - "725.441", - "502.917", - "501.196", - "817.931", - "137.891", - "595.614", - "518.512", - "657.842", - "800.988", - "536.425", - "538.678", - "464.508", - "396.276", - "512.014", - "573.259", - "809.254", - "794.649", - "568.231", - "681.726", - "539.298", - "434.309", - "636.313", - "703.534", - "528.142", - "710.608", - "421.276", - "255.008", - "612.065", - "467.421", - "614.182", - "781.949", - "381.329", - "373.039", - "872.018", - "577.919", - "538.543", - "404.765", - "425.28", - "788.737", - "670.128", - "469.428", - "468.666", - "874.706", - "666.608", - "609.626", - "471.219", - "459.455", - "702.941", - "694.525", - "301.6", - "335.638", - "641.558", - "613.648", - "662.539", - "614.228", - "661.817", - "466.116", - "357.804", - "454.947", - "483.267", - "375.206", - "713.636", - "279.894", - "896.175", - "507.59", - "652.968", - "488.846", - "218.549", - "555.585", - "315.007", - "463.868", - "752.072", - "378.368", - "494.732", - "780.364", - "707.738", - "584.383", - "748.063", - "676.052", - "298.178", - "583.493", - "672.648", - "368.664", - "645.892", - "580.176", - "817.427", - "672.816", - "629.813", - "731.742", - "763.736", - "782.753", - "844.176", - "507.604", - "591.467", - "465.113", - "710.263", - "320.561", - "604.038", - "560.843", - "514.081", - "585.857", - "691.37", - "653.05", - "782.375", - "452.161", - "785.266", - "753.331", - "312.099", - "625.895", - "470.984", - "450.263", - "734.801", - "392.342", - "675.751", - "594.502", - "681.017", - "634.859", - "684.949", - "807.942", - "463.85", - "755.228", - "210.654", - "560.451", - "251.817", - "616.76", - "717.666", - "568.741", - "180.165", - "480.57", - "434.855", - "715.059", - "496.695", - "691.005", - "250.976", - "801.343", - "673.09", - "676.635", - "330.172", - "778.005", - "597.711", - "240.245", - "401.938", - "530.51", - "547.124", - "592.037", - "307.276", - "970.979", - "684.964", - "541.575", - "621.84", - "706.652", - "472.229", - "261.19", - "536.434", - "553.447", - "566.673", - "516.296", - "498.258", - "554.52", - "837.672", - "608.608", - "679.967", - "713.399", - "421.163", - "513.49", - "888.408", - "665.78", - "164.503", - "685.772", - "640.339", - "676.107", - "266.591", - "836.382", - "594.177", - "266.252", - "657.815", - "510.854", - "548.083", - "324.681", - "444.684", - "490.485", - "437.088", - "632.11", - "726.166", - "720.186", - "634.678", - "745.526", - "314.186", - "732.351", - "491.057", - "395.657", - "331.974", - "731.369", - "294.536", - "547.75", - "460.131", - "798.907", - "535.539", - "291.905", - "531.064", - "469.166", - "542.125", - "753.731", - "658.915", - "736.982", - "576.314", - "429.797", - "666.422", - "497.069", - "765.268", - "522.108", - "429.012", - "455.076", - "735.51", - "735.282", - "625.489", - "666.652", - "752.563", - "534.389", - "469.019", - "514.659", - "785.035", - "863.47", - "645.383", - "715.849", - "716.777", - "700.97", - "597.216", - "473.683", - "658.101", - "525.674", - "421.244", - "606.467", - "708.264", - "322.514", - "817.559", - "311.614", - "668.519", - "698.57", - "653.698", - "832.76", - "500.686", - "593.686", - "776.992", - "637.843", - "667.156", - "383.869", - "367.976", - "682.884", - "427.686", - "494.473", - "790.519", - "666.287", - "712.618", - "354.094", - "780.548", - "131.226", - "545.558", - "642.51", - "825.559", - "734.762", - "580.656", - "556.062", - "839.076", - "470.291", - "279.841", - "704.046", - "715.95", - "516.751", - "389.7", - "535.284", - "674.898", - "429.073", - "782.113", - "437.805", - "550.639", - "613.558", - "440.611", - "552.83", - "525.388", - "548.877", - "513.967", - "621.657", - "759.537", - "405.701", - "448.942", - "191.852", - "735.146", - "646.933", - "581.452", - "543.831", - "916.225", - "33.183", - "280.199", - "792.248", - "504.813", - "487.835", - "596.671", - "424.689", - "750.177", - "667.581", - "772.051", - "433.968", - "658.902", - "440.845", - "386.355", - "800.531", - "524.774", - "743.374", - "808.226", - "682.579", - "650.569", - "547.578", - "493.806", - "280.418", - "647.565", - "616.215", - "406.709", - "274.899", - "426.827", - "294.184", - "623.528", - "579.862", - "734.348", - "72.4437", - "638.064", - "801.331", - "778.949", - "337.012", - "307.65", - "430.934", - "524.195", - "843.692", - "458.546", - "455.495", - "835.924", - "487.311", - "743.006", - "594.059", - "175.285", - "317.404", - "750.669", - "804.836", - "808.195", - "514.656", - "680.975", - "492.766", - "354.568", - "409.965", - "622.535", - "876.1", - "12.0157", - "605.518", - "592.871", - "675.65", - "556.008", - "604.004", - "726.428", - "388.212", - "483.789", - "717.614", - "889.029", - "409.315", - "399.195", - "580.112", - "314.037", - "595.728", - "403.366", - "746.332", - "408.828", - "746.009", - "27.0569", - "394.536", - "342.356", - "464.73", - "570.847", - "863.836", - "572.929", - "870.732", - "582.546", - "592.735", - "548.446", - "606.396", - "653.422", - "772.768", - "712.246", - "616.378", - "583.476", - "471.786", - "585.283", - "679.453", - "362.101", - "459.373", - "842.563", - "332.93", - "590.742", - "738.807", - "796.576", - "540.267", - "846.083", - "464.22", - "716.768", - "685.799", - "424.097", - "423.951", - "547.266", - "466.816", - "262.669", - "788.027", - "532.027", - "686.618", - "410.102", - "519.486", - "433.318", - "792.76", - "664.513", - "823.931", - "437.857", - "543.794", - "361.891", - "817.848", - "361.78", - "441.074", - "761.864", - "590.634", - "709.244", - "564.828", - "672.287", - "233.74", - "573.899" - ], - "marker": { - "size": 2, - "color": "rgb(57, 146, 62)" - } - }, - { - "mode": "markers", - "name": "< 2048 Not Shown For Brevity", - "type": "scatter3d", - "xsrc": "JohnMaddock:41:5dcf3e", - "x": [ - "0" - ], - "ysrc": "JohnMaddock:41:0deb33", - "y": [ - "0" - ], - "zsrc": "JohnMaddock:41:1693b2", - "z": [ - "0" - ], - "marker": { - "size": 2, - "opacity": 1 - } - } - ], - "layout": { - "scene": { - "xaxis": { - "type": "linear", - "title": { - "text": "a" - } - }, - "yaxis": { - "type": "linear", - "title": { - "text": "b" - } - }, - "camera": { - "up": { - "x": 0, - "y": 0, - "z": 1 - }, - "eye": { - "x": -1.5163897707992169, - "y": -1.3965596277984285, - "z": 0.6615763516171155 - }, - "center": { - "x": 0, - "y": 0, - "z": 0 - }, - "projection": { - "type": "perspective" - } - }, - "aspectmode": "auto", - "aspectratio": { - "x": 1.0022018227096374, - "y": 1.003020298732067, - "z": 0.9947984262371455 - } - }, - "title": { - "text": "Error Plot for 1F1(a, b, z)

\n-1000 < a,b < 0 and 0 < z < 1000
\n
\nTaken from 100000 uniformly distributed points.
" - }, - "xaxis": { - "range": [ - -1, - 6 - ], - "autorange": true - }, - "yaxis": { - "range": [ - -1, - 4 - ], - "autorange": true - }, - "autosize": true, - "template": { - "data": { - "bar": [ - { - "type": "bar", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "table": [ - { - "type": "table", - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - } - } - ], - "carpet": [ - { - "type": "carpet", - "aaxis": { - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "endlinecolor": "#2a3f5f", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "endlinecolor": "#2a3f5f", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - } - } - ], - "mesh3d": [ - { - "type": "mesh3d", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "contour": [ - { - "type": "contour", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "heatmap": [ - { - "type": "heatmap", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "scatter": [ - { - "type": "scatter", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "surface": [ - { - "type": "surface", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "heatmapgl": [ - { - "type": "heatmapgl", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "histogram": [ - { - "type": "histogram", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - }, - "type": "parcoords" - } - ], - "scatter3d": [ - { - "type": "scatter3d", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scattergl": [ - { - "type": "scattergl", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "choropleth": [ - { - "type": "choropleth", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "scattergeo": [ - { - "type": "scattergeo", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "histogram2d": [ - { - "type": "histogram2d", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "scatterpolar": [ - { - "type": "scatterpolar", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "contourcarpet": [ - { - "type": "contourcarpet", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "scattercarpet": [ - { - "type": "scattercarpet", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scattermapbox": [ - { - "type": "scattermapbox", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scatterpolargl": [ - { - "type": "scatterpolargl", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scatterternary": [ - { - "type": "scatterternary", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "histogram2dcontour": [ - { - "type": "histogram2dcontour", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ] - }, - "layout": { - "geo": { - "bgcolor": "white", - "showland": true, - "lakecolor": "white", - "landcolor": "white", - "showlakes": true, - "subunitcolor": "#C8D4E3" - }, - "font": { - "color": "#2a3f5f" - }, - "polar": { - "bgcolor": "white", - "radialaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8" - }, - "angularaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8" - } - }, - "scene": { - "xaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - }, - "yaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - }, - "zaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "automargin": true, - "zerolinecolor": "#EBF0F8", - "zerolinewidth": 2 - }, - "yaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "automargin": true, - "zerolinecolor": "#EBF0F8", - "zerolinewidth": 2 - }, - "ternary": { - "aaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "baxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "caxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "bgcolor": "white" - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#19d3f3", - "#e763fa", - "#fecb52", - "#ffa15a", - "#ff6692", - "#b6e880" - ], - "hovermode": "closest", - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0508b8" - ], - [ - 0.0893854748603352, - "#1910d8" - ], - [ - 0.1787709497206704, - "#3c19f0" - ], - [ - 0.2681564245810056, - "#6b1cfb" - ], - [ - 0.3575418994413408, - "#981cfd" - ], - [ - 0.44692737430167595, - "#bf1cfd" - ], - [ - 0.5363128491620112, - "#dd2bfd" - ], - [ - 0.6256983240223464, - "#f246fe" - ], - [ - 0.7150837988826816, - "#fc67fd" - ], - [ - 0.8044692737430168, - "#fe88fc" - ], - [ - 0.8938547486033519, - "#fea5fd" - ], - [ - 0.9832402234636871, - "#febefe" - ], - [ - 1, - "#fec3fe" - ] - ], - "sequentialminus": [ - [ - 0, - "#0508b8" - ], - [ - 0.0893854748603352, - "#1910d8" - ], - [ - 0.1787709497206704, - "#3c19f0" - ], - [ - 0.2681564245810056, - "#6b1cfb" - ], - [ - 0.3575418994413408, - "#981cfd" - ], - [ - 0.44692737430167595, - "#bf1cfd" - ], - [ - 0.5363128491620112, - "#dd2bfd" - ], - [ - 0.6256983240223464, - "#f246fe" - ], - [ - 0.7150837988826816, - "#fc67fd" - ], - [ - 0.8044692737430168, - "#fe88fc" - ], - [ - 0.8938547486033519, - "#fea5fd" - ], - [ - 0.9832402234636871, - "#febefe" - ], - [ - 1, - "#fec3fe" - ] - ] - }, - "plot_bgcolor": "white", - "paper_bgcolor": "white", - "shapedefaults": { - "line": { - "width": 0 - }, - "opacity": 0.4, - "fillcolor": "#506784" - }, - "annotationdefaults": { - "arrowhead": 0, - "arrowcolor": "#506784", - "arrowwidth": 1 - } - }, - "themeRef": "PLOTLY_WHITE" - }, - "showlegend": true - }, - "frames": [] -} \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_a.html boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_a.html --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_a.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_a.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -
- - -
- -
diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_a.js boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_a.js --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_a.js 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_a.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,6210 +0,0 @@ -var negative_a = { - "data": [ - { - "mode": "markers", - "name": "1048576-2097152", - "type": "scatter3d", - "xsrc": "JohnMaddock:21:c465d3", - "x": [ - "-216.989" - ], - "ysrc": "JohnMaddock:21:8a9586", - "y": [ - "753.226" - ], - "zsrc": "JohnMaddock:21:e877bd", - "z": [ - "463.882" - ], - "marker": { - "size": 3, - "color": "rgb(74, 11, 11)" - } - }, - { - "mode": "markers", - "name": "524288-1048576", - "type": "scatter3d", - "xsrc": "JohnMaddock:19:11e8eb", - "x": [ - "-862.338", - "-38.0003" - ], - "ysrc": "JohnMaddock:19:47a8cb", - "y": [ - "260.24", - "159.644" - ], - "zsrc": "JohnMaddock:19:157c2d", - "z": [ - "676.453", - "768.194" - ], - "marker": { - "size": 3 - } - }, - { - "mode": "markers", - "name": "262144-524288", - "type": "scatter3d", - "xsrc": "JohnMaddock:24:31248f", - "x": [ - "-20.9995", - "-588.353", - "-746.761" - ], - "ysrc": "JohnMaddock:24:41c1bd", - "y": [ - "225.064", - "103.343", - "684.63" - ], - "zsrc": "JohnMaddock:24:9bf8e2", - "z": [ - "554.766", - "793.226", - "132.158" - ], - "marker": { - "size": 3, - "color": "rgb(204, 94, 0)" - } - }, - { - "mode": "markers", - "name": "131072-262144", - "type": "scatter3d", - "xsrc": "JohnMaddock:26:1ecfee", - "x": [ - "-736.252", - "-562.756", - "-348.537", - "-5.00148", - "-22.0014", - "-346.803" - ], - "ysrc": "JohnMaddock:26:e7e05f", - "y": [ - "107.744", - "73.1293", - "708.944", - "529.451", - "306.074", - "45.6189" - ], - "zsrc": "JohnMaddock:26:573b4e", - "z": [ - "900.251", - "600.162", - "814.621", - "708.201", - "723.731", - "635.947" - ], - "marker": { - "size": 3, - "color": "rgb(250, 168, 99)" - } - }, - { - "mode": "markers", - "name": "65536-131072", - "type": "scatter3d", - "xsrc": "JohnMaddock:22:3b03c1", - "x": [ - "-627.795", - "-89.6971", - "-622.461", - "-51.0008", - "-236.352", - "-935.969", - "-40.1165", - "-46.0011", - "-211.684" - ], - "ysrc": "JohnMaddock:22:cc0dd4", - "y": [ - "940.627", - "441.639", - "29.9707", - "81.6388", - "754.841", - "269.466", - "418.272", - "216.66", - "10.6187" - ], - "zsrc": "JohnMaddock:22:6e441e", - "z": [ - "452.579", - "997.063", - "41.9602", - "800.007", - "888.348", - "241.963", - "775.935", - "669.378", - "662.841" - ], - "marker": { - "size": 3, - "color": "rgb(243, 161, 25)" - } - }, - { - "mode": "markers", - "name": "32768-65536", - "type": "scatter3d", - "xsrc": "JohnMaddock:23:1fca4d", - "x": [ - "-5.99698", - "-316.383", - "-67.1597", - "-582.036", - "-97.9951", - "-901.28", - "-211.809", - "-80.0007", - "-977.847", - "-976.472", - "-4.99772", - "-41.4808", - "-772.553", - "-816.312", - "-305.91", - "-876.805", - "-345.706", - "-110.001", - "-159.932", - "-65.9981", - "-74.0017", - "-132.77" - ], - "ysrc": "JohnMaddock:23:67f77c", - "y": [ - "601.599", - "220.97", - "122.275", - "374.268", - "232.917", - "12.1949", - "607.46", - "146.716", - "976.21", - "391.534", - "340.147", - "725.401", - "180.958", - "377.216", - "86.2111", - "662.392", - "464.937", - "69.5691", - "427.297", - "31.472", - "117.223", - "255.94" - ], - "zsrc": "JohnMaddock:23:6744cc", - "z": [ - "791.743", - "920.587", - "483.024", - "816.76", - "989.412", - "100.457", - "625.844", - "797.37", - "308.76", - "638.21", - "528.567", - "981.967", - "656.813", - "158.714", - "575.978", - "771.493", - "907.61", - "694.936", - "912.077", - "688.341", - "718.552", - "946.756" - ], - "marker": { - "size": 3, - "color": "rgb(250, 203, 99)" - } - }, - { - "mode": "markers", - "name": "16384-32768", - "type": "scatter3d", - "xsrc": "JohnMaddock:25:3444a8", - "x": [ - "-274.362", - "-283.854", - "-316.354", - "-164.734", - "-354.016", - "-816.058", - "-630.611", - "-344.974", - "-649.945", - "-396.349", - "-222.417", - "-404.151", - "-487.823", - "-347.925", - "-931.61", - "-519.529", - "-9.05582", - "-915.176", - "-50.9944", - "-368.12", - "-107.454", - "-72.3918", - "-558.456", - "-206.338", - "-543.228", - "-264.609", - "-92.005", - "-156.998", - "-947.313", - "-88.3239", - "-727.154", - "-480.227", - "-497.604", - "-46.0046", - "-575.184", - "-47.0012", - "-376.151", - "-339.546" - ], - "ysrc": "JohnMaddock:25:7c1334", - "y": [ - "154.353", - "112.166", - "48.4436", - "987.439", - "157.602", - "655.896", - "548.744", - "661.227", - "216.372", - "12.1503", - "50.4642", - "343.101", - "288.464", - "298.166", - "694.208", - "40.7107", - "458.749", - "363.423", - "180.314", - "24.9011", - "259.132", - "691.383", - "258.272", - "82.6406", - "480.291", - "238.243", - "7.10214", - "56.3008", - "964.066", - "91.9913", - "808.2", - "955.847", - "352.766", - "337.144", - "480.917", - "28.5634", - "233.506", - "335.227" - ], - "zsrc": "JohnMaddock:25:5ec62b", - "z": [ - "716.623", - "51.7894", - "925.825", - "948.677", - "28.7089", - "153.189", - "155.844", - "330.849", - "847.892", - "995.674", - "628.261", - "453.166", - "956.773", - "971.236", - "589.789", - "936.874", - "624.908", - "83.9791", - "792.952", - "578.962", - "855.218", - "944.774", - "70.9526", - "687.155", - "228.664", - "924.57", - "951.359", - "788.323", - "512.269", - "353.574", - "390.768", - "314.826", - "126.32", - "882.559", - "698.653", - "337.362", - "300.332", - "832.06" - ], - "marker": { - "size": 3 - } - }, - { - "mode": "markers", - "name": "8192-16384", - "type": "scatter3d", - "xsrc": "JohnMaddock:28:1a2191", - "x": [ - "-10.0126", - "-21.0171", - "-737.366", - "-822.027", - "-76.0241", - "-168.987", - "-96.0116", - "-38.005", - "-16.0121", - "-65.0117", - "-994.982", - "-869.482", - "-36.355", - "-878.046", - "-112.919", - "-984.991", - "-113.277", - "-523.905", - "-386.602", - "-619.34", - "-885.061", - "-108.076", - "-578.729", - "-830.035", - "-170.014", - "-318.371", - "-69.9166", - "-576.084", - "-20.0125", - "-243.372", - "-164.913", - "-99.0627", - "-726.067", - "-249.007", - "-775.712", - "-676.194", - "-60.012", - "-34.0548", - "-652.545", - "-667.334", - "-326.905", - "-333.903", - "-109.989", - "-903.184", - "-73.68", - "-782.24", - "-623.9", - "-59.9878", - "-4.07303", - "-894.983", - "-97.956", - "-959.446", - "-82.515", - "-249.229", - "-231.028", - "-443.335", - "-935.917", - "-243.144", - "-41.5504", - "-714.76", - "-36.9975", - "-240.746", - "-766.45", - "-105.011", - "-40.9978", - "-20.0079", - "-933.276", - "-410.068", - "-506.752", - "-240.525", - "-514.78", - "-53.0119", - "-165.918", - "-798.768", - "-922.295", - "-523.753", - "-26.986", - "-39.0127", - "-99.0062", - "-865.858", - "-275.986", - "-40.0042", - "-561.163", - "-130.704", - "-138.85" - ], - "ysrc": "JohnMaddock:28:ebe2b1", - "y": [ - "684.361", - "261.565", - "202.003", - "835.875", - "57.7535", - "22.0813", - "27.1344", - "126.839", - "348.777", - "60.2635", - "266.208", - "263.801", - "633.694", - "523.489", - "454.519", - "271.823", - "125.338", - "969.399", - "924.642", - "104.319", - "755.742", - "332.917", - "855.042", - "108.801", - "31.3344", - "327.091", - "83.1796", - "109.419", - "537.44", - "295.038", - "133.867", - "380.176", - "362.643", - "280.196", - "859.247", - "163.745", - "350.533", - "715.195", - "282.879", - "158.754", - "72.5311", - "539.719", - "207.214", - "713.261", - "132.222", - "667.769", - "50.8442", - "193.351", - "748.645", - "264.163", - "630.318", - "576.87", - "358.806", - "74.6327", - "113.877", - "187.793", - "689.694", - "465.987", - "474.666", - "991.47", - "340.005", - "157.645", - "715.169", - "197.287", - "309.033", - "228.483", - "914.196", - "13.6246", - "329.335", - "785.804", - "934.699", - "445.5", - "323.628", - "575.357", - "368.705", - "934.719", - "425.274", - "473.931", - "241.57", - "753.126", - "777.662", - "345.333", - "806.864", - "441.48", - "377.952" - ], - "zsrc": "JohnMaddock:28:b0cea2", - "z": [ - "945.977", - "665.979", - "586.627", - "40.5339", - "999.965", - "994.935", - "982.261", - "617.415", - "866.336", - "825.664", - "887.117", - "351.809", - "845.878", - "583.222", - "968.537", - "100.319", - "382.828", - "751.216", - "363.359", - "47.7614", - "164.844", - "945.389", - "738.185", - "933.038", - "904.846", - "994.863", - "404.261", - "229.723", - "845.708", - "991.16", - "662.28", - "945.321", - "311.575", - "719.12", - "499.508", - "680.563", - "953.119", - "853.71", - "681.722", - "892.793", - "998.211", - "372.569", - "919.444", - "807.495", - "382.417", - "863.38", - "988.266", - "962.038", - "895.481", - "329.23", - "845.052", - "453.642", - "755.427", - "828.991", - "819.451", - "840.13", - "309.823", - "982.72", - "604.948", - "473.475", - "917.326", - "886.877", - "126.309", - "953.067", - "955.448", - "546.263", - "201.576", - "700.044", - "288.684", - "659.545", - "274.658", - "970.866", - "958.403", - "688.305", - "529.23", - "404.057", - "916.523", - "863.944", - "856.189", - "853.257", - "570.734", - "786.361", - "606.649", - "928.6", - "756.853" - ], - "marker": { - "size": 3, - "color": "rgb(255, 214, 90)" - } - }, - { - "mode": "markers", - "name": "4096-8192", - "type": "scatter3d", - "xsrc": "JohnMaddock:29:8b3d32", - "x": [ - "-972.698", - "-380.705", - "-954.271", - "-757.844", - "-434.481", - "-436.956", - "-6.04532", - "-899.34", - "-67.2311", - "-746.253", - "-764.735", - "-267.732", - "-177.087", - "-72.0126", - "-304.915", - "-823.976", - "-116.552", - "-472.755", - "-604.035", - "-194.748", - "-431.402", - "-677.598", - "-129.385", - "-837.917", - "-753.746", - "-775.326", - "-946.695", - "-19.0204", - "-553.345", - "-348.947", - "-632.68", - "-253.777", - "-550.233", - "-739.444", - "-255.246", - "-724.08", - "-78.9787", - "-305.202", - "-891.711", - "-929.623", - "-763.922", - "-295.209", - "-5.93232", - "-462.384", - "-11.0433", - "-82.2066", - "-660.051", - "-275.434", - "-737.098", - "-397.825", - "-364.883", - "-300.54", - "-430.463", - "-122.025", - "-41.9809", - "-673.721", - "-141.586", - "-393.796", - "-648.788", - "-716.76", - "-971.089", - "-697.388", - "-971.027", - "-750.867", - "-427.486", - "-749.825", - "-94.0388", - "-539.59", - "-131.983", - "-994.648", - "-47.0082", - "-816.226", - "-186.158", - "-408.244", - "-502.46", - "-480.419", - "-743.654", - "-927.834", - "-886.397", - "-547.287", - "-591.446", - "-591.684", - "-197.322", - "-116.703", - "-615.864", - "-197.985", - "-908.485", - "-735.701", - "-739.343", - "-532.559", - "-653.868", - "-551.298", - "-694.673", - "-253.651", - "-153.016", - "-258.145", - "-33.9448", - "-386.837", - "-34.9441", - "-928.017", - "-398.128", - "-149.008", - "-601.231", - "-171.698", - "-362.54", - "-289.294", - "-441.17", - "-391.882", - "-817.09", - "-319.069", - "-783.123", - "-740.349", - "-68.604", - "-515.443", - "-247.896", - "-961.682", - "-956.035", - "-661.427", - "-845.168", - "-697.225", - "-237.749", - "-663.543", - "-478.323", - "-55.1324", - "-817.613", - "-36.3772", - "-755.445", - "-579.69", - "-395.764", - "-395.365", - "-504.506", - "-987.775", - "-675.262", - "-169.007", - "-70.109", - "-370.677", - "-379.956", - "-140.991", - "-93.0268", - "-907.112", - "-361.471", - "-886.093", - "-943.854", - "-407.805", - "-984.249", - "-696.544", - "-149.998", - "-940.832", - "-257.934", - "-541.222", - "-342.857", - "-638.199", - "-704.12", - "-466.033", - "-884.838", - "-68.7674", - "-499.207", - "-76.5406", - "-32.0619", - "-145.563", - "-898.098", - "-335.452", - "-931.76", - "-472.555", - "-632.61", - "-18.975", - "-861.947", - "-814.269", - "-630.352", - "-243.558", - "-499.958", - "-979.405", - "-643.234", - "-59.7783", - "-698.652", - "-790.815", - "-677.836", - "-929.503", - "-414.204", - "-101.805", - "-148.253", - "-957.522", - "-873.189", - "-431.409", - "-873.272", - "-215.266", - "-997.571", - "-671.867", - "-384.257", - "-473.373", - "-885.558", - "-938.555", - "-275.533", - "-231.617", - "-633.481", - "-263.781", - "-370.798", - "-113.749", - "-6.91848", - "-50.0446", - "-959.463", - "-749.537", - "-906.469", - "-61.3258", - "-104.946", - "-834.611", - "-964.39", - "-728.576", - "-905.658", - "-100.726", - "-358.097", - "-526.51", - "-669.307", - "-525.827", - "-411.766", - "-691.055", - "-763.757", - "-237.793", - "-142.526", - "-659.08", - "-705.169", - "-93.369", - "-766.776", - "-56.339", - "-889.082", - "-819.436", - "-15.0551", - "-824.651", - "-344.558", - "-258.214", - "-888.214", - "-586.132", - "-139.113", - "-703.292", - "-789.575", - "-854.264", - "-459.507", - "-387.249", - "-98.3882", - "-446.939", - "-572.907", - "-941.716", - "-276.695", - "-886.036", - "-888.666", - "-103.6", - "-697.091", - "-656.557", - "-540.182", - "-110.986", - "-756.477", - "-75.6393", - "-268.826", - "-29.9392", - "-572.936", - "-259.8", - "-257.608", - "-528.426", - "-177.507", - "-26.0259", - "-17.0417", - "-305.287", - "-16.9668", - "-112.445", - "-55.1637", - "-716.126", - "-17.1372", - "-278.417", - "-625.356", - "-61.388", - "-492.355", - "-988.414", - "-936.439", - "-15.7247", - "-761.412", - "-13.987", - "-558.687", - "-121.808", - "-166.99", - "-6.02838", - "-812.191", - "-447.074", - "-446.324", - "-67.9919", - "-893.933", - "-15.0548", - "-60.9777", - "-126.919", - "-155.691", - "-55.0204", - "-216.064", - "-98.9739", - "-68.9944", - "-111.161", - "-875.878", - "-94.8309", - "-456.757", - "-312.666", - "-371.826", - "-670.384", - "-759.37", - "-463.263", - "-80.2715", - "-619.614", - "-91.016", - "-489.648", - "-893.096", - "-286.118", - "-953.002", - "-274.601", - "-157.994", - "-46.0127", - "-921.805", - "-404.092", - "-593.689", - "-862.468", - "-237.88", - "-770.083", - "-271.083", - "-908.088", - "-71.0159", - "-997.462", - "-949.769", - "-796.183" - ], - "ysrc": "JohnMaddock:29:f2a96d", - "y": [ - "941.692", - "878.145", - "879.707", - "104.649", - "973.9", - "976.108", - "540.349", - "820.166", - "768.001", - "914.11", - "147.052", - "960.737", - "984.429", - "121.131", - "916.673", - "918.453", - "812.086", - "916.945", - "758.098", - "823.404", - "892.384", - "978.879", - "453.044", - "948.992", - "942.171", - "600.364", - "742.043", - "319.076", - "877.468", - "883.624", - "872.62", - "337.739", - "430.336", - "699.961", - "982.173", - "782.424", - "147.892", - "640.483", - "909.676", - "80.9238", - "866.749", - "499.741", - "653.22", - "824.482", - "709.493", - "832.014", - "938.126", - "752.877", - "897.938", - "722.067", - "957.379", - "963.378", - "977.61", - "49.0381", - "279.375", - "777.258", - "570.802", - "827.18", - "882.023", - "959.855", - "757.818", - "525.499", - "760.746", - "794.17", - "737.959", - "786.812", - "76.7356", - "486.801", - "34.085", - "996.62", - "157.309", - "993.941", - "101.665", - "860.804", - "472.204", - "793.594", - "946.096", - "807.315", - "838.524", - "975.195", - "900.823", - "839.43", - "918.359", - "989.703", - "772.153", - "917.435", - "746.584", - "878.959", - "829.788", - "894.825", - "978.426", - "609.951", - "858.082", - "983.468", - "83.3116", - "404.824", - "184.384", - "850.147", - "199.541", - "747.194", - "103.17", - "156.267", - "875.71", - "833.698", - "993.293", - "742.527", - "835.403", - "930.068", - "836.455", - "257.821", - "568.925", - "883.084", - "358.955", - "82.6933", - "864.138", - "927.801", - "190.321", - "297.706", - "994.468", - "828.204", - "113.286", - "26.4778", - "993.864", - "480.99", - "873.364", - "761.076", - "834.634", - "149.575", - "845.733", - "798.55", - "408.079", - "957.791", - "986.479", - "918.653", - "368.576", - "344.97", - "814.76", - "29.0768", - "41.8067", - "200.443", - "8.36594", - "844.985", - "950.391", - "967.047", - "511.75", - "783.691", - "181.958", - "814.531", - "845.734", - "886.221", - "938.999", - "973.077", - "489.037", - "991.271", - "766.284", - "197.569", - "742.899", - "856.212", - "420.592", - "970.132", - "772.95", - "869.075", - "845.518", - "944.826", - "934.174", - "455.536", - "818.476", - "985.574", - "865.334", - "227.883", - "948.226", - "856.413", - "43.1833", - "471.862", - "993.51", - "803.548", - "178.092", - "334.627", - "418.084", - "868.713", - "860.862", - "811.625", - "458.822", - "826.788", - "903.412", - "560.841", - "841.256", - "605.29", - "158.23", - "242.326", - "818.377", - "225.611", - "862.55", - "148.55", - "814.337", - "628.338", - "920.064", - "937.674", - "601.919", - "363.739", - "995.665", - "901.512", - "986.951", - "830.927", - "486.008", - "863.615", - "865.995", - "858.791", - "30.0042", - "39.6452", - "217.347", - "989.158", - "527.9", - "831.233", - "963.567", - "850.48", - "979.154", - "950.444", - "744.696", - "152.67", - "820.483", - "866.612", - "946.655", - "700.935", - "889.383", - "923.917", - "663.971", - "830.008", - "536.22", - "632.875", - "965.437", - "425.469", - "162.75", - "707.358", - "819.312", - "917.459", - "940.487", - "271.15", - "631.092", - "866.142", - "928.117", - "928.55", - "970.249", - "746.794", - "931.836", - "113.911", - "850.253", - "839.921", - "922.388", - "0.894561", - "526.312", - "446.056", - "949.215", - "462.199", - "233.443", - "991.401", - "489.603", - "984.35", - "283.222", - "214.533", - "456.138", - "984.984", - "303.039", - "528.81", - "527.124", - "880.581", - "484.231", - "129.209", - "703.634", - "324.969", - "747.054", - "504.611", - "123.261", - "741.048", - "244.847", - "468.349", - "729.701", - "242.767", - "187.618", - "366.942", - "862.909", - "387.086", - "368.004", - "360.446", - "284.781", - "603.653", - "261.259", - "494.622", - "735.663", - "338.9", - "164.428", - "36.5189", - "12.958", - "138.366", - "794.096", - "329.233", - "324.218", - "356.873", - "808.289", - "884.51", - "628.963", - "812.534", - "413.238", - "411.916", - "184.29", - "433.889", - "228.865", - "175.485", - "287.275", - "682.599", - "46.3549", - "150.613", - "24.3369", - "214.008", - "277.843", - "484.529", - "52.607", - "121.552", - "101.987", - "68.6842", - "267.21", - "93.4929", - "790.979", - "151.495" - ], - "zsrc": "JohnMaddock:29:0e8674", - "z": [ - "387.105", - "412.485", - "88.7399", - "999.041", - "70.6026", - "86.0987", - "983.055", - "66.2242", - "35.448", - "68.0274", - "20.5647", - "67.0867", - "97.2644", - "607.567", - "66.6403", - "27.5443", - "81.3838", - "51.1916", - "22.4902", - "34.6139", - "66.5237", - "72.6816", - "907.367", - "62.2937", - "70.9396", - "48.1961", - "62.4595", - "873.185", - "44.7949", - "40.2758", - "42.83", - "897.849", - "209.145", - "355.93", - "89.1738", - "19.2768", - "786.081", - "36.6778", - "77.5137", - "928.842", - "39.2197", - "288.296", - "875.655", - "25.7504", - "945.952", - "56.9816", - "59.8603", - "31.0381", - "38.5613", - "44.9994", - "80.0121", - "80.0162", - "79.1532", - "984.341", - "809.433", - "53.9584", - "958.946", - "75.3008", - "53.7022", - "59.3111", - "66.7104", - "912.26", - "69.4959", - "22.7059", - "16.3162", - "23.3975", - "952.439", - "797.406", - "891.322", - "72.8744", - "911.175", - "36.2367", - "470.374", - "77.6715", - "152.747", - "22.1934", - "70.3659", - "82.8975", - "67.5887", - "67.7221", - "62.1658", - "51.0202", - "87.0691", - "84.641", - "318.462", - "44.5355", - "51.5713", - "21.6502", - "76.6574", - "67.8433", - "50.124", - "173.829", - "63.1308", - "82.6102", - "845.304", - "938.514", - "822.485", - "53.5175", - "971.969", - "81.9855", - "808.724", - "955.172", - "75.5081", - "41.4755", - "76.227", - "29.7829", - "47.39", - "57.7645", - "69.5092", - "721.771", - "570.475", - "48.178", - "740.573", - "611.992", - "35.0011", - "47.0001", - "617.685", - "981.076", - "503.147", - "58.8403", - "424.151", - "398.727", - "59.048", - "941.608", - "75.6295", - "881.017", - "34.2512", - "115.511", - "50.358", - "22.9341", - "990.818", - "34.3669", - "32.5388", - "96.3984", - "701.502", - "160.696", - "43.2308", - "941.711", - "675.952", - "144.306", - "446.309", - "48.5595", - "77.7265", - "76.6351", - "73.9397", - "61.1611", - "700.07", - "13.6401", - "54.8392", - "735.148", - "46.7445", - "81.5103", - "291.058", - "82.0849", - "42.9821", - "294.587", - "55.9324", - "72.9016", - "686.955", - "56.9197", - "40.6085", - "33.5119", - "51.2714", - "78.7341", - "45.3407", - "836.712", - "33.4521", - "210.387", - "36.7135", - "911.7", - "45.276", - "22.6176", - "660.403", - "661.544", - "56.3601", - "59.1307", - "794.451", - "46.2577", - "102.585", - "104.665", - "68.0842", - "59.3754", - "889.187", - "681.772", - "222.845", - "837.293", - "78.273", - "434.829", - "979.626", - "98.7548", - "931.703", - "669.709", - "79.7411", - "812.868", - "47.7595", - "980.089", - "40.3202", - "64.2952", - "977.294", - "772.043", - "63.8498", - "46.7388", - "64.9163", - "81.1714", - "647.905", - "53.2186", - "47.6904", - "37.7312", - "933.457", - "342.657", - "870.754", - "69.7802", - "369.416", - "71.3747", - "58.8539", - "24.763", - "81.2168", - "55.6618", - "37.6302", - "32.7332", - "42.6225", - "45.4668", - "52.36", - "837.599", - "47.1938", - "39.4823", - "946.663", - "62.1414", - "402.982", - "994.757", - "69.1756", - "566.816", - "457.625", - "867.739", - "70.1031", - "51.4784", - "76.527", - "150.315", - "938.111", - "28.7391", - "54.3181", - "68.9589", - "57.1665", - "47.4487", - "59.027", - "471.21", - "75.7714", - "570.869", - "57.8607", - "949.227", - "757.15", - "748.833", - "80.2731", - "988.843", - "925.67", - "56.8448", - "886.927", - "84.3988", - "938.808", - "712.97", - "811.07", - "76.3916", - "616.187", - "962.56", - "804.403", - "385.244", - "707.284", - "853.84", - "149.731", - "744.276", - "41.0385", - "202.681", - "24.3613", - "958.099", - "69.5516", - "866.694", - "230.583", - "849.454", - "971.488", - "639.587", - "637.795", - "86.5134", - "96.0238", - "936.598", - "59.0205", - "961.911", - "771.62", - "977.99", - "79.9338", - "758.978", - "726.083", - "992.363", - "580.959", - "597.597", - "547.846", - "765.967", - "960.152", - "876.401", - "40.7079", - "56.1654", - "212.027", - "216.771", - "875.976", - "192.835", - "802.865", - "184.795", - "143.869", - "872.706", - "224.209", - "242.891", - "866.149", - "645.797", - "42.2334", - "974.98", - "111.394", - "327.573", - "807.842", - "886.013", - "646.86", - "459.06", - "895.222", - "786.642", - "408.833", - "781.159" - ], - "marker": { - "size": 3, - "color": "rgb(237, 255, 102)" - } - }, - { - "mode": "markers", - "name": "2048-4096", - "type": "scatter3d", - "xsrc": "JohnMaddock:29:8b3d32", - "x": [ - "-972.698", - "-380.705", - "-954.271", - "-757.844", - "-434.481", - "-436.956", - "-6.04532", - "-899.34", - "-67.2311", - "-746.253", - "-764.735", - "-267.732", - "-177.087", - "-72.0126", - "-304.915", - "-823.976", - "-116.552", - "-472.755", - "-604.035", - "-194.748", - "-431.402", - "-677.598", - "-129.385", - "-837.917", - "-753.746", - "-775.326", - "-946.695", - "-19.0204", - "-553.345", - "-348.947", - "-632.68", - "-253.777", - "-550.233", - "-739.444", - "-255.246", - "-724.08", - "-78.9787", - "-305.202", - "-891.711", - "-929.623", - "-763.922", - "-295.209", - "-5.93232", - "-462.384", - "-11.0433", - "-82.2066", - "-660.051", - "-275.434", - "-737.098", - "-397.825", - "-364.883", - "-300.54", - "-430.463", - "-122.025", - "-41.9809", - "-673.721", - "-141.586", - "-393.796", - "-648.788", - "-716.76", - "-971.089", - "-697.388", - "-971.027", - "-750.867", - "-427.486", - "-749.825", - "-94.0388", - "-539.59", - "-131.983", - "-994.648", - "-47.0082", - "-816.226", - "-186.158", - "-408.244", - "-502.46", - "-480.419", - "-743.654", - "-927.834", - "-886.397", - "-547.287", - "-591.446", - "-591.684", - "-197.322", - "-116.703", - "-615.864", - "-197.985", - "-908.485", - "-735.701", - "-739.343", - "-532.559", - "-653.868", - "-551.298", - "-694.673", - "-253.651", - "-153.016", - "-258.145", - "-33.9448", - "-386.837", - "-34.9441", - "-928.017", - "-398.128", - "-149.008", - "-601.231", - "-171.698", - "-362.54", - "-289.294", - "-441.17", - "-391.882", - "-817.09", - "-319.069", - "-783.123", - "-740.349", - "-68.604", - "-515.443", - "-247.896", - "-961.682", - "-956.035", - "-661.427", - "-845.168", - "-697.225", - "-237.749", - "-663.543", - "-478.323", - "-55.1324", - "-817.613", - "-36.3772", - "-755.445", - "-579.69", - "-395.764", - "-395.365", - "-504.506", - "-987.775", - "-675.262", - "-169.007", - "-70.109", - "-370.677", - "-379.956", - "-140.991", - "-93.0268", - "-907.112", - "-361.471", - "-886.093", - "-943.854", - "-407.805", - "-984.249", - "-696.544", - "-149.998", - "-940.832", - "-257.934", - "-541.222", - "-342.857", - "-638.199", - "-704.12", - "-466.033", - "-884.838", - "-68.7674", - "-499.207", - "-76.5406", - "-32.0619", - "-145.563", - "-898.098", - "-335.452", - "-931.76", - "-472.555", - "-632.61", - "-18.975", - "-861.947", - "-814.269", - "-630.352", - "-243.558", - "-499.958", - "-979.405", - "-643.234", - "-59.7783", - "-698.652", - "-790.815", - "-677.836", - "-929.503", - "-414.204", - "-101.805", - "-148.253", - "-957.522", - "-873.189", - "-431.409", - "-873.272", - "-215.266", - "-997.571", - "-671.867", - "-384.257", - "-473.373", - "-885.558", - "-938.555", - "-275.533", - "-231.617", - "-633.481", - "-263.781", - "-370.798", - "-113.749", - "-6.91848", - "-50.0446", - "-959.463", - "-749.537", - "-906.469", - "-61.3258", - "-104.946", - "-834.611", - "-964.39", - "-728.576", - "-905.658", - "-100.726", - "-358.097", - "-526.51", - "-669.307", - "-525.827", - "-411.766", - "-691.055", - "-763.757", - "-237.793", - "-142.526", - "-659.08", - "-705.169", - "-93.369", - "-766.776", - "-56.339", - "-889.082", - "-819.436", - "-15.0551", - "-824.651", - "-344.558", - "-258.214", - "-888.214", - "-586.132", - "-139.113", - "-703.292", - "-789.575", - "-854.264", - "-459.507", - "-387.249", - "-98.3882", - "-446.939", - "-572.907", - "-941.716", - "-276.695", - "-886.036", - "-888.666", - "-103.6", - "-697.091", - "-656.557", - "-540.182", - "-110.986", - "-756.477", - "-75.6393", - "-268.826", - "-29.9392", - "-572.936", - "-259.8", - "-257.608", - "-528.426", - "-177.507", - "-26.0259", - "-17.0417", - "-305.287", - "-16.9668", - "-112.445", - "-55.1637", - "-716.126", - "-17.1372", - "-278.417", - "-625.356", - "-61.388", - "-492.355", - "-988.414", - "-936.439", - "-15.7247", - "-761.412", - "-13.987", - "-558.687", - "-121.808", - "-166.99", - "-6.02838", - "-812.191", - "-447.074", - "-446.324", - "-67.9919", - "-893.933", - "-15.0548", - "-60.9777", - "-126.919", - "-155.691", - "-55.0204", - "-216.064", - "-98.9739", - "-68.9944", - "-111.161", - "-875.878", - "-94.8309", - "-456.757", - "-312.666", - "-371.826", - "-670.384", - "-759.37", - "-463.263", - "-80.2715", - "-619.614", - "-91.016", - "-489.648", - "-893.096", - "-286.118", - "-953.002", - "-274.601", - "-157.994", - "-46.0127", - "-921.805", - "-404.092", - "-593.689", - "-862.468", - "-237.88", - "-770.083", - "-271.083", - "-908.088", - "-71.0159", - "-997.462", - "-949.769", - "-796.183" - ], - "ysrc": "JohnMaddock:29:f2a96d", - "y": [ - "941.692", - "878.145", - "879.707", - "104.649", - "973.9", - "976.108", - "540.349", - "820.166", - "768.001", - "914.11", - "147.052", - "960.737", - "984.429", - "121.131", - "916.673", - "918.453", - "812.086", - "916.945", - "758.098", - "823.404", - "892.384", - "978.879", - "453.044", - "948.992", - "942.171", - "600.364", - "742.043", - "319.076", - "877.468", - "883.624", - "872.62", - "337.739", - "430.336", - "699.961", - "982.173", - "782.424", - "147.892", - "640.483", - "909.676", - "80.9238", - "866.749", - "499.741", - "653.22", - "824.482", - "709.493", - "832.014", - "938.126", - "752.877", - "897.938", - "722.067", - "957.379", - "963.378", - "977.61", - "49.0381", - "279.375", - "777.258", - "570.802", - "827.18", - "882.023", - "959.855", - "757.818", - "525.499", - "760.746", - "794.17", - "737.959", - "786.812", - "76.7356", - "486.801", - "34.085", - "996.62", - "157.309", - "993.941", - "101.665", - "860.804", - "472.204", - "793.594", - "946.096", - "807.315", - "838.524", - "975.195", - "900.823", - "839.43", - "918.359", - "989.703", - "772.153", - "917.435", - "746.584", - "878.959", - "829.788", - "894.825", - "978.426", - "609.951", - "858.082", - "983.468", - "83.3116", - "404.824", - "184.384", - "850.147", - "199.541", - "747.194", - "103.17", - "156.267", - "875.71", - "833.698", - "993.293", - "742.527", - "835.403", - "930.068", - "836.455", - "257.821", - "568.925", - "883.084", - "358.955", - "82.6933", - "864.138", - "927.801", - "190.321", - "297.706", - "994.468", - "828.204", - "113.286", - "26.4778", - "993.864", - "480.99", - "873.364", - "761.076", - "834.634", - "149.575", - "845.733", - "798.55", - "408.079", - "957.791", - "986.479", - "918.653", - "368.576", - "344.97", - "814.76", - "29.0768", - "41.8067", - "200.443", - "8.36594", - "844.985", - "950.391", - "967.047", - "511.75", - "783.691", - "181.958", - "814.531", - "845.734", - "886.221", - "938.999", - "973.077", - "489.037", - "991.271", - "766.284", - "197.569", - "742.899", - "856.212", - "420.592", - "970.132", - "772.95", - "869.075", - "845.518", - "944.826", - "934.174", - "455.536", - "818.476", - "985.574", - "865.334", - "227.883", - "948.226", - "856.413", - "43.1833", - "471.862", - "993.51", - "803.548", - "178.092", - "334.627", - "418.084", - "868.713", - "860.862", - "811.625", - "458.822", - "826.788", - "903.412", - "560.841", - "841.256", - "605.29", - "158.23", - "242.326", - "818.377", - "225.611", - "862.55", - "148.55", - "814.337", - "628.338", - "920.064", - "937.674", - "601.919", - "363.739", - "995.665", - "901.512", - "986.951", - "830.927", - "486.008", - "863.615", - "865.995", - "858.791", - "30.0042", - "39.6452", - "217.347", - "989.158", - "527.9", - "831.233", - "963.567", - "850.48", - "979.154", - "950.444", - "744.696", - "152.67", - "820.483", - "866.612", - "946.655", - "700.935", - "889.383", - "923.917", - "663.971", - "830.008", - "536.22", - "632.875", - "965.437", - "425.469", - "162.75", - "707.358", - "819.312", - "917.459", - "940.487", - "271.15", - "631.092", - "866.142", - "928.117", - "928.55", - "970.249", - "746.794", - "931.836", - "113.911", - "850.253", - "839.921", - "922.388", - "0.894561", - "526.312", - "446.056", - "949.215", - "462.199", - "233.443", - "991.401", - "489.603", - "984.35", - "283.222", - "214.533", - "456.138", - "984.984", - "303.039", - "528.81", - "527.124", - "880.581", - "484.231", - "129.209", - "703.634", - "324.969", - "747.054", - "504.611", - "123.261", - "741.048", - "244.847", - "468.349", - "729.701", - "242.767", - "187.618", - "366.942", - "862.909", - "387.086", - "368.004", - "360.446", - "284.781", - "603.653", - "261.259", - "494.622", - "735.663", - "338.9", - "164.428", - "36.5189", - "12.958", - "138.366", - "794.096", - "329.233", - "324.218", - "356.873", - "808.289", - "884.51", - "628.963", - "812.534", - "413.238", - "411.916", - "184.29", - "433.889", - "228.865", - "175.485", - "287.275", - "682.599", - "46.3549", - "150.613", - "24.3369", - "214.008", - "277.843", - "484.529", - "52.607", - "121.552", - "101.987", - "68.6842", - "267.21", - "93.4929", - "790.979", - "151.495" - ], - "zsrc": "JohnMaddock:29:0e8674", - "z": [ - "387.105", - "412.485", - "88.7399", - "999.041", - "70.6026", - "86.0987", - "983.055", - "66.2242", - "35.448", - "68.0274", - "20.5647", - "67.0867", - "97.2644", - "607.567", - "66.6403", - "27.5443", - "81.3838", - "51.1916", - "22.4902", - "34.6139", - "66.5237", - "72.6816", - "907.367", - "62.2937", - "70.9396", - "48.1961", - "62.4595", - "873.185", - "44.7949", - "40.2758", - "42.83", - "897.849", - "209.145", - "355.93", - "89.1738", - "19.2768", - "786.081", - "36.6778", - "77.5137", - "928.842", - "39.2197", - "288.296", - "875.655", - "25.7504", - "945.952", - "56.9816", - "59.8603", - "31.0381", - "38.5613", - "44.9994", - "80.0121", - "80.0162", - "79.1532", - "984.341", - "809.433", - "53.9584", - "958.946", - "75.3008", - "53.7022", - "59.3111", - "66.7104", - "912.26", - "69.4959", - "22.7059", - "16.3162", - "23.3975", - "952.439", - "797.406", - "891.322", - "72.8744", - "911.175", - "36.2367", - "470.374", - "77.6715", - "152.747", - "22.1934", - "70.3659", - "82.8975", - "67.5887", - "67.7221", - "62.1658", - "51.0202", - "87.0691", - "84.641", - "318.462", - "44.5355", - "51.5713", - "21.6502", - "76.6574", - "67.8433", - "50.124", - "173.829", - "63.1308", - "82.6102", - "845.304", - "938.514", - "822.485", - "53.5175", - "971.969", - "81.9855", - "808.724", - "955.172", - "75.5081", - "41.4755", - "76.227", - "29.7829", - "47.39", - "57.7645", - "69.5092", - "721.771", - "570.475", - "48.178", - "740.573", - "611.992", - "35.0011", - "47.0001", - "617.685", - "981.076", - "503.147", - "58.8403", - "424.151", - "398.727", - "59.048", - "941.608", - "75.6295", - "881.017", - "34.2512", - "115.511", - "50.358", - "22.9341", - "990.818", - "34.3669", - "32.5388", - "96.3984", - "701.502", - "160.696", - "43.2308", - "941.711", - "675.952", - "144.306", - "446.309", - "48.5595", - "77.7265", - "76.6351", - "73.9397", - "61.1611", - "700.07", - "13.6401", - "54.8392", - "735.148", - "46.7445", - "81.5103", - "291.058", - "82.0849", - "42.9821", - "294.587", - "55.9324", - "72.9016", - "686.955", - "56.9197", - "40.6085", - "33.5119", - "51.2714", - "78.7341", - "45.3407", - "836.712", - "33.4521", - "210.387", - "36.7135", - "911.7", - "45.276", - "22.6176", - "660.403", - "661.544", - "56.3601", - "59.1307", - "794.451", - "46.2577", - "102.585", - "104.665", - "68.0842", - "59.3754", - "889.187", - "681.772", - "222.845", - "837.293", - "78.273", - "434.829", - "979.626", - "98.7548", - "931.703", - "669.709", - "79.7411", - "812.868", - "47.7595", - "980.089", - "40.3202", - "64.2952", - "977.294", - "772.043", - "63.8498", - "46.7388", - "64.9163", - "81.1714", - "647.905", - "53.2186", - "47.6904", - "37.7312", - "933.457", - "342.657", - "870.754", - "69.7802", - "369.416", - "71.3747", - "58.8539", - "24.763", - "81.2168", - "55.6618", - "37.6302", - "32.7332", - "42.6225", - "45.4668", - "52.36", - "837.599", - "47.1938", - "39.4823", - "946.663", - "62.1414", - "402.982", - "994.757", - "69.1756", - "566.816", - "457.625", - "867.739", - "70.1031", - "51.4784", - "76.527", - "150.315", - "938.111", - "28.7391", - "54.3181", - "68.9589", - "57.1665", - "47.4487", - "59.027", - "471.21", - "75.7714", - "570.869", - "57.8607", - "949.227", - "757.15", - "748.833", - "80.2731", - "988.843", - "925.67", - "56.8448", - "886.927", - "84.3988", - "938.808", - "712.97", - "811.07", - "76.3916", - "616.187", - "962.56", - "804.403", - "385.244", - "707.284", - "853.84", - "149.731", - "744.276", - "41.0385", - "202.681", - "24.3613", - "958.099", - "69.5516", - "866.694", - "230.583", - "849.454", - "971.488", - "639.587", - "637.795", - "86.5134", - "96.0238", - "936.598", - "59.0205", - "961.911", - "771.62", - "977.99", - "79.9338", - "758.978", - "726.083", - "992.363", - "580.959", - "597.597", - "547.846", - "765.967", - "960.152", - "876.401", - "40.7079", - "56.1654", - "212.027", - "216.771", - "875.976", - "192.835", - "802.865", - "184.795", - "143.869", - "872.706", - "224.209", - "242.891", - "866.149", - "645.797", - "42.2334", - "974.98", - "111.394", - "327.573", - "807.842", - "886.013", - "646.86", - "459.06", - "895.222", - "786.642", - "408.833", - "781.159" - ], - "marker": { - "size": 3 - } - }, - { - "mode": "markers", - "name": "1024-2048", - "type": "scatter3d", - "xsrc": "JohnMaddock:29:8b3d32", - "x": [ - "-972.698", - "-380.705", - "-954.271", - "-757.844", - "-434.481", - "-436.956", - "-6.04532", - "-899.34", - "-67.2311", - "-746.253", - "-764.735", - "-267.732", - "-177.087", - "-72.0126", - "-304.915", - "-823.976", - "-116.552", - "-472.755", - "-604.035", - "-194.748", - "-431.402", - "-677.598", - "-129.385", - "-837.917", - "-753.746", - "-775.326", - "-946.695", - "-19.0204", - "-553.345", - "-348.947", - "-632.68", - "-253.777", - "-550.233", - "-739.444", - "-255.246", - "-724.08", - "-78.9787", - "-305.202", - "-891.711", - "-929.623", - "-763.922", - "-295.209", - "-5.93232", - "-462.384", - "-11.0433", - "-82.2066", - "-660.051", - "-275.434", - "-737.098", - "-397.825", - "-364.883", - "-300.54", - "-430.463", - "-122.025", - "-41.9809", - "-673.721", - "-141.586", - "-393.796", - "-648.788", - "-716.76", - "-971.089", - "-697.388", - "-971.027", - "-750.867", - "-427.486", - "-749.825", - "-94.0388", - "-539.59", - "-131.983", - "-994.648", - "-47.0082", - "-816.226", - "-186.158", - "-408.244", - "-502.46", - "-480.419", - "-743.654", - "-927.834", - "-886.397", - "-547.287", - "-591.446", - "-591.684", - "-197.322", - "-116.703", - "-615.864", - "-197.985", - "-908.485", - "-735.701", - "-739.343", - "-532.559", - "-653.868", - "-551.298", - "-694.673", - "-253.651", - "-153.016", - "-258.145", - "-33.9448", - "-386.837", - "-34.9441", - "-928.017", - "-398.128", - "-149.008", - "-601.231", - "-171.698", - "-362.54", - "-289.294", - "-441.17", - "-391.882", - "-817.09", - "-319.069", - "-783.123", - "-740.349", - "-68.604", - "-515.443", - "-247.896", - "-961.682", - "-956.035", - "-661.427", - "-845.168", - "-697.225", - "-237.749", - "-663.543", - "-478.323", - "-55.1324", - "-817.613", - "-36.3772", - "-755.445", - "-579.69", - "-395.764", - "-395.365", - "-504.506", - "-987.775", - "-675.262", - "-169.007", - "-70.109", - "-370.677", - "-379.956", - "-140.991", - "-93.0268", - "-907.112", - "-361.471", - "-886.093", - "-943.854", - "-407.805", - "-984.249", - "-696.544", - "-149.998", - "-940.832", - "-257.934", - "-541.222", - "-342.857", - "-638.199", - "-704.12", - "-466.033", - "-884.838", - "-68.7674", - "-499.207", - "-76.5406", - "-32.0619", - "-145.563", - "-898.098", - "-335.452", - "-931.76", - "-472.555", - "-632.61", - "-18.975", - "-861.947", - "-814.269", - "-630.352", - "-243.558", - "-499.958", - "-979.405", - "-643.234", - "-59.7783", - "-698.652", - "-790.815", - "-677.836", - "-929.503", - "-414.204", - "-101.805", - "-148.253", - "-957.522", - "-873.189", - "-431.409", - "-873.272", - "-215.266", - "-997.571", - "-671.867", - "-384.257", - "-473.373", - "-885.558", - "-938.555", - "-275.533", - "-231.617", - "-633.481", - "-263.781", - "-370.798", - "-113.749", - "-6.91848", - "-50.0446", - "-959.463", - "-749.537", - "-906.469", - "-61.3258", - "-104.946", - "-834.611", - "-964.39", - "-728.576", - "-905.658", - "-100.726", - "-358.097", - "-526.51", - "-669.307", - "-525.827", - "-411.766", - "-691.055", - "-763.757", - "-237.793", - "-142.526", - "-659.08", - "-705.169", - "-93.369", - "-766.776", - "-56.339", - "-889.082", - "-819.436", - "-15.0551", - "-824.651", - "-344.558", - "-258.214", - "-888.214", - "-586.132", - "-139.113", - "-703.292", - "-789.575", - "-854.264", - "-459.507", - "-387.249", - "-98.3882", - "-446.939", - "-572.907", - "-941.716", - "-276.695", - "-886.036", - "-888.666", - "-103.6", - "-697.091", - "-656.557", - "-540.182", - "-110.986", - "-756.477", - "-75.6393", - "-268.826", - "-29.9392", - "-572.936", - "-259.8", - "-257.608", - "-528.426", - "-177.507", - "-26.0259", - "-17.0417", - "-305.287", - "-16.9668", - "-112.445", - "-55.1637", - "-716.126", - "-17.1372", - "-278.417", - "-625.356", - "-61.388", - "-492.355", - "-988.414", - "-936.439", - "-15.7247", - "-761.412", - "-13.987", - "-558.687", - "-121.808", - "-166.99", - "-6.02838", - "-812.191", - "-447.074", - "-446.324", - "-67.9919", - "-893.933", - "-15.0548", - "-60.9777", - "-126.919", - "-155.691", - "-55.0204", - "-216.064", - "-98.9739", - "-68.9944", - "-111.161", - "-875.878", - "-94.8309", - "-456.757", - "-312.666", - "-371.826", - "-670.384", - "-759.37", - "-463.263", - "-80.2715", - "-619.614", - "-91.016", - "-489.648", - "-893.096", - "-286.118", - "-953.002", - "-274.601", - "-157.994", - "-46.0127", - "-921.805", - "-404.092", - "-593.689", - "-862.468", - "-237.88", - "-770.083", - "-271.083", - "-908.088", - "-71.0159", - "-997.462", - "-949.769", - "-796.183" - ], - "ysrc": "JohnMaddock:29:f2a96d", - "y": [ - "941.692", - "878.145", - "879.707", - "104.649", - "973.9", - "976.108", - "540.349", - "820.166", - "768.001", - "914.11", - "147.052", - "960.737", - "984.429", - "121.131", - "916.673", - "918.453", - "812.086", - "916.945", - "758.098", - "823.404", - "892.384", - "978.879", - "453.044", - "948.992", - "942.171", - "600.364", - "742.043", - "319.076", - "877.468", - "883.624", - "872.62", - "337.739", - "430.336", - "699.961", - "982.173", - "782.424", - "147.892", - "640.483", - "909.676", - "80.9238", - "866.749", - "499.741", - "653.22", - "824.482", - "709.493", - "832.014", - "938.126", - "752.877", - "897.938", - "722.067", - "957.379", - "963.378", - "977.61", - "49.0381", - "279.375", - "777.258", - "570.802", - "827.18", - "882.023", - "959.855", - "757.818", - "525.499", - "760.746", - "794.17", - "737.959", - "786.812", - "76.7356", - "486.801", - "34.085", - "996.62", - "157.309", - "993.941", - "101.665", - "860.804", - "472.204", - "793.594", - "946.096", - "807.315", - "838.524", - "975.195", - "900.823", - "839.43", - "918.359", - "989.703", - "772.153", - "917.435", - "746.584", - "878.959", - "829.788", - "894.825", - "978.426", - "609.951", - "858.082", - "983.468", - "83.3116", - "404.824", - "184.384", - "850.147", - "199.541", - "747.194", - "103.17", - "156.267", - "875.71", - "833.698", - "993.293", - "742.527", - "835.403", - "930.068", - "836.455", - "257.821", - "568.925", - "883.084", - "358.955", - "82.6933", - "864.138", - "927.801", - "190.321", - "297.706", - "994.468", - "828.204", - "113.286", - "26.4778", - "993.864", - "480.99", - "873.364", - "761.076", - "834.634", - "149.575", - "845.733", - "798.55", - "408.079", - "957.791", - "986.479", - "918.653", - "368.576", - "344.97", - "814.76", - "29.0768", - "41.8067", - "200.443", - "8.36594", - "844.985", - "950.391", - "967.047", - "511.75", - "783.691", - "181.958", - "814.531", - "845.734", - "886.221", - "938.999", - "973.077", - "489.037", - "991.271", - "766.284", - "197.569", - "742.899", - "856.212", - "420.592", - "970.132", - "772.95", - "869.075", - "845.518", - "944.826", - "934.174", - "455.536", - "818.476", - "985.574", - "865.334", - "227.883", - "948.226", - "856.413", - "43.1833", - "471.862", - "993.51", - "803.548", - "178.092", - "334.627", - "418.084", - "868.713", - "860.862", - "811.625", - "458.822", - "826.788", - "903.412", - "560.841", - "841.256", - "605.29", - "158.23", - "242.326", - "818.377", - "225.611", - "862.55", - "148.55", - "814.337", - "628.338", - "920.064", - "937.674", - "601.919", - "363.739", - "995.665", - "901.512", - "986.951", - "830.927", - "486.008", - "863.615", - "865.995", - "858.791", - "30.0042", - "39.6452", - "217.347", - "989.158", - "527.9", - "831.233", - "963.567", - "850.48", - "979.154", - "950.444", - "744.696", - "152.67", - "820.483", - "866.612", - "946.655", - "700.935", - "889.383", - "923.917", - "663.971", - "830.008", - "536.22", - "632.875", - "965.437", - "425.469", - "162.75", - "707.358", - "819.312", - "917.459", - "940.487", - "271.15", - "631.092", - "866.142", - "928.117", - "928.55", - "970.249", - "746.794", - "931.836", - "113.911", - "850.253", - "839.921", - "922.388", - "0.894561", - "526.312", - "446.056", - "949.215", - "462.199", - "233.443", - "991.401", - "489.603", - "984.35", - "283.222", - "214.533", - "456.138", - "984.984", - "303.039", - "528.81", - "527.124", - "880.581", - "484.231", - "129.209", - "703.634", - "324.969", - "747.054", - "504.611", - "123.261", - "741.048", - "244.847", - "468.349", - "729.701", - "242.767", - "187.618", - "366.942", - "862.909", - "387.086", - "368.004", - "360.446", - "284.781", - "603.653", - "261.259", - "494.622", - "735.663", - "338.9", - "164.428", - "36.5189", - "12.958", - "138.366", - "794.096", - "329.233", - "324.218", - "356.873", - "808.289", - "884.51", - "628.963", - "812.534", - "413.238", - "411.916", - "184.29", - "433.889", - "228.865", - "175.485", - "287.275", - "682.599", - "46.3549", - "150.613", - "24.3369", - "214.008", - "277.843", - "484.529", - "52.607", - "121.552", - "101.987", - "68.6842", - "267.21", - "93.4929", - "790.979", - "151.495" - ], - "zsrc": "JohnMaddock:29:0e8674", - "z": [ - "387.105", - "412.485", - "88.7399", - "999.041", - "70.6026", - "86.0987", - "983.055", - "66.2242", - "35.448", - "68.0274", - "20.5647", - "67.0867", - "97.2644", - "607.567", - "66.6403", - "27.5443", - "81.3838", - "51.1916", - "22.4902", - "34.6139", - "66.5237", - "72.6816", - "907.367", - "62.2937", - "70.9396", - "48.1961", - "62.4595", - "873.185", - "44.7949", - "40.2758", - "42.83", - "897.849", - "209.145", - "355.93", - "89.1738", - "19.2768", - "786.081", - "36.6778", - "77.5137", - "928.842", - "39.2197", - "288.296", - "875.655", - "25.7504", - "945.952", - "56.9816", - "59.8603", - "31.0381", - "38.5613", - "44.9994", - "80.0121", - "80.0162", - "79.1532", - "984.341", - "809.433", - "53.9584", - "958.946", - "75.3008", - "53.7022", - "59.3111", - "66.7104", - "912.26", - "69.4959", - "22.7059", - "16.3162", - "23.3975", - "952.439", - "797.406", - "891.322", - "72.8744", - "911.175", - "36.2367", - "470.374", - "77.6715", - "152.747", - "22.1934", - "70.3659", - "82.8975", - "67.5887", - "67.7221", - "62.1658", - "51.0202", - "87.0691", - "84.641", - "318.462", - "44.5355", - "51.5713", - "21.6502", - "76.6574", - "67.8433", - "50.124", - "173.829", - "63.1308", - "82.6102", - "845.304", - "938.514", - "822.485", - "53.5175", - "971.969", - "81.9855", - "808.724", - "955.172", - "75.5081", - "41.4755", - "76.227", - "29.7829", - "47.39", - "57.7645", - "69.5092", - "721.771", - "570.475", - "48.178", - "740.573", - "611.992", - "35.0011", - "47.0001", - "617.685", - "981.076", - "503.147", - "58.8403", - "424.151", - "398.727", - "59.048", - "941.608", - "75.6295", - "881.017", - "34.2512", - "115.511", - "50.358", - "22.9341", - "990.818", - "34.3669", - "32.5388", - "96.3984", - "701.502", - "160.696", - "43.2308", - "941.711", - "675.952", - "144.306", - "446.309", - "48.5595", - "77.7265", - "76.6351", - "73.9397", - "61.1611", - "700.07", - "13.6401", - "54.8392", - "735.148", - "46.7445", - "81.5103", - "291.058", - "82.0849", - "42.9821", - "294.587", - "55.9324", - "72.9016", - "686.955", - "56.9197", - "40.6085", - "33.5119", - "51.2714", - "78.7341", - "45.3407", - "836.712", - "33.4521", - "210.387", - "36.7135", - "911.7", - "45.276", - "22.6176", - "660.403", - "661.544", - "56.3601", - "59.1307", - "794.451", - "46.2577", - "102.585", - "104.665", - "68.0842", - "59.3754", - "889.187", - "681.772", - "222.845", - "837.293", - "78.273", - "434.829", - "979.626", - "98.7548", - "931.703", - "669.709", - "79.7411", - "812.868", - "47.7595", - "980.089", - "40.3202", - "64.2952", - "977.294", - "772.043", - "63.8498", - "46.7388", - "64.9163", - "81.1714", - "647.905", - "53.2186", - "47.6904", - "37.7312", - "933.457", - "342.657", - "870.754", - "69.7802", - "369.416", - "71.3747", - "58.8539", - "24.763", - "81.2168", - "55.6618", - "37.6302", - "32.7332", - "42.6225", - "45.4668", - "52.36", - "837.599", - "47.1938", - "39.4823", - "946.663", - "62.1414", - "402.982", - "994.757", - "69.1756", - "566.816", - "457.625", - "867.739", - "70.1031", - "51.4784", - "76.527", - "150.315", - "938.111", - "28.7391", - "54.3181", - "68.9589", - "57.1665", - "47.4487", - "59.027", - "471.21", - "75.7714", - "570.869", - "57.8607", - "949.227", - "757.15", - "748.833", - "80.2731", - "988.843", - "925.67", - "56.8448", - "886.927", - "84.3988", - "938.808", - "712.97", - "811.07", - "76.3916", - "616.187", - "962.56", - "804.403", - "385.244", - "707.284", - "853.84", - "149.731", - "744.276", - "41.0385", - "202.681", - "24.3613", - "958.099", - "69.5516", - "866.694", - "230.583", - "849.454", - "971.488", - "639.587", - "637.795", - "86.5134", - "96.0238", - "936.598", - "59.0205", - "961.911", - "771.62", - "977.99", - "79.9338", - "758.978", - "726.083", - "992.363", - "580.959", - "597.597", - "547.846", - "765.967", - "960.152", - "876.401", - "40.7079", - "56.1654", - "212.027", - "216.771", - "875.976", - "192.835", - "802.865", - "184.795", - "143.869", - "872.706", - "224.209", - "242.891", - "866.149", - "645.797", - "42.2334", - "974.98", - "111.394", - "327.573", - "807.842", - "886.013", - "646.86", - "459.06", - "895.222", - "786.642", - "408.833", - "781.159" - ], - "marker": { - "size": 3, - "color": "rgb(90, 179, 103)" - } - }, - { - "mode": "markers", - "name": "512-1024", - "type": "scatter3d", - "xsrc": "JohnMaddock:29:8b3d32", - "x": [ - "-972.698", - "-380.705", - "-954.271", - "-757.844", - "-434.481", - "-436.956", - "-6.04532", - "-899.34", - "-67.2311", - "-746.253", - "-764.735", - "-267.732", - "-177.087", - "-72.0126", - "-304.915", - "-823.976", - "-116.552", - "-472.755", - "-604.035", - "-194.748", - "-431.402", - "-677.598", - "-129.385", - "-837.917", - "-753.746", - "-775.326", - "-946.695", - "-19.0204", - "-553.345", - "-348.947", - "-632.68", - "-253.777", - "-550.233", - "-739.444", - "-255.246", - "-724.08", - "-78.9787", - "-305.202", - "-891.711", - "-929.623", - "-763.922", - "-295.209", - "-5.93232", - "-462.384", - "-11.0433", - "-82.2066", - "-660.051", - "-275.434", - "-737.098", - "-397.825", - "-364.883", - "-300.54", - "-430.463", - "-122.025", - "-41.9809", - "-673.721", - "-141.586", - "-393.796", - "-648.788", - "-716.76", - "-971.089", - "-697.388", - "-971.027", - "-750.867", - "-427.486", - "-749.825", - "-94.0388", - "-539.59", - "-131.983", - "-994.648", - "-47.0082", - "-816.226", - "-186.158", - "-408.244", - "-502.46", - "-480.419", - "-743.654", - "-927.834", - "-886.397", - "-547.287", - "-591.446", - "-591.684", - "-197.322", - "-116.703", - "-615.864", - "-197.985", - "-908.485", - "-735.701", - "-739.343", - "-532.559", - "-653.868", - "-551.298", - "-694.673", - "-253.651", - "-153.016", - "-258.145", - "-33.9448", - "-386.837", - "-34.9441", - "-928.017", - "-398.128", - "-149.008", - "-601.231", - "-171.698", - "-362.54", - "-289.294", - "-441.17", - "-391.882", - "-817.09", - "-319.069", - "-783.123", - "-740.349", - "-68.604", - "-515.443", - "-247.896", - "-961.682", - "-956.035", - "-661.427", - "-845.168", - "-697.225", - "-237.749", - "-663.543", - "-478.323", - "-55.1324", - "-817.613", - "-36.3772", - "-755.445", - "-579.69", - "-395.764", - "-395.365", - "-504.506", - "-987.775", - "-675.262", - "-169.007", - "-70.109", - "-370.677", - "-379.956", - "-140.991", - "-93.0268", - "-907.112", - "-361.471", - "-886.093", - "-943.854", - "-407.805", - "-984.249", - "-696.544", - "-149.998", - "-940.832", - "-257.934", - "-541.222", - "-342.857", - "-638.199", - "-704.12", - "-466.033", - "-884.838", - "-68.7674", - "-499.207", - "-76.5406", - "-32.0619", - "-145.563", - "-898.098", - "-335.452", - "-931.76", - "-472.555", - "-632.61", - "-18.975", - "-861.947", - "-814.269", - "-630.352", - "-243.558", - "-499.958", - "-979.405", - "-643.234", - "-59.7783", - "-698.652", - "-790.815", - "-677.836", - "-929.503", - "-414.204", - "-101.805", - "-148.253", - "-957.522", - "-873.189", - "-431.409", - "-873.272", - "-215.266", - "-997.571", - "-671.867", - "-384.257", - "-473.373", - "-885.558", - "-938.555", - "-275.533", - "-231.617", - "-633.481", - "-263.781", - "-370.798", - "-113.749", - "-6.91848", - "-50.0446", - "-959.463", - "-749.537", - "-906.469", - "-61.3258", - "-104.946", - "-834.611", - "-964.39", - "-728.576", - "-905.658", - "-100.726", - "-358.097", - "-526.51", - "-669.307", - "-525.827", - "-411.766", - "-691.055", - "-763.757", - "-237.793", - "-142.526", - "-659.08", - "-705.169", - "-93.369", - "-766.776", - "-56.339", - "-889.082", - "-819.436", - "-15.0551", - "-824.651", - "-344.558", - "-258.214", - "-888.214", - "-586.132", - "-139.113", - "-703.292", - "-789.575", - "-854.264", - "-459.507", - "-387.249", - "-98.3882", - "-446.939", - "-572.907", - "-941.716", - "-276.695", - "-886.036", - "-888.666", - "-103.6", - "-697.091", - "-656.557", - "-540.182", - "-110.986", - "-756.477", - "-75.6393", - "-268.826", - "-29.9392", - "-572.936", - "-259.8", - "-257.608", - "-528.426", - "-177.507", - "-26.0259", - "-17.0417", - "-305.287", - "-16.9668", - "-112.445", - "-55.1637", - "-716.126", - "-17.1372", - "-278.417", - "-625.356", - "-61.388", - "-492.355", - "-988.414", - "-936.439", - "-15.7247", - "-761.412", - "-13.987", - "-558.687", - "-121.808", - "-166.99", - "-6.02838", - "-812.191", - "-447.074", - "-446.324", - "-67.9919", - "-893.933", - "-15.0548", - "-60.9777", - "-126.919", - "-155.691", - "-55.0204", - "-216.064", - "-98.9739", - "-68.9944", - "-111.161", - "-875.878", - "-94.8309", - "-456.757", - "-312.666", - "-371.826", - "-670.384", - "-759.37", - "-463.263", - "-80.2715", - "-619.614", - "-91.016", - "-489.648", - "-893.096", - "-286.118", - "-953.002", - "-274.601", - "-157.994", - "-46.0127", - "-921.805", - "-404.092", - "-593.689", - "-862.468", - "-237.88", - "-770.083", - "-271.083", - "-908.088", - "-71.0159", - "-997.462", - "-949.769", - "-796.183" - ], - "ysrc": "JohnMaddock:29:f2a96d", - "y": [ - "941.692", - "878.145", - "879.707", - "104.649", - "973.9", - "976.108", - "540.349", - "820.166", - "768.001", - "914.11", - "147.052", - "960.737", - "984.429", - "121.131", - "916.673", - "918.453", - "812.086", - "916.945", - "758.098", - "823.404", - "892.384", - "978.879", - "453.044", - "948.992", - "942.171", - "600.364", - "742.043", - "319.076", - "877.468", - "883.624", - "872.62", - "337.739", - "430.336", - "699.961", - "982.173", - "782.424", - "147.892", - "640.483", - "909.676", - "80.9238", - "866.749", - "499.741", - "653.22", - "824.482", - "709.493", - "832.014", - "938.126", - "752.877", - "897.938", - "722.067", - "957.379", - "963.378", - "977.61", - "49.0381", - "279.375", - "777.258", - "570.802", - "827.18", - "882.023", - "959.855", - "757.818", - "525.499", - "760.746", - "794.17", - "737.959", - "786.812", - "76.7356", - "486.801", - "34.085", - "996.62", - "157.309", - "993.941", - "101.665", - "860.804", - "472.204", - "793.594", - "946.096", - "807.315", - "838.524", - "975.195", - "900.823", - "839.43", - "918.359", - "989.703", - "772.153", - "917.435", - "746.584", - "878.959", - "829.788", - "894.825", - "978.426", - "609.951", - "858.082", - "983.468", - "83.3116", - "404.824", - "184.384", - "850.147", - "199.541", - "747.194", - "103.17", - "156.267", - "875.71", - "833.698", - "993.293", - "742.527", - "835.403", - "930.068", - "836.455", - "257.821", - "568.925", - "883.084", - "358.955", - "82.6933", - "864.138", - "927.801", - "190.321", - "297.706", - "994.468", - "828.204", - "113.286", - "26.4778", - "993.864", - "480.99", - "873.364", - "761.076", - "834.634", - "149.575", - "845.733", - "798.55", - "408.079", - "957.791", - "986.479", - "918.653", - "368.576", - "344.97", - "814.76", - "29.0768", - "41.8067", - "200.443", - "8.36594", - "844.985", - "950.391", - "967.047", - "511.75", - "783.691", - "181.958", - "814.531", - "845.734", - "886.221", - "938.999", - "973.077", - "489.037", - "991.271", - "766.284", - "197.569", - "742.899", - "856.212", - "420.592", - "970.132", - "772.95", - "869.075", - "845.518", - "944.826", - "934.174", - "455.536", - "818.476", - "985.574", - "865.334", - "227.883", - "948.226", - "856.413", - "43.1833", - "471.862", - "993.51", - "803.548", - "178.092", - "334.627", - "418.084", - "868.713", - "860.862", - "811.625", - "458.822", - "826.788", - "903.412", - "560.841", - "841.256", - "605.29", - "158.23", - "242.326", - "818.377", - "225.611", - "862.55", - "148.55", - "814.337", - "628.338", - "920.064", - "937.674", - "601.919", - "363.739", - "995.665", - "901.512", - "986.951", - "830.927", - "486.008", - "863.615", - "865.995", - "858.791", - "30.0042", - "39.6452", - "217.347", - "989.158", - "527.9", - "831.233", - "963.567", - "850.48", - "979.154", - "950.444", - "744.696", - "152.67", - "820.483", - "866.612", - "946.655", - "700.935", - "889.383", - "923.917", - "663.971", - "830.008", - "536.22", - "632.875", - "965.437", - "425.469", - "162.75", - "707.358", - "819.312", - "917.459", - "940.487", - "271.15", - "631.092", - "866.142", - "928.117", - "928.55", - "970.249", - "746.794", - "931.836", - "113.911", - "850.253", - "839.921", - "922.388", - "0.894561", - "526.312", - "446.056", - "949.215", - "462.199", - "233.443", - "991.401", - "489.603", - "984.35", - "283.222", - "214.533", - "456.138", - "984.984", - "303.039", - "528.81", - "527.124", - "880.581", - "484.231", - "129.209", - "703.634", - "324.969", - "747.054", - "504.611", - "123.261", - "741.048", - "244.847", - "468.349", - "729.701", - "242.767", - "187.618", - "366.942", - "862.909", - "387.086", - "368.004", - "360.446", - "284.781", - "603.653", - "261.259", - "494.622", - "735.663", - "338.9", - "164.428", - "36.5189", - "12.958", - "138.366", - "794.096", - "329.233", - "324.218", - "356.873", - "808.289", - "884.51", - "628.963", - "812.534", - "413.238", - "411.916", - "184.29", - "433.889", - "228.865", - "175.485", - "287.275", - "682.599", - "46.3549", - "150.613", - "24.3369", - "214.008", - "277.843", - "484.529", - "52.607", - "121.552", - "101.987", - "68.6842", - "267.21", - "93.4929", - "790.979", - "151.495" - ], - "zsrc": "JohnMaddock:29:0e8674", - "z": [ - "387.105", - "412.485", - "88.7399", - "999.041", - "70.6026", - "86.0987", - "983.055", - "66.2242", - "35.448", - "68.0274", - "20.5647", - "67.0867", - "97.2644", - "607.567", - "66.6403", - "27.5443", - "81.3838", - "51.1916", - "22.4902", - "34.6139", - "66.5237", - "72.6816", - "907.367", - "62.2937", - "70.9396", - "48.1961", - "62.4595", - "873.185", - "44.7949", - "40.2758", - "42.83", - "897.849", - "209.145", - "355.93", - "89.1738", - "19.2768", - "786.081", - "36.6778", - "77.5137", - "928.842", - "39.2197", - "288.296", - "875.655", - "25.7504", - "945.952", - "56.9816", - "59.8603", - "31.0381", - "38.5613", - "44.9994", - "80.0121", - "80.0162", - "79.1532", - "984.341", - "809.433", - "53.9584", - "958.946", - "75.3008", - "53.7022", - "59.3111", - "66.7104", - "912.26", - "69.4959", - "22.7059", - "16.3162", - "23.3975", - "952.439", - "797.406", - "891.322", - "72.8744", - "911.175", - "36.2367", - "470.374", - "77.6715", - "152.747", - "22.1934", - "70.3659", - "82.8975", - "67.5887", - "67.7221", - "62.1658", - "51.0202", - "87.0691", - "84.641", - "318.462", - "44.5355", - "51.5713", - "21.6502", - "76.6574", - "67.8433", - "50.124", - "173.829", - "63.1308", - "82.6102", - "845.304", - "938.514", - "822.485", - "53.5175", - "971.969", - "81.9855", - "808.724", - "955.172", - "75.5081", - "41.4755", - "76.227", - "29.7829", - "47.39", - "57.7645", - "69.5092", - "721.771", - "570.475", - "48.178", - "740.573", - "611.992", - "35.0011", - "47.0001", - "617.685", - "981.076", - "503.147", - "58.8403", - "424.151", - "398.727", - "59.048", - "941.608", - "75.6295", - "881.017", - "34.2512", - "115.511", - "50.358", - "22.9341", - "990.818", - "34.3669", - "32.5388", - "96.3984", - "701.502", - "160.696", - "43.2308", - "941.711", - "675.952", - "144.306", - "446.309", - "48.5595", - "77.7265", - "76.6351", - "73.9397", - "61.1611", - "700.07", - "13.6401", - "54.8392", - "735.148", - "46.7445", - "81.5103", - "291.058", - "82.0849", - "42.9821", - "294.587", - "55.9324", - "72.9016", - "686.955", - "56.9197", - "40.6085", - "33.5119", - "51.2714", - "78.7341", - "45.3407", - "836.712", - "33.4521", - "210.387", - "36.7135", - "911.7", - "45.276", - "22.6176", - "660.403", - "661.544", - "56.3601", - "59.1307", - "794.451", - "46.2577", - "102.585", - "104.665", - "68.0842", - "59.3754", - "889.187", - "681.772", - "222.845", - "837.293", - "78.273", - "434.829", - "979.626", - "98.7548", - "931.703", - "669.709", - "79.7411", - "812.868", - "47.7595", - "980.089", - "40.3202", - "64.2952", - "977.294", - "772.043", - "63.8498", - "46.7388", - "64.9163", - "81.1714", - "647.905", - "53.2186", - "47.6904", - "37.7312", - "933.457", - "342.657", - "870.754", - "69.7802", - "369.416", - "71.3747", - "58.8539", - "24.763", - "81.2168", - "55.6618", - "37.6302", - "32.7332", - "42.6225", - "45.4668", - "52.36", - "837.599", - "47.1938", - "39.4823", - "946.663", - "62.1414", - "402.982", - "994.757", - "69.1756", - "566.816", - "457.625", - "867.739", - "70.1031", - "51.4784", - "76.527", - "150.315", - "938.111", - "28.7391", - "54.3181", - "68.9589", - "57.1665", - "47.4487", - "59.027", - "471.21", - "75.7714", - "570.869", - "57.8607", - "949.227", - "757.15", - "748.833", - "80.2731", - "988.843", - "925.67", - "56.8448", - "886.927", - "84.3988", - "938.808", - "712.97", - "811.07", - "76.3916", - "616.187", - "962.56", - "804.403", - "385.244", - "707.284", - "853.84", - "149.731", - "744.276", - "41.0385", - "202.681", - "24.3613", - "958.099", - "69.5516", - "866.694", - "230.583", - "849.454", - "971.488", - "639.587", - "637.795", - "86.5134", - "96.0238", - "936.598", - "59.0205", - "961.911", - "771.62", - "977.99", - "79.9338", - "758.978", - "726.083", - "992.363", - "580.959", - "597.597", - "547.846", - "765.967", - "960.152", - "876.401", - "40.7079", - "56.1654", - "212.027", - "216.771", - "875.976", - "192.835", - "802.865", - "184.795", - "143.869", - "872.706", - "224.209", - "242.891", - "866.149", - "645.797", - "42.2334", - "974.98", - "111.394", - "327.573", - "807.842", - "886.013", - "646.86", - "459.06", - "895.222", - "786.642", - "408.833", - "781.159" - ], - "marker": { - "size": 3, - "color": "rgb(20, 100, 72)" - } - }, - { - "mode": "markers", - "name": "256-512", - "type": "scatter3d", - "xsrc": "JohnMaddock:29:8b3d32", - "x": [ - "-972.698", - "-380.705", - "-954.271", - "-757.844", - "-434.481", - "-436.956", - "-6.04532", - "-899.34", - "-67.2311", - "-746.253", - "-764.735", - "-267.732", - "-177.087", - "-72.0126", - "-304.915", - "-823.976", - "-116.552", - "-472.755", - "-604.035", - "-194.748", - "-431.402", - "-677.598", - "-129.385", - "-837.917", - "-753.746", - "-775.326", - "-946.695", - "-19.0204", - "-553.345", - "-348.947", - "-632.68", - "-253.777", - "-550.233", - "-739.444", - "-255.246", - "-724.08", - "-78.9787", - "-305.202", - "-891.711", - "-929.623", - "-763.922", - "-295.209", - "-5.93232", - "-462.384", - "-11.0433", - "-82.2066", - "-660.051", - "-275.434", - "-737.098", - "-397.825", - "-364.883", - "-300.54", - "-430.463", - "-122.025", - "-41.9809", - "-673.721", - "-141.586", - "-393.796", - "-648.788", - "-716.76", - "-971.089", - "-697.388", - "-971.027", - "-750.867", - "-427.486", - "-749.825", - "-94.0388", - "-539.59", - "-131.983", - "-994.648", - "-47.0082", - "-816.226", - "-186.158", - "-408.244", - "-502.46", - "-480.419", - "-743.654", - "-927.834", - "-886.397", - "-547.287", - "-591.446", - "-591.684", - "-197.322", - "-116.703", - "-615.864", - "-197.985", - "-908.485", - "-735.701", - "-739.343", - "-532.559", - "-653.868", - "-551.298", - "-694.673", - "-253.651", - "-153.016", - "-258.145", - "-33.9448", - "-386.837", - "-34.9441", - "-928.017", - "-398.128", - "-149.008", - "-601.231", - "-171.698", - "-362.54", - "-289.294", - "-441.17", - "-391.882", - "-817.09", - "-319.069", - "-783.123", - "-740.349", - "-68.604", - "-515.443", - "-247.896", - "-961.682", - "-956.035", - "-661.427", - "-845.168", - "-697.225", - "-237.749", - "-663.543", - "-478.323", - "-55.1324", - "-817.613", - "-36.3772", - "-755.445", - "-579.69", - "-395.764", - "-395.365", - "-504.506", - "-987.775", - "-675.262", - "-169.007", - "-70.109", - "-370.677", - "-379.956", - "-140.991", - "-93.0268", - "-907.112", - "-361.471", - "-886.093", - "-943.854", - "-407.805", - "-984.249", - "-696.544", - "-149.998", - "-940.832", - "-257.934", - "-541.222", - "-342.857", - "-638.199", - "-704.12", - "-466.033", - "-884.838", - "-68.7674", - "-499.207", - "-76.5406", - "-32.0619", - "-145.563", - "-898.098", - "-335.452", - "-931.76", - "-472.555", - "-632.61", - "-18.975", - "-861.947", - "-814.269", - "-630.352", - "-243.558", - "-499.958", - "-979.405", - "-643.234", - "-59.7783", - "-698.652", - "-790.815", - "-677.836", - "-929.503", - "-414.204", - "-101.805", - "-148.253", - "-957.522", - "-873.189", - "-431.409", - "-873.272", - "-215.266", - "-997.571", - "-671.867", - "-384.257", - "-473.373", - "-885.558", - "-938.555", - "-275.533", - "-231.617", - "-633.481", - "-263.781", - "-370.798", - "-113.749", - "-6.91848", - "-50.0446", - "-959.463", - "-749.537", - "-906.469", - "-61.3258", - "-104.946", - "-834.611", - "-964.39", - "-728.576", - "-905.658", - "-100.726", - "-358.097", - "-526.51", - "-669.307", - "-525.827", - "-411.766", - "-691.055", - "-763.757", - "-237.793", - "-142.526", - "-659.08", - "-705.169", - "-93.369", - "-766.776", - "-56.339", - "-889.082", - "-819.436", - "-15.0551", - "-824.651", - "-344.558", - "-258.214", - "-888.214", - "-586.132", - "-139.113", - "-703.292", - "-789.575", - "-854.264", - "-459.507", - "-387.249", - "-98.3882", - "-446.939", - "-572.907", - "-941.716", - "-276.695", - "-886.036", - "-888.666", - "-103.6", - "-697.091", - "-656.557", - "-540.182", - "-110.986", - "-756.477", - "-75.6393", - "-268.826", - "-29.9392", - "-572.936", - "-259.8", - "-257.608", - "-528.426", - "-177.507", - "-26.0259", - "-17.0417", - "-305.287", - "-16.9668", - "-112.445", - "-55.1637", - "-716.126", - "-17.1372", - "-278.417", - "-625.356", - "-61.388", - "-492.355", - "-988.414", - "-936.439", - "-15.7247", - "-761.412", - "-13.987", - "-558.687", - "-121.808", - "-166.99", - "-6.02838", - "-812.191", - "-447.074", - "-446.324", - "-67.9919", - "-893.933", - "-15.0548", - "-60.9777", - "-126.919", - "-155.691", - "-55.0204", - "-216.064", - "-98.9739", - "-68.9944", - "-111.161", - "-875.878", - "-94.8309", - "-456.757", - "-312.666", - "-371.826", - "-670.384", - "-759.37", - "-463.263", - "-80.2715", - "-619.614", - "-91.016", - "-489.648", - "-893.096", - "-286.118", - "-953.002", - "-274.601", - "-157.994", - "-46.0127", - "-921.805", - "-404.092", - "-593.689", - "-862.468", - "-237.88", - "-770.083", - "-271.083", - "-908.088", - "-71.0159", - "-997.462", - "-949.769", - "-796.183" - ], - "ysrc": "JohnMaddock:29:f2a96d", - "y": [ - "941.692", - "878.145", - "879.707", - "104.649", - "973.9", - "976.108", - "540.349", - "820.166", - "768.001", - "914.11", - "147.052", - "960.737", - "984.429", - "121.131", - "916.673", - "918.453", - "812.086", - "916.945", - "758.098", - "823.404", - "892.384", - "978.879", - "453.044", - "948.992", - "942.171", - "600.364", - "742.043", - "319.076", - "877.468", - "883.624", - "872.62", - "337.739", - "430.336", - "699.961", - "982.173", - "782.424", - "147.892", - "640.483", - "909.676", - "80.9238", - "866.749", - "499.741", - "653.22", - "824.482", - "709.493", - "832.014", - "938.126", - "752.877", - "897.938", - "722.067", - "957.379", - "963.378", - "977.61", - "49.0381", - "279.375", - "777.258", - "570.802", - "827.18", - "882.023", - "959.855", - "757.818", - "525.499", - "760.746", - "794.17", - "737.959", - "786.812", - "76.7356", - "486.801", - "34.085", - "996.62", - "157.309", - "993.941", - "101.665", - "860.804", - "472.204", - "793.594", - "946.096", - "807.315", - "838.524", - "975.195", - "900.823", - "839.43", - "918.359", - "989.703", - "772.153", - "917.435", - "746.584", - "878.959", - "829.788", - "894.825", - "978.426", - "609.951", - "858.082", - "983.468", - "83.3116", - "404.824", - "184.384", - "850.147", - "199.541", - "747.194", - "103.17", - "156.267", - "875.71", - "833.698", - "993.293", - "742.527", - "835.403", - "930.068", - "836.455", - "257.821", - "568.925", - "883.084", - "358.955", - "82.6933", - "864.138", - "927.801", - "190.321", - "297.706", - "994.468", - "828.204", - "113.286", - "26.4778", - "993.864", - "480.99", - "873.364", - "761.076", - "834.634", - "149.575", - "845.733", - "798.55", - "408.079", - "957.791", - "986.479", - "918.653", - "368.576", - "344.97", - "814.76", - "29.0768", - "41.8067", - "200.443", - "8.36594", - "844.985", - "950.391", - "967.047", - "511.75", - "783.691", - "181.958", - "814.531", - "845.734", - "886.221", - "938.999", - "973.077", - "489.037", - "991.271", - "766.284", - "197.569", - "742.899", - "856.212", - "420.592", - "970.132", - "772.95", - "869.075", - "845.518", - "944.826", - "934.174", - "455.536", - "818.476", - "985.574", - "865.334", - "227.883", - "948.226", - "856.413", - "43.1833", - "471.862", - "993.51", - "803.548", - "178.092", - "334.627", - "418.084", - "868.713", - "860.862", - "811.625", - "458.822", - "826.788", - "903.412", - "560.841", - "841.256", - "605.29", - "158.23", - "242.326", - "818.377", - "225.611", - "862.55", - "148.55", - "814.337", - "628.338", - "920.064", - "937.674", - "601.919", - "363.739", - "995.665", - "901.512", - "986.951", - "830.927", - "486.008", - "863.615", - "865.995", - "858.791", - "30.0042", - "39.6452", - "217.347", - "989.158", - "527.9", - "831.233", - "963.567", - "850.48", - "979.154", - "950.444", - "744.696", - "152.67", - "820.483", - "866.612", - "946.655", - "700.935", - "889.383", - "923.917", - "663.971", - "830.008", - "536.22", - "632.875", - "965.437", - "425.469", - "162.75", - "707.358", - "819.312", - "917.459", - "940.487", - "271.15", - "631.092", - "866.142", - "928.117", - "928.55", - "970.249", - "746.794", - "931.836", - "113.911", - "850.253", - "839.921", - "922.388", - "0.894561", - "526.312", - "446.056", - "949.215", - "462.199", - "233.443", - "991.401", - "489.603", - "984.35", - "283.222", - "214.533", - "456.138", - "984.984", - "303.039", - "528.81", - "527.124", - "880.581", - "484.231", - "129.209", - "703.634", - "324.969", - "747.054", - "504.611", - "123.261", - "741.048", - "244.847", - "468.349", - "729.701", - "242.767", - "187.618", - "366.942", - "862.909", - "387.086", - "368.004", - "360.446", - "284.781", - "603.653", - "261.259", - "494.622", - "735.663", - "338.9", - "164.428", - "36.5189", - "12.958", - "138.366", - "794.096", - "329.233", - "324.218", - "356.873", - "808.289", - "884.51", - "628.963", - "812.534", - "413.238", - "411.916", - "184.29", - "433.889", - "228.865", - "175.485", - "287.275", - "682.599", - "46.3549", - "150.613", - "24.3369", - "214.008", - "277.843", - "484.529", - "52.607", - "121.552", - "101.987", - "68.6842", - "267.21", - "93.4929", - "790.979", - "151.495" - ], - "zsrc": "JohnMaddock:29:0e8674", - "z": [ - "387.105", - "412.485", - "88.7399", - "999.041", - "70.6026", - "86.0987", - "983.055", - "66.2242", - "35.448", - "68.0274", - "20.5647", - "67.0867", - "97.2644", - "607.567", - "66.6403", - "27.5443", - "81.3838", - "51.1916", - "22.4902", - "34.6139", - "66.5237", - "72.6816", - "907.367", - "62.2937", - "70.9396", - "48.1961", - "62.4595", - "873.185", - "44.7949", - "40.2758", - "42.83", - "897.849", - "209.145", - "355.93", - "89.1738", - "19.2768", - "786.081", - "36.6778", - "77.5137", - "928.842", - "39.2197", - "288.296", - "875.655", - "25.7504", - "945.952", - "56.9816", - "59.8603", - "31.0381", - "38.5613", - "44.9994", - "80.0121", - "80.0162", - "79.1532", - "984.341", - "809.433", - "53.9584", - "958.946", - "75.3008", - "53.7022", - "59.3111", - "66.7104", - "912.26", - "69.4959", - "22.7059", - "16.3162", - "23.3975", - "952.439", - "797.406", - "891.322", - "72.8744", - "911.175", - "36.2367", - "470.374", - "77.6715", - "152.747", - "22.1934", - "70.3659", - "82.8975", - "67.5887", - "67.7221", - "62.1658", - "51.0202", - "87.0691", - "84.641", - "318.462", - "44.5355", - "51.5713", - "21.6502", - "76.6574", - "67.8433", - "50.124", - "173.829", - "63.1308", - "82.6102", - "845.304", - "938.514", - "822.485", - "53.5175", - "971.969", - "81.9855", - "808.724", - "955.172", - "75.5081", - "41.4755", - "76.227", - "29.7829", - "47.39", - "57.7645", - "69.5092", - "721.771", - "570.475", - "48.178", - "740.573", - "611.992", - "35.0011", - "47.0001", - "617.685", - "981.076", - "503.147", - "58.8403", - "424.151", - "398.727", - "59.048", - "941.608", - "75.6295", - "881.017", - "34.2512", - "115.511", - "50.358", - "22.9341", - "990.818", - "34.3669", - "32.5388", - "96.3984", - "701.502", - "160.696", - "43.2308", - "941.711", - "675.952", - "144.306", - "446.309", - "48.5595", - "77.7265", - "76.6351", - "73.9397", - "61.1611", - "700.07", - "13.6401", - "54.8392", - "735.148", - "46.7445", - "81.5103", - "291.058", - "82.0849", - "42.9821", - "294.587", - "55.9324", - "72.9016", - "686.955", - "56.9197", - "40.6085", - "33.5119", - "51.2714", - "78.7341", - "45.3407", - "836.712", - "33.4521", - "210.387", - "36.7135", - "911.7", - "45.276", - "22.6176", - "660.403", - "661.544", - "56.3601", - "59.1307", - "794.451", - "46.2577", - "102.585", - "104.665", - "68.0842", - "59.3754", - "889.187", - "681.772", - "222.845", - "837.293", - "78.273", - "434.829", - "979.626", - "98.7548", - "931.703", - "669.709", - "79.7411", - "812.868", - "47.7595", - "980.089", - "40.3202", - "64.2952", - "977.294", - "772.043", - "63.8498", - "46.7388", - "64.9163", - "81.1714", - "647.905", - "53.2186", - "47.6904", - "37.7312", - "933.457", - "342.657", - "870.754", - "69.7802", - "369.416", - "71.3747", - "58.8539", - "24.763", - "81.2168", - "55.6618", - "37.6302", - "32.7332", - "42.6225", - "45.4668", - "52.36", - "837.599", - "47.1938", - "39.4823", - "946.663", - "62.1414", - "402.982", - "994.757", - "69.1756", - "566.816", - "457.625", - "867.739", - "70.1031", - "51.4784", - "76.527", - "150.315", - "938.111", - "28.7391", - "54.3181", - "68.9589", - "57.1665", - "47.4487", - "59.027", - "471.21", - "75.7714", - "570.869", - "57.8607", - "949.227", - "757.15", - "748.833", - "80.2731", - "988.843", - "925.67", - "56.8448", - "886.927", - "84.3988", - "938.808", - "712.97", - "811.07", - "76.3916", - "616.187", - "962.56", - "804.403", - "385.244", - "707.284", - "853.84", - "149.731", - "744.276", - "41.0385", - "202.681", - "24.3613", - "958.099", - "69.5516", - "866.694", - "230.583", - "849.454", - "971.488", - "639.587", - "637.795", - "86.5134", - "96.0238", - "936.598", - "59.0205", - "961.911", - "771.62", - "977.99", - "79.9338", - "758.978", - "726.083", - "992.363", - "580.959", - "597.597", - "547.846", - "765.967", - "960.152", - "876.401", - "40.7079", - "56.1654", - "212.027", - "216.771", - "875.976", - "192.835", - "802.865", - "184.795", - "143.869", - "872.706", - "224.209", - "242.891", - "866.149", - "645.797", - "42.2334", - "974.98", - "111.394", - "327.573", - "807.842", - "886.013", - "646.86", - "459.06", - "895.222", - "786.642", - "408.833", - "781.159" - ], - "marker": { - "size": 3, - "color": "rgb(29, 92, 125)" - } - }, - { - "mode": "none", - "name": "< 256 Not Shown For Brevity", - "type": "scatter3d", - "xsrc": "JohnMaddock:32:d956e1", - "x": [ - "0" - ], - "ysrc": "JohnMaddock:32:d956e1", - "y": [ - "0" - ], - "zsrc": "JohnMaddock:32:06d6bb", - "z": [ - "0" - ], - "opacity": 0 - } - ], - "layout": { - "scene": { - "xaxis": { - "type": "linear", - "title": { - "text": "a" - } - }, - "yaxis": { - "type": "linear", - "title": { - "text": "b" - } - }, - "camera": { - "up": { - "x": 0, - "y": 0, - "z": 1 - }, - "eye": { - "x": 1.2894871385701225, - "y": 1.4036723780745173, - "z": 1.0268528494837361 - }, - "center": { - "x": 0, - "y": 0, - "z": 0 - }, - "projection": { - "type": "perspective" - } - }, - "aspectmode": "auto", - "aspectratio": { - "x": 0.9995190543928182, - "y": 0.9985661972821688, - "z": 1.001917729390604 - } - }, - "title": { - "text": "Error PLot for 1F1(a,b,z)

\n-1000 < a < 0 and 0 < b,z < 1000
\n
\n(Taken from 100000 uniformly distributed points)
" - }, - "xaxis": { - "range": [ - -1, - 6 - ], - "autorange": true - }, - "yaxis": { - "range": [ - -1, - 4 - ], - "autorange": true - }, - "autosize": true, - "template": { - "data": { - "bar": [ - { - "type": "bar", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "table": [ - { - "type": "table", - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - } - } - ], - "carpet": [ - { - "type": "carpet", - "aaxis": { - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "endlinecolor": "#2a3f5f", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "endlinecolor": "#2a3f5f", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - } - } - ], - "mesh3d": [ - { - "type": "mesh3d", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "contour": [ - { - "type": "contour", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "heatmap": [ - { - "type": "heatmap", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "scatter": [ - { - "type": "scatter", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "surface": [ - { - "type": "surface", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "heatmapgl": [ - { - "type": "heatmapgl", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "histogram": [ - { - "type": "histogram", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - }, - "type": "parcoords" - } - ], - "scatter3d": [ - { - "type": "scatter3d", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scattergl": [ - { - "type": "scattergl", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "choropleth": [ - { - "type": "choropleth", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "scattergeo": [ - { - "type": "scattergeo", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "histogram2d": [ - { - "type": "histogram2d", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "scatterpolar": [ - { - "type": "scatterpolar", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "contourcarpet": [ - { - "type": "contourcarpet", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "scattercarpet": [ - { - "type": "scattercarpet", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scattermapbox": [ - { - "type": "scattermapbox", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scatterpolargl": [ - { - "type": "scatterpolargl", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scatterternary": [ - { - "type": "scatterternary", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "histogram2dcontour": [ - { - "type": "histogram2dcontour", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ] - }, - "layout": { - "geo": { - "bgcolor": "white", - "showland": true, - "lakecolor": "white", - "landcolor": "white", - "showlakes": true, - "subunitcolor": "#C8D4E3" - }, - "font": { - "color": "#2a3f5f" - }, - "polar": { - "bgcolor": "white", - "radialaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8" - }, - "angularaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8" - } - }, - "scene": { - "xaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - }, - "yaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - }, - "zaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "automargin": true, - "zerolinecolor": "#EBF0F8", - "zerolinewidth": 2 - }, - "yaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "automargin": true, - "zerolinecolor": "#EBF0F8", - "zerolinewidth": 2 - }, - "ternary": { - "aaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "baxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "caxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "bgcolor": "white" - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#19d3f3", - "#e763fa", - "#fecb52", - "#ffa15a", - "#ff6692", - "#b6e880" - ], - "hovermode": "closest", - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0508b8" - ], - [ - 0.0893854748603352, - "#1910d8" - ], - [ - 0.1787709497206704, - "#3c19f0" - ], - [ - 0.2681564245810056, - "#6b1cfb" - ], - [ - 0.3575418994413408, - "#981cfd" - ], - [ - 0.44692737430167595, - "#bf1cfd" - ], - [ - 0.5363128491620112, - "#dd2bfd" - ], - [ - 0.6256983240223464, - "#f246fe" - ], - [ - 0.7150837988826816, - "#fc67fd" - ], - [ - 0.8044692737430168, - "#fe88fc" - ], - [ - 0.8938547486033519, - "#fea5fd" - ], - [ - 0.9832402234636871, - "#febefe" - ], - [ - 1, - "#fec3fe" - ] - ], - "sequentialminus": [ - [ - 0, - "#0508b8" - ], - [ - 0.0893854748603352, - "#1910d8" - ], - [ - 0.1787709497206704, - "#3c19f0" - ], - [ - 0.2681564245810056, - "#6b1cfb" - ], - [ - 0.3575418994413408, - "#981cfd" - ], - [ - 0.44692737430167595, - "#bf1cfd" - ], - [ - 0.5363128491620112, - "#dd2bfd" - ], - [ - 0.6256983240223464, - "#f246fe" - ], - [ - 0.7150837988826816, - "#fc67fd" - ], - [ - 0.8044692737430168, - "#fe88fc" - ], - [ - 0.8938547486033519, - "#fea5fd" - ], - [ - 0.9832402234636871, - "#febefe" - ], - [ - 1, - "#fec3fe" - ] - ] - }, - "plot_bgcolor": "white", - "paper_bgcolor": "white", - "shapedefaults": { - "line": { - "width": 0 - }, - "opacity": 0.4, - "fillcolor": "#506784" - }, - "annotationdefaults": { - "arrowhead": 0, - "arrowcolor": "#506784", - "arrowwidth": 1 - } - }, - "themeRef": "PLOTLY_WHITE" - }, - "showlegend": true - }, - "frames": [] -} diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b.html boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b.html --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ - -
- - - -
- -
diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b_incalculable.html boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b_incalculable.html --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b_incalculable.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b_incalculable.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ - -
- - -
- -
diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b_incalculable.js boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b_incalculable.js --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b_incalculable.js 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b_incalculable.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,3940 +0,0 @@ -var negative_b_incalculable = { - "data": [ - { - "mode": "markers", - "type": "scatter3d", - "xsrc": "JohnMaddock:38:36ab5c", - "x": [ - "9.776405e+02", - "2.971681e+02", - "6.738031e+02", - "3.577449e+02", - "9.524528e+02", - "7.932738e+02", - "4.997620e+02", - "5.377993e+02", - "1.939530e+02", - "5.360604e+02", - "3.524985e+02", - "5.934072e+02", - "3.593768e+02", - "3.489023e+02", - "9.355412e+02", - "1.288605e+02", - "4.388264e+02", - "7.946365e+02", - "1.244157e+02", - "3.635675e+02", - "1.668215e+02", - "4.474681e+02", - "1.338731e+02", - "3.868925e+02", - "7.384235e+02", - "7.664083e+01", - "6.848096e+02", - "7.819978e+01", - "8.695549e+01", - "9.570967e+02", - "3.823270e+02", - "4.532968e+01", - "4.907209e+02", - "3.701367e+02", - "8.087926e+02", - "1.952382e+02", - "9.801080e+02", - "3.713074e+02", - "8.045782e+02", - "1.927403e+02", - "8.034237e+02", - "8.763976e+02", - "7.398319e+02", - "4.176630e+02", - "3.893169e+02", - "2.168793e+02", - "6.808969e+02", - "6.517871e+02", - "2.961169e+02", - "1.158862e+02", - "4.591515e+02", - "3.782733e+02", - "5.392692e+02", - "1.133300e+02", - "6.004260e+02", - "5.579783e+02", - "5.445825e+02", - "7.138000e+02", - "4.984717e+02", - "4.339350e+01", - "4.354458e+02", - "3.810939e+02", - "8.652151e+02", - "6.492196e+02", - "6.933409e+01", - "4.703234e+02", - "1.503712e+02", - "9.231520e+02", - "6.852841e+02", - "9.953329e+02", - "1.363210e+02", - "4.012984e+02", - "6.189327e+01", - "1.671057e+02", - "2.601189e+02", - "2.455082e+02", - "3.754637e+02", - "4.877588e+02", - "4.656582e+02", - "3.927268e+02", - "1.787100e+02", - "1.900541e+02", - "4.084289e+02", - "1.318028e+02", - "4.740025e+02", - "2.428938e+02", - "8.249646e+02", - "8.082033e+02", - "7.670288e+01", - "8.833089e+02", - "8.555341e+02", - "2.565344e+02", - "4.537062e+02", - "8.707073e+02", - "3.748186e+02", - "6.492340e+02", - "9.774432e+02", - "8.813325e+02", - "3.108150e+02", - "6.661331e+01", - "8.145495e+02", - "4.843198e+02", - "1.502743e+02", - "3.227711e+02", - "1.861304e+02", - "2.857541e+02", - "1.480221e+02", - "7.122501e+01", - "6.218653e+02", - "8.629423e+02", - "5.639762e+02", - "8.279393e+02", - "1.624375e+02", - "3.723510e+02", - "4.555618e+02", - "2.856477e+02", - "6.305215e+02", - "7.251924e+01", - "9.948356e+02", - "7.543339e+02", - "1.289363e+02", - "4.768307e+02", - "8.658811e+02", - "5.609683e+02", - "1.704749e+02", - "4.088240e+02", - "2.795456e+02", - "8.476365e+02", - "4.029179e+02", - "4.180121e+02", - "7.073096e+02", - "6.217797e+02", - "2.735330e+02", - "9.766350e+01", - "1.623876e+02", - "4.339346e+02", - "3.607657e+02", - "3.866382e+02", - "8.421919e+02", - "6.783443e+02", - "3.554460e+02", - "3.595102e+02", - "4.198524e+02", - "2.555414e+02", - "2.379539e+02", - "3.637410e+02", - "8.080690e+02", - "3.654654e+02", - "3.193099e+02", - "6.556615e+02", - "4.613304e+02", - "8.310822e+02", - "4.624231e+02", - "1.624145e+02", - "3.812566e+02", - "9.835440e+02", - "7.964433e+02", - "5.091502e+02", - "6.600404e+02", - "2.623124e+02", - "7.764043e+02", - "4.843095e+02", - "6.696816e+02", - "7.780996e+02", - "4.088909e+02", - "4.414582e+02", - "2.670519e+02", - "5.757203e+02", - "7.906321e+01", - "5.386851e+02", - "3.217520e+02", - "5.022941e+02", - "2.449596e+02", - "7.717899e+01", - "5.706069e+02", - "7.609887e+02", - "6.083885e+02", - "2.535859e+02", - "3.247107e+02", - "2.711499e+02", - "1.470350e+02", - "6.287927e+02", - "9.061144e+02", - "7.085773e+02", - "6.223276e+01", - "2.463763e+02", - "4.311570e+02", - "9.242092e+02", - "1.254723e+02", - "2.787382e+02", - "6.401205e+02", - "8.940265e+02", - "1.743492e+02", - "1.955118e+02", - "2.331311e+02", - "5.471476e+02", - "5.215010e+02", - "1.528145e+02", - "7.552635e+01", - "1.457948e+02", - "9.227971e+02", - "5.480591e+02", - "4.125494e+02", - "2.608492e+02", - "3.939450e+02", - "1.250289e+02", - "2.839200e+02", - "8.353855e+02", - "7.339358e+02", - "1.455842e+02", - "7.877698e+02", - "9.887365e+02", - "4.991756e+02", - "3.734818e+02", - "8.389163e+02", - "7.856645e+02", - "3.146329e+02", - "2.844964e+02", - "5.676537e+02", - "3.755686e+02", - "6.387298e+02", - "7.967105e+02", - "5.066552e+02", - "5.017440e+02", - "8.425331e+02", - "2.554165e+02", - "5.547776e+02", - "9.785104e+02", - "9.784291e+02", - "1.115145e+02", - "9.233503e+02", - "7.416712e+02", - "7.240645e+02", - "2.276466e+02", - "1.605865e+02", - "9.890135e+01", - "6.107073e+02", - "6.573163e+02", - "1.438601e+02", - "7.129054e+02", - "9.776491e+01", - "8.062456e+02", - "5.990393e+02", - "2.378984e+02", - "1.889345e+02", - "2.138151e+02", - "8.487399e+02", - "8.031636e+01", - "4.938736e+01", - "3.002453e+02", - "3.449860e+02", - "4.328940e+02", - "5.281428e+02", - "7.073921e+02", - "7.756565e+02", - "1.314753e+02", - "3.711756e+02", - "2.559805e+02", - "1.001557e+02", - "8.047713e+01", - "4.439756e+02", - "6.797793e+02", - "2.687887e+02", - "7.892121e+02", - "2.263221e+02", - "7.157890e+02", - "3.748293e+02", - "1.330733e+02", - "8.757857e+02", - "3.756666e+02", - "2.520516e+02", - "2.336804e+02", - "8.163838e+02", - "6.855008e+02", - "1.356615e+02", - "5.348658e+02", - "3.704413e+02", - "6.561668e+02", - "4.825112e+02", - "6.269719e+02", - "6.663613e+02", - "5.665259e+02", - "8.214867e+01", - "2.800429e+02", - "1.494623e+02", - "6.133884e+02", - "1.207313e+02", - "2.274724e+02", - "4.170209e+02", - "1.528135e+02", - "6.633446e+02", - "8.250688e+01", - "2.328928e+02", - "9.384356e+02", - "5.967524e+02", - "3.569284e+02", - "7.596874e+02", - "1.696782e+02", - "6.266247e+02", - "4.796945e+02", - "8.595789e+02", - "3.452116e+02", - "8.009968e+02", - "3.596522e+02", - "8.379158e+02", - "5.292486e+02", - "8.823402e+01", - "2.158864e+02", - "4.508231e+02", - "3.527055e+02", - "3.996092e+02", - "5.036656e+02", - "5.970124e+02", - "5.230148e+02", - "8.180228e+02", - "9.671855e+02", - "9.089336e+02", - "9.933441e+01", - "7.535037e+02", - "9.651775e+02", - "4.054428e+02", - "3.774396e+02", - "9.064293e+01", - "8.119427e+02", - "4.553249e+02", - "3.809337e+02", - "1.513270e+02", - "6.746010e+02", - "3.556800e+02", - "1.380286e+02", - "4.092648e+02", - "2.340806e+02", - "6.787064e+02", - "3.323989e+02", - "8.573328e+02", - "5.899351e+01", - "9.809415e+01", - "9.061075e+01", - "8.756769e+02", - "6.580598e+02", - "4.283507e+02", - "4.794634e+02", - "4.228169e+02", - "3.576421e+02", - "9.581818e+02", - "2.886904e+02", - "1.649870e+02", - "8.457953e+02", - "8.037080e+02", - "5.006543e+02", - "3.527797e+02", - "7.732659e+02", - "1.777601e+02", - "9.852223e+02", - "4.087085e+02", - "7.886425e+01", - "3.008321e+02", - "5.081605e+02", - "3.472339e+02", - "1.808137e+02", - "3.852662e+02", - "9.998078e+02", - "2.995282e+02", - "8.191048e+02", - "5.646488e+02", - "1.268154e+02", - "8.450174e+02", - "1.515874e+02", - "1.168577e+02", - "6.163460e+02", - "8.790918e+02", - "4.990646e+02", - "5.965498e+02", - "9.592671e+02", - "8.329475e+02", - "8.001936e+02", - "1.004414e+02", - "1.263659e+02", - "2.223064e+02", - "1.317022e+02", - "4.188107e+02", - "2.906679e+02", - "3.937618e+02", - "1.835721e+02", - "1.790853e+02", - "9.407424e+02", - "7.409218e+02", - "7.096245e+02", - "5.002657e+02", - "3.377984e+02", - "9.628196e+02", - "1.979112e+02", - "1.794271e+02", - "7.898861e+02", - "7.707050e+02", - "3.371012e+02", - "8.505931e+02", - "5.824430e+02", - "3.963137e+02", - "2.025278e+02", - "9.646183e+02", - "9.889630e+02", - "3.374739e+02", - "8.794583e+02", - "3.534036e+02", - "7.219124e+02", - "1.137110e+02", - "2.436313e+02", - "7.462447e+02", - "7.665086e+02", - "8.123714e+02", - "5.547484e+02", - "4.329909e+02", - "3.146426e+02", - "5.786072e+02", - "3.918489e+01", - "1.282504e+02", - "1.280026e+02", - "2.179884e+02", - "8.962687e+02", - "8.304332e+02", - "6.755871e+02", - "6.495084e+02", - "1.961949e+02", - "9.283998e+02", - "5.686106e+02", - "7.175457e+02", - "3.997488e+02", - "4.937440e+01", - "7.235133e+02", - "2.191962e+02", - "5.589460e+02", - "8.561352e+01", - "5.443625e+02", - "2.210950e+02", - "3.984189e+02", - "1.969199e+02", - "6.723277e+02", - "2.186166e+02", - "1.206098e+02", - "7.394606e+02", - "6.016741e+02", - "4.848021e+02", - "8.608253e+02", - "8.137106e+02", - "2.785508e+02", - "4.497212e+02", - "4.923395e+02", - "6.172952e+02", - "5.138697e+01", - "2.901842e+02", - "2.742067e+02", - "7.783200e+02", - "8.311872e+02", - "3.616474e+02", - "2.220035e+02", - "3.002794e+02", - "2.999812e+02", - "6.171158e+02", - "8.054379e+02", - "1.511734e+02", - "8.874208e+02", - "7.450453e+02", - "1.117589e+02", - "3.507386e+02", - "4.563542e+02", - "4.299373e+02", - "4.289449e+01", - "7.488298e+02", - "5.774838e+01", - "8.054975e+02", - "2.876450e+02", - "2.800513e+02", - "3.236047e+02", - "6.189408e+02", - "9.443771e+02", - "3.351080e+02", - "1.915356e+02", - "3.462876e+02", - "4.247560e+02", - "3.134058e+02", - "4.193752e+02", - "2.312851e+02", - "4.269331e+02", - "1.615836e+02", - "2.819203e+02", - "1.961460e+02", - "7.441256e+02", - "1.670285e+02", - "8.316164e+02", - "3.031353e+02", - "8.915607e+01", - "3.262377e+02", - "4.245556e+01", - "7.405838e+02", - "8.200616e+02", - "5.608228e+02", - "3.253911e+02", - "1.885364e+02", - "2.451309e+02", - "2.275969e+02", - "6.130129e+02", - "2.208553e+02", - "9.760767e+02", - "9.687453e+02", - "9.473627e+02", - "7.678024e+01", - "6.850898e+02", - "2.517887e+02", - "8.320509e+02", - "9.460945e+02", - "6.545895e+02", - "4.122038e+02", - "2.375858e+02", - "4.315752e+02", - "3.484297e+02", - "4.753165e+01", - "3.134634e+02", - "8.019226e+02", - "6.307343e+01", - "7.425700e+02", - "1.355509e+02", - "1.132044e+02", - "8.277566e+02", - "7.401343e+02", - "4.991328e+02", - "8.013161e+01", - "8.313063e+01", - "5.331477e+02", - "2.107043e+02", - "1.175253e+02", - "5.454537e+02", - "6.720013e+02", - "1.019682e+02", - "5.352936e+02", - "9.975210e+02", - "1.289630e+02", - "9.489636e+02", - "6.983934e+02", - "1.906586e+02", - "2.816224e+02", - "7.090039e+02", - "7.558271e+02", - "3.843945e+02", - "8.777839e+02", - "7.177176e+02", - "4.618169e+02", - "7.769897e+01", - "8.618700e+02", - "9.625838e+02", - "5.940573e+02", - "6.919939e+02", - "6.111707e+02", - "9.899255e+02", - "4.557500e+02", - "5.202242e+02", - "4.813536e+02", - "2.652132e+02", - "5.938798e+02", - "2.779567e+02", - "6.330449e+02", - "3.494593e+02", - "8.852637e+02", - "7.813650e+02", - "5.427964e+02", - "9.271056e+02", - "3.267547e+02", - "7.746186e+01", - "7.084551e+01", - "1.499733e+02", - "9.231068e+02", - "9.176254e+02", - "9.887667e+02", - "5.246470e+02", - "5.326661e+02", - "1.801105e+02", - "6.442800e+02", - "4.846482e+02", - "2.023633e+02", - "8.553462e+02", - "8.058045e+01", - "4.192956e+02", - "1.453054e+02", - "3.889669e+02", - "5.741838e+02", - "1.454783e+02", - "1.070215e+02", - "1.592374e+02", - "4.733611e+02", - "8.636650e+01", - "1.026157e+02", - "8.182533e+02", - "1.217627e+02", - "2.602088e+02", - "4.703054e+02", - "7.872070e+02", - "5.341897e+02", - "2.453443e+02", - "9.213929e+02", - "7.708913e+02", - "9.740402e+02", - "2.068744e+02", - "2.086161e+02", - "1.296129e+02", - "9.728455e+02", - "2.403669e+02", - "6.492682e+02", - "9.160582e+02", - "1.863281e+02", - "6.038427e+02", - "4.991132e+02", - "1.011291e+02", - "8.522417e+02", - "4.575186e+02", - "4.927716e+02", - "8.268740e+02", - "5.828574e+02", - "3.983267e+02", - "9.978527e+02", - "3.367050e+02", - "7.061583e+02", - "7.508582e+02", - "2.604884e+02", - "3.687955e+02", - "6.983774e+02", - "8.569522e+02", - "8.831192e+01", - "2.668965e+02", - "9.014027e+02", - "3.550586e+02", - "5.087756e+02", - "1.390400e+02", - "5.767024e+02", - "7.247653e+02", - "3.025503e+02", - "7.882617e+02", - "4.581881e+02", - "3.850367e+02", - "3.875926e+02", - "4.657383e+02", - "9.749254e+02", - "9.605901e+02", - "7.226886e+02", - "8.969097e+02", - "6.593826e+02", - "2.872607e+02", - "3.834920e+02", - "7.285265e+02", - "5.788773e+02", - "4.829253e+02", - "6.305648e+02", - "7.947547e+02", - "5.577104e+02", - "9.462068e+02", - "4.115653e+02", - "5.577651e+02", - "7.254987e+02", - "2.380295e+02", - "3.309690e+02", - "9.964590e+02", - "2.553707e+02", - "4.476841e+02", - "3.572157e+02", - "3.336524e+02", - "1.850395e+02", - "2.736607e+02", - "4.829052e+02", - "1.474430e+02", - "4.143380e+02", - "1.744771e+02", - "3.110781e+02", - "5.289451e+02", - "2.082172e+02", - "1.043162e+02", - "4.711033e+02", - "4.332283e+02", - "1.043616e+02", - "7.524848e+02", - "9.467077e+02", - "9.267947e+02", - "2.699397e+02", - "2.796677e+02", - "1.156017e+02", - "3.843159e+02", - "5.756298e+02", - "4.243585e+02", - "3.554321e+02", - "5.529260e+02", - "9.523020e+02", - "8.507367e+02", - "4.506849e+02", - "7.128029e+02", - "4.151975e+02", - "3.337817e+02", - "2.921112e+02", - "6.176133e+02", - "6.142031e+02", - "1.818356e+02", - "5.623269e+02", - "6.003769e+02", - "2.309062e+02", - "4.104400e+01", - "7.141284e+02", - "3.695566e+02", - "5.072216e+02", - "7.922741e+02", - "3.402579e+02", - "4.683241e+02", - "4.939139e+02", - "1.609272e+02", - "4.465613e+02", - "4.593679e+02", - "9.159980e+02", - "7.023503e+02", - "2.025106e+02", - "2.296985e+02", - "4.995694e+02", - "8.917812e+02", - "4.039147e+02", - "5.256269e+02", - "7.678480e+02", - "2.081564e+02", - "5.739526e+02", - "1.611545e+02", - "5.686011e+02", - "6.651831e+02", - "5.768182e+02", - "3.959134e+02", - "5.582930e+01", - "5.408516e+02", - "2.568807e+02", - "8.817613e+02", - "9.115224e+02", - "4.735433e+02", - "8.000535e+02", - "4.080733e+02", - "5.147176e+02", - "1.170000e+02", - "5.449924e+02", - "2.091420e+02", - "5.635044e+02", - "1.679425e+02", - "1.585978e+02", - "9.796368e+02", - "1.498921e+02", - "6.661688e+02", - "5.316710e+02", - "7.740654e+02", - "6.550985e+02", - "6.681437e+02", - "3.062063e+02", - "1.417081e+02", - "2.415805e+02", - "8.506522e+02", - "6.921999e+02", - "4.540804e+02", - "6.962961e+02", - "6.915303e+02", - "4.990340e+02", - "4.711017e+02", - "3.535389e+02", - "2.233624e+02", - "9.854400e+02", - "1.319448e+02", - "3.388994e+02", - "5.368881e+02", - "2.547133e+02", - "1.443943e+02", - "6.214170e+02", - "9.441169e+02", - "3.838136e+02", - "1.551524e+02", - "4.157696e+02", - "2.572700e+02", - "1.043632e+02", - "9.985676e+02", - "1.310020e+02", - "7.154248e+02", - "6.905000e+02", - "8.468771e+02", - "6.583205e+02", - "7.741800e+02", - "9.718653e+01", - "1.206974e+02", - "9.693509e+01", - "8.811237e+02", - "8.732544e+02", - "1.372336e+02", - "2.596242e+02", - "3.373999e+02", - "6.354652e+02", - "1.198609e+02", - "2.830166e+02", - "7.691157e+02", - "7.058504e+02", - "2.003126e+02", - "9.834614e+02", - "1.076457e+02", - "1.881878e+02", - "4.418626e+02", - "4.794343e+02", - "8.957472e+02", - "2.899884e+02", - "9.545392e+02", - "1.094140e+02", - "6.821521e+01", - "9.532614e+02", - "5.845677e+02", - "9.478638e+02", - "1.065001e+02", - "6.409503e+02", - "3.995348e+02", - "7.701981e+02", - "1.371802e+02", - "9.430567e+02", - "6.518066e+02", - "6.140988e+02", - "4.445771e+02", - "1.431169e+02", - "5.170884e+02", - "4.583194e+02", - "2.612735e+02", - "1.223555e+02", - "3.154644e+02", - "8.230589e+02", - "8.398124e+02", - "8.532654e+02", - "4.438798e+02", - "1.390346e+02", - "2.914343e+02", - "4.158538e+02", - "2.292541e+02", - "1.469669e+02", - "7.358726e+02", - "2.672221e+02", - "8.853738e+02", - "5.572821e+02", - "3.293499e+02", - "2.763762e+02", - "4.617857e+02", - "4.332310e+02", - "4.968971e+02", - "4.559885e+02", - "9.937406e+01", - "8.175268e+02", - "4.787926e+02", - "6.099321e+02", - "9.513287e+02", - "9.059034e+02", - "9.890528e+01", - "6.963366e+02", - "4.512135e+02", - "6.081055e+02", - "4.377751e+02", - "5.617154e+02", - "8.007556e+02", - "3.589317e+02", - "9.269598e+01", - "9.712777e+02", - "9.791836e+02", - "7.169733e+02", - "8.485015e+02", - "7.009802e+02", - "2.167347e+02", - "6.408799e+01", - "2.100779e+02", - "4.427216e+02", - "6.098413e+01", - "9.881760e+02", - "5.164326e+02", - "9.715705e+02", - "7.639821e+02", - "6.580388e+02", - "1.752130e+02", - "4.920825e+02", - "5.022497e+01", - "4.200256e+02", - "2.949763e+02", - "9.133282e+02", - "3.310896e+02", - "6.259522e+02", - "8.726981e+02", - "1.683757e+02", - "8.827958e+02", - "4.557915e+02", - "8.841304e+02", - "5.247159e+02", - "1.729914e+02", - "4.652245e+02", - "4.324973e+02", - "5.984754e+02", - "4.555519e+02", - "8.681710e+02", - "1.324498e+02", - "7.408745e+02", - "1.973362e+02", - "9.323894e+02", - "3.155542e+02", - "1.494711e+02", - "1.850564e+02", - "6.002242e+02", - "2.044212e+02", - "2.659696e+02", - "3.061980e+02", - "5.334760e+02", - "4.698091e+02", - "2.892373e+02", - "7.416070e+02", - "4.303512e+02", - "4.297310e+02", - "6.392184e+02", - "5.498383e+01", - "9.639093e+02", - "8.388311e+02", - "5.154595e+01", - "8.360246e+02", - "5.137546e+02", - "5.413121e+02", - "5.660445e+02", - "2.473625e+02", - "1.973194e+02", - "8.210552e+02", - "2.097529e+02", - "4.537039e+02", - "4.459812e+02", - "2.146477e+02", - "7.178045e+02", - "6.080823e+02", - "8.973697e+02", - "9.130806e+02", - "1.175053e+02", - "5.172972e+02", - "6.149818e+02", - "9.270810e+02", - "5.025425e+02", - "1.768080e+02", - "3.588305e+02", - "8.285730e+02", - "9.383916e+02", - "1.823019e+02", - "9.835732e+02", - "9.083601e+02", - "3.691263e+02", - "4.084953e+02", - "7.573807e+02", - "2.207987e+02", - "1.657911e+02", - "7.793577e+02", - "5.329781e+02", - "1.137738e+02", - "1.940709e+02", - "3.181886e+02", - "9.678454e+02", - "6.713104e+02", - "8.073199e+01", - "4.378798e+02", - "8.001375e+02", - "6.045761e+01", - "7.782069e+02", - "6.730096e+02", - "8.952560e+01", - "2.917142e+02", - "6.834020e+02", - "5.308564e+01", - "1.468444e+02", - "6.109598e+01", - "1.924621e+02", - "9.498035e+02", - "3.769210e+02", - "5.053003e+02", - "1.639383e+02", - "3.294007e+02", - "5.147994e+02", - "9.564532e+02", - "8.938961e+02", - "4.699507e+02", - "3.318603e+02", - "5.250975e+01", - "2.865349e+02", - "4.998770e+02", - "6.087477e+02", - "4.833095e+02", - "2.257177e+02", - "4.824431e+02", - "1.282243e+02", - "2.437596e+02", - "1.625139e+02", - "7.899207e+02", - "5.740890e+02", - "3.612521e+02", - "9.162083e+02", - "9.723719e+01", - "3.528175e+02", - "3.150446e+02", - "4.036714e+02", - "1.997008e+02", - "4.720181e+02", - "2.805095e+02", - "3.526403e+02", - "4.222222e+01", - "2.199558e+02", - "8.041528e+02", - "3.725128e+02", - "5.077912e+02", - "2.198542e+02", - "8.218886e+02", - "8.401061e+02", - "5.723646e+02", - "4.327593e+02", - "8.011326e+02", - "2.969956e+02", - "3.797969e+02", - "3.404777e+02", - "5.263028e+01", - "5.055457e+02", - "3.603782e+02", - "9.324064e+02", - "9.771932e+02", - "4.038076e+02", - "5.860686e+02", - "6.264743e+02", - "9.555829e+02", - "1.983157e+02", - "7.395091e+02", - "9.442736e+02", - "7.246996e+01", - "8.038585e+02", - "4.260471e+02", - "7.455401e+01", - "2.022614e+02", - "5.882487e+02", - "6.240858e+02", - "1.622762e+02", - "4.650828e+02", - "3.645358e+02", - "6.292005e+02", - "4.393152e+02", - "7.925092e+02", - "9.233503e+01", - "6.957910e+02", - "5.868180e+02", - "1.871420e+02", - "4.172453e+02", - "6.961026e+02", - "9.936144e+01", - "1.385493e+02", - "5.634158e+02", - "2.953233e+02", - "2.098774e+02", - "2.032115e+02", - "9.349674e+02", - "1.787915e+02", - "2.579603e+02", - "7.582595e+02", - "4.748648e+02", - "3.304116e+02", - "6.692847e+02", - "3.873437e+02", - "9.639974e+02", - "9.906689e+02", - "6.273336e+01", - "2.758469e+02", - "3.740047e+02", - "3.929707e+02", - "1.394279e+02", - "6.758135e+02", - "5.464243e+02", - "1.689589e+02", - "2.157409e+02", - "3.711062e+02", - "1.757002e+02", - "3.947201e+02", - "1.819242e+02", - "5.364289e+02", - "2.753016e+02", - "2.314816e+02", - "8.845693e+02", - "2.704182e+02", - "9.100697e+01", - "8.963017e+02", - "5.237714e+02", - "2.068135e+02", - "2.913087e+02", - "4.057800e+02", - "7.826859e+02", - "9.243065e+02", - "1.310014e+02", - "5.085332e+02", - "7.167849e+02", - "3.747164e+02", - "8.119929e+02", - "6.220244e+02", - "9.022192e+02", - "4.692976e+02", - "1.739981e+02", - "9.273135e+02", - "6.553811e+02", - "5.333634e+02", - "4.007984e+02", - "7.025889e+02", - "6.824541e+02", - "5.653616e+02", - "1.201281e+02", - "3.298636e+02", - "2.462129e+02", - "3.668611e+02", - "7.584394e+02" - ], - "ysrc": "JohnMaddock:38:230e76", - "y": [ - "-2.664517e+02", - "-7.716566e+02", - "-5.849861e+02", - "-5.139032e+02", - "-8.489220e+02", - "-7.618509e+02", - "-6.791440e+02", - "-9.663619e+02", - "-6.990432e+02", - "-8.419406e+02", - "-9.988935e+02", - "-8.685091e+02", - "-2.782077e+02", - "-8.204901e+02", - "-9.274133e+02", - "-9.425346e+02", - "-5.209242e+02", - "-8.768383e+02", - "-6.551955e+02", - "-8.833744e+02", - "-7.492423e+02", - "-8.499037e+02", - "-8.272302e+02", - "-7.858763e+02", - "-5.810698e+02", - "-3.686073e+02", - "-4.393513e+02", - "-9.719093e+02", - "-7.750084e+02", - "-5.075570e+02", - "-9.851953e+02", - "-5.397178e+02", - "-2.571171e+02", - "-3.590644e+02", - "-2.612769e+02", - "-4.349780e+02", - "-2.896400e+02", - "-9.494615e+02", - "-9.983348e+02", - "-7.831203e+02", - "-4.932634e+02", - "-2.876642e+02", - "-7.483753e+02", - "-6.261088e+02", - "-8.438549e+02", - "-3.192149e+02", - "-8.482799e+02", - "-8.030866e+02", - "-6.234021e+02", - "-3.572849e+02", - "-9.641268e+02", - "-7.715539e+02", - "-1.980164e+02", - "-8.730464e+02", - "-5.526514e+02", - "-7.766610e+02", - "-8.843881e+02", - "-6.270745e+02", - "-4.233165e+02", - "-5.447439e+02", - "-4.490856e+02", - "-7.558741e+02", - "-4.894295e+02", - "-6.437829e+02", - "-8.876261e+02", - "-9.361649e+02", - "-5.000360e+02", - "-9.485350e+02", - "-7.375544e+02", - "-8.047144e+02", - "-9.823779e+02", - "-8.444095e+02", - "-8.752137e+02", - "-5.077315e+02", - "-4.297624e+02", - "-8.312540e+02", - "-6.580143e+02", - "-6.215292e+02", - "-3.227495e+02", - "-5.851833e+02", - "-9.138083e+02", - "-3.674953e+02", - "-8.698319e+02", - "-6.956130e+02", - "-7.905226e+02", - "-7.135405e+02", - "-3.469564e+02", - "-9.687937e+02", - "-5.419215e+02", - "-1.761180e+02", - "-4.639763e+02", - "-9.170924e+02", - "-8.704370e+02", - "-6.854616e+02", - "-5.243539e+02", - "-5.713639e+02", - "-4.377395e+02", - "-6.986623e+02", - "-4.907290e+02", - "-9.079902e+02", - "-1.909209e+02", - "-8.396153e+02", - "-7.853113e+02", - "-3.972850e+02", - "-2.284197e+02", - "-8.152294e+02", - "-6.116201e+02", - "-4.177197e+02", - "-9.769032e+02", - "-7.833849e+02", - "-9.860138e+02", - "-9.874264e+02", - "-4.617102e+02", - "-5.234186e+02", - "-9.908680e+02", - "-7.245994e+02", - "-8.360940e+02", - "-7.581099e+02", - "-4.175296e+02", - "-4.167253e+02", - "-2.293841e+02", - "-5.238737e+02", - "-9.900939e+02", - "-4.736573e+02", - "-9.069240e+02", - "-3.843822e+02", - "-7.942248e+02", - "-2.802435e+02", - "-8.193747e+02", - "-9.116220e+02", - "-4.783527e+02", - "-1.946906e+02", - "-2.317138e+02", - "-7.225410e+02", - "-9.060862e+02", - "-9.276887e+02", - "-6.595969e+02", - "-7.849627e+02", - "-9.678808e+02", - "-5.674528e+02", - "-9.941349e+02", - "-6.028734e+02", - "-7.638119e+02", - "-8.877836e+02", - "-9.088013e+02", - "-4.890635e+02", - "-3.286786e+02", - "-9.670593e+02", - "-5.682203e+02", - "-3.373420e+02", - "-9.258525e+02", - "-6.148721e+02", - "-6.317563e+02", - "-2.118189e+02", - "-3.032892e+02", - "-9.881454e+02", - "-8.155393e+02", - "-4.931772e+02", - "-7.620058e+02", - "-6.300929e+02", - "-5.450991e+02", - "-9.364882e+02", - "-5.424164e+02", - "-9.125436e+02", - "-8.733255e+02", - "-8.097659e+02", - "-7.328007e+02", - "-2.409336e+02", - "-7.275100e+02", - "-9.578781e+02", - "-6.071511e+02", - "-2.483800e+02", - "-3.638070e+02", - "-6.525595e+02", - "-7.700549e+02", - "-8.842819e+02", - "-9.624473e+02", - "-9.338616e+02", - "-7.613239e+02", - "-4.876721e+02", - "-4.120482e+02", - "-9.704461e+02", - "-9.136146e+02", - "-5.305918e+02", - "-9.925989e+02", - "-7.976176e+02", - "-8.768826e+02", - "-8.827783e+02", - "-7.170046e+02", - "-6.326962e+02", - "-9.786356e+02", - "-9.121008e+02", - "-5.924318e+02", - "-3.494698e+02", - "-8.390529e+02", - "-4.420387e+02", - "-9.989851e+02", - "-9.892487e+02", - "-8.605423e+02", - "-6.067409e+02", - "-6.409004e+02", - "-4.809667e+02", - "-9.440990e+02", - "-9.199048e+02", - "-7.294286e+02", - "-8.409157e+02", - "-8.951730e+02", - "-9.454991e+02", - "-9.318724e+02", - "-6.345881e+02", - "-2.606688e+02", - "-4.671214e+02", - "-2.029203e+02", - "-9.344385e+02", - "-9.341590e+02", - "-9.564521e+02", - "-5.195862e+02", - "-2.182882e+02", - "-8.983603e+02", - "-9.855647e+02", - "-2.444064e+02", - "-2.243153e+02", - "-6.194520e+02", - "-2.711182e+02", - "-9.413220e+02", - "-1.622968e+02", - "-8.166430e+02", - "-9.266633e+02", - "-3.943428e+02", - "-9.042121e+02", - "-6.203182e+02", - "-3.118660e+02", - "-9.956582e+02", - "-9.608902e+02", - "-4.644417e+02", - "-8.624804e+02", - "-9.450589e+02", - "-8.682048e+02", - "-5.464687e+02", - "-5.093304e+02", - "-8.667523e+02", - "-8.512904e+02", - "-3.341645e+02", - "-7.860790e+02", - "-5.729386e+02", - "-1.964359e+02", - "-7.047091e+02", - "-5.370736e+02", - "-9.215879e+02", - "-3.919021e+02", - "-9.134154e+02", - "-6.650528e+02", - "-2.102605e+02", - "-4.834141e+02", - "-9.468700e+02", - "-6.952987e+02", - "-2.487884e+02", - "-6.432421e+02", - "-2.651336e+02", - "-4.244678e+02", - "-8.102928e+02", - "-6.547814e+02", - "-5.494699e+02", - "-9.969444e+02", - "-8.322866e+02", - "-4.120224e+02", - "-3.747290e+02", - "-5.600333e+02", - "-3.423564e+02", - "-9.001493e+02", - "-7.985795e+02", - "-7.454122e+02", - "-3.171208e+02", - "-9.488318e+02", - "-7.423003e+02", - "-2.055427e+02", - "-9.239959e+02", - "-1.879824e+02", - "-3.842845e+02", - "-9.890682e+02", - "-2.431709e+02", - "-4.317790e+02", - "-8.410463e+02", - "-6.872653e+02", - "-9.959373e+02", - "-6.357932e+02", - "-8.193907e+02", - "-8.306035e+02", - "-3.300774e+02", - "-8.425101e+02", - "-5.878725e+02", - "-5.992320e+02", - "-9.565087e+02", - "-4.542946e+02", - "-6.170455e+02", - "-9.409637e+02", - "-8.463538e+02", - "-8.246763e+02", - "-8.396174e+02", - "-8.315902e+02", - "-4.931545e+02", - "-3.912164e+02", - "-8.121701e+02", - "-3.507584e+02", - "-6.863567e+02", - "-3.721495e+02", - "-9.728202e+02", - "-9.646057e+02", - "-5.742628e+02", - "-5.676060e+02", - "-7.758153e+02", - "-4.258532e+02", - "-5.365536e+02", - "-6.951205e+02", - "-2.879630e+02", - "-7.455389e+02", - "-2.460146e+02", - "-5.050366e+02", - "-9.640226e+02", - "-6.556023e+02", - "-9.140137e+02", - "-9.374135e+02", - "-7.726654e+02", - "-9.821535e+02", - "-1.729588e+02", - "-7.428780e+02", - "-2.361408e+02", - "-2.477481e+02", - "-8.274028e+02", - "-9.816078e+02", - "-9.548794e+02", - "-4.313452e+02", - "-7.988556e+02", - "-3.305721e+02", - "-2.657465e+02", - "-9.757745e+02", - "-5.833174e+02", - "-6.740942e+02", - "-6.222626e+02", - "-7.804203e+02", - "-5.061307e+02", - "-9.644401e+02", - "-8.963286e+02", - "-3.235520e+02", - "-3.569705e+02", - "-2.045886e+02", - "-6.045621e+02", - "-8.171806e+02", - "-6.277942e+02", - "-7.903611e+02", - "-7.406173e+02", - "-8.674038e+02", - "-2.815309e+02", - "-9.825265e+02", - "-2.697458e+02", - "-9.950993e+02", - "-6.828845e+02", - "-9.800975e+02", - "-5.002025e+02", - "-7.663900e+02", - "-4.185081e+02", - "-7.993593e+02", - "-9.632031e+02", - "-9.090471e+02", - "-8.020113e+02", - "-3.931501e+02", - "-4.650788e+02", - "-2.788714e+02", - "-9.585706e+02", - "-5.829062e+02", - "-9.688193e+02", - "-3.225970e+02", - "-9.968128e+02", - "-8.740449e+02", - "-7.668678e+02", - "-2.365216e+02", - "-7.613888e+02", - "-6.711606e+02", - "-4.974229e+02", - "-9.884736e+02", - "-5.839170e+02", - "-5.574343e+02", - "-9.367581e+02", - "-9.752195e+02", - "-5.001158e+02", - "-9.830068e+02", - "-4.018365e+02", - "-8.664451e+02", - "-9.446262e+02", - "-4.666306e+02", - "-2.413464e+02", - "-6.195164e+02", - "-8.117237e+02", - "-9.766642e+02", - "-8.826230e+02", - "-9.429439e+02", - "-7.288909e+02", - "-9.562012e+02", - "-8.731216e+02", - "-8.425019e+02", - "-5.057652e+02", - "-5.391602e+02", - "-6.896574e+02", - "-7.257758e+02", - "-9.069263e+02", - "-9.811184e+02", - "-4.469362e+02", - "-6.149328e+02", - "-6.796649e+02", - "-8.729866e+01", - "-9.068883e+02", - "-8.581944e+02", - "-8.080585e+02", - "-2.564092e+02", - "-4.004816e+02", - "-9.706269e+02", - "-3.820184e+02", - "-5.316032e+02", - "-1.188617e+02", - "-4.348031e+02", - "-8.284561e+02", - "-8.977595e+02", - "-9.019635e+02", - "-7.900050e+02", - "-9.672882e+02", - "-7.547869e+02", - "-8.854514e+02", - "-1.332152e+02", - "-9.903363e+02", - "-9.993311e+02", - "-8.139961e+02", - "-2.511956e+02", - "-7.887149e+02", - "-9.024302e+02", - "-7.986751e+02", - "-7.233825e+02", - "-7.239268e+02", - "-8.009676e+02", - "-1.776796e+02", - "-8.072752e+02", - "-2.428804e+02", - "-5.487921e+02", - "-8.985677e+02", - "-7.759748e+02", - "-2.454284e+02", - "-4.246854e+02", - "-9.468842e+02", - "-6.139922e+02", - "-4.047647e+02", - "-9.598770e+02", - "-6.951570e+02", - "-6.818228e+02", - "-3.403474e+02", - "-9.222286e+02", - "-1.966520e+02", - "-3.945478e+02", - "-3.916872e+02", - "-8.690223e+02", - "-7.817285e+02", - "-2.840715e+02", - "-9.232233e+02", - "-4.128960e+02", - "-5.442036e+02", - "-2.182361e+02", - "-6.335024e+02", - "-9.215458e+02", - "-7.026897e+02", - "-7.502572e+02", - "-7.774515e+02", - "-5.901412e+02", - "-6.299373e+02", - "-3.888351e+02", - "-3.820406e+02", - "-8.019142e+02", - "-2.528267e+02", - "-8.439881e+02", - "-9.187250e+02", - "-2.877885e+02", - "-3.092908e+02", - "-7.760435e+02", - "-5.779983e+02", - "-7.326469e+02", - "-4.067909e+02", - "-5.431354e+02", - "-1.940286e+02", - "-3.452071e+02", - "-8.060345e+02", - "-7.782843e+02", - "-1.630352e+02", - "-7.257647e+02", - "-9.986385e+02", - "-2.204887e+02", - "-7.737075e+02", - "-9.190996e+02", - "-4.607308e+02", - "-4.580581e+02", - "-6.108989e+02", - "-8.915087e+02", - "-8.985690e+02", - "-8.887760e+02", - "-9.959521e+02", - "-8.487263e+02", - "-9.945294e+02", - "-8.601658e+02", - "-1.880241e+02", - "-7.780688e+02", - "-8.376506e+02", - "-4.145388e+02", - "-4.798213e+02", - "-9.384661e+02", - "-5.443432e+02", - "-9.009390e+02", - "-4.033810e+02", - "-5.705076e+02", - "-7.903355e+02", - "-5.508458e+02", - "-8.753606e+02", - "-9.965918e+02", - "-7.091645e+02", - "-9.133785e+02", - "-7.388036e+02", - "-2.085641e+02", - "-2.172007e+02", - "-4.317303e+02", - "-7.483036e+02", - "-8.636236e+02", - "-6.533023e+02", - "-9.092502e+02", - "-8.107084e+02", - "-6.820532e+02", - "-2.397667e+02", - "-9.997160e+02", - "-5.539235e+02", - "-8.266320e+02", - "-7.260757e+02", - "-8.202480e+02", - "-8.651562e+02", - "-9.305616e+02", - "-7.060745e+02", - "-4.146756e+02", - "-8.029873e+02", - "-2.072470e+02", - "-4.291383e+02", - "-2.479793e+02", - "-9.361261e+02", - "-9.586876e+02", - "-5.790192e+02", - "-7.988218e+02", - "-9.316001e+02", - "-7.375861e+02", - "-7.027982e+02", - "-4.470347e+02", - "-5.378171e+02", - "-3.745947e+02", - "-9.179395e+02", - "-4.878402e+02", - "-9.476011e+02", - "-5.213112e+02", - "-5.427233e+02", - "-9.757687e+02", - "-2.171287e+02", - "-3.737250e+02", - "-4.966033e+02", - "-9.999419e+02", - "-8.651366e+02", - "-5.277842e+02", - "-7.578731e+02", - "-9.361831e+02", - "-9.634672e+02", - "-9.804779e+02", - "-8.668201e+02", - "-2.690325e+02", - "-8.193783e+02", - "-7.329937e+02", - "-7.053034e+02", - "-5.500999e+02", - "-4.661729e+02", - "-9.954509e+02", - "-4.824396e+02", - "-4.906109e+02", - "-7.798544e+02", - "-6.521491e+02", - "-2.133381e+02", - "-9.526806e+02", - "-6.392678e+02", - "-7.381475e+02", - "-4.177225e+02", - "-9.116428e+02", - "-2.262581e+02", - "-9.985897e+02", - "-2.344556e+02", - "-1.757970e+02", - "-5.338338e+02", - "-7.908725e+02", - "-2.828313e+02", - "-5.326552e+02", - "-9.948971e+02", - "-6.205827e+02", - "-6.459837e+02", - "-6.775129e+02", - "-4.790095e+02", - "-4.791713e+02", - "-8.872911e+02", - "-5.187779e+02", - "-5.573828e+02", - "-4.931954e+02", - "-2.138967e+02", - "-9.757789e+02", - "-9.045950e+02", - "-9.849689e+02", - "-2.035310e+02", - "-8.465024e+02", - "-7.442161e+02", - "-6.077581e+02", - "-9.120418e+02", - "-4.103606e+02", - "-9.968025e+02", - "-8.278426e+02", - "-8.552631e+02", - "-9.651994e+02", - "-9.126035e+02", - "-2.368851e+02", - "-2.825919e+02", - "-7.390683e+02", - "-2.333962e+02", - "-5.401543e+02", - "-7.954341e+02", - "-3.378806e+02", - "-2.377663e+02", - "-8.518868e+02", - "-7.098510e+02", - "-9.831440e+02", - "-3.188420e+02", - "-9.700180e+02", - "-4.769362e+02", - "-7.795682e+02", - "-9.356897e+02", - "-2.797406e+02", - "-6.863933e+02", - "-8.287890e+02", - "-7.860886e+02", - "-2.443544e+02", - "-5.067490e+02", - "-2.341296e+02", - "-2.372645e+02", - "-6.509335e+02", - "-8.645010e+02", - "-9.501366e+02", - "-4.568928e+02", - "-6.321799e+02", - "-2.451082e+02", - "-7.974704e+02", - "-9.367424e+02", - "-9.364192e+02", - "-9.783771e+02", - "-4.615731e+02", - "-8.492105e+02", - "-8.674741e+02", - "-3.917826e+02", - "-8.031848e+02", - "-9.542210e+02", - "-7.154692e+02", - "-3.033377e+02", - "-8.326606e+02", - "-9.914418e+02", - "-3.938378e+02", - "-3.542083e+02", - "-8.449676e+02", - "-7.462475e+02", - "-2.550400e+02", - "-4.635380e+02", - "-4.333592e+02", - "-7.193872e+02", - "-6.911779e+02", - "-6.148777e+02", - "-4.461963e+02", - "-7.860248e+02", - "-2.206157e+02", - "-7.166392e+02", - "-3.870249e+02", - "-6.288653e+02", - "-5.150543e+02", - "-9.821978e+02", - "-8.758575e+02", - "-3.109860e+02", - "-8.860419e+02", - "-5.879858e+02", - "-8.106152e+02", - "-5.079349e+02", - "-5.915600e+02", - "-9.188644e+02", - "-7.238618e+02", - "-9.891714e+02", - "-7.754940e+02", - "-7.792324e+02", - "-3.572198e+02", - "-5.774771e+02", - "-7.922927e+02", - "-9.965020e+02", - "-8.899189e+02", - "-3.390432e+02", - "-9.064315e+02", - "-5.743519e+02", - "-7.994759e+02", - "-7.119622e+02", - "-8.319566e+02", - "-7.904401e+02", - "-4.821501e+02", - "-8.788344e+02", - "-7.183951e+02", - "-4.924288e+02", - "-6.655403e+02", - "-6.947449e+02", - "-5.652559e+02", - "-8.845186e+02", - "-1.752621e+02", - "-2.043645e+02", - "-9.283222e+02", - "-9.954918e+02", - "-4.634314e+02", - "-6.422486e+02", - "-8.362368e+02", - "-2.380383e+02", - "-4.241101e+02", - "-7.655932e+02", - "-7.919233e+02", - "-4.463035e+02", - "-6.831517e+02", - "-9.740971e+02", - "-4.731283e+02", - "-3.666748e+02", - "-3.963071e+02", - "-7.525630e+02", - "-5.721185e+02", - "-7.634407e+02", - "-9.068325e+02", - "-8.809013e+02", - "-2.999711e+02", - "-9.664263e+02", - "-6.154567e+02", - "-4.544271e+02", - "-4.679540e+02", - "-9.914357e+02", - "-4.667531e+02", - "-5.098852e+02", - "-1.452698e+02", - "-1.386208e+02", - "-9.016182e+02", - "-4.757402e+02", - "-4.166959e+02", - "-6.611463e+02", - "-4.222780e+02", - "-6.893905e+02", - "-3.393750e+02", - "-9.819508e+02", - "-7.186920e+02", - "-6.251427e+02", - "-6.902707e+02", - "-7.511381e+02", - "-9.344249e+02", - "-6.786452e+02", - "-8.095876e+02", - "-1.476481e+02", - "-9.122118e+02", - "-4.165001e+02", - "-7.728690e+02", - "-3.488604e+02", - "-7.681614e+02", - "-3.238292e+02", - "-5.271043e+02", - "-7.103542e+02", - "-8.169484e+02", - "-7.225799e+02", - "-7.737486e+02", - "-9.277866e+02", - "-9.458422e+02", - "-8.605246e+02", - "-9.487872e+02", - "-7.964460e+02", - "-2.472826e+02", - "-8.110757e+02", - "-9.177363e+02", - "-1.917912e+02", - "-7.024587e+02", - "-9.564328e+02", - "-7.913314e+02", - "-7.654495e+02", - "-7.281240e+02", - "-4.946272e+02", - "-9.993768e+02", - "-9.975642e+02", - "-7.109012e+02", - "-3.824477e+02", - "-9.409408e+02", - "-5.297406e+02", - "-3.777542e+02", - "-9.123574e+02", - "-8.949084e+02", - "-8.282267e+02", - "-9.577300e+02", - "-3.092014e+02", - "-8.400445e+02", - "-4.718078e+02", - "-6.117354e+02", - "-3.463208e+02", - "-9.488360e+02", - "-9.941076e+02", - "-7.658288e+02", - "-6.678904e+02", - "-8.235414e+02", - "-8.237236e+02", - "-9.608331e+02", - "-3.769196e+02", - "-8.297715e+02", - "-2.412374e+02", - "-3.716903e+02", - "-8.559070e+02", - "-6.853607e+02", - "-9.459073e+02", - "-5.328822e+02", - "-8.373896e+02", - "-9.302559e+02", - "-4.728347e+02", - "-4.987842e+02", - "-9.416990e+02", - "-6.606836e+02", - "-6.301021e+02", - "-7.882826e+02", - "-5.165614e+02", - "-7.520880e+02", - "-6.018414e+02", - "-7.322788e+02", - "-7.118064e+02", - "-2.745302e+02", - "-2.972195e+02", - "-6.221045e+02", - "-9.466343e+02", - "-9.526488e+02", - "-4.401926e+02", - "-9.590893e+02", - "-9.890401e+02", - "-7.910253e+02", - "-7.308971e+02", - "-9.576650e+02", - "-9.606486e+02", - "-4.631023e+02", - "-9.188873e+02", - "-4.392094e+02", - "-7.715228e+02", - "-8.049822e+02", - "-7.105464e+02", - "-4.210988e+02", - "-1.661649e+02", - "-7.640665e+02", - "-3.904641e+02", - "-5.175238e+02", - "-3.280830e+02", - "-4.975359e+02", - "-7.557047e+02", - "-6.774466e+02", - "-9.536014e+02", - "-8.058760e+02", - "-1.304353e+02", - "-3.177386e+02", - "-6.552697e+02", - "-4.017483e+02", - "-1.838880e+02", - "-4.122322e+02", - "-3.704618e+02", - "-5.986797e+02", - "-4.597084e+02", - "-5.585181e+02", - "-5.261912e+02", - "-8.970787e+02", - "-9.635390e+02", - "-8.483560e+02", - "-8.408978e+02", - "-5.230196e+02", - "-9.824723e+02", - "-9.071308e+02", - "-4.167045e+02", - "-9.873250e+02", - "-5.487179e+02", - "-9.991433e+02", - "-6.915884e+02", - "-4.462021e+02", - "-8.254658e+02", - "-3.105455e+02", - "-9.238666e+02", - "-6.619587e+02", - "-9.877877e+02", - "-9.828665e+02", - "-1.716051e+02", - "-4.111553e+02", - "-8.209020e+02", - "-7.398410e+02", - "-9.617188e+02", - "-8.749428e+02", - "-2.817848e+02", - "-9.290729e+02", - "-6.535268e+02", - "-9.483689e+02", - "-6.652459e+02", - "-3.676231e+02", - "-6.369487e+02", - "-3.270680e+02", - "-9.096835e+02", - "-9.125546e+02", - "-7.788413e+02", - "-8.586893e+02", - "-4.652643e+02", - "-4.428722e+02", - "-9.756842e+02", - "-9.731015e+02", - "-4.761289e+02", - "-8.809239e+02", - "-5.112458e+02", - "-8.868451e+02", - "-9.238992e+02", - "-8.688790e+02", - "-7.679322e+02", - "-3.620578e+02", - "-2.094366e+02", - "-9.871561e+02", - "-8.976354e+02", - "-6.245852e+02", - "-7.269242e+02", - "-1.935673e+02", - "-8.730966e+02", - "-6.886535e+02", - "-7.238932e+02", - "-8.199586e+02", - "-9.293558e+02", - "-9.114847e+02", - "-4.223649e+02", - "-7.263059e+02", - "-7.737774e+02", - "-3.705271e+02", - "-9.348643e+02", - "-9.901859e+02", - "-6.468511e+02", - "-9.102600e+02", - "-3.487797e+02", - "-8.585715e+02", - "-9.988471e+02", - "-3.991016e+02", - "-9.867385e+02", - "-1.782034e+02", - "-4.794220e+02", - "-4.114045e+02", - "-9.460288e+02", - "-5.781263e+02", - "-4.081174e+02", - "-5.289661e+02", - "-9.090606e+02", - "-6.148666e+02", - "-1.839556e+02", - "-5.717139e+02", - "-3.969014e+02", - "-9.667767e+02", - "-3.261740e+02", - "-4.548834e+02", - "-3.834494e+02", - "-4.941262e+02", - "-6.408975e+02", - "-8.220254e+02", - "-6.884751e+02", - "-4.106868e+02", - "-9.976175e+02", - "-5.829342e+02", - "-9.547968e+02", - "-2.993711e+02", - "-5.121783e+02", - "-7.901485e+02", - "-9.752122e+02", - "-7.165511e+02", - "-7.928509e+02", - "-4.798000e+02", - "-4.088204e+02", - "-9.359728e+02", - "-8.066366e+02", - "-7.373256e+02", - "-9.445206e+02", - "-6.718101e+02", - "-8.820256e+02", - "-1.531328e+02", - "-4.239660e+02", - "-4.454138e+02", - "-4.470188e+02", - "-5.374650e+02", - "-9.011697e+02", - "-7.052510e+02", - "-9.751266e+02", - "-1.894188e+02", - "-2.165748e+02", - "-8.633644e+02", - "-7.335327e+02", - "-4.060765e+02", - "-4.910646e+02", - "-6.397021e+02", - "-4.949706e+02", - "-5.794953e+02", - "-9.744445e+02", - "-8.958755e+02", - "-3.211642e+02", - "-7.361457e+02", - "-6.936366e+02", - "-5.429044e+02", - "-5.406851e+02", - "-4.934629e+02", - "-3.967941e+02", - "-4.617460e+02", - "-4.769820e+02", - "-7.678725e+02", - "-9.571021e+02", - "-9.988409e+02", - "-5.891145e+02", - "-9.813718e+02", - "-4.785741e+02", - "-8.094438e+02", - "-7.560431e+02", - "-8.367918e+02", - "-6.813583e+02", - "-7.933149e+02", - "-7.602908e+02", - "-4.532504e+02", - "-3.957333e+02", - "-7.811291e+02", - "-9.973314e+02", - "-7.938493e+02", - "-7.784608e+02", - "-4.452537e+02", - "-4.588160e+02", - "-4.318371e+02", - "-7.096148e+02", - "-9.987167e+02", - "-7.989722e+02", - "-2.669566e+02", - "-4.448445e+02", - "-5.650718e+02", - "-8.546697e+02", - "-4.273167e+02", - "-8.321533e+02", - "-7.494313e+02", - "-6.419172e+02", - "-7.689055e+02", - "-8.456368e+02", - "-9.725208e+02", - "-8.722930e+02", - "-6.395128e+02", - "-8.305521e+02", - "-9.201639e+02", - "-7.980400e+02", - "-6.941337e+02", - "-9.188561e+02", - "-9.913065e+02", - "-6.892736e+02", - "-9.811089e+02", - "-4.434463e+02", - "-2.895175e+02", - "-6.254074e+02", - "-8.510950e+02", - "-3.731815e+02", - "-4.976420e+02", - "-9.414639e+02", - "-6.145212e+02", - "-4.526563e+02", - "-8.792197e+02", - "-5.723654e+02", - "-9.399227e+02", - "-3.345636e+02", - "-2.375476e+02", - "-4.381452e+02", - "-5.097760e+02", - "-2.767611e+02", - "-8.304052e+02", - "-9.316729e+02", - "-7.783081e+02", - "-4.957393e+02", - "-6.323086e+02", - "-6.706418e+02", - "-9.683630e+02", - "-4.720769e+02", - "-7.438847e+02", - "-5.148501e+02", - "-9.232239e+02", - "-9.735625e+02", - "-8.116865e+02", - "-8.967347e+02", - "-2.511976e+02", - "-8.288456e+02", - "-3.631796e+02", - "-2.482349e+02", - "-9.414598e+02", - "-3.830277e+02", - "-8.886981e+02", - "-5.988079e+02", - "-7.406249e+02", - "-5.606631e+02", - "-3.087607e+02", - "-6.988339e+02", - "-6.491037e+02", - "-6.391985e+02", - "-8.500970e+02", - "-5.483128e+02", - "-8.683667e+02", - "-7.610114e+02" - ], - "zsrc": "JohnMaddock:38:9b4687", - "z": [ - "8.659638e+00", - "1.105056e+02", - "4.530830e+01", - "4.888359e+01", - "7.077789e+01", - "5.389454e+01", - "6.211337e+01", - "1.115061e+02", - "1.039156e+02", - "8.948488e+01", - "1.369536e+02", - "8.977275e+01", - "1.880813e+01", - "1.080468e+02", - "7.352176e+01", - "1.734135e+02", - "4.270289e+01", - "7.495118e+01", - "1.146596e+02", - "1.226124e+02", - "1.169330e+02", - "1.027144e+02", - "1.514792e+02", - "1.030816e+02", - "4.005057e+01", - "5.232643e+01", - "2.393428e+01", - "2.114940e+02", - "1.559609e+02", - "3.113128e+01", - "1.250649e+02", - "1.150674e+02", - "7.665301e+00", - "3.066174e+01", - "7.668450e+00", - "5.155286e+01", - "1.072873e+01", - "1.338961e+02", - "9.932011e+01", - "1.297067e+02", - "2.465463e+01", - "1.256570e+01", - "5.637619e+01", - "6.051415e+01", - "9.443621e+01", - "3.329891e+01", - "7.076822e+01", - "6.598571e+01", - "8.075379e+01", - "4.918474e+01", - "1.086927e+02", - "1.005009e+02", - "6.604483e+00", - "1.553183e+02", - "3.600811e+01", - "7.320251e+01", - "9.266516e+01", - "4.271932e+01", - "3.044395e+01", - "1.143950e+02", - "3.166620e+01", - "9.799949e+01", - "2.209853e+01", - "4.898078e+01", - "1.744629e+02", - "1.193244e+02", - "6.720191e+01", - "7.918918e+01", - "6.262761e+01", - "6.041105e+01", - "1.870980e+02", - "1.051786e+02", - "1.763873e+02", - "6.296927e+01", - "4.788984e+01", - "1.174595e+02", - "7.895980e+01", - "5.721970e+01", - "2.488874e+01", - "6.016289e+01", - "1.639303e+02", - "4.678023e+01", - "1.152484e+02", - "1.160281e+02", - "8.622549e+01", - "9.481026e+01", - "1.702398e+01", - "8.478288e+01", - "9.326158e+01", - "2.974394e+00", - "2.612437e+01", - "1.470013e+02", - "1.105676e+02", - "4.777192e+01", - "4.451796e+01", - "3.680515e+01", - "2.098467e+01", - "4.363519e+01", - "4.898396e+01", - "1.825130e+02", - "3.058897e+00", - "9.472452e+01", - "1.451880e+02", - "3.274580e+01", - "1.610726e+01", - "1.102346e+02", - "1.024260e+02", - "6.843472e+01", - "9.369415e+01", - "5.496869e+01", - "1.101710e+02", - "8.820111e+01", - "6.475084e+01", - "4.623735e+01", - "1.283655e+02", - "8.963607e+01", - "7.094492e+01", - "1.542196e+02", - "2.274626e+01", - "2.717561e+01", - "3.097147e+01", - "4.965206e+01", - "7.780418e+01", - "2.823817e+01", - "1.433572e+02", - "2.620189e+01", - "1.114249e+02", - "9.135704e+00", - "9.914004e+01", - "1.083443e+02", - "2.631082e+01", - "8.360195e+00", - "1.173683e+01", - "1.309509e+02", - "1.461393e+02", - "1.037465e+02", - "6.989921e+01", - "9.667002e+01", - "8.479040e+01", - "3.622162e+01", - "1.305810e+02", - "6.513885e+01", - "9.313711e+01", - "1.371509e+02", - "1.440358e+02", - "4.373111e+01", - "1.229394e+01", - "1.275776e+02", - "5.970936e+01", - "1.997507e+01", - "1.117745e+02", - "4.123154e+01", - "6.046449e+01", - "1.878319e+01", - "2.265642e+01", - "7.752459e+01", - "6.311699e+01", - "3.783814e+01", - "6.824723e+01", - "8.263347e+01", - "3.767506e+01", - "9.986463e+01", - "3.869144e+01", - "7.845191e+01", - "1.130320e+02", - "9.913839e+01", - "9.499345e+01", - "6.189721e+00", - "1.442131e+02", - "1.077306e+02", - "6.532903e+01", - "4.890351e+00", - "3.546408e+01", - "1.308733e+02", - "7.181488e+01", - "8.163729e+01", - "1.024022e+02", - "1.348382e+02", - "1.030568e+02", - "5.467807e+01", - "6.298783e+01", - "1.017706e+02", - "6.790058e+01", - "3.420674e+01", - "2.143836e+02", - "1.197267e+02", - "1.113415e+02", - "7.905046e+01", - "1.303872e+02", - "8.067368e+01", - "9.202705e+01", - "6.979864e+01", - "8.217933e+01", - "3.465417e+01", - "1.311678e+02", - "3.242047e+01", - "1.052296e+02", - "1.668890e+02", - "1.898551e+02", - "1.063137e+02", - "3.792344e+01", - "3.577113e+01", - "1.318617e+02", - "1.262028e+02", - "8.800872e+01", - "1.526506e+02", - "1.397590e+02", - "7.741296e+01", - "9.370216e+01", - "9.936494e+01", - "6.359524e+00", - "1.861053e+01", - "6.406926e+00", - "1.203795e+02", - "7.643069e+01", - "7.667473e+01", - "5.196670e+01", - "9.762350e+00", - "9.197215e+01", - "1.260550e+02", - "6.333167e+00", - "8.367098e+00", - "5.506415e+01", - "1.618957e+01", - "7.935044e+01", - "6.977297e+00", - "8.148927e+01", - "6.346696e+01", - "2.067804e+01", - "1.688943e+02", - "3.966959e+01", - "1.362502e+01", - "1.041517e+02", - "1.592825e+02", - "6.435831e+01", - "1.625751e+02", - "9.952207e+01", - "7.982046e+01", - "8.006270e+01", - "2.909544e+01", - "1.810221e+02", - "7.503272e+01", - "1.828214e+01", - "1.074339e+02", - "8.591534e+01", - "1.444397e+01", - "5.086634e+01", - "9.660376e+01", - "2.023861e+02", - "4.160570e+01", - "1.221252e+02", - "6.459978e+01", - "6.362043e+00", - "3.440990e+01", - "8.547033e+01", - "1.190951e+02", - "9.293107e+00", - "8.375074e+01", - "3.549684e+01", - "6.824070e+01", - "9.044485e+01", - "5.134553e+01", - "6.903881e+01", - "8.246847e+01", - "1.309909e+02", - "2.202066e+01", - "3.108398e+01", - "9.356083e+01", - "1.720509e+01", - "1.051340e+02", - "1.215519e+02", - "1.096759e+02", - "1.294806e+01", - "8.990092e+01", - "1.403893e+02", - "1.113481e+01", - "1.224821e+02", - "7.471405e+00", - "2.817263e+01", - "9.926061e+01", - "6.809382e+00", - "2.274387e+01", - "1.774670e+02", - "9.311669e+01", - "1.764066e+02", - "5.125723e+01", - "1.586142e+02", - "1.224945e+02", - "2.213921e+01", - "1.474038e+02", - "4.500320e+01", - "1.135177e+02", - "1.619661e+02", - "2.266054e+01", - "5.129629e+01", - "1.266715e+02", - "6.760629e+01", - "1.290053e+02", - "8.252899e+01", - "9.027936e+01", - "2.347859e+01", - "3.717210e+01", - "6.714374e+01", - "2.351338e+01", - "4.420234e+01", - "2.428805e+01", - "1.997029e+02", - "1.518116e+02", - "5.726708e+01", - "5.540165e+01", - "9.123425e+01", - "2.637715e+01", - "3.834684e+01", - "6.383971e+01", - "1.288168e+01", - "4.964459e+01", - "5.889208e+00", - "9.405086e+01", - "8.750758e+01", - "3.788106e+01", - "1.119821e+02", - "1.325710e+02", - "1.420088e+02", - "9.276210e+01", - "5.492735e+00", - "8.865213e+01", - "2.112235e+01", - "9.969556e+00", - "1.013055e+02", - "1.820965e+02", - "1.305724e+02", - "4.200180e+01", - "6.493466e+01", - "2.553480e+01", - "1.133237e+01", - "2.196391e+02", - "9.925588e+01", - "1.246127e+02", - "3.875662e+01", - "6.613199e+01", - "4.022417e+01", - "1.090670e+02", - "1.012388e+02", - "2.881189e+01", - "1.882807e+01", - "1.389138e+01", - "9.690142e+01", - "6.383478e+01", - "4.059246e+01", - "8.700975e+01", - "8.591781e+01", - "6.778978e+01", - "2.544336e+01", - "6.939966e+01", - "1.843734e+01", - "1.945012e+02", - "8.805637e+01", - "1.068547e+02", - "4.950232e+01", - "1.170557e+02", - "2.873297e+01", - "6.023801e+01", - "1.364843e+02", - "8.112651e+01", - "7.318221e+01", - "5.823202e+01", - "2.607882e+01", - "2.920296e+01", - "1.968517e+02", - "4.037587e+01", - "8.207604e+01", - "1.987121e+01", - "1.065209e+02", - "6.933605e+01", - "6.370422e+01", - "7.827133e+00", - "1.448765e+02", - "1.179444e+02", - "6.700821e+01", - "1.939356e+02", - "5.873878e+01", - "6.656515e+01", - "1.093460e+02", - "1.542784e+02", - "5.880815e+01", - "7.074605e+01", - "2.334069e+01", - "7.336312e+01", - "9.927176e+01", - "3.776223e+01", - "6.923261e+00", - "8.553423e+01", - "1.343543e+02", - "8.763797e+01", - "7.731627e+01", - "1.339393e+02", - "5.288178e+01", - "1.010166e+02", - "1.202607e+02", - "1.431114e+02", - "2.525394e+01", - "3.348258e+01", - "7.996872e+01", - "5.438011e+01", - "1.250024e+02", - "8.493728e+01", - "7.594733e+01", - "7.658029e+01", - "4.766892e+01", - "1.034773e+00", - "8.767406e+01", - "8.363477e+01", - "8.862194e+01", - "1.550219e+01", - "2.860949e+01", - "2.258338e+02", - "4.885358e+01", - "9.121681e+01", - "5.135181e+00", - "1.679575e+01", - "6.833374e+01", - "7.719397e+01", - "8.647617e+01", - "1.194109e+02", - "8.144756e+01", - "6.860888e+01", - "7.164819e+01", - "3.151004e+00", - "2.322516e+02", - "9.033155e+01", - "1.170084e+02", - "5.892419e+00", - "1.645486e+02", - "9.782218e+01", - "1.117936e+02", - "8.647765e+01", - "1.079129e+02", - "6.448887e+01", - "1.475832e+01", - "1.416685e+02", - "1.091384e+01", - "4.275744e+01", - "9.752621e+01", - "6.505459e+01", - "7.498680e+00", - "4.696161e+01", - "1.222824e+02", - "5.488711e+01", - "2.385686e+01", - "2.070242e+02", - "9.145806e+01", - "9.144532e+01", - "1.477917e+01", - "7.841738e+01", - "5.036829e+00", - "4.082130e+01", - "3.817805e+01", - "1.214776e+02", - "6.827245e+01", - "1.119938e+01", - "1.735469e+02", - "1.674050e+01", - "3.451985e+01", - "2.046595e+01", - "7.238840e+01", - "1.062197e+02", - "8.188318e+01", - "1.653461e+02", - "6.856053e+01", - "1.155174e+02", - "4.422983e+01", - "3.459596e+01", - "3.234150e+01", - "9.930586e+01", - "7.844734e+00", - "6.194263e+01", - "1.159851e+02", - "3.210953e+01", - "2.097872e+01", - "8.317013e+01", - "6.623294e+01", - "8.691199e+01", - "4.645058e+01", - "4.599188e+01", - "1.619830e+01", - "3.390842e+01", - "1.379753e+02", - "6.180261e+01", - "1.026851e+01", - "5.020765e+01", - "1.472908e+02", - "2.580712e+01", - "9.588123e+01", - "2.103722e+02", - "2.244635e+01", - "2.077610e+01", - "5.390097e+01", - "1.105262e+02", - "1.450895e+02", - "1.332817e+02", - "1.586937e+02", - "7.253823e+01", - "1.617096e+02", - "6.917610e+01", - "3.023487e+00", - "5.212706e+01", - "1.846315e+02", - "2.251553e+01", - "5.452946e+01", - "7.467863e+01", - "2.840198e+01", - "8.198172e+01", - "2.730646e+01", - "7.242245e+01", - "9.132770e+01", - "5.383690e+01", - "1.878837e+02", - "1.529812e+02", - "5.394394e+01", - "1.822609e+02", - "5.686166e+01", - "1.954498e+01", - "2.296267e+01", - "1.997808e+01", - "6.094352e+01", - "8.970497e+01", - "1.241918e+02", - "1.995520e+02", - "8.742096e+01", - "1.053757e+02", - "2.880517e+01", - "1.150060e+02", - "3.795709e+01", - "1.682872e+02", - "7.475753e+01", - "5.457836e+01", - "1.506292e+02", - "7.966820e+01", - "5.662212e+01", - "5.026694e+01", - "1.120874e+02", - "8.018878e+00", - "2.144546e+01", - "1.435999e+01", - "7.294695e+01", - "9.756899e+01", - "4.733417e+01", - "1.631209e+02", - "8.277205e+01", - "5.288111e+01", - "5.770812e+01", - "2.905161e+01", - "4.152325e+01", - "1.846582e+01", - "1.162632e+02", - "3.540538e+01", - "1.172370e+02", - "6.019475e+01", - "4.246508e+01", - "1.525221e+02", - "3.872673e+00", - "2.777975e+01", - "2.726898e+01", - "1.018289e+02", - "8.578850e+01", - "3.318374e+01", - "8.942536e+01", - "2.000945e+02", - "2.054883e+02", - "1.683544e+02", - "7.638945e+01", - "7.301932e+00", - "5.918905e+01", - "6.520958e+01", - "6.112691e+01", - "8.324964e+01", - "3.365093e+01", - "1.214969e+02", - "6.329410e+01", - "2.414413e+01", - "1.604432e+02", - "6.150342e+01", - "2.088766e+01", - "1.359838e+02", - "5.582202e+01", - "1.330109e+02", - "6.628585e+01", - "1.612884e+02", - "1.045961e+01", - "1.947320e+02", - "2.516972e+01", - "3.424496e+00", - "7.943756e+01", - "1.163145e+02", - "1.421674e+01", - "3.192011e+01", - "1.066792e+02", - "7.842819e+01", - "4.407172e+01", - "4.967730e+01", - "2.329527e+01", - "5.214758e+01", - "1.396670e+02", - "7.495564e+01", - "2.714949e+01", - "5.548294e+01", - "4.754239e+00", - "7.632846e+01", - "1.573560e+02", - "1.051019e+02", - "8.874638e+00", - "1.717724e+02", - "5.060210e+01", - "5.786356e+01", - "1.109567e+02", - "2.144723e+01", - "1.102407e+02", - "9.126703e+01", - "6.223196e+01", - "1.247989e+02", - "7.573000e+01", - "6.548233e+00", - "2.257332e+01", - "8.927828e+01", - "8.921365e+00", - "3.241647e+01", - "1.671216e+02", - "2.722400e+01", - "5.433576e+00", - "1.134211e+02", - "6.507097e+01", - "1.718647e+02", - "1.713972e+01", - "8.500852e+01", - "5.056660e+01", - "6.318361e+01", - "9.784476e+01", - "1.471955e+01", - "8.343033e+01", - "9.695792e+01", - "5.282781e+01", - "7.952855e+00", - "3.593710e+01", - "6.490945e+00", - "6.965685e+00", - "7.720006e+01", - "1.095426e+02", - "8.145874e+01", - "3.311191e+01", - "5.470699e+01", - "8.890040e+00", - "6.671613e+01", - "9.454545e+01", - "7.259361e+01", - "1.175240e+02", - "2.667202e+01", - "8.236883e+01", - "1.317451e+02", - "3.955936e+01", - "5.789111e+01", - "1.326998e+02", - "7.036753e+01", - "2.242099e+01", - "1.084199e+02", - "1.513395e+02", - "3.185323e+01", - "1.946670e+01", - "1.383419e+02", - "8.916302e+01", - "2.822900e+01", - "5.413365e+01", - "3.560960e+01", - "1.125613e+02", - "1.348763e+02", - "5.931842e+01", - "2.934329e+01", - "1.447152e+02", - "7.392228e+00", - "5.056017e+01", - "1.802834e+01", - "7.424772e+01", - "5.926085e+01", - "1.889183e+02", - "9.825564e+01", - "1.770752e+01", - "9.447298e+01", - "6.424500e+01", - "8.322536e+01", - "2.736184e+01", - "3.699690e+01", - "1.048534e+02", - "5.296889e+01", - "1.101358e+02", - "9.197494e+01", - "1.119965e+02", - "1.561650e+01", - "4.437046e+01", - "1.194464e+02", - "9.592577e+01", - "9.369324e+01", - "3.287173e+01", - "2.148653e+02", - "4.249632e+01", - "9.086709e+01", - "7.095792e+01", - "7.091760e+01", - "9.472336e+01", - "4.046061e+01", - "1.019196e+02", - "1.267177e+02", - "4.726825e+01", - "6.414740e+01", - "4.231122e+01", - "4.048894e+01", - "1.451505e+02", - "8.575786e+00", - "4.549196e+00", - "8.547284e+01", - "1.384643e+02", - "3.680647e+01", - "4.325872e+01", - "1.387012e+02", - "1.160316e+01", - "5.258440e+01", - "7.570020e+01", - "6.614418e+01", - "3.063325e+01", - "7.863878e+01", - "2.129803e+02", - "3.179008e+01", - "2.980764e+01", - "2.066467e+01", - "5.562938e+01", - "5.636098e+01", - "6.394396e+01", - "1.067826e+02", - "1.022903e+02", - "3.644843e+01", - "1.074694e+02", - "8.919762e+01", - "3.010537e+01", - "7.353873e+01", - "1.592019e+02", - "1.989784e+01", - "6.728845e+01", - "2.617085e+00", - "3.473443e+00", - "8.728735e+01", - "2.673014e+01", - "2.155038e+01", - "7.619704e+01", - "5.989474e+01", - "9.029167e+01", - "1.345811e+01", - "9.259974e+01", - "6.858602e+01", - "4.609935e+01", - "5.312484e+01", - "8.397372e+01", - "1.164636e+02", - "7.828904e+01", - "1.160030e+02", - "3.071775e+00", - "1.694211e+02", - "4.060126e+01", - "8.141662e+01", - "3.084880e+01", - "1.279772e+02", - "1.354022e+01", - "2.589748e+01", - "7.425955e+01", - "1.456897e+02", - "7.838304e+01", - "1.130963e+02", - "1.846541e+02", - "7.653108e+01", - "1.485864e+02", - "9.404262e+01", - "6.358391e+01", - "8.914261e+00", - "6.674422e+01", - "8.246115e+01", - "1.837216e+01", - "1.285718e+02", - "1.861647e+02", - "6.108352e+01", - "6.023215e+01", - "1.339817e+02", - "5.375265e+01", - "1.542516e+02", - "1.075655e+02", - "1.349242e+02", - "3.403579e+01", - "9.474999e+01", - "3.898410e+01", - "4.163615e+01", - "6.372025e+01", - "1.812971e+02", - "1.310439e+02", - "1.296727e+02", - "2.016590e+01", - "6.649051e+01", - "4.511917e+01", - "3.790052e+01", - "4.512726e+01", - "1.905684e+02", - "9.135903e+01", - "6.792104e+01", - "4.037296e+01", - "1.526348e+02", - "6.932658e+01", - "1.284142e+02", - "2.211851e+01", - "1.552195e+02", - "8.823321e+00", - "1.607107e+01", - "8.380072e+01", - "7.541692e+01", - "1.647485e+02", - "3.752992e+01", - "9.848935e+01", - "1.489410e+02", - "6.679792e+01", - "4.622696e+01", - "8.206591e+01", - "4.476506e+01", - "3.944938e+01", - "9.450175e+01", - "8.703736e+01", - "9.514262e+01", - "6.222117e+01", - "1.092272e+02", - "1.281636e+02", - "1.266158e+01", - "2.429200e+01", - "3.524544e+01", - "1.046250e+02", - "1.250254e+02", - "4.999526e+01", - "1.028513e+02", - "1.259011e+02", - "8.894188e+01", - "8.473775e+01", - "1.968334e+02", - "7.718988e+01", - "2.871997e+01", - "9.769664e+01", - "2.108791e+01", - "5.075071e+01", - "1.611448e+02", - "5.177933e+01", - "3.703991e+01", - "4.713182e+00", - "8.425251e+01", - "2.563191e+01", - "3.301619e+01", - "2.821653e+01", - "8.177371e+01", - "5.293124e+01", - "4.551921e+01", - "8.105495e+01", - "6.924681e+01", - "2.007010e+00", - "2.988395e+01", - "1.309970e+02", - "4.434254e+01", - "3.941476e+00", - "7.587395e+01", - "1.575262e+01", - "5.063331e+01", - "1.779451e+01", - "3.250512e+01", - "3.504506e+01", - "1.545710e+02", - "1.201735e+02", - "1.910257e+02", - "1.029411e+02", - "5.984175e+01", - "7.818148e+01", - "1.247150e+02", - "2.552478e+01", - "8.582344e+01", - "8.197860e+01", - "8.855817e+01", - "6.585746e+01", - "2.203504e+01", - "9.206701e+01", - "3.036256e+01", - "1.075962e+02", - "6.281204e+01", - "9.095807e+01", - "1.099802e+02", - "3.081865e+00", - "5.611180e+01", - "7.080539e+01", - "1.130874e+02", - "7.285677e+01", - "1.225796e+02", - "3.648934e+01", - "1.612884e+02", - "5.125593e+01", - "1.412124e+02", - "8.786614e+01", - "2.976044e+01", - "5.302523e+01", - "2.547946e+01", - "1.402194e+02", - "8.119285e+01", - "8.391432e+01", - "9.307882e+01", - "3.305038e+01", - "8.160664e+01", - "7.415231e+01", - "7.600355e+01", - "8.411541e+01", - "6.593432e+01", - "3.981468e+01", - "9.270209e+01", - "8.845500e+01", - "1.226935e+02", - "1.277551e+02", - "1.735650e+01", - "1.239469e+01", - "1.336182e+02", - "1.148860e+02", - "8.624656e+01", - "5.376355e+01", - "5.609628e+00", - "7.337880e+01", - "4.133569e+01", - "1.359278e+02", - "8.222438e+01", - "9.388945e+01", - "8.270534e+01", - "3.218131e+01", - "1.163555e+02", - "8.822150e+01", - "1.607292e+01", - "8.592623e+01", - "1.652925e+02", - "3.715749e+01", - "7.986911e+01", - "2.753122e+01", - "9.343209e+01", - "1.025859e+02", - "4.710421e+01", - "1.681206e+02", - "3.678004e+00", - "4.113233e+01", - "6.778224e+01", - "1.640196e+02", - "5.987954e+01", - "1.593075e+01", - "3.052366e+01", - "1.843468e+02", - "6.555403e+01", - "2.464473e+00", - "1.082858e+02", - "1.859111e+01", - "9.054078e+01", - "4.313937e+01", - "4.163845e+01", - "1.638327e+01", - "9.863915e+01", - "1.129168e+02", - "1.704660e+02", - "9.953010e+01", - "1.886437e+01", - "1.178978e+02", - "5.620601e+01", - "1.687017e+02", - "2.549281e+01", - "4.165784e+01", - "6.019112e+01", - "9.101637e+01", - "7.792176e+01", - "1.089911e+02", - "9.484697e+01", - "3.741248e+01", - "1.165233e+02", - "6.953091e+01", - "7.613617e+01", - "1.584718e+02", - "6.910680e+01", - "1.608306e+02", - "1.054810e+01", - "5.277684e+01", - "2.174467e+01", - "3.084978e+01", - "5.883386e+01", - "6.760782e+01", - "1.417168e+02", - "1.435911e+02", - "1.216615e+01", - "1.082337e+01", - "1.418624e+02", - "7.401293e+01", - "4.102043e+01", - "4.763717e+01", - "1.429316e+02", - "5.855088e+01", - "4.002463e+01", - "1.352689e+02", - "1.065216e+02", - "3.502008e+01", - "5.813050e+01", - "4.512631e+01", - "3.952993e+01", - "5.228770e+01", - "2.573510e+01", - "3.282949e+01", - "3.377781e+01", - "4.980857e+01", - "1.630793e+02", - "1.129873e+02", - "1.327956e+02", - "3.799298e+01", - "7.028715e+01", - "3.708792e+01", - "7.257760e+01", - "6.878267e+01", - "6.251136e+01", - "1.091764e+02", - "7.120334e+01", - "4.890654e+01", - "7.199002e+01", - "2.391495e+01", - "8.922299e+01", - "2.142418e+02", - "1.164657e+02", - "6.869337e+01", - "2.530673e+01", - "5.585135e+01", - "2.758883e+01", - "7.756654e+01", - "1.054395e+02", - "9.446609e+01", - "8.402280e+00", - "7.319974e+01", - "4.305362e+01", - "8.274850e+01", - "5.219315e+01", - "9.125660e+01", - "5.857084e+01", - "1.198466e+02", - "1.273725e+02", - "8.300835e+01", - "1.467905e+02", - "1.467588e+02", - "9.811781e+01", - "6.092033e+01", - "1.425971e+02", - "1.201568e+02", - "5.172981e+01", - "9.395220e+01", - "1.276065e+02", - "5.545578e+01", - "1.256033e+02", - "2.393530e+01", - "1.229237e+01", - "1.264205e+02", - "1.179647e+02", - "2.643729e+01", - "4.010674e+01", - "1.886401e+02", - "4.736288e+01", - "2.714766e+01", - "1.537110e+02", - "7.166166e+01", - "1.136124e+02", - "4.449967e+01", - "1.671475e+01", - "4.689160e+01", - "4.274550e+01", - "2.009882e+01", - "1.232965e+02", - "7.343965e+01", - "1.067386e+02", - "7.820217e+01", - "4.445931e+01", - "5.635935e+01", - "1.511743e+02", - "4.556464e+01", - "8.788247e+01", - "2.888351e+01", - "6.651104e+01", - "1.771920e+02", - "7.932451e+01", - "8.568045e+01", - "1.633715e+01", - "7.184718e+01", - "2.346366e+01", - "2.550537e+00", - "1.076357e+02", - "5.306898e+01", - "7.714016e+01", - "4.759804e+01", - "7.623101e+01", - "4.925818e+01", - "1.422759e+01", - "5.350872e+01", - "5.625268e+01", - "1.105390e+02", - "1.163974e+02", - "6.354546e+01", - "1.156355e+02", - "6.139707e+01" - ], - "marker": { - "size": 2, - "color": "rgb(150, 48, 48)" - } - } - ], - "layout": { - "scene": { - "xaxis": { - "type": "linear", - "title": { - "text": "a" - } - }, - "yaxis": { - "type": "linear", - "title": { - "text": "b" - } - }, - "camera": { - "up": { - "x": 0, - "y": 0, - "z": 1 - }, - "eye": { - "x": 1.4652865511236308, - "y": 1.579683404347503, - "z": 0.21221608121275834 - }, - "center": { - "x": 0, - "y": 0, - "z": 0 - }, - "projection": { - "type": "perspective" - } - }, - "aspectmode": "auto", - "aspectratio": { - "x": 1, - "y": 1, - "z": 1 - } - }, - "title": { - "text": "Hypergeometric 1F1(a, b, z)

\nIncalculable Points for b < 0 and a,z > 0 (which result in an evaluation_error being raised).
" - }, - "xaxis": { - "range": [ - -1, - 6 - ], - "autorange": true - }, - "yaxis": { - "range": [ - -1, - 4 - ], - "autorange": true - }, - "autosize": true, - "template": { - "data": { - "bar": [ - { - "type": "bar", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "table": [ - { - "type": "table", - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - } - } - ], - "carpet": [ - { - "type": "carpet", - "aaxis": { - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "endlinecolor": "#2a3f5f", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "endlinecolor": "#2a3f5f", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - } - } - ], - "mesh3d": [ - { - "type": "mesh3d", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "contour": [ - { - "type": "contour", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "heatmap": [ - { - "type": "heatmap", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "scatter": [ - { - "type": "scatter", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "surface": [ - { - "type": "surface", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "heatmapgl": [ - { - "type": "heatmapgl", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "histogram": [ - { - "type": "histogram", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - }, - "type": "parcoords" - } - ], - "scatter3d": [ - { - "type": "scatter3d", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scattergl": [ - { - "type": "scattergl", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "choropleth": [ - { - "type": "choropleth", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "scattergeo": [ - { - "type": "scattergeo", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "histogram2d": [ - { - "type": "histogram2d", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "scatterpolar": [ - { - "type": "scatterpolar", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "contourcarpet": [ - { - "type": "contourcarpet", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "scattercarpet": [ - { - "type": "scattercarpet", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scattermapbox": [ - { - "type": "scattermapbox", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scatterpolargl": [ - { - "type": "scatterpolargl", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scatterternary": [ - { - "type": "scatterternary", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "histogram2dcontour": [ - { - "type": "histogram2dcontour", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ] - }, - "layout": { - "geo": { - "bgcolor": "white", - "showland": true, - "lakecolor": "white", - "landcolor": "white", - "showlakes": true, - "subunitcolor": "#C8D4E3" - }, - "font": { - "color": "#2a3f5f" - }, - "polar": { - "bgcolor": "white", - "radialaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8" - }, - "angularaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8" - } - }, - "scene": { - "xaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - }, - "yaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - }, - "zaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "automargin": true, - "zerolinecolor": "#EBF0F8", - "zerolinewidth": 2 - }, - "yaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "automargin": true, - "zerolinecolor": "#EBF0F8", - "zerolinewidth": 2 - }, - "ternary": { - "aaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "baxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "caxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "bgcolor": "white" - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#19d3f3", - "#e763fa", - "#fecb52", - "#ffa15a", - "#ff6692", - "#b6e880" - ], - "hovermode": "closest", - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0508b8" - ], - [ - 0.0893854748603352, - "#1910d8" - ], - [ - 0.1787709497206704, - "#3c19f0" - ], - [ - 0.2681564245810056, - "#6b1cfb" - ], - [ - 0.3575418994413408, - "#981cfd" - ], - [ - 0.44692737430167595, - "#bf1cfd" - ], - [ - 0.5363128491620112, - "#dd2bfd" - ], - [ - 0.6256983240223464, - "#f246fe" - ], - [ - 0.7150837988826816, - "#fc67fd" - ], - [ - 0.8044692737430168, - "#fe88fc" - ], - [ - 0.8938547486033519, - "#fea5fd" - ], - [ - 0.9832402234636871, - "#febefe" - ], - [ - 1, - "#fec3fe" - ] - ], - "sequentialminus": [ - [ - 0, - "#0508b8" - ], - [ - 0.0893854748603352, - "#1910d8" - ], - [ - 0.1787709497206704, - "#3c19f0" - ], - [ - 0.2681564245810056, - "#6b1cfb" - ], - [ - 0.3575418994413408, - "#981cfd" - ], - [ - 0.44692737430167595, - "#bf1cfd" - ], - [ - 0.5363128491620112, - "#dd2bfd" - ], - [ - 0.6256983240223464, - "#f246fe" - ], - [ - 0.7150837988826816, - "#fc67fd" - ], - [ - 0.8044692737430168, - "#fe88fc" - ], - [ - 0.8938547486033519, - "#fea5fd" - ], - [ - 0.9832402234636871, - "#febefe" - ], - [ - 1, - "#fec3fe" - ] - ] - }, - "plot_bgcolor": "white", - "paper_bgcolor": "white", - "shapedefaults": { - "line": { - "width": 0 - }, - "opacity": 0.4, - "fillcolor": "#506784" - }, - "annotationdefaults": { - "arrowhead": 0, - "arrowcolor": "#506784", - "arrowwidth": 1 - } - }, - "themeRef": "PLOTLY_WHITE" - } - }, - "frames": [] -} \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b.js boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b.js --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b.js 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/negative_b.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,8765 +0,0 @@ -var negative_b = { - "data": [ - { - "mode": "markers", - "name": ">256", - "type": "scatter3d", - "xsrc": "JohnMaddock:33:62cd67", - "x": [ - "97.9706", - "807.792", - "0.12818", - "859.836", - "541.109", - "958.485", - "23.4321", - "0.924795", - "1.0067", - "14.7577", - "101.478", - "51.3678", - "22.8188", - "101.891", - "17.4088", - "32.653", - "0.338324", - "112.535", - "70.6679", - "5.05365", - "40.7181", - "12.8456", - "68.2275", - "6.12024", - "1.62803", - "0.393336", - "54.5336", - "451.121", - "700.699", - "24.2222", - "20.2484", - "25.7061", - "12.7182", - "10.0338", - "0.406719", - "40.5209", - "22.7616", - "0.020755", - "19.7315", - "39.2736", - "54.3228", - "110.044", - "7.56778", - "261.608", - "475.346", - "17.4757", - "21.5877", - "70.3167", - "58.2005", - "58.6052", - "72.7821", - "92.8197", - "19.5857", - "0.0866405", - "0.00309106", - "0.375523", - "440.841", - "60.7767", - "47.0201", - "0.196927", - "85.1587", - "73.2241", - "1.78498", - "25.7059", - "1.84173", - "24.0796", - "19.4403", - "52.2485", - "24.0336", - "1.42061", - "5.92653", - "299.879", - "20.2051", - "2.0462", - "24.92", - "207.27", - "29.6429", - "1.32238", - "55.8552", - "0.264894", - "67.6854", - "0.130159", - "38.824", - "51.0339", - "72.3914", - "105.424", - "2.5506", - "252.817", - "47.7949", - "36.7431", - "935.095", - "67.5982", - "64.4572", - "45.2944", - "1.13436", - "62.1402", - "404.18", - "0.256333", - "54.2813", - "1.39022", - "42.8969", - "395.533", - "0.497493", - "16.8299", - "21.6438", - "26.7", - "22.9539", - "275.111", - "49.6394", - "52.2691", - "0.721734", - "25.1475", - "25.6103", - "26.8395", - "265.747", - "76.2523", - "69.9567", - "743.443", - "665.94", - "442.942", - "29.0681", - "34.1364", - "459.285", - "29.587", - "27.4387", - "574.8", - "33.2006", - "826.449", - "29.8224", - "471.937", - "32.3161", - "30.6118", - "988.324", - "41.5708", - "302.896", - "991.216", - "38.9277", - "112.1", - "42.993", - "34.0714", - "739.822", - "50.9489", - "39.1694", - "35.6352", - "45.8485", - "373.783", - "390.821", - "767.746", - "49.003" - ], - "ysrc": "JohnMaddock:33:35f206", - "y": [ - "-71.5015", - "-937.727", - "-148.784", - "-993.189", - "-919.683", - "-925.322", - "-546.926", - "-520.378", - "-379.796", - "-256.98", - "-171.764", - "-770.667", - "-132.492", - "-282.735", - "-561.442", - "-265.31", - "-796.032", - "-210.707", - "-696.792", - "-279.408", - "-700.834", - "-397.039", - "-780.6", - "-131.545", - "-601.514", - "-140.91", - "-470.696", - "-203.766", - "-111.772", - "-133.684", - "-296.96", - "-166.591", - "-470.483", - "-375.149", - "-806.783", - "-237.056", - "-838.252", - "-703.804", - "-709.803", - "-563.584", - "-298.672", - "-268.875", - "-267.858", - "-252.847", - "-202.175", - "-489.902", - "-489.775", - "-443.939", - "-994.179", - "-292.343", - "-452.23", - "-473.451", - "-273.513", - "-251.554", - "-607.107", - "-660.843", - "-187.768", - "-381.591", - "-530.886", - "-625.335", - "-245.048", - "-254.013", - "-781.152", - "-391.81", - "-559.839", - "-267.241", - "-310.858", - "-486.122", - "-769.438", - "-479.303", - "-455.735", - "-123.01", - "-521.729", - "-655.45", - "-372.444", - "-147.731", - "-431.078", - "-968.741", - "-846.727", - "-326.289", - "-814.676", - "-797.014", - "-688.438", - "-718.162", - "-484.208", - "-103.383", - "-580.85", - "-205.003", - "-915.532", - "-505.93", - "-143.565", - "-824.779", - "-887.848", - "-974.959", - "-964.875", - "-897.969", - "-100.282", - "-830.802", - "-118.038", - "-968.734", - "-713.35", - "-139.133", - "-977.575", - "-863.629", - "-933.647", - "-916.159", - "-616.514", - "-183.665", - "-998.544", - "-738.621", - "-886.719", - "-981.755", - "-845.845", - "-745.184", - "-93.1038", - "-416.98", - "-706.383", - "-239.772", - "-93.7999", - "-75.8236", - "-694.152", - "-513.156", - "-134.74", - "-902.067", - "-749.486", - "-212.226", - "-909.451", - "-681.397", - "-585.517", - "-221.028", - "-981.753", - "-915.339", - "-686.161", - "-485.836", - "-176.034", - "-233.705", - "-934.255", - "-238.821", - "-420.543", - "-852.039", - "-222.807", - "-230.738", - "-871.783", - "-931.003", - "-493.702", - "-203.039", - "-204.453", - "-209.055", - "-367.08" - ], - "zsrc": "JohnMaddock:33:1ffb26", - "z": [ - "3.16776", - "130.414", - "58.4452", - "144.443", - "115.546", - "135.402", - "120.543", - "262.879", - "146.514", - "65.8585", - "19.9019", - "177.272", - "26.7604", - "43.7679", - "145.802", - "56.6504", - "261.211", - "27.3995", - "152.213", - "73.6849", - "166.416", - "97.9092", - "174.461", - "39.3684", - "179.21", - "334.502", - "100.747", - "2.33289", - "2.09589", - "25.6333", - "60.4158", - "32.313", - "123.698", - "101.047", - "327.265", - "46.2097", - "193.101", - "300.433", - "177.228", - "128.633", - "54.3609", - "36.6877", - "69.0074", - "4.46661", - "2.46604", - "122.454", - "103.039", - "86.8173", - "233.046", - "53.6553", - "89.8742", - "85.17", - "64.3386", - "94.003", - "172.603", - "259.459", - "1.9955", - "74.0527", - "115.56", - "176.42", - "37.1845", - "39.1864", - "235.682", - "73.4287", - "190.481", - "54.4536", - "75.1965", - "103.193", - "176.461", - "160.313", - "123.219", - "2.78464", - "124.122", - "191.951", - "86.6424", - "9.61716", - "101.827", - "396.601", - "195.675", - "121.25", - "179.288", - "285.84", - "159.84", - "167.081", - "97.1956", - "6.02893", - "162.091", - "5.51329", - "218.044", - "113.672", - "0.787617", - "186.355", - "201.002", - "234.824", - "401.314", - "207.523", - "1.45838", - "301.819", - "11.9777", - "314.856", - "170.329", - "5.17934", - "415.175", - "228.095", - "244.891", - "235.02", - "148.417", - "4.06179", - "236.405", - "172.763", - "310.219", - "240.359", - "201.274", - "180.339", - "2.55724", - "75.1149", - "149.544", - "1.98615", - "1.45993", - "1.323", - "157.42", - "108.766", - "2.24246", - "198.283", - "181.102", - "2.54027", - "204.049", - "43.0241", - "134.966", - "3.67872", - "231.972", - "204.592", - "38.1598", - "92.4626", - "4.61168", - "1.79906", - "199.847", - "29.5675", - "74.9605", - "198.872", - "2.62379", - "36.9312", - "207.452", - "222.144", - "89.8653", - "4.66847", - "4.54885", - "2.34573", - "71.0168" - ], - "marker": { - "size": 3, - "color": "rgb(170, 73, 73)" - } - }, - { - "mode": "markers", - "name": "128-256", - "type": "scatter3d", - "xsrc": "JohnMaddock:35:1f9da6", - "x": [ - "407.688", - "396.954", - "555.969", - "45.9139", - "250.089", - "26.5828", - "41.8661", - "633.867", - "291.236", - "473.493", - "623.271", - "119.162", - "731.272", - "440.489", - "285.777", - "833.602", - "195.47", - "430.987", - "813.958", - "472.864", - "972.544", - "291.263", - "338.863", - "69.2377", - "89.0501", - "739.011", - "470.194", - "617.187", - "483.589", - "840.352", - "697.13", - "169.436", - "419.368", - "530.854", - "165.819", - "556.905", - "483.902", - "224.999", - "982.576", - "962.609", - "731.071", - "393.106", - "248.355", - "257.862", - "65.4861", - "751.063", - "913.258", - "492.628", - "162.288", - "87.9868", - "154.756", - "265.289", - "21.6302", - "393.487", - "152.499", - "234.499", - "882.379", - "442.163", - "524.291", - "221.827", - "795.235", - "234.764", - "239.433", - "253.499", - "932.292", - "108.107", - "575.744", - "405.122", - "638.731", - "548.816", - "116.679", - "189.614", - "353.827", - "675.493", - "156.124", - "631.636", - "165.052", - "695.008", - "915.973", - "488.267", - "820.847", - "534.651", - "519.22", - "391.08", - "727.038", - "245.886", - "728.32", - "83.5018", - "586.517", - "267.873", - "55.1778", - "158.397", - "916.821", - "366.839", - "291.015", - "925.142", - "444.709", - "545.041", - "433.346", - "401.554", - "14.3717", - "943.794", - "87.1919", - "517.231", - "342.907", - "947.457", - "237.295", - "687.578", - "773.346", - "379.128", - "543.747", - "939.224", - "692.845", - "832.581", - "158.423", - "611.739", - "712.774", - "100.059", - "596.942", - "34.5082", - "315.193", - "648.744", - "778.352", - "98.2019", - "2.58226", - "837.834", - "1.27779", - "998.403", - "62.2222", - "498.369", - "86.8098", - "390.985", - "333.782", - "580.325", - "977.37", - "481.168", - "897.862", - "87.9217", - "979.749", - "1.02139", - "348.319", - "13.9117", - "562.583", - "195.192", - "321.265", - "376.678", - "486.026", - "187.494", - "740.11", - "292.196", - "376.31", - "602.321", - "106.576", - "553.478", - "25.2145", - "191.856", - "576.934", - "821.097", - "910.819", - "531.9", - "153.781", - "611.144", - "473.46", - "873.515", - "186.14", - "878.074", - "451.772", - "576.033", - "479.92", - "463.386", - "56.3348", - "54.8704", - "617.813", - "682.411", - "93.8678", - "550.503", - "690.556", - "86.4356", - "495.265", - "284.407", - "495.134", - "568.313", - "566.827", - "832.449", - "794.76", - "295.244", - "358.446", - "896.635", - "526.268", - "561.782", - "7.31435", - "421.468", - "487.191", - "849.779", - "924.089", - "566.379", - "329.644", - "353.353", - "551.87", - "854.556", - "241.533", - "578.896", - "452.891", - "830.127", - "906.662", - "639.948", - "121.075", - "391.282", - "381.787", - "932.564", - "682.865", - "497.796", - "833.057", - "462.987", - "744.833", - "205.005", - "522.868", - "234.251", - "430.114", - "359.867", - "857.386", - "68.1709", - "898.918", - "475.901", - "439.444", - "844.358", - "916.488", - "586.496", - "503.493", - "783.618", - "678.272", - "181.752", - "487.473", - "753.335", - "741.105", - "185.426", - "626.321", - "109.907", - "0.368326", - "49.2328", - "297.739", - "986.146", - "646.397", - "875.534", - "262.835", - "270.544", - "84.4022", - "189.85", - "407.525", - "251.925", - "115.37", - "80.9409", - "547.509", - "760.635", - "368.615", - "324.829", - "760.586", - "445.304", - "336.192", - "195.239", - "762.8", - "757.304", - "260.613", - "731.412", - "913.967", - "428.563", - "576.432", - "691.502", - "913.475", - "82.7861", - "239.373", - "370.218", - "841.908", - "822.477", - "443.495", - "69.6174", - "166.253", - "517.115", - "255.65", - "129.627", - "469.022", - "894.457", - "408.566", - "343.956", - "625.285", - "104.678", - "807.919", - "12.2906", - "653.537", - "972.547", - "381.601", - "367.461", - "228.236", - "883.063", - "866.89", - "331.778", - "88.1375", - "161.324", - "927.068", - "543.661", - "593.523", - "6.80434", - "257.72", - "945.835", - "139.682", - "613.111", - "613.004", - "678.478", - "568.02", - "51.6197", - "361.64", - "946.205", - "187.737", - "551.164", - "560.819", - "595.314", - "559.218", - "674.739", - "758.245", - "267.236", - "928.582", - "247.247", - "26.6183", - "641.338", - "522.843", - "617.618", - "723.453", - "713.475", - "141.737", - "339.495", - "281.835", - "522.793", - "451.526", - "441.91", - "336.342", - "175.187", - "261.321", - "615.395", - "994.824", - "902.595", - "728.643", - "187.718", - "294.067", - "412.466", - "0.853717", - "217.768", - "824.102", - "860.178", - "917.882", - "570.038", - "338.225", - "149.72", - "937.09", - "661.155", - "645.281", - "42.5539", - "175.088", - "510.654", - "138.775", - "412.633", - "275.891", - "687.009", - "251.09", - "829.746", - "625.187", - "781.264", - "484.404", - "915.351", - "146.69", - "937.887", - "243.943", - "345.276", - "279.503", - "831", - "474.923", - "306.47", - "538.017", - "748.464", - "212.026", - "896.967", - "337.443", - "194.074", - "700.747", - "743.612", - "851.16", - "668.355", - "477.765", - "584.712", - "861.875", - "750.033", - "232.277", - "936.654", - "989.198", - "319.109", - "367.505", - "606.343", - "464.794", - "205.083", - "723.959", - "369.763", - "930.293", - "859.369", - "507.879", - "564.643", - "973.446", - "950.132", - "81.753", - "435.117", - "507.686", - "808.698", - "805.787", - "436.439", - "646.369", - "602.1", - "492.833", - "55.6428", - "30.511", - "916.06", - "145.249", - "745.536", - "276.942", - "457.969", - "183.067", - "536.412", - "592.44", - "835.542", - "331.806", - "770.688", - "388.757", - "547.713", - "361.629", - "167.99", - "751.916", - "736.696", - "290.387", - "749.309", - "361.439", - "854.492", - "977.604", - "675.26", - "862.401", - "356.602", - "584.178", - "449.144", - "820.561", - "767.751", - "389.607", - "704.251", - "946.871", - "429.1", - "872.691", - "692.392", - "350.861", - "613.809", - "491.008", - "939.014", - "193.088", - "692.447", - "697.71", - "226.105", - "505.171", - "603.692", - "877.904", - "602.834", - "373.655", - "644.712", - "506.234", - "178.176", - "228.602", - "478.891", - "235.683", - "994.794", - "129.758", - "701.868", - "35.5497", - "943.114", - "422.455", - "467.954", - "901.12", - "765.349", - "703.748", - "747.315", - "940.995", - "917.211", - "913.834", - "333.39", - "711.487", - "515.453", - "501.989", - "656.524", - "14.9275", - "911.02", - "976.793", - "795.433", - "582.234", - "259.428", - "483.817", - "429.661", - "405.25", - "298.925", - "325.867", - "278.723", - "475.716", - "278.523", - "459.177", - "382.808", - "41.3585", - "128.26", - "35.5227", - "677.717", - "774.373", - "735.915", - "644.352", - "927.389", - "813.297", - "870.236", - "290.237", - "7.65258", - "457.099", - "443.412", - "116.943", - "784.171", - "230.159", - "336.734", - "748.299", - "258.876", - "281.965", - "629.932", - "281.935", - "628.883", - "501.955", - "987.556", - "584.568", - "658.794", - "933.916", - "574.909", - "545.906", - "745.375", - "897.718", - "600.895", - "202.317", - "663.716", - "647.008", - "774.833", - "684.23", - "698.321", - "604.542", - "211.544", - "938.731", - "507.969", - "883.242", - "751.61", - "797.07", - "331.258", - "858.826", - "1.15655", - "731.803", - "353.321", - "468.832", - "821.977", - "728.03", - "934.544", - "774.65", - "206.481", - "310.293", - "908.293", - "532.363", - "310.251", - "464.379", - "723.652", - "636.137", - "366.827", - "499.237", - "595.516", - "92.4437", - "189.493", - "616.536", - "872.483", - "493.807", - "690.294", - "701.856", - "855.229", - "878.377", - "52.5048", - "269.466", - "969.552", - "834.539", - "697.422", - "955.317", - "244.262", - "85.2663", - "535.078", - "952.135", - "222.015", - "334.952", - "169.421", - "400.183", - "722.11", - "658.756", - "390.242", - "451.862", - "913.986", - "122.33", - "16.8036", - "556.213", - "435.08", - "380.647", - "26.7908", - "18.857", - "917.871", - "5.97524", - "263.051", - "499.292", - "545.967", - "290.155", - "552.103", - "944.415", - "541.597", - "708.07", - "255.353", - "606.676", - "805.847", - "953.819", - "826.808", - "786.468", - "605.442", - "712.675", - "585.103", - "628.241", - "17.8621", - "366.448", - "601.006", - "375.447", - "744.052", - "504.349", - "944.501", - "460.624", - "600.71", - "290.191", - "760.547", - "880.877", - "561.717", - "17.9378" - ], - "ysrc": "JohnMaddock:35:e98ba1", - "y": [ - "-876.814", - "-458.469", - "-690.09", - "-725.275", - "-161.915", - "-870.876", - "-887.804", - "-904.858", - "-517.895", - "-559.728", - "-716.233", - "-941.014", - "-593.115", - "-966.594", - "-928.373", - "-509.151", - "-844.878", - "-815.633", - "-763.835", - "-908.629", - "-960.476", - "-624.154", - "-682.958", - "-536.456", - "-795.028", - "-904.126", - "-790.766", - "-888.743", - "-590.477", - "-849.542", - "-511.819", - "-886.35", - "-451.579", - "-892.917", - "-830.146", - "-530.462", - "-770.121", - "-947.897", - "-856.773", - "-932.789", - "-927.557", - "-801.483", - "-819.498", - "-909.86", - "-752.304", - "-921.872", - "-891.349", - "-905.038", - "-722.718", - "-986.98", - "-912.357", - "-900.057", - "-778.341", - "-751.184", - "-788.786", - "-743.863", - "-512.022", - "-730.055", - "-833.062", - "-748.8", - "-893.874", - "-785.269", - "-953.78", - "-848.155", - "-700.707", - "-542.035", - "-690.257", - "-717.702", - "-533.517", - "-829.775", - "-868.926", - "-649.213", - "-752.324", - "-785.945", - "-712.437", - "-855.684", - "-930.717", - "-961.948", - "-711.512", - "-977.884", - "-989.02", - "-671.322", - "-854.586", - "-486.045", - "-938.88", - "-914.671", - "-524.479", - "-874.078", - "-675.905", - "-604.95", - "-642.246", - "-897.482", - "-497.727", - "-878.591", - "-899.674", - "-966.066", - "-684.866", - "-258.235", - "-832.236", - "-940.662", - "-928.264", - "-972.557", - "-743.584", - "-834.129", - "-858.773", - "-696.582", - "-612.125", - "-806.508", - "-785.173", - "-941.061", - "-678.229", - "-782.211", - "-984.642", - "-785.551", - "-826.736", - "-958.181", - "-917.364", - "-845.43", - "-494.072", - "-944.323", - "-867.18", - "-578.766", - "-658.149", - "-836.83", - "-56.7106", - "-891.743", - "-975.101", - "-494.26", - "-920.115", - "-758.329", - "-774.108", - "-944.607", - "-798.237", - "-724.268", - "-538.198", - "-793.406", - "-835.637", - "-744.121", - "-987.475", - "-97.7715", - "-949.986", - "-957.068", - "-835.453", - "-924.713", - "-812.302", - "-811.963", - "-628.758", - "-904.091", - "-854.555", - "-968.668", - "-678.514", - "-673.538", - "-922.591", - "-930.066", - "-966.611", - "-733.269", - "-904.623", - "-502.33", - "-631.834", - "-796.036", - "-748.634", - "-536.689", - "-917.963", - "-961.196", - "-738.887", - "-824.739", - "-564.493", - "-947.804", - "-933.465", - "-873.681", - "-795.468", - "-923.814", - "-995.763", - "-952.267", - "-758.915", - "-839.919", - "-581.215", - "-644.688", - "-648.983", - "-971.432", - "-963.937", - "-848.155", - "-685.26", - "-599.125", - "-967.939", - "-871.685", - "-926.688", - "-646.99", - "-888.884", - "-702.569", - "-957.133", - "-679.993", - "-978.549", - "-582.796", - "-733.521", - "-661.081", - "-500.349", - "-849.02", - "-895.79", - "-760.274", - "-992.354", - "-659.758", - "-752.701", - "-743.884", - "-984.462", - "-800.471", - "-989.179", - "-718.79", - "-742.345", - "-702.787", - "-677.057", - "-913.599", - "-877.597", - "-530.558", - "-743.087", - "-718.631", - "-939.321", - "-650.688", - "-925.771", - "-462.631", - "-921.388", - "-822.553", - "-819.195", - "-995.399", - "-553.544", - "-612.279", - "-698.675", - "-641.136", - "-635.036", - "-617.039", - "-831.05", - "-622.723", - "-683.051", - "-863.396", - "-779.126", - "-740.885", - "-623.726", - "-786.893", - "-605.736", - "-603.108", - "-484.203", - "-924.171", - "-579.525", - "-856.479", - "-965.163", - "-966.625", - "-673.81", - "-777.172", - "-880.943", - "-929.591", - "-951.621", - "-844.727", - "-860.953", - "-796.017", - "-798.143", - "-757.996", - "-992.738", - "-917.706", - "-784.167", - "-652.852", - "-727.91", - "-793.274", - "-862.57", - "-669.315", - "-967.537", - "-816.924", - "-871.193", - "-608.85", - "-839.396", - "-661.474", - "-621.812", - "-720.822", - "-769.891", - "-915.415", - "-587.451", - "-853.401", - "-908.13", - "-775.809", - "-945.202", - "-965.502", - "-915.901", - "-872.356", - "-832.342", - "-923.519", - "-868.472", - "-948.721", - "-730.827", - "-824.926", - "-811.056", - "-953.123", - "-836.263", - "-766.905", - "-761.928", - "-748.838", - "-545.068", - "-982.459", - "-809.419", - "-860.807", - "-570.487", - "-959.78", - "-990.951", - "-991.703", - "-980.05", - "-739.814", - "-946.76", - "-983.326", - "-628.127", - "-871.042", - "-519.014", - "-828.799", - "-461.92", - "-471.65", - "-933.966", - "-859.753", - "-760.311", - "-793.767", - "-859.085", - "-760.84", - "-620.857", - "-958.375", - "-962.004", - "-988.546", - "-901.013", - "-745.394", - "-672.497", - "-706.649", - "-841.881", - "-789.954", - "-709.399", - "-788.658", - "-643.472", - "-842.263", - "-992.05", - "-912.472", - "-750.268", - "-950.785", - "-989.02", - "-646.744", - "-667.733", - "-835.092", - "-973.441", - "-942.866", - "-933.803", - "-772.742", - "-47.218", - "-846.511", - "-833.536", - "-908.491", - "-659.114", - "-937.908", - "-950.303", - "-916.357", - "-926.663", - "-940.538", - "-497.944", - "-921.305", - "-910.956", - "-863.698", - "-922.879", - "-916.997", - "-750.249", - "-879.813", - "-791.509", - "-936.445", - "-577.48", - "-811.943", - "-818.073", - "-982.831", - "-601.049", - "-835.437", - "-885.775", - "-927.886", - "-959.149", - "-881.711", - "-949.988", - "-716.784", - "-677.095", - "-936.467", - "-920.056", - "-708.301", - "-836.878", - "-650.941", - "-744.493", - "-848.037", - "-908.274", - "-682.232", - "-924.279", - "-869.169", - "-866.985", - "-527.901", - "-889.457", - "-760.896", - "-731.362", - "-827.824", - "-735.829", - "-547.651", - "-765.68", - "-752.608", - "-756.72", - "-807.243", - "-634.613", - "-821.909", - "-693.043", - "-569.06", - "-892.676", - "-760.543", - "-994.368", - "-676.811", - "-698.296", - "-941.056", - "-660.277", - "-978.424", - "-875.406", - "-984.446", - "-820.253", - "-865.921", - "-963.864", - "-768.392", - "-820.08", - "-939.035", - "-888.293", - "-962.312", - "-946.93", - "-816.161", - "-887.425", - "-449.353", - "-589.669", - "-962.589", - "-782.22", - "-751.745", - "-996.197", - "-876.174", - "-825.135", - "-790.366", - "-790.411", - "-693.515", - "-824.909", - "-758.463", - "-637.357", - "-674.17", - "-597.878", - "-967.496", - "-848.629", - "-919.74", - "-854.69", - "-874.444", - "-879.774", - "-954.722", - "-938.591", - "-935.259", - "-797.371", - "-798.472", - "-858.503", - "-955.614", - "-949.395", - "-993.473", - "-988.519", - "-601.451", - "-868.318", - "-791.037", - "-733.096", - "-744.931", - "-797.784", - "-853.884", - "-557.031", - "-798.641", - "-921.952", - "-738.193", - "-883.886", - "-870.316", - "-746.098", - "-960.305", - "-771.351", - "-985.592", - "-815.931", - "-953.065", - "-870.388", - "-932.868", - "-641.807", - "-618.761", - "-826.078", - "-994.78", - "-750.382", - "-989.903", - "-973.186", - "-982.224", - "-703.806", - "-807.549", - "-836.793", - "-769.163", - "-850.705", - "-812.834", - "-697.767", - "-782.723", - "-866.835", - "-874.366", - "-667.491", - "-927.395", - "-798.126", - "-845.429", - "-961.185", - "-953.772", - "-906.244", - "-683.577", - "-812.942", - "-903.735", - "-908.391", - "-966.994", - "-984.321", - "-884.641", - "-907.387", - "-914.416", - "-901.937", - "-910.444", - "-893.724", - "-938.594", - "-701.875", - "-860.866", - "-860.347", - "-920.99", - "-896.507", - "-809.772", - "-755.458", - "-769.505", - "-685.921", - "-914.721", - "-901.095", - "-726.893", - "-825.639", - "-959.315", - "-998.718", - "-660.737", - "-742.557", - "-930.515", - "-801.763", - "-962.197", - "-963.741", - "-958.41", - "-859.527", - "-955.045", - "-868.776", - "-766.98", - "-796.922", - "-797.317", - "-898.166", - "-931.341", - "-658.069", - "-936.525", - "-862.294", - "-839.982", - "-836.413", - "-982.167", - "-803.476", - "-887.08", - "-867.388", - "-191.168", - "-970.389", - "-930.368", - "-853.664", - "-159.161", - "-826.844", - "-238.12", - "-732.453", - "-963.383", - "-972.942", - "-972.781", - "-977.311", - "-847.08", - "-798.357", - "-716.087", - "-703.45", - "-863.398", - "-919.929", - "-953.283", - "-992.611", - "-970.637", - "-850.614", - "-877.017", - "-797.001", - "-935.665", - "-881.777", - "-918.7", - "-918.643", - "-629.704", - "-876.331", - "-790.326", - "-955.768", - "-911.22", - "-814.847", - "-785.232", - "-872.191", - "-963.985", - "-822.765", - "-839.613", - "-900.731", - "-954.223", - "-955.369", - "-961.902", - "-947.967", - "-830.158", - "-823.279", - "-938.117", - "-949.827", - "-451.912", - "-779.499", - "-839.282", - "-884.761", - "-984.825", - "-984.944", - "-879.917", - "-972.059", - "-783.668", - "-698.022", - "-138.125", - "-938.507", - "-920.478", - "-829.017", - "-832.123", - "-907.854", - "-722.076", - "-921.083", - "-746.977", - "-802.955", - "-947.407", - "-922.53", - "-900.641", - "-838.091", - "-725.176", - "-928.187", - "-964.268", - "-911.611", - "-219.223", - "-965.543", - "-970.276", - "-992.448", - "-920.569", - "-920.77", - "-973.135", - "-995.939", - "-853.86", - "-942.36", - "-992.297", - "-362.609" - ], - "zsrc": "JohnMaddock:35:00083c", - "z": [ - "144.544", - "117.055", - "98.5145", - "314.377", - "2.2146", - "389.527", - "251.098", - "122.977", - "92.1751", - "109.117", - "91.3486", - "293.121", - "58.8749", - "197.369", - "193.82", - "39.6182", - "174.802", - "132.635", - "73.865", - "194.448", - "129.501", - "114.179", - "177.566", - "122.004", - "208.066", - "104.856", - "127.92", - "155.455", - "65.9777", - "132.304", - "39.2598", - "237.37", - "62.7929", - "132.619", - "260.982", - "116.107", - "170.683", - "175.115", - "76.8661", - "100.247", - "96.4683", - "107.606", - "154.897", - "211.617", - "222.426", - "146.22", - "82.3738", - "182.668", - "229.707", - "325.537", - "177.696", - "170.631", - "279.81", - "102.995", - "187.771", - "160.979", - "34.7943", - "164.119", - "122.68", - "231.275", - "124.327", - "165.922", - "169.157", - "161.798", - "98.6536", - "131.865", - "90.4514", - "145.716", - "60.1037", - "126.386", - "308.293", - "219.286", - "157.551", - "87.5563", - "244.072", - "119.993", - "242.166", - "139.195", - "88.0618", - "161.097", - "146.167", - "115.733", - "156.269", - "85.0336", - "130.67", - "195.008", - "50.2179", - "236.345", - "114.341", - "121.636", - "229.106", - "291.316", - "67.3202", - "208.414", - "225.458", - "108.171", - "100.528", - "2.54302", - "125.411", - "180.746", - "219.867", - "122.704", - "300.376", - "146.304", - "139.04", - "69.9719", - "131.957", - "94.8787", - "86.2067", - "152.644", - "88.1728", - "94.9214", - "129.456", - "111.065", - "242.899", - "126.936", - "157.275", - "211.081", - "47.4292", - "291.266", - "213.674", - "93.3116", - "95.1671", - "216.441", - "260.549", - "104.206", - "387.941", - "71.2391", - "310.328", - "119.835", - "315.186", - "136.206", - "118.257", - "85.5045", - "40.9433", - "175.143", - "105.605", - "160.307", - "101.929", - "173.188", - "193.652", - "292.492", - "144.588", - "265.962", - "195.855", - "177.898", - "101.385", - "214.118", - "137.958", - "260.463", - "171.904", - "115.189", - "266.707", - "162.869", - "253.632", - "137.216", - "153.792", - "69.3325", - "69.0175", - "161.719", - "248.25", - "47.0291", - "122.603", - "138.376", - "223.941", - "100.532", - "127.473", - "117.664", - "145.091", - "173.568", - "313.008", - "362.485", - "162.573", - "109.818", - "238.308", - "157.888", - "92.9645", - "160.938", - "145.858", - "245.922", - "180.306", - "165.145", - "93.3713", - "98.2101", - "99.3432", - "234.605", - "154.931", - "97.3397", - "156.83", - "104.076", - "296.774", - "94.724", - "190.087", - "87.6732", - "66.5048", - "94.3874", - "83.5995", - "215.009", - "104.51", - "75.5217", - "193.437", - "58.9791", - "154.906", - "99.2664", - "111.568", - "150.547", - "310.786", - "162.064", - "180.041", - "81.0683", - "91.8721", - "168.814", - "93.298", - "87.204", - "74.0634", - "145.047", - "171.209", - "181.404", - "178.57", - "87.9877", - "90.1113", - "187.568", - "94.6835", - "194.065", - "134.852", - "66.1248", - "76.5422", - "96.0338", - "77.8188", - "81.9456", - "120.899", - "198.021", - "112.026", - "111.528", - "81.619", - "199.988", - "117.345", - "227.785", - "328.075", - "250.552", - "116.479", - "87.0755", - "47.2465", - "118.017", - "218.722", - "261.929", - "165.094", - "206.082", - "140.755", - "199.258", - "220.654", - "186.639", - "106.398", - "106.576", - "159.125", - "180.609", - "126.738", - "175.696", - "118.697", - "137.249", - "106.395", - "77.4156", - "160.03", - "116.392", - "123.51", - "161.26", - "161.27", - "84.394", - "123.839", - "251.883", - "200.571", - "101.853", - "115.337", - "126.263", - "74.6325", - "281.553", - "275.862", - "94.3099", - "232.361", - "273.53", - "175.645", - "117.027", - "117.569", - "139.145", - "93.7127", - "346.122", - "70.5428", - "348.606", - "109.792", - "118.729", - "147.951", - "111.38", - "164.229", - "80.9557", - "40.7835", - "196.477", - "210.621", - "171.067", - "72.3767", - "167.561", - "156.894", - "307.235", - "224.391", - "66.1537", - "288.49", - "135.801", - "69.0655", - "149.416", - "59.4839", - "288.456", - "89.6755", - "70.1476", - "180.594", - "107.982", - "91.7376", - "107.052", - "151.831", - "87.7195", - "78.3272", - "178.778", - "142.22", - "246.869", - "371.435", - "91.3458", - "107.044", - "75.4164", - "128.924", - "80.9325", - "200.651", - "114.794", - "141.504", - "177.437", - "173.93", - "135.113", - "189.423", - "195.689", - "269.677", - "98.1442", - "76.0815", - "118.468", - "156.876", - "224.305", - "195.951", - "179.472", - "318.257", - "186.977", - "115.964", - "86.595", - "65.5099", - "180.559", - "164.178", - "303.67", - "137.453", - "100.757", - "48.4198", - "369.417", - "173.31", - "143.456", - "190.591", - "176.54", - "163.59", - "152.515", - "224.788", - "127.095", - "53.551", - "93.0218", - "120.061", - "141.774", - "135.014", - "76.0596", - "183.103", - "147.321", - "247.356", - "84.2763", - "181.178", - "107.794", - "131.511", - "157.685", - "206.165", - "65.0143", - "168.066", - "109.847", - "126.186", - "94.6935", - "90.8209", - "87.0231", - "152.152", - "111.744", - "118.402", - "49.9057", - "205.786", - "97.6244", - "73.586", - "198.399", - "114.192", - "112.046", - "160.651", - "205.539", - "97.9335", - "151.64", - "66.0558", - "104.036", - "134.454", - "57.878", - "84.6899", - "66.605", - "343.144", - "111.726", - "143.383", - "94.4457", - "80.7379", - "198.245", - "91.3234", - "160.14", - "121.768", - "254.867", - "121.263", - "70.0276", - "213.976", - "113.489", - "165.623", - "167.037", - "262.878", - "151.201", - "148.458", - "40.3796", - "149.913", - "122.182", - "158.779", - "147.624", - "227.077", - "272.056", - "132.917", - "89.1776", - "196.571", - "88.5232", - "202.98", - "68.1873", - "78.5536", - "104.395", - "79.716", - "214.838", - "101.361", - "148.423", - "116.487", - "99.1155", - "191.955", - "131.185", - "104.677", - "202.138", - "81.0216", - "86.4432", - "198.168", - "181.915", - "191.551", - "133.194", - "303.686", - "93.1677", - "152.917", - "171.017", - "135.926", - "87.2121", - "75.3207", - "105.013", - "76.8986", - "142.668", - "179.046", - "157.435", - "183.826", - "162.518", - "220.859", - "90.9807", - "266.726", - "152.767", - "311.936", - "100.602", - "172.34", - "204.708", - "67.6462", - "77.9296", - "133.063", - "109.663", - "77.0641", - "102.233", - "106.491", - "183.767", - "96.3617", - "113.465", - "142.088", - "92.325", - "215.427", - "83.9876", - "85.8044", - "104.086", - "146.552", - "156.801", - "146.512", - "177.959", - "159.584", - "203.979", - "206.467", - "160.082", - "159.521", - "160.511", - "169.901", - "175.875", - "311.391", - "255.694", - "382.27", - "94.4973", - "92.4702", - "109.341", - "162.388", - "115.811", - "89.2305", - "103.526", - "139.688", - "382.797", - "113.377", - "166.313", - "249.586", - "125.75", - "233.173", - "188.537", - "90.6422", - "259.876", - "218.178", - "96.0467", - "138.027", - "141.927", - "174.975", - "73.5926", - "117.77", - "116.318", - "112.663", - "149.194", - "158.978", - "140.921", - "101.277", - "110.084", - "233.958", - "138.475", - "91.1771", - "95.2718", - "131.798", - "163.607", - "96.0438", - "202.8", - "102.394", - "118.179", - "75.6977", - "111.238", - "126.571", - "180.972", - "123.887", - "290.357", - "124.561", - "167.944", - "187.441", - "0.775065", - "90.5173", - "0.994355", - "80.0439", - "240.403", - "248.827", - "93.7147", - "130.69", - "214.572", - "136.409", - "73.2274", - "94.7593", - "170.627", - "128.183", - "142.868", - "299.973", - "251.829", - "151.394", - "107.824", - "152.762", - "164.034", - "130.543", - "144.106", - "121.29", - "91.4434", - "247.293", - "79.7427", - "131.832", - "127.571", - "81.3788", - "232.551", - "289.843", - "163.416", - "107.726", - "177.323", - "231.941", - "284.2", - "153.535", - "143.344", - "144.05", - "173.065", - "114.616", - "123.113", - "207.881", - "107.653", - "103.679", - "176.447", - "163.274", - "335.6", - "231.65", - "125.735", - "343.687", - "121.829", - "106.745", - "1.21247", - "172.531", - "141.011", - "119.636", - "105.362", - "113.923", - "112.224", - "136.879", - "83.2797", - "75.522", - "146.164", - "146.691", - "173.869", - "104.479", - "105.287", - "124.82", - "237.478", - "210.718", - "1.84609", - "154.613", - "145.029", - "163.899", - "110.336", - "129.055", - "139.839", - "167.574", - "101.29", - "135.293", - "177.345", - "79.4302" - ], - "marker": { - "size": 3, - "color": "rgb(239, 153, 59)" - } - }, - { - "mode": "markers", - "name": "64-128", - "type": "scatter3d", - "xsrc": "JohnMaddock:36:8bbca7", - "x": [ - "418.949", - "571.773", - "651.273", - "969.862", - "68.7626", - "217.205", - "68.2733", - "263.92", - "430.11", - "135.436", - "526.051", - "809.605", - "6.65769", - "18.1089", - "338.612", - "448.964", - "36.6651", - "90.8347", - "333.501", - "627.017", - "85.4808", - "360.104", - "556.315", - "651.083", - "118.87", - "82.0171", - "172.668", - "764.197", - "399.839", - "948.378", - "112.788", - "84.8602", - "983.274", - "200.811", - "269.38", - "993.075", - "539.937", - "476.051", - "213.425", - "192.279", - "758.32", - "932.843", - "897.109", - "623.643", - "441.344", - "132.356", - "403.354", - "224.974", - "469.613", - "137.998", - "936.207", - "682.552", - "93.8023", - "250.086", - "209.357", - "543.345", - "99.8656", - "113.384", - "678.608", - "579.823", - "279.337", - "756.197", - "888.539", - "262.439", - "240.003", - "737.835", - "587.222", - "75.3092", - "953.151", - "891.426", - "911.345", - "65.0148", - "27.7797", - "73.0237", - "677.636", - "537.902", - "435.36", - "84.8843", - "48.1701", - "636.165", - "335.261", - "351.801", - "138.001", - "216.612", - "119.446", - "873.529", - "278.793", - "211.456", - "266.21", - "91.2415", - "383.731", - "820.131", - "293.023", - "325.852", - "31.9276", - "41.6705", - "793.571", - "367.578", - "373.487", - "115.395", - "251.253", - "380.118", - "809.432", - "71.1873", - "442.854", - "178.061", - "47.0044", - "699.928", - "267.214", - "642.301", - "311.485", - "517.401", - "656.444", - "482.29", - "504.281", - "333.959", - "79.8383", - "166.255", - "2.70073", - "57.907", - "43.1994", - "767.538", - "358.482", - "598.654", - "637.218", - "194.917", - "237.955", - "20.2983", - "101.422", - "31.7326", - "668.704", - "131.702", - "73.6607", - "222.59", - "755.28", - "19.6089", - "143.101", - "112.827", - "503.757", - "763.201", - "665.058", - "132.958", - "254.578", - "51.3027", - "212.9", - "588.483", - "175.218", - "157.85", - "520.029", - "277.098", - "483.78", - "421.212", - "75.9116", - "214.558", - "596.724", - "333.408", - "53.9287", - "643.311", - "17.4213", - "222.742", - "43.6405", - "197.753", - "549.223", - "525.928", - "759.817", - "117.991", - "85.0853", - "422.227", - "173.465", - "901.151", - "815.873", - "0.281479", - "88.7505", - "136.839", - "177.342", - "570.905", - "447.242", - "350.825", - "293.175", - "928.205", - "79.282", - "430.945", - "420.884", - "61.9214", - "158.644", - "166.833", - "616.203", - "366.631", - "3.87115", - "603.806", - "66.2247", - "280.846", - "749.43", - "215.841", - "187.097", - "347.039", - "67.9819", - "525.679", - "730.362", - "385.845", - "51.5686", - "194.172", - "76.2317", - "350.164", - "639.446", - "368.859", - "27.5155", - "620.95", - "627.197", - "892.535", - "231.183", - "345.959", - "433.535", - "233.478", - "160.082", - "46.8933", - "383.209", - "109.585", - "773.289", - "559.232", - "366.731", - "246.377", - "146.138", - "260.109", - "329.036", - "6.56789", - "432.694", - "110.61", - "782.605", - "684.327", - "154.85", - "12.3267", - "11.6208", - "50.5814", - "408.608", - "222.663", - "174.669", - "468.929", - "401.939", - "62.6918", - "25.494", - "393.786", - "941.232", - "908.688", - "202.894", - "164.855", - "664.988", - "135.106", - "233.221", - "147.934", - "175.119", - "179.387", - "50.6004", - "266.234", - "443.268", - "306.662", - "86.7355", - "558.181", - "92.4867", - "249.825", - "237.177", - "67.2484", - "422.855", - "414.468", - "468.614", - "236.14", - "300.935", - "402.356", - "102.423", - "512.977", - "716.513", - "47.0939", - "38.9505", - "598.524", - "75.4349", - "547.385", - "815.735", - "353.496", - "618.592", - "105.394", - "119.419", - "565.893", - "60.022", - "562.957", - "865.911", - "248.129", - "403.727", - "28.0267", - "300.221", - "91.9349", - "827.469", - "129.416", - "981.343", - "1.58363", - "732.97", - "385.206", - "553.756", - "83.5168", - "920.881", - "119.518", - "311.476", - "509.811", - "218.334", - "181.077", - "140.381", - "78.3381", - "137.272", - "584.114", - "877.02", - "813.491", - "797.225", - "572.947", - "930.173", - "0.523762", - "283.154", - "151.781", - "689.446", - "588.305", - "507.679", - "284.233", - "510.907", - "578.182", - "257.509", - "829.532", - "91.5786", - "224.194", - "481.397", - "451.889", - "920.25", - "127.218", - "14.4413", - "110.931", - "377.067", - "332.285", - "686.475", - "16.8113", - "180.261", - "131.643", - "36.7063", - "366.206", - "575.479", - "295.477", - "130.409", - "360.794", - "616.426", - "382.879", - "53.0781", - "752.791", - "109.522", - "447.553", - "285.139", - "247.564", - "659.037", - "554.1", - "4.27438", - "283.851", - "92.5775", - "921.318", - "156.316", - "277.526", - "454.573", - "154.778", - "373.815", - "682.229", - "49.9443", - "209.418", - "893.611", - "805.05", - "15.9716", - "453.574", - "789.854", - "881.631", - "411.184", - "199.466", - "607.428", - "220.708", - "104.118", - "568.947", - "123.192", - "233.108", - "99.1775", - "639.807", - "841.548", - "343.817", - "313.796", - "527.271", - "95.692", - "455.704", - "280.441", - "11.3244", - "136.925", - "457.386", - "937.601", - "521.967", - "239.085", - "201.006", - "355.968", - "230.971", - "217.104", - "77.3282", - "382.886", - "595.483", - "762.241", - "40.8501", - "235.934", - "843.527", - "5.8299", - "107.457", - "904.639", - "70.2809", - "344.461", - "154.882", - "110.092", - "96.4522", - "98.4321", - "916.689", - "62.8066", - "134.865", - "576.696", - "979.549", - "177.7", - "96.7575", - "736.445", - "986.693", - "219.586", - "999.075", - "578.192", - "309.499", - "709.238", - "422.411", - "999.782", - "346.211", - "484.217", - "977.181", - "547.182", - "352.274", - "254.937", - "61.8808", - "109.247", - "357.129", - "164.998", - "825.241", - "7.67959", - "159.7", - "311.566", - "629.449", - "144.816", - "64.4013", - "795.944", - "129.097", - "250.393", - "745.313", - "665.161", - "833.426", - "653.615", - "177.483", - "153.933", - "476.539", - "427.397", - "136.158", - "185.759", - "187.481", - "628.547", - "118.624", - "132.988", - "295.671", - "478.247", - "896.776", - "730.397", - "62.9962", - "817.393", - "85.8811", - "20.8553", - "449.311", - "465.675", - "394.939", - "79.7866", - "11.7661", - "330.822", - "916.557", - "91.7351", - "472.522", - "145.718", - "297.969", - "150.441", - "815.48", - "10.5515", - "97.4159", - "342.536", - "115.121", - "532.121", - "399.995", - "876.002", - "493.879", - "131.244", - "94.788", - "992.302", - "264.957", - "913.419", - "375.458", - "111.443", - "590.188", - "638.863", - "1.2948", - "302.65", - "67.212", - "477.451", - "67.7936", - "202.232", - "196.723", - "31.2991", - "73.1459", - "87.8378", - "688.99", - "162.797", - "332.522", - "87.8047", - "10.8362", - "920.944", - "927.489", - "833.092", - "459.904", - "600.692", - "420.621", - "827.775", - "296.147", - "781.928", - "267.131", - "414.498", - "35.7327", - "813.636", - "58.0874", - "397.257", - "779.034", - "59.3756", - "171.986", - "494.646", - "496.637", - "158.907", - "760.331", - "0.824458", - "776.983", - "855.984", - "617.406", - "838.677", - "460.586", - "565.226", - "117.615", - "4.46593", - "98.9349", - "19.2546", - "165.097", - "86.0891", - "81.966", - "937.051", - "873.751", - "242.123", - "888.017", - "984.038", - "921.164", - "421.838", - "26.3216", - "139.954", - "67.3954", - "38.7882", - "288.641", - "22.8725", - "50.4419", - "49.2895", - "29.7683", - "714.287", - "581.586", - "499.586", - "215.745", - "278.357", - "933.291", - "64.9474", - "160.087", - "812.121", - "187.83", - "175.617", - "191.923", - "84.5669", - "353.321", - "449.971", - "784.25", - "25.0439", - "529.367", - "554.943", - "648.822", - "77.545", - "304.26", - "72.8148", - "504.428", - "707.756", - "169.357", - "802.903", - "357.134", - "46.0729", - "265.94", - "856.851", - "535.6", - "358.687", - "249.023", - "441.075", - "350.951", - "481.428", - "679.504", - "405.302", - "611.479", - "821.036", - "754.867", - "431.804", - "261.727", - "362.899", - "765.954", - "477.475", - "285.075", - "331.968", - "4.82176", - "671.149", - "58.0411", - "703.943", - "478.885", - "750.231", - "35.8827", - "186.451", - "54.2783", - "279.828", - "89.1194", - "301.82", - "339.275", - "119.698", - "936.185", - "445.002", - "890.66", - "525.827", - "195.005", - "123.411", - "264.389", - "422.771", - "135.191", - "5.11406", - "898.717", - "171.43", - "654.662", - "447.474", - "134.101", - "83.4233", - "560.456", - "762.846", - "68.3023", - "832.169", - "803.716", - "706.006", - "338.184", - "394.082", - "9.03012", - "357.856", - "601.887", - "479.084", - "1.48319", - "581.044", - "19.0672", - "2.72379", - "714.922", - "230.323", - "494.473", - "17.2966", - "609.782", - "335.224", - "829.535", - "534.721", - "50.7273", - "107.58", - "645.846", - "123.696", - "691.144", - "307.982", - "887.978", - "512.116", - "681.065", - "426.918", - "71.0429", - "92.1688", - "396.325", - "279.216", - "374.589", - "316.764", - "172.179", - "235.93", - "917.721", - "465.389", - "620.573", - "19.0171", - "334.033", - "30.5989", - "42.1219", - "582.481", - "901.2", - "101.556", - "58.2844", - "751.055", - "16.5295", - "699.453", - "359.055", - "886.212", - "762.907", - "701.533", - "508.394", - "850.101", - "328.079", - "148.813", - "2.71198", - "404.19", - "744.066", - "699.096", - "637.433", - "897.299", - "453.165", - "423.888", - "197.533", - "89.052", - "265.116", - "132.561", - "871.169", - "836.201", - "834.427", - "626.135", - "267.585", - "294.861", - "964.177", - "306.262", - "721.921", - "84.9349", - "747.128", - "464.594", - "714.078", - "327.178", - "48.1207", - "443.764", - "225.046", - "190.029", - "89.0717", - "301.452", - "867.228", - "63.9836", - "589.788", - "280.011", - "51.0673", - "870.199", - "659.395", - "435.246", - "471.801", - "712.282", - "846.986", - "50.3518", - "123.815", - "575.608", - "842.206", - "586.247", - "592.992", - "172.633", - "589.175", - "98.0099", - "351.943", - "231.437", - "518.456", - "923.679", - "238.115", - "521.319", - "433.952", - "269.187", - "215.872", - "841.802", - "762.157", - "597.728", - "490.139", - "225.887", - "88.2537", - "10.6606", - "501.826", - "452.569", - "517.263", - "611.558", - "897.213", - "94.9473", - "591.85", - "286.156", - "68.6609", - "643.981", - "515.389", - "794.365", - "126.127", - "64.7425", - "96.847", - "65.2248", - "44.1786", - "326.065", - "336.254", - "371.797", - "36.2696", - "457.527", - "452.283", - "624.154", - "551.714", - "269.183", - "114.861", - "57.0927", - "500.758", - "18.4672", - "738.149", - "620.493", - "635.246", - "636.112", - "227.257", - "886.598", - "379.193", - "208.433", - "3.81069", - "62.8214", - "832.161", - "113.121", - "209.129", - "229.956", - "806.827", - "15.6636", - "486.926", - "383.996", - "210.2", - "989.009", - "749.643", - "250.453", - "787.989", - "227.265", - "636.135", - "634.414", - "152.063", - "446.708", - "161.86", - "743.998", - "890.529", - "11.4641", - "952.14", - "44.4136", - "23.1959", - "513.396", - "526.82", - "497.185", - "191.277", - "861.808", - "29.5272", - "46.6797", - "480.285", - "2.61912", - "377.447", - "914.413", - "534.184", - "43.1923", - "427.043", - "214.349", - "541.576", - "451.34", - "326.446", - "242.29", - "174.083", - "626.373", - "580.341", - "811.074", - "224.133", - "92.5414", - "501.881", - "61.7688", - "75.9357", - "245.926", - "937.518", - "88.484", - "158.063", - "5.31769", - "299.663", - "827.86", - "473.688", - "597.288", - "486.128", - "43.44", - "912.536", - "636.985", - "500.15", - "403.687", - "389.402", - "711.694", - "268.423", - "41.2114", - "97.8534", - "459.147", - "322.997", - "649.045", - "191.087", - "171.945", - "502.862", - "220.701", - "907.519", - "562.717", - "229.963", - "449.426", - "846.106", - "145.519", - "692.205", - "876.86", - "490.633", - "613.11", - "490.054", - "598.319", - "996.68", - "522.139", - "874.19", - "180.552", - "207.985", - "890.456", - "830.606", - "261.332", - "402.909", - "413.405", - "178.823", - "852.478", - "604.496", - "501.782", - "735.299", - "12.3382", - "315.615", - "987.987", - "809.539", - "64.9251", - "555.324", - "128.497", - "168.673", - "267.589", - "333.139", - "66.786", - "146.407", - "150.101", - "601.805", - "51.7222", - "561.768", - "818.005", - "262.005", - "191.075", - "845.595", - "339.19", - "276.267", - "506.089", - "569.283", - "400.363", - "816.172", - "981.531", - "187.09", - "638.479", - "77.2522", - "374.738", - "60.7229", - "358.186", - "361.368", - "204.234", - "283.703", - "134.651", - "434.298", - "592.008", - "657.867", - "432.487", - "598.394", - "191.131", - "326.113", - "131.724", - "638.194", - "628.564", - "286.381", - "439.531", - "535.898", - "698.862", - "35.9554", - "232.183", - "429.774", - "3.18693", - "205.975", - "482.441", - "735.052", - "218.518", - "411.719", - "342.932", - "119.222", - "963.787", - "53.2638", - "584.038", - "223.621", - "426.078", - "737.865", - "21.6108", - "767.535", - "67.2541", - "477.066", - "51.6461", - "508.432", - "344.639", - "31.5084", - "0.82741", - "962.677", - "596.283", - "486.942", - "420.276", - "846.054", - "708.776", - "151.218", - "772.751", - "31.0368", - "71.1467", - "136.644", - "511.926", - "157.965", - "634.565", - "202.498", - "830.257", - "141.69", - "209.297", - "805.954", - "359.231", - "168.799", - "763.797", - "319.504", - "780.283", - "463.025", - "226.955", - "21.0139", - "627.379", - "352.702", - "529.192", - "525.229", - "254.415", - "113.914", - "264.301", - "271.252", - "191.381", - "487.31", - "874.631", - "793.25", - "583.058", - "460.598", - "156.881", - "32.0699", - "195.504", - "342.708", - "287.125", - "32.9955", - "706.813", - "893.099", - "435.561", - "570.821", - "314.782", - "977.851", - "88.9215", - "531.545", - "602.268", - "562.52", - "742.352", - "902.059", - "513.191", - "251.193", - "227.034", - "580.071", - "126.161", - "94.807", - "792.175", - "882.843", - "832.085", - "244.924", - "673.773", - "655.47", - "112.977", - "276.949", - "849.616", - "338.358", - "488.526", - "603.164", - "103.581", - "234.143", - "570.867", - "891.379", - "936.215", - "288.89", - "662.185", - "426.927", - "665.012", - "52.0879", - "468.92", - "202.094", - "354.784", - "658.536", - "199.724", - "113.142", - "687.143", - "721.313", - "916.78", - "622.492", - "632.456", - "28.0705", - "586.774", - "387.181", - "208.439", - "895.023", - "409.852", - "150.38", - "345.061", - "630.857", - "274.864", - "361.537", - "644.416", - "763.534", - "179.085", - "791.496", - "381.269", - "183.995", - "19.1825", - "854.143", - "758.087", - "34.9941", - "821.986", - "29.7443", - "744.552", - "436.218", - "202.281", - "236.035", - "612.211", - "694.866", - "244.376", - "120.835", - "110.349", - "171.311", - "593.357", - "736.631", - "38.8333", - "264.542", - "295.913", - "970.737", - "959.109", - "874.7", - "946.892", - "923.073", - "435.235", - "91.9878", - "40.7687", - "627.642", - "220.642", - "661.393", - "88.8965", - "43.8459", - "115.774", - "80.1698", - "361.071", - "167.936", - "450.113", - "115.558", - "420.262", - "647.067", - "724.755", - "815.65", - "370.22", - "203.605", - "379.78", - "370.465", - "462.266", - "851.247", - "430.494", - "711.007", - "940.454", - "453.577", - "673.149", - "780.208", - "336.08", - "146.827", - "620.965", - "444.249", - "667.206", - "889.53", - "283.648", - "185.878", - "440.561", - "117.425", - "107.196", - "482.413", - "157.244", - "469.437", - "64.0049", - "608.853", - "760.181", - "387.805", - "144.506", - "639.088", - "707.56", - "945.846", - "202.07", - "919.306", - "332.472", - "99.8601", - "729.611", - "281.777", - "297.734", - "732.369", - "943.156", - "514.656", - "812.735", - "113.599", - "768.833", - "378.709", - "200.83", - "177.422", - "815.138", - "734.597", - "162.769", - "756.064", - "67.3726", - "644.703", - "684.064", - "509.82", - "309.466", - "367.805", - "66.6449", - "309.788", - "610.138", - "464.147", - "222.79", - "14.5459", - "68.0135", - "64.653", - "317.496", - "278.874", - "476.462", - "626.475", - "43.2927", - "839.743", - "402.324", - "959.611", - "82.0189", - "327.889", - "479.852", - "496.638", - "503.897", - "137.928", - "498.651", - "539.699", - "344.483", - "363.148", - "31.5163", - "867.972", - "219.655", - "524.235", - "556.688", - "74.2278", - "280.263", - "746.349", - "601.091", - "297.345", - "409.124", - "409.73", - "644.393", - "55.3934", - "894.14", - "551.901", - "375.297", - "154.995", - "70.2409", - "108.933", - "793.494", - "412.925", - "103.689", - "344.39", - "491.797", - "107.105", - "925.341", - "247.522", - "10.0398", - "288.359", - "33.9856", - "368.205", - "457.583", - "60.319", - "13.8224", - "22.1309", - "770.392", - "473.588", - "926.381", - "110.098", - "92.7121", - "19.5953", - "537.894", - "165.562", - "534.476", - "16.0425", - "332.507", - "489.543", - "909.982", - "57.9453", - "521.427", - "295.047", - "400.388", - "911.379", - "311.422", - "207.277", - "389.68", - "193.569", - "942.135", - "24.0122", - "286.973", - "451.931", - "99.9951", - "334.702", - "495.222", - "784.29", - "152.844", - "747.168", - "331.124", - "224.015", - "243.231", - "14.7649", - "962.318", - "261.449", - "943.844", - "88.9495", - "273.318", - "246.099", - "952.021", - "186.908", - "804.42", - "525.361", - "646.195", - "19.5575", - "843.71", - "56.7442", - "594.88", - "226.346", - "767.375", - "103.245", - "132.602", - "455.231", - "367.915", - "69.3324", - "188.143", - "328.925", - "292.251", - "99.4034", - "385.96", - "817.089", - "157.279", - "68.4136", - "571.79", - "261.132", - "624.337", - "935.736", - "457.999", - "255.202", - "18.9554", - "18.1664", - "975.054", - "456.107", - "256.157", - "923.429", - "29.4558", - "138.587", - "27.5678", - "263.766", - "611.011", - "709.476", - "283.068", - "968.009", - "779.098", - "204.065", - "919.559", - "381.96", - "713.288", - "768.443", - "9.15292", - "608.013", - "794.139", - "9.03104", - "18.0897", - "259.893", - "182.27", - "312.999", - "742.89", - "278.296", - "983.083", - "296.93", - "145.084", - "173.611", - "738.974", - "453.73", - "747.863", - "26.8288", - "20.3144", - "168.614", - "211.792", - "306.201", - "864.916", - "499.794", - "351.957", - "327.137", - "884.454", - "191.393", - "275.545", - "439.766", - "568.965", - "824.139", - "178.078", - "406.181", - "70.9587", - "814.859", - "753.346", - "23.6693", - "80.1122", - "308.443", - "504.313", - "915.618", - "583.466", - "206.514", - "500.867", - "164.519", - "265.81", - "577.027", - "624.503", - "220.418", - "710.902", - "309.33", - "485.313", - "228.011", - "270.295", - "499.474", - "537.498", - "554.657", - "493.013", - "10.4261", - "428.202", - "799.251", - "229.809", - "113.005", - "55.8966", - "956.143", - "55.3096", - "1.7771", - "186.533", - "342.515", - "866.432", - "928.501", - "15.2153", - "389.852", - "285.872", - "382.347", - "941.161", - "899.078", - "793.723", - "108.45", - "159.356", - "26.9012", - "229.991", - "410.075", - "564.963", - "908.892", - "229.981", - "196.549", - "777.677", - "886.189", - "872.198", - "560.468", - "8.15227", - "92.9906", - "154.12", - "307.351", - "127.149", - "359.393", - "96.1347", - "290.426", - "984.922", - "184.008", - "155.287", - "566.361", - "325.862", - "268.422", - "819.263", - "368.515", - "849.418", - "170.541", - "374.01", - "858.61", - "788.878", - "440.508", - "569.069", - "231.81", - "211.111", - "866.853", - "16.2827", - "497.28", - "330.926", - "186.797", - "263.909", - "299.498", - "88.267", - "347.88", - "414.311", - "742.954", - "119.081", - "735.326", - "731.348", - "91.0073", - "148.321", - "309.097", - "57.2084", - "602.145", - "48.5836", - "341.224", - "133.382", - "110.496", - "165.19", - "632.95", - "116.519", - "606.853", - "390.243", - "119.623", - "303.644", - "89.5457", - "257.847", - "237.788", - "533.802", - "274.567", - "274.217", - "436.677", - "284.132", - "96.0293", - "280.901", - "332.791", - "524.815", - "116.826", - "923.648", - "445.106", - "964.324", - "537.635", - "517.485", - "988.893", - "220.686", - "385.46", - "110.064", - "70.5097", - "661.746", - "421.812", - "47.0826", - "805.487", - "406.735", - "527.04", - "932.581", - "385.783", - "349.969", - "88.3893", - "315.69", - "224.621", - "466.973", - "61.0695", - "475.772", - "849.323", - "665.93", - "740.177", - "488.766", - "278.241", - "79.4363", - "558.298", - "742.301", - "439.315", - "14.0823", - "850.486", - "456.797", - "741.978", - "77.7843", - "164.943", - "772.09", - "90.6203", - "694.937", - "919.326", - "339.662", - "677.745", - "172.145", - "698.074", - "724.995", - "429.217", - "371.736", - "790.601", - "263.479", - "994.568", - "108.604", - "770.699", - "647.791", - "158.58", - "395.76", - "571.045", - "914.321", - "151.977", - "375.504", - "57.1962", - "854.441", - "653.716", - "174.824", - "819.174", - "325.267", - "295.449", - "6.91719", - "347.095", - "223.798", - "106.934", - "396.388", - "852.767", - "517.382", - "104.902", - "636.847", - "177.693", - "184.781", - "440.408", - "627.042", - "228.126", - "762.869", - "916.827", - "53.7141", - "311.178", - "122.473", - "295.383", - "244.842", - "494.663", - "2.97638", - "863.418", - "659.108", - "150.692", - "909.471", - "753.926", - "450.713", - "203.284", - "508.331", - "265.789", - "954.152", - "566.721", - "52.3783", - "23.0696", - "470.269", - "276.817", - "296.45", - "391.603", - "365.167", - "909.064", - "831.051", - "598.532", - "631.279", - "717.41", - "268.386", - "372.056", - "897.456", - "591.558", - "864.032", - "220.887", - "279.334", - "947.65", - "61.3128", - "992.87", - "67.5252", - "478.291", - "308.278", - "4.44338", - "253.158", - "779.757", - "624.317", - "475.51", - "470.527", - "803.179", - "885.735", - "766.831", - "691.821", - "353.723", - "2.42114", - "850.972", - "341.315", - "265.84", - "736.619", - "240.626", - "342.392", - "931.794", - "97.8591", - "789.302", - "45.1662", - "983.412", - "643.683", - "242.631", - "581.438", - "182.978", - "85.0808", - "472.242", - "131.219", - "427.364", - "14.781", - "562.87", - "57.8614", - "980.308", - "429.479", - "244.841", - "339.21", - "607.666", - "471.666", - "826.973", - "248.874", - "470.985", - "364.818", - "157.674", - "372.18", - "850.254", - "715.767", - "814.712", - "303.995", - "92.7663", - "258.374", - "134.484", - "421.577", - "385.94", - "268.922", - "139.872", - "458.483", - "735.716", - "776.93", - "194.416", - "402.981", - "6.91867", - "640.365", - "513.513", - "197.549", - "644.673", - "230.342", - "975.587", - "966.209", - "795.161", - "112.264", - "788.27", - "473.91", - "114.204", - "89.6762", - "31.712", - "659.994", - "825.493", - "203.852", - "607.368", - "28.7815", - "164.208", - "577.202", - "235.709", - "223.737", - "112.563", - "97.066", - "315.973", - "327.918", - "959.736", - "793.399", - "211.405", - "125.116", - "411.12", - "247.051", - "505.501", - "980.607", - "158.795", - "882.437", - "226.639", - "116.836", - "247.628", - "152.501", - "900.068", - "968.581", - "474.334", - "931.986", - "570.244", - "438.145", - "61.6171", - "595.192", - "512.51", - "140.253", - "435.541", - "368.214", - "470.45", - "721.838", - "789.063", - "670.202", - "244.127", - "473.796", - "472.784", - "959.717", - "385.253", - "511.463", - "320.814", - "276.689", - "340.624", - "433.261", - "4.7955", - "279.729", - "950.828", - "203.157", - "311.149", - "522.233", - "60.8464", - "85.8637", - "9.65019", - "240.439", - "623.035", - "513.131", - "171.44", - "912.321", - "134.026", - "409.001", - "956.819", - "608.922", - "641.25", - "173.254", - "260.594", - "435.809", - "459.493", - "760.246", - "266.254", - "528.011", - "677.627", - "167.536", - "896.838", - "793.717", - "948.022", - "206.69", - "20.2207", - "328.279", - "198.651", - "335.95", - "210.343", - "317.847", - "465.773", - "913.157", - "893.913", - "796.481", - "318.951", - "28.1278", - "311.057", - "159.078", - "615.817", - "439.224", - "769.711", - "176.48", - "298.405", - "596.487", - "719.976", - "209.359", - "49.7713", - "57.3089", - "291.806", - "981.126", - "82.3906", - "444.047", - "910.686", - "398.01", - "369.147", - "538.999", - "668.72", - "214.594", - "732.893", - "51.9233", - "586.393", - "948.007", - "52.3059", - "910.917", - "987.402", - "18.1293", - "269.492", - "909.766", - "655.874", - "526.641", - "62.7882", - "795.577", - "461.527", - "522.066", - "716.923", - "549.225", - "424.89", - "881.385", - "327.21", - "814.461", - "394.154", - "350.463", - "111.527", - "426.669", - "728.654", - "179.601", - "836.745", - "741.201", - "490.525", - "174.545", - "549.991", - "333.244", - "822.624", - "509.689", - "33.0804", - "107.427", - "39.5066", - "653.029", - "316.975", - "729.91" - ], - "ysrc": "JohnMaddock:36:168fec", - "y": [ - "-853.896", - "-377.063", - "-368.139", - "-890.304", - "-702.678", - "-369.951", - "-446.933", - "-314.026", - "-720.204", - "-463.875", - "-654.037", - "-999.28", - "-468.387", - "-878.54", - "-711.76", - "-890.653", - "-958.17", - "-632.422", - "-649.215", - "-844.368", - "-457.109", - "-992.242", - "-530.991", - "-390.395", - "-657.623", - "-510.537", - "-448.66", - "-493.834", - "-489.932", - "-802.147", - "-932.87", - "-258.923", - "-769.251", - "-695.555", - "-548.771", - "-698.714", - "-283.012", - "-522.046", - "-537.904", - "-480.951", - "-291.34", - "-790.815", - "-727.355", - "-925.895", - "-556.116", - "-784.267", - "-243.523", - "-775.093", - "-880.371", - "-226.62", - "-936.092", - "-575.894", - "-404.233", - "-468.937", - "-911.629", - "-490.217", - "-806.869", - "-728.662", - "-518.38", - "-482.749", - "-322.96", - "-878.758", - "-397.899", - "-589.97", - "-325.421", - "-845.878", - "-829.562", - "-480.349", - "-827.271", - "-394.357", - "-596.722", - "-596.385", - "-455.485", - "-926.788", - "-788.374", - "-951.956", - "-539.654", - "-696.227", - "-308.21", - "-751.752", - "-723.014", - "-681.738", - "-971.745", - "-780.199", - "-365.437", - "-520.841", - "-409.335", - "-302.79", - "-682.395", - "-338.081", - "-572.9", - "-942.333", - "-477.322", - "-803.083", - "-742.447", - "-470.725", - "-382.437", - "-299.4", - "-270.534", - "-352.028", - "-822.056", - "-828.092", - "-424.744", - "-524.259", - "-522.638", - "-513.374", - "-597.498", - "-417.086", - "-554.175", - "-681.556", - "-967.77", - "-977.295", - "-775.947", - "-796.162", - "-815.766", - "-789.468", - "-783.874", - "-808.164", - "-444.529", - "-760.339", - "-738.946", - "-939.951", - "-482.759", - "-609.6", - "-810.89", - "-828.821", - "-346.076", - "-949.335", - "-520.608", - "-870.189", - "-587.554", - "-545.13", - "-798.932", - "-437.391", - "-238.896", - "-880.481", - "-561.591", - "-562.119", - "-781.194", - "-603.872", - "-542.502", - "-316.837", - "-941.417", - "-348.6", - "-859.241", - "-423.591", - "-644.659", - "-440.503", - "-908.362", - "-754.036", - "-852.82", - "-790.797", - "-452.351", - "-877.176", - "-265.636", - "-294.456", - "-723.475", - "-457.825", - "-640.398", - "-847.127", - "-910.846", - "-517.02", - "-499.857", - "-826.18", - "-755.051", - "-649.007", - "-259.037", - "-956.916", - "-593.667", - "-785.078", - "-624.223", - "-40.6708", - "-689.721", - "-459.66", - "-404.471", - "-842.133", - "-811.603", - "-599.206", - "-571.16", - "-268.436", - "-659.84", - "-868.245", - "-461.768", - "-675.427", - "-771.959", - "-562.058", - "-724.568", - "-809.032", - "-44.0249", - "-427.964", - "-950.446", - "-663.801", - "-709.543", - "-927.56", - "-362.842", - "-329.653", - "-491.185", - "-790.969", - "-898.321", - "-343.297", - "-764.355", - "-361.557", - "-395.994", - "-391.726", - "-452.351", - "-995.48", - "-924.34", - "-905.431", - "-980.967", - "-552.557", - "-795.301", - "-754.499", - "-378.511", - "-562.91", - "-720.639", - "-940.329", - "-435.986", - "-428.816", - "-820.987", - "-789.084", - "-441.957", - "-761.386", - "-822.354", - "-517.07", - "-836.066", - "-779.526", - "-753.87", - "-758.233", - "-525.269", - "-488.269", - "-366.21", - "-737.549", - "-415.591", - "-314.356", - "-255.135", - "-782.802", - "-527.927", - "-400.001", - "-681.857", - "-744.926", - "-850.889", - "-895.935", - "-262.029", - "-772.2", - "-306.445", - "-428.757", - "-763.105", - "-779.593", - "-964.229", - "-516.731", - "-793.441", - "-938.821", - "-587.32", - "-374.266", - "-496.554", - "-606.725", - "-775.83", - "-586.09", - "-661.58", - "-330.216", - "-793.327", - "-374.924", - "-649.535", - "-654.783", - "-583.206", - "-301.28", - "-784.429", - "-323.466", - "-520.577", - "-481.832", - "-540.087", - "-582.222", - "-888.34", - "-540.389", - "-482.56", - "-850.644", - "-326.769", - "-995.322", - "-874.675", - "-995.599", - "-658.007", - "-503.855", - "-737.006", - "-516.691", - "-917.261", - "-994.828", - "-567.237", - "-984.027", - "-803.685", - "-797.148", - "-874.394", - "-636.337", - "-577.554", - "-601.035", - "-577.096", - "-412.292", - "-361.628", - "-659.37", - "-977.46", - "-815.616", - "-711.356", - "-484.738", - "-810.389", - "-482.949", - "-312.885", - "-482.84", - "-566.449", - "-748.554", - "-263.027", - "-902.635", - "-440.545", - "-815.491", - "-594.261", - "-576.303", - "-579.924", - "-850.125", - "-797.831", - "-648.59", - "-314.278", - "-449.867", - "-299.849", - "-661.449", - "-525.98", - "-803.277", - "-676.438", - "-374.73", - "-748.166", - "-594.492", - "-665.525", - "-705.928", - "-582.626", - "-810.186", - "-949.79", - "-735.559", - "-732.592", - "-494.326", - "-402.445", - "-869.985", - "-719.794", - "-461.539", - "-616.625", - "-459.038", - "-616.725", - "-422.717", - "-375.795", - "-489.916", - "-857.527", - "-828.427", - "-397.319", - "-496.91", - "-559.1", - "-799.188", - "-830.807", - "-903.505", - "-987.47", - "-641.525", - "-602.037", - "-402.126", - "-984.422", - "-576.939", - "-810.977", - "-449.715", - "-345.141", - "-687.203", - "-942.884", - "-627.345", - "-410.904", - "-728.079", - "-610.084", - "-620.244", - "-844.282", - "-354.027", - "-590.633", - "-412.442", - "-956.352", - "-574.781", - "-514.597", - "-688.827", - "-443.535", - "-596.629", - "-431.156", - "-423.173", - "-350.38", - "-265.064", - "-698.907", - "-578.93", - "-968.964", - "-308.763", - "-700.489", - "-619.025", - "-924.657", - "-741.364", - "-851.017", - "-522.601", - "-901.863", - "-461.76", - "-651.35", - "-412.987", - "-710.225", - "-478.923", - "-489.198", - "-456.806", - "-497.282", - "-558.058", - "-425.783", - "-849.624", - "-407.841", - "-823.192", - "-882.554", - "-334.156", - "-573.113", - "-905.606", - "-499.373", - "-490.934", - "-438.567", - "-662.061", - "-684.164", - "-811.785", - "-220.503", - "-511.662", - "-449.243", - "-914.373", - "-681.968", - "-969.681", - "-812.012", - "-284.515", - "-761.318", - "-870.244", - "-342.235", - "-912.624", - "-773.903", - "-220.565", - "-304.031", - "-559.318", - "-618.236", - "-769.012", - "-548.297", - "-865.912", - "-525.792", - "-502.125", - "-603.512", - "-569.67", - "-546.822", - "-650.226", - "-820.051", - "-525.934", - "-585.472", - "-660.24", - "-873.261", - "-285.576", - "-752.455", - "-776.705", - "-698.339", - "-399.707", - "-363.355", - "-883.026", - "-818.925", - "-716.881", - "-491.454", - "-576.177", - "-803.569", - "-607.931", - "-436.216", - "-907.817", - "-527.623", - "-456.834", - "-491.9", - "-576.507", - "-497.422", - "-811.195", - "-462.057", - "-883.159", - "-784.982", - "-720.208", - "-880.142", - "-501.258", - "-995.101", - "-871.535", - "-517.781", - "-298.742", - "-637.794", - "-555.641", - "-420.201", - "-335.057", - "-836.283", - "-372.714", - "-707.346", - "-703.351", - "-326.098", - "-430.581", - "-437.449", - "-471.566", - "-704.746", - "-634.808", - "-637.258", - "-477.836", - "-876.059", - "-901.511", - "-999.421", - "-969.777", - "-377.16", - "-776.758", - "-316.814", - "-406.623", - "-945.569", - "-973.113", - "-673.055", - "-583.469", - "-462.689", - "-748.24", - "-917.813", - "-862.629", - "-937.056", - "-430.658", - "-549.112", - "-703.811", - "-634.51", - "-557.442", - "-553.396", - "-685.894", - "-806.253", - "-688.92", - "-588.94", - "-835.777", - "-976.448", - "-869.837", - "-511.058", - "-115.466", - "-593.917", - "-624.871", - "-903.915", - "-595.147", - "-815.363", - "-706.915", - "-785.839", - "-622.222", - "-976.115", - "-537.216", - "-546.553", - "-583.081", - "-38.8096", - "-739.369", - "-592.246", - "-785.906", - "-328.405", - "-953.691", - "-372.477", - "-493.528", - "-898.104", - "-977.458", - "-683.303", - "-539.275", - "-617.317", - "-798.196", - "-533.863", - "-497.052", - "-468.989", - "-659.574", - "-298.392", - "-745.698", - "-341.429", - "-723.76", - "-545.666", - "-646.341", - "-864.969", - "-394.363", - "-827.103", - "-721.458", - "-579.024", - "-711.577", - "-987.433", - "-452.11", - "-560.283", - "-943.914", - "-785.085", - "-248.612", - "-730.236", - "-437.016", - "-457.341", - "-570.389", - "-811.128", - "-909.175", - "-398.191", - "-677.39", - "-505.263", - "-288.058", - "-965.314", - "-887.488", - "-598.863", - "-418.017", - "-661.136", - "-387.757", - "-723.568", - "-419.642", - "-477.636", - "-661.051", - "-792.34", - "-578.066", - "-391.344", - "-309.757", - "-609.73", - "-791.579", - "-582.845", - "-674.561", - "-868.148", - "-788.858", - "-879.762", - "-718.544", - "-421.137", - "-535.446", - "-588.534", - "-527.828", - "-951.728", - "-806.864", - "-886.768", - "-545.745", - "-950.116", - "-503.289", - "-735.338", - "-541.187", - "-613.934", - "-964.331", - "-753.963", - "-313.989", - "-670.552", - "-723.82", - "-833.671", - "-322.919", - "-962.162", - "-804.006", - "-929.531", - "-949.184", - "-504.343", - "-424.662", - "-681.563", - "-661.485", - "-325.814", - "-981.754", - "-318.795", - "-630.539", - "-598.33", - "-589.316", - "-653.629", - "-870.615", - "-604.536", - "-729.131", - "-575.22", - "-676.213", - "-722.619", - "-466.183", - "-958.574", - "-923.484", - "-857.675", - "-524.587", - "-502.927", - "-792.94", - "-981.799", - "-675.148", - "-756.667", - "-817.283", - "-399.261", - "-805.019", - "-566.878", - "-948.118", - "-532.234", - "-423.819", - "-332.166", - "-681.74", - "-427.664", - "-925.276", - "-730.571", - "-889.648", - "-817.326", - "-569.266", - "-876.125", - "-759.885", - "-490.032", - "-931.948", - "-532.393", - "-542.776", - "-759.892", - "-925.257", - "-304.186", - "-845.584", - "-778.498", - "-494.813", - "-291.944", - "-697.917", - "-768.318", - "-971.498", - "-231.277", - "-985.249", - "-497.11", - "-279.836", - "-468.323", - "-695.508", - "-858.787", - "-800.516", - "-954.808", - "-696.382", - "-553.702", - "-752.169", - "-607.705", - "-545.032", - "-343.189", - "-997.067", - "-691.301", - "-696.186", - "-519.274", - "-684.231", - "-957.579", - "-402.589", - "-888.511", - "-512.652", - "-970.675", - "-598.151", - "-577.67", - "-932.091", - "-376.399", - "-787.867", - "-871.459", - "-677.657", - "-593.8", - "-786.569", - "-916.651", - "-748.208", - "-727.346", - "-932.967", - "-848.962", - "-787.629", - "-379.57", - "-534.815", - "-554.948", - "-742.241", - "-550.843", - "-765.927", - "-531.241", - "-516.908", - "-721.442", - "-819.604", - "-294.612", - "-687.144", - "-461.141", - "-483.204", - "-539.35", - "-586.968", - "-462.886", - "-337.023", - "-732.733", - "-822.56", - "-675.269", - "-459.315", - "-502.482", - "-819.77", - "-942.399", - "-278.603", - "-889.19", - "-511.357", - "-256.478", - "-893.4", - "-363.138", - "-880.885", - "-606.768", - "-975.344", - "-432.768", - "-789.436", - "-615.844", - "-693.839", - "-500.77", - "-696.28", - "-351.294", - "-911.966", - "-271.661", - "-912.281", - "-870.637", - "-528.445", - "-909.222", - "-871.596", - "-644.993", - "-890.928", - "-524.474", - "-728.349", - "-491.962", - "-631.383", - "-284.224", - "-813.726", - "-941.613", - "-599.362", - "-705.747", - "-686.364", - "-550.882", - "-708.531", - "-506.435", - "-971.968", - "-986.29", - "-490.865", - "-472.739", - "-967.689", - "-867.076", - "-490.218", - "-380.53", - "-958.819", - "-469.918", - "-543.151", - "-610.714", - "-811.557", - "-799.898", - "-482.395", - "-836.466", - "-497.92", - "-794.77", - "-484.303", - "-886.6", - "-274.056", - "-882.16", - "-741.342", - "-369.871", - "-849.128", - "-666.36", - "-553.405", - "-536.243", - "-496.848", - "-799.328", - "-696.44", - "-553.675", - "-656.105", - "-643.072", - "-454.61", - "-995.307", - "-539.17", - "-696.039", - "-953.654", - "-678.279", - "-609.528", - "-489.121", - "-307.713", - "-409.978", - "-693.053", - "-601.347", - "-824.71", - "-294.829", - "-658.936", - "-897.139", - "-483.617", - "-787.336", - "-860.917", - "-493.386", - "-787.479", - "-877.778", - "-510.09", - "-450.946", - "-909.456", - "-602.143", - "-851.964", - "-899.842", - "-562.528", - "-478.414", - "-768.443", - "-783.19", - "-519.391", - "-380.21", - "-485.51", - "-590.59", - "-863.377", - "-950.097", - "-967.745", - "-388.302", - "-631.685", - "-903.957", - "-603.704", - "-860.278", - "-604.425", - "-798.544", - "-716.489", - "-722.844", - "-692.109", - "-752.221", - "-991.528", - "-598.002", - "-549.239", - "-857.254", - "-575.121", - "-889.931", - "-830.365", - "-748.605", - "-963.841", - "-524.296", - "-641.294", - "-964.762", - "-662.888", - "-959.135", - "-762.563", - "-696.157", - "-668.418", - "-716.574", - "-467.285", - "-400.8", - "-819.338", - "-853.364", - "-647.135", - "-390.791", - "-717.248", - "-735.599", - "-859.327", - "-727.22", - "-608.505", - "-595.842", - "-451.129", - "-311.843", - "-846.154", - "-940.183", - "-358.292", - "-824.818", - "-977.226", - "-961.012", - "-419.895", - "-654.56", - "-692.409", - "-277.48", - "-750.833", - "-714.476", - "-742.278", - "-697.833", - "-544.007", - "-391.693", - "-425.517", - "-896.999", - "-603.201", - "-711.357", - "-397.999", - "-408.4", - "-609.395", - "-928.774", - "-566.994", - "-647.435", - "-427.965", - "-459.562", - "-755.653", - "-832.924", - "-633.281", - "-500.014", - "-349.631", - "-526.584", - "-638.867", - "-717.486", - "-780.312", - "-773.352", - "-347.218", - "-569.132", - "-522.296", - "-386.293", - "-762.73", - "-938.527", - "-655.607", - "-993.528", - "-976.808", - "-956.513", - "-629.127", - "-334.03", - "-593.943", - "-968.132", - "-571.085", - "-762.25", - "-490.989", - "-929.57", - "-647.861", - "-770.333", - "-552.76", - "-652.258", - "-824.345", - "-689.577", - "-565.679", - "-857.878", - "-800.401", - "-642.622", - "-939.386", - "-382.944", - "-568.249", - "-683.376", - "-939.248", - "-626.127", - "-567.949", - "-811.405", - "-909.047", - "-508.091", - "-456.864", - "-420.498", - "-837.384", - "-740.293", - "-383.887", - "-839.884", - "-759.384", - "-799.656", - "-848.732", - "-381.27", - "-602.929", - "-757.028", - "-256.86", - "-766.911", - "-523.721", - "-561.53", - "-426.585", - "-994.68", - "-550.793", - "-53.3155", - "-526.33", - "-668.748", - "-983.237", - "-631.351", - "-531.898", - "-584.898", - "-874.195", - "-706.032", - "-694.347", - "-603.554", - "-414.629", - "-757.87", - "-858.607", - "-672.128", - "-639.856", - "-521.028", - "-813.465", - "-593.707", - "-955.705", - "-933.061", - "-634.308", - "-439.945", - "-454.771", - "-532.601", - "-631.678", - "-364.5", - "-565.441", - "-663.77", - "-619.435", - "-596.778", - "-492.852", - "-702.016", - "-754.344", - "-571.507", - "-541.071", - "-939.363", - "-732.675", - "-952.01", - "-827.642", - "-779.99", - "-860.171", - "-752.309", - "-613.29", - "-691.626", - "-985.174", - "-539.853", - "-793.896", - "-786.781", - "-596.948", - "-626.296", - "-779.971", - "-454.39", - "-365.656", - "-891.687", - "-647.14", - "-422.473", - "-890.318", - "-612.684", - "-471.719", - "-520.994", - "-775.087", - "-760.409", - "-974.695", - "-623.273", - "-973.61", - "-595.085", - "-772.445", - "-777.194", - "-796.798", - "-632.351", - "-634.438", - "-925.702", - "-464.305", - "-988.597", - "-770.59", - "-721.878", - "-731.606", - "-715.822", - "-975.133", - "-595.104", - "-481.268", - "-604.962", - "-527.496", - "-709.75", - "-502.846", - "-604.296", - "-800.088", - "-754.766", - "-535.274", - "-620.602", - "-691.824", - "-578.057", - "-414.448", - "-550.349", - "-743.245", - "-743.589", - "-582.421", - "-798.065", - "-936.885", - "-576.148", - "-650.034", - "-674.689", - "-667.042", - "-549.106", - "-728.462", - "-896.033", - "-517.452", - "-593.459", - "-402.651", - "-306.556", - "-983.577", - "-938.98", - "-413.915", - "-404.376", - "-838.41", - "-815.358", - "-343.243", - "-490.786", - "-329.67", - "-651.827", - "-541.236", - "-637.337", - "-992.417", - "-650.829", - "-403.452", - "-922.944", - "-683.915", - "-837.749", - "-822.773", - "-959.761", - "-904.627", - "-585.356", - "-934.994", - "-498.747", - "-734.525", - "-410.273", - "-349.643", - "-621.385", - "-959.602", - "-766.763", - "-570.509", - "-371.43", - "-959.107", - "-881.151", - "-755.858", - "-607.064", - "-795.597", - "-837.317", - "-935.816", - "-703.499", - "-772.729", - "-625.918", - "-820.407", - "-800.36", - "-864.619", - "-435.954", - "-785.185", - "-742.34", - "-621.033", - "-563.416", - "-553.885", - "-414.534", - "-868.658", - "-947.188", - "-717.619", - "-697.567", - "-729.792", - "-381.778", - "-808.192", - "-789.242", - "-965.556", - "-781.203", - "-771.435", - "-747.811", - "-867.208", - "-587.998", - "-487.538", - "-788.07", - "-817.684", - "-931.712", - "-859.881", - "-917.905", - "-744.771", - "-589.687", - "-490.192", - "-562.287", - "-898.797", - "-415.566", - "-598.508", - "-625.431", - "-655.079", - "-972.754", - "-490.616", - "-953.301", - "-708.074", - "-676.995", - "-977.353", - "-731.77", - "-970.114", - "-619.749", - "-836.107", - "-600.382", - "-652.794", - "-597.485", - "-603.084", - "-465.571", - "-645.786", - "-841.92", - "-764.865", - "-509.511", - "-679.551", - "-549.676", - "-758.125", - "-991.766", - "-372.275", - "-483.913", - "-563.945", - "-886.611", - "-856.086", - "-714.521", - "-651.575", - "-993.524", - "-687.758", - "-793.326", - "-703.774", - "-780.758", - "-464.851", - "-960.493", - "-632.281", - "-946.967", - "-226.171", - "-825.576", - "-536.354", - "-967.024", - "-880.957", - "-578.604", - "-408.585", - "-474.192", - "-676.182", - "-745.034", - "-609.188", - "-843.742", - "-973.95", - "-631.003", - "-414.815", - "-531.78", - "-913.26", - "-812.891", - "-621.912", - "-651.519", - "-943.337", - "-605.186", - "-610.066", - "-599.376", - "-632.785", - "-772.865", - "-795.547", - "-416.617", - "-538.433", - "-889.995", - "-681.663", - "-466.204", - "-668.635", - "-615.959", - "-882.378", - "-744.46", - "-837.748", - "-771.934", - "-678.187", - "-728.68", - "-974.433", - "-363.466", - "-864.017", - "-971.585", - "-570.431", - "-851.243", - "-561.321", - "-705.299", - "-973.927", - "-588.085", - "-666.471", - "-718.851", - "-882.379", - "-614.108", - "-943.346", - "-500.713", - "-538.227", - "-356.204", - "-830.677", - "-362.814", - "-889.435", - "-649.494", - "-999.137", - "-650.054", - "-818.643", - "-852.003", - "-829.398", - "-740.13", - "-440.223", - "-791.073", - "-728.728", - "-505.504", - "-767.01", - "-785.99", - "-734.84", - "-697.236", - "-877.661", - "-555.937", - "-979.087", - "-659.504", - "-564.748", - "-314.45", - "-602.297", - "-574.413", - "-993.504", - "-751.785", - "-671.526", - "-888.186", - "-392.417", - "-875.062", - "-442.366", - "-751.756", - "-851.778", - "-627.415", - "-891.151", - "-936.634", - "-984.894", - "-621.438", - "-359.732", - "-438.798", - "-759.332", - "-682.889", - "-492.742", - "-459.709", - "-720.755", - "-712.054", - "-924.332", - "-979.44", - "-506.831", - "-808.097", - "-716.012", - "-639", - "-774.947", - "-648.838", - "-725.053", - "-506.24", - "-780.065", - "-761.141", - "-805.65", - "-605.671", - "-345.812", - "-810.686", - "-945.071", - "-477.622", - "-734.512", - "-797.08", - "-494.366", - "-882.04", - "-417.075", - "-990.326", - "-979.454", - "-439.03", - "-494.311", - "-828.903", - "-560.996", - "-728.436", - "-880.132", - "-627.652", - "-857.183", - "-924.629", - "-546.344", - "-687.782", - "-655.806", - "-659.324", - "-694.084", - "-945.894", - "-679.632", - "-776.108", - "-634.583", - "-858.597", - "-650.791", - "-730.534", - "-385.67", - "-661.243", - "-560.866", - "-972.888", - "-705.375", - "-720.909", - "-623.579", - "-954.564", - "-585.595", - "-161.821", - "-417.874", - "-687.69", - "-347.143", - "-699.179", - "-719.671", - "-650.266", - "-943.065", - "-586.759", - "-761.964", - "-388.76", - "-654.924", - "-763.881", - "-674.212", - "-962.876", - "-719.843", - "-722.854", - "-588.977", - "-582.953", - "-591.294", - "-850.692", - "-460.313", - "-349.795", - "-372.529", - "-905.47", - "-660.574", - "-581.023", - "-764.218", - "-746.438", - "-574.667", - "-949.347", - "-941.252", - "-574.352", - "-884.192", - "-714.812", - "-714.297", - "-629.403", - "-639.862", - "-892.676", - "-653.79", - "-722.427", - "-963.06", - "-650.677", - "-911.028", - "-740.304", - "-983.172", - "-736.923", - "-787.552", - "-947.559", - "-31.8972", - "-957.329", - "-360.444", - "-631.283", - "-911.829", - "-957.762", - "-896.398", - "-689.298", - "-569.826", - "-676.469", - "-596.145", - "-941.931", - "-610.829", - "-698.3", - "-548.411", - "-939.178", - "-893.667", - "-881.191", - "-876.384", - "-576.469", - "-765.57", - "-998.504", - "-996.266", - "-792.738", - "-728.173", - "-735.003", - "-721.345", - "-975.996", - "-794.182", - "-535.951", - "-835.748", - "-758.603", - "-844.075", - "-544.618", - "-730.097", - "-941.963", - "-887.354", - "-902.268", - "-548.602", - "-763.82", - "-857.492", - "-529.388", - "-544.301", - "-780.176", - "-728.334", - "-362.537", - "-881.838", - "-401.664", - "-568.253", - "-870.601", - "-615.707", - "-900.003", - "-860.666", - "-659.694", - "-961.619", - "-789.693", - "-994.373", - "-985.909", - "-765.733", - "-712.572", - "-177.066", - "-550.645", - "-518.436", - "-441.473", - "-695.748", - "-619.83", - "-925.22", - "-913.94", - "-526.918", - "-989.387", - "-744.464", - "-991.767", - "-692.771", - "-781.835", - "-986.522", - "-825.147", - "-738.899", - "-707.262", - "-539.094", - "-611.944", - "-889.402", - "-743.889", - "-952.713", - "-633.721", - "-470.481", - "-714.31", - "-781.749", - "-892.898", - "-475.643", - "-462.365", - "-718.519", - "-952.583", - "-979.173", - "-728.557", - "-759.516", - "-568.091", - "-953.22", - "-927.135", - "-984.189", - "-682.509", - "-715.654", - "-785.557", - "-830.257", - "-951.974", - "-898.583", - "-958.257", - "-824.431", - "-902.905", - "-808.35", - "-877.526", - "-566.997", - "-947.25", - "-741.428", - "-629.378", - "-867.635", - "-742.304", - "-721.525", - "-754.855", - "-540.676", - "-854.037", - "-801.054", - "-881.893", - "-932.744", - "-907.847", - "-418.223", - "-348.841", - "-871.715", - "-762.308", - "-659.11", - "-772.656", - "-994.784", - "-768.177", - "-464.872", - "-733.87", - "-823.044", - "-940.84", - "-468.262", - "-950.727", - "-523.181", - "-517.737", - "-797.405", - "-731.054", - "-759.346", - "-610.549", - "-657.648", - "-744.285", - "-774.18", - "-977.028", - "-527.168", - "-935.858", - "-945.239", - "-969.43", - "-821.817", - "-560.886", - "-889.259", - "-701.799", - "-598.468", - "-896.672", - "-584.887", - "-959.746", - "-861.852", - "-731.101", - "-604.337", - "-35.2772", - "-605.575", - "-771.824", - "-649.692", - "-732.766", - "-635.859", - "-941.067", - "-767.8", - "-798.706", - "-816.672", - "-494.854", - "-660.599", - "-648.412", - "-642.71", - "-855.444", - "-389.277", - "-767.326", - "-998.06", - "-616.215", - "-848.812", - "-951.755", - "-600.752", - "-39.4999", - "-701.34", - "-862.45", - "-775.176", - "-675.493", - "-610.326", - "-849.788", - "-966.736", - "-849.398", - "-955.219", - "-687.659", - "-787.616", - "-826.123", - "-856.514", - "-663.13", - "-724.454", - "-875.471", - "-720.733", - "-958.754", - "-919.838", - "-921.664", - "-939.03", - "-854.551", - "-875.116", - "-417.934", - "-689.836", - "-886.054", - "-835.807", - "-493.301", - "-623.599", - "-499.543", - "-662.25", - "-646.634", - "-361.478", - "-765.933", - "-660.431", - "-643.946", - "-816.02", - "-522.379", - "-564.985", - "-876.332", - "-498.328", - "-865.246", - "-962.078", - "-866.169", - "-717.945", - "-511.744", - "-643.356", - "-991.108", - "-544.607", - "-949.494", - "-603.036", - "-577.043", - "-899.908", - "-898.589", - "-820.447", - "-904.704", - "-517.27", - "-866.432", - "-474.53", - "-542.13", - "-636.216", - "-833.312", - "-700.072", - "-661.879", - "-829.156", - "-881.319", - "-831.17", - "-892.415", - "-509.369", - "-980.826", - "-877.961", - "-964.803", - "-701.153", - "-765.143", - "-921.838", - "-816.045", - "-981.27", - "-961.021", - "-881.158", - "-763.188", - "-734.328", - "-984.807", - "-696.705", - "-875.06", - "-964.884", - "-949.863", - "-929.484", - "-473.613", - "-890.277", - "-711.941", - "-859.711", - "-505.411", - "-949.279", - "-379.367", - "-971.303", - "-424.602", - "-674.635", - "-551.639", - "-776.826", - "-821.616", - "-883.847", - "-887.117", - "-702.943", - "-556.828", - "-527.974", - "-786.997", - "-586.937", - "-929.927", - "-645.257", - "-518.68", - "-782.284", - "-819.82", - "-133.152", - "-690.231", - "-671.34", - "-657.82", - "-699.321", - "-607.542", - "-821.848", - "-816.984", - "-977.844", - "-678.465", - "-633.19", - "-802.611", - "-801.414", - "-828.05", - "-738.841", - "-863.542", - "-628.605", - "-986.955", - "-748.973", - "-698.936", - "-877.204", - "-668.255", - "-823.104", - "-750.866", - "-958.47", - "-545.231", - "-924.266", - "-619.813", - "-868.307", - "-508.321", - "-907.555", - "-564.523", - "-561.31", - "-996.047", - "-478.978", - "-953.84", - "-846.149", - "-970.437", - "-884.346", - "-611.644", - "-930.554", - "-639.646", - "-608.349", - "-888.49", - "-839.562", - "-628.49", - "-892.307", - "-713.236", - "-748.786", - "-933.507", - "-952.591", - "-991.335", - "-924.368", - "-792.2", - "-910.91", - "-870.16", - "-730.367", - "-975.805", - "-667.844", - "-744.709", - "-950.395", - "-915.77", - "-781.136", - "-874.524", - "-403.303", - "-573.787", - "-970.562", - "-905.306", - "-838.428", - "-521.478", - "-950.343", - "-741.091", - "-813.071", - "-621.819", - "-864.099", - "-622.979", - "-889.956", - "-794.964", - "-637.742", - "-785.47", - "-505.006", - "-433.034", - "-512.126", - "-600.412", - "-819.017", - "-970.314", - "-854.509", - "-601.529", - "-936.076", - "-852.697", - "-872.04", - "-907.063", - "-840.987", - "-732.389", - "-516.785", - "-866.867", - "-879.938", - "-667.657", - "-486.044", - "-973.573", - "-630.208", - "-553.803", - "-536.346", - "-787.482", - "-776.694", - "-921.396", - "-759.997", - "-974.578", - "-944.262", - "-900.328", - "-654.499", - "-536.076", - "-663.861", - "-951.474", - "-477.535", - "-976.246", - "-767.661", - "-549.818", - "-588.377", - "-939.427", - "-778.311", - "-823.611", - "-979.224", - "-697.534", - "-725.032", - "-870.863", - "-992.378", - "-761.727", - "-432.411", - "-833.71", - "-850.539", - "-890.471", - "-786.255", - "-459.627", - "-994.041", - "-828.755", - "-794.796", - "-917.267", - "-887.679", - "-832.171", - "-781.519", - "-459.336", - "-670.86", - "-761.422", - "-888.307", - "-526.765", - "-962.389", - "-749.926", - "-794.434", - "-941.473", - "-867.502", - "-930.589", - "-695.119", - "-783.824", - "-997.482", - "-999.192", - "-997.73", - "-530.584", - "-748.431", - "-598.338", - "-933.645", - "-834.453" - ], - "zsrc": "JohnMaddock:36:2fff8d", - "z": [ - "146.506", - "94.0478", - "30.0579", - "127.497", - "226.182", - "120.442", - "207", - "40.9301", - "116.888", - "136.043", - "137.24", - "138.556", - "173.947", - "377.16", - "156.528", - "187.767", - "277.967", - "282.742", - "83.9223", - "141.557", - "244.083", - "155.257", - "46.8482", - "79.6196", - "163.766", - "127.877", - "132.269", - "54.3561", - "65.4689", - "72.2567", - "262.44", - "147.509", - "71.6989", - "203.167", - "151.626", - "99.4564", - "28.5208", - "55.5967", - "117.386", - "87.4771", - "57.9868", - "68.937", - "104.589", - "158.888", - "117.289", - "208.108", - "87.2014", - "138.366", - "184.357", - "33.8805", - "107.543", - "106.519", - "188.482", - "170.141", - "234.317", - "96.5827", - "170.484", - "157.915", - "41.6848", - "92.8181", - "48.5365", - "105.331", - "41.8829", - "114.574", - "66.0225", - "101.004", - "131.532", - "149.954", - "80.271", - "57.5793", - "49.2945", - "158.578", - "278.16", - "331.794", - "80.0297", - "185.747", - "125.572", - "249.833", - "187.351", - "138.951", - "179.307", - "152.714", - "303.9", - "170.799", - "99.4009", - "71.4137", - "90.2", - "94.6255", - "106.643", - "170.602", - "131.398", - "102.736", - "97.843", - "133.227", - "138.095", - "126.405", - "49.4511", - "73.3363", - "22.7898", - "124.455", - "197.256", - "163.147", - "65.3772", - "221.995", - "93.78", - "116.058", - "186.034", - "59.8349", - "72.6498", - "69.5834", - "235.716", - "142.138", - "139.689", - "112.712", - "167.485", - "152.109", - "184.159", - "179.469", - "253.016", - "120.479", - "271.635", - "150.215", - "71.9412", - "110.455", - "102.37", - "164.89", - "120.193", - "259.326", - "159.272", - "388.434", - "85.087", - "137.294", - "219.962", - "103.944", - "20.7673", - "331.643", - "219.413", - "156.648", - "102.771", - "97.3662", - "87.0498", - "107.211", - "193.313", - "119.177", - "191.872", - "80.6679", - "113.399", - "176.785", - "131.106", - "125.472", - "137.773", - "113.559", - "193.45", - "182.223", - "59.6219", - "102.207", - "308.312", - "79.4059", - "278.762", - "222.805", - "362.504", - "170.415", - "43.9291", - "110.425", - "107.043", - "153.492", - "87.7775", - "179.731", - "159.029", - "75.9779", - "88.1475", - "517.021", - "188.223", - "202.054", - "150.253", - "166.689", - "129.597", - "110.807", - "144.316", - "38.6128", - "153.645", - "155.881", - "104.489", - "181.516", - "209.788", - "180.76", - "119.068", - "139.39", - "465.816", - "58.3051", - "278.064", - "92.4432", - "90.7481", - "211.137", - "134.656", - "95.7872", - "207.054", - "142.459", - "134.922", - "87.7433", - "243.02", - "166.095", - "139.6", - "44.5938", - "66.9271", - "230.887", - "106.051", - "110.021", - "165.81", - "66.6324", - "181.8", - "185.497", - "41.2748", - "91.5828", - "229.633", - "263.619", - "77.8846", - "124.421", - "108.631", - "138.294", - "110.081", - "137.298", - "199.909", - "123.451", - "178.911", - "356.914", - "140.988", - "209.409", - "49.1116", - "91.9136", - "119.475", - "222.027", - "316.778", - "208.446", - "42.2286", - "226.224", - "169.564", - "72.5264", - "97.8845", - "255.386", - "383.988", - "146.52", - "42.266", - "67.2609", - "56.0489", - "107.607", - "109.233", - "152.708", - "232.955", - "209.155", - "188.169", - "238.718", - "143.604", - "93.6956", - "85.195", - "118.826", - "249.207", - "124.324", - "223.182", - "82.6707", - "143.84", - "127.114", - "137.452", - "81.5844", - "108.408", - "115.63", - "184.776", - "39.1638", - "218.302", - "73.1245", - "59.1525", - "280.046", - "327.845", - "94.71", - "212.918", - "121.853", - "23.0233", - "216.456", - "94.291", - "215.748", - "139.68", - "73.0349", - "314.689", - "46.653", - "117.866", - "264.306", - "69.1824", - "347.441", - "216.17", - "308.743", - "118.054", - "117.514", - "85.2605", - "352.825", - "44.7199", - "57.4947", - "89.5242", - "178.003", - "110.093", - "203.083", - "99.2695", - "96.3001", - "186.583", - "105.83", - "142.09", - "130.322", - "122.008", - "127.618", - "42.4037", - "121.157", - "36.2069", - "90.5472", - "68.1529", - "310.123", - "123.03", - "281.141", - "118.884", - "92.619", - "34.4371", - "74.4663", - "35.2207", - "132.648", - "120.626", - "114.523", - "288.757", - "103.662", - "149.065", - "135.026", - "87.3051", - "222.233", - "246.173", - "275.62", - "190.251", - "198.615", - "115.549", - "243.366", - "153.7", - "303.253", - "188.148", - "98.9717", - "92.2289", - "119.874", - "242.136", - "83.2405", - "45.8654", - "68.2912", - "311.013", - "138.33", - "196.53", - "65.5284", - "80.1759", - "126.013", - "101.707", - "166.687", - "345.704", - "117.142", - "119.852", - "44.9523", - "246.588", - "149.891", - "106.504", - "93.2358", - "59.2721", - "101.941", - "255.414", - "206.87", - "64.3744", - "77.321", - "253.898", - "98.248", - "103.069", - "48.1634", - "120.06", - "136.218", - "112.785", - "190.57", - "231.261", - "115.049", - "203.969", - "92.7933", - "231.654", - "87.1014", - "46.1735", - "103.271", - "149.584", - "106.207", - "233.202", - "68.7997", - "131.065", - "258.062", - "298.008", - "125.892", - "85.3192", - "78.1409", - "180.733", - "134.312", - "139.523", - "90.4236", - "189.091", - "205.543", - "129.436", - "88.0669", - "83.4486", - "201.02", - "134.704", - "125.724", - "234.099", - "215.649", - "117.583", - "178.724", - "88.0468", - "207.291", - "205.096", - "195.358", - "113.403", - "78.9309", - "299.508", - "272.262", - "14.975", - "71.9692", - "183.156", - "267.462", - "74.5307", - "107.104", - "236.149", - "35.7476", - "108.196", - "172.45", - "41.9408", - "145.504", - "81.9815", - "99.5495", - "55.5868", - "60.7985", - "112.959", - "145.902", - "94.8903", - "220.086", - "121.947", - "143.926", - "113.128", - "88.8438", - "253.662", - "163.759", - "176.109", - "102.958", - "116.626", - "240.642", - "118.345", - "160.197", - "161.277", - "133.037", - "111.676", - "25.0021", - "40.5767", - "244.175", - "188.763", - "120.164", - "86.2519", - "219.801", - "189.744", - "171.086", - "55.511", - "268.285", - "215.53", - "111.864", - "123.892", - "57.9496", - "48.8471", - "339.675", - "49.7321", - "301.525", - "220.716", - "141.592", - "184.951", - "68.086", - "254.544", - "242.737", - "146.532", - "35.502", - "199.846", - "66.0625", - "107.915", - "38.8805", - "222.803", - "46.5364", - "367.409", - "150.522", - "45.6367", - "109.227", - "96.4106", - "109.248", - "56.8851", - "110.609", - "223.327", - "111.608", - "80.8725", - "213.887", - "115.587", - "208.165", - "64.0529", - "80.3137", - "51.1366", - "344.503", - "246.373", - "377.411", - "87.9271", - "265.486", - "139.992", - "153.921", - "321.343", - "265.036", - "221.008", - "81.1945", - "189.048", - "138.231", - "217.866", - "236.634", - "61.0663", - "51.997", - "103.738", - "144.753", - "118.546", - "164.397", - "108.708", - "214.081", - "63.0705", - "5.08552", - "121.048", - "161.716", - "93.3478", - "187.993", - "131.354", - "109.859", - "250.27", - "177.233", - "204.768", - "108.615", - "126.174", - "59.8308", - "148.291", - "70.4323", - "45.7647", - "107.225", - "20.1569", - "174.368", - "34.9184", - "130.554", - "368.747", - "238.265", - "272.064", - "202.102", - "198.27", - "249.553", - "40.8079", - "58.439", - "107.077", - "52.4309", - "37.3891", - "103.566", - "47.8546", - "268.36", - "203.116", - "189.633", - "287.889", - "109.915", - "321.841", - "179.424", - "146.373", - "291.086", - "109.306", - "59.271", - "103.113", - "175.409", - "197.402", - "34.5814", - "236.538", - "92.6401", - "68.556", - "93.8401", - "271.117", - "283.287", - "86.291", - "116.718", - "62.3639", - "21.2509", - "414.3", - "167.171", - "85.408", - "60.4789", - "189.889", - "105.223", - "172.715", - "108.688", - "61.3503", - "221.664", - "76.0811", - "146.57", - "124.11", - "72.0089", - "53.611", - "144.178", - "144.674", - "174.133", - "145.435", - "151.748", - "180.532", - "76.8188", - "88.781", - "91.3981", - "74.2718", - "62.9317", - "213.019", - "196.808", - "130.631", - "78.7683", - "170.742", - "144.214", - "110.689", - "249.456", - "51.3237", - "279.029", - "128.158", - "72.2561", - "73.3001", - "347.813", - "194.973", - "148.92", - "185.159", - "185.774", - "226.212", - "196.779", - "216.604", - "41.7372", - "140.387", - "81.4483", - "90.0061", - "227.894", - "146.564", - "123.505", - "69.3015", - "203.504", - "299.374", - "99.3004", - "114.29", - "98.8271", - "128.363", - "201.609", - "196.418", - "57.0096", - "110.983", - "258.861", - "91.5976", - "86.3052", - "77.0009", - "188.662", - "189.528", - "362.254", - "164.827", - "100.496", - "51.8005", - "381.194", - "107.342", - "412.75", - "262.775", - "32.5474", - "64.9787", - "102.533", - "159.128", - "162.891", - "130.498", - "117.616", - "133.904", - "176.262", - "222.822", - "87.6491", - "123.739", - "163.964", - "164.918", - "52.545", - "122.702", - "128.163", - "83.041", - "346.776", - "201.943", - "128.559", - "55.7731", - "163.214", - "184.687", - "191.604", - "136.982", - "141.918", - "113.756", - "65.9138", - "98.1737", - "161.92", - "218.847", - "206.962", - "157.116", - "93.7549", - "173.699", - "214.922", - "50.5997", - "290.164", - "42.589", - "206.622", - "73.8792", - "64.227", - "81.8691", - "115.006", - "127.081", - "66.7686", - "186.671", - "252.734", - "205.132", - "96.4084", - "102.133", - "171.678", - "27.0275", - "129.489", - "143.716", - "142.183", - "160.194", - "153.7", - "300.887", - "63.091", - "62.9084", - "127.825", - "135.174", - "154.838", - "96.1331", - "62.15", - "96.1425", - "94.8364", - "221.633", - "103.908", - "105.117", - "51.7498", - "160.463", - "340.351", - "76.8913", - "141.37", - "147.792", - "148.712", - "166.197", - "44.494", - "168.795", - "54.8133", - "139.301", - "356.445", - "88.497", - "36.4649", - "86.9122", - "131.473", - "109.069", - "42.9969", - "226.655", - "96.1153", - "29.1445", - "96.4011", - "40.173", - "160.133", - "199.079", - "171.533", - "168.055", - "159.407", - "119.655", - "81.2754", - "47.4813", - "165.16", - "86.5318", - "197.488", - "59.5681", - "241.841", - "105.734", - "63.5999", - "143.87", - "115.018", - "209.236", - "280.682", - "214.589", - "121.019", - "109.372", - "62.8905", - "52.6917", - "105.04", - "205.66", - "107.112", - "132.955", - "275.491", - "63.9673", - "137.581", - "71.3788", - "232.401", - "261.656", - "107.662", - "200.492", - "296.811", - "167.074", - "115.408", - "103.449", - "312.44", - "71.9337", - "123.441", - "100.574", - "125.159", - "180.753", - "190.535", - "330.479", - "115.417", - "308.181", - "84.6579", - "152.77", - "50.8515", - "161.82", - "126.601", - "35.0083", - "180.168", - "110.986", - "197.935", - "146.543", - "62.2943", - "295.997", - "131.398", - "116.582", - "100.096", - "194.439", - "92.5334", - "235.282", - "97.6377", - "62.8905", - "133.7", - "115.432", - "71.8266", - "179.447", - "53.2557", - "55.7297", - "251.291", - "137.2", - "238.551", - "43.2893", - "48.7809", - "397.129", - "36.5242", - "228.472", - "296.148", - "118.884", - "101.022", - "164.551", - "182.81", - "28.9009", - "186.075", - "145.768", - "113.431", - "269.945", - "82.7688", - "75.6457", - "150.998", - "218.451", - "135.835", - "81.7973", - "97.9232", - "139.942", - "176.546", - "182.49", - "252.301", - "88.8529", - "74.3639", - "129.54", - "112.745", - "311.809", - "96.2228", - "278.543", - "255.53", - "217.839", - "53.9245", - "261.428", - "229.223", - "201.741", - "111.496", - "92.9457", - "124.032", - "149.818", - "161.455", - "222.767", - "98.6644", - "46.9268", - "77.6643", - "157.469", - "152.629", - "142.693", - "164.671", - "270.746", - "243.479", - "158.209", - "123.799", - "47.8688", - "174.6", - "250.429", - "139.89", - "114.243", - "80.8223", - "138.49", - "227.115", - "114.331", - "47.6846", - "169.848", - "57.385", - "19.8438", - "177.048", - "144.551", - "96.1806", - "88.5792", - "104.148", - "192.9", - "68.4263", - "169.532", - "140.917", - "39.4456", - "95.1467", - "122.767", - "161.848", - "111.878", - "116.058", - "43.6641", - "81.3875", - "127.343", - "73.7234", - "369.265", - "56.4728", - "40.0711", - "47.4074", - "298.86", - "73.4038", - "182.645", - "188.852", - "89.2332", - "199.56", - "227.769", - "117.802", - "193.857", - "25.1346", - "162.153", - "125.861", - "99.9813", - "172.24", - "237.258", - "35.2918", - "135.689", - "139.494", - "88.1761", - "104.585", - "160.487", - "59.0755", - "98.2694", - "230.551", - "171.564", - "168.443", - "44.4699", - "218.033", - "192.559", - "137.843", - "214.338", - "134.44", - "288.458", - "104.331", - "119.907", - "77.7446", - "75.7763", - "135.578", - "118.275", - "92.0289", - "174.781", - "149.032", - "80.2836", - "172.022", - "100.192", - "88.7008", - "74.7567", - "321.86", - "175.604", - "141.136", - "363.437", - "225.656", - "82.4315", - "83.6634", - "145.39", - "125.762", - "192.342", - "173.857", - "78.5567", - "338.671", - "98.506", - "234.806", - "74.4122", - "93.6571", - "202.491", - "1.45868", - "300.086", - "95.0939", - "196.16", - "68.133", - "160.644", - "76.4957", - "190.827", - "77.8909", - "71.0702", - "143.814", - "132.066", - "68.7651", - "90.2433", - "198.634", - "67.4903", - "335.401", - "160.999", - "119.5", - "122.096", - "289.817", - "91.2266", - "181.223", - "59.875", - "171.529", - "177.124", - "109.541", - "217.838", - "216.819", - "48.038", - "96.3441", - "49.129", - "129.646", - "54.9972", - "146.834", - "67.4381", - "145.626", - "132.426", - "91.7596", - "177.442", - "292.509", - "121.586", - "85.0624", - "278.161", - "159.956", - "137.83", - "130.481", - "91.3819", - "185.12", - "264.687", - "261.602", - "164.067", - "222.93", - "82.1209", - "244.481", - "120.392", - "85.8964", - "106.575", - "101.226", - "125.095", - "44.0323", - "278.864", - "123.104", - "31.7064", - "134.938", - "63.8523", - "50.3061", - "109.318", - "198.061", - "224.62", - "165.606", - "165.721", - "308.816", - "67.2612", - "91.1804", - "100.994", - "152.934", - "55.124", - "81.8999", - "203.394", - "118.074", - "125.169", - "131.575", - "139.729", - "106.957", - "154.032", - "186.671", - "116.94", - "39.8715", - "63.9042", - "134.955", - "129.895", - "121.652", - "107.137", - "234.156", - "99.4124", - "181.099", - "156.689", - "93.7263", - "90.07", - "168.304", - "101.441", - "88.5334", - "64.2376", - "103.206", - "83.3702", - "288.363", - "72.604", - "81.6433", - "145.122", - "70.8172", - "136.665", - "227.356", - "154.443", - "46.1822", - "124.75", - "65.0095", - "58.6056", - "107.781", - "224.293", - "77.1242", - "112.699", - "245.487", - "316.736", - "38.0826", - "85.8422", - "241.133", - "70.3978", - "285.582", - "78.1948", - "179.429", - "105.994", - "81.8395", - "101.772", - "102.396", - "171.849", - "208.302", - "318.144", - "240.422", - "76.2903", - "113.877", - "176.56", - "110.895", - "147.898", - "41.4312", - "91.719", - "98.1177", - "98.4625", - "80.481", - "76.7629", - "296.09", - "261.785", - "120.895", - "161.278", - "91.2588", - "222.3", - "338.018", - "179.183", - "212.025", - "113.732", - "185.394", - "183.164", - "249.181", - "94.4103", - "132.906", - "121.553", - "60.1158", - "128.353", - "158.385", - "106.97", - "176.661", - "156.739", - "89.715", - "114.876", - "106.776", - "48.3078", - "110.875", - "82.4378", - "112.225", - "122.582", - "227.807", - "110.502", - "129.298", - "97.5257", - "65.482", - "144.714", - "156.801", - "177.916", - "259.821", - "196.209", - "117.724", - "197.407", - "121.55", - "161.149", - "170.569", - "48.2659", - "119.211", - "160.304", - "77.4435", - "119.034", - "32.1298", - "200.524", - "63.8008", - "91.0926", - "225.726", - "69.4503", - "241.64", - "113.05", - "116.203", - "49.4872", - "109.215", - "97.5042", - "221.249", - "78.6618", - "168.234", - "147.061", - "216.431", - "44.5865", - "105.398", - "163.659", - "98.2938", - "271.999", - "51.385", - "92.4298", - "117.783", - "236.9", - "122.602", - "269.135", - "168.12", - "177.598", - "125.054", - "198.213", - "260.972", - "229.17", - "176.499", - "167.135", - "152.945", - "161.124", - "1.33994", - "343.228", - "70.2709", - "223.176", - "116.731", - "157.676", - "141.207", - "77.0883", - "145.505", - "94.0374", - "211.22", - "160.629", - "155.985", - "117.869", - "127.688", - "92.2092", - "87.3187", - "181.511", - "108.964", - "73.3707", - "235.399", - "125.636", - "75.4834", - "89.2028", - "173.371", - "132.481", - "124.706", - "30.6085", - "287.931", - "101.868", - "140.653", - "123.346", - "242.205", - "290.066", - "323.057", - "108.749", - "141.018", - "223.907", - "98.9411", - "86.9241", - "291.344", - "39.5684", - "175.905", - "299.272", - "129.268", - "327.284", - "106.597", - "138.76", - "313.113", - "203.321", - "339.244", - "94.137", - "182.368", - "78.6821", - "329.763", - "243.161", - "296.742", - "56.6447", - "190.266", - "33.1467", - "244.028", - "132.866", - "186.99", - "49.0162", - "337.735", - "177.768", - "143.466", - "181.412", - "50.1648", - "165.684", - "141.188", - "62.0608", - "222.691", - "105.486", - "248.715", - "185.715", - "185.55", - "176.646", - "177.197", - "144.098", - "51.995", - "102.065", - "80.7215", - "107.123", - "241.982", - "206.282", - "224.469", - "125.802", - "135.491", - "117.488", - "85.0082", - "124.493", - "239.888", - "60.7465", - "230.85", - "116.117", - "143.354", - "55.3887", - "79.937", - "55.541", - "263.187", - "86.5915", - "120.756", - "83.8971", - "289.642", - "233.705", - "182.323", - "209.149", - "245.262", - "169.665", - "124.1", - "161.889", - "261.059", - "79.832", - "79.885", - "159.123", - "239.357", - "128.452", - "151.814", - "87.2212", - "40.7497", - "145.011", - "181.923", - "310.171", - "263.262", - "76.0874", - "88.5514", - "210.073", - "69.3546", - "375.307", - "203.702", - "290.81", - "71.3985", - "138.754", - "49.5104", - "184.003", - "126.701", - "103.388", - "221.517", - "89.9949", - "85.4515", - "94.8564", - "87.353", - "359.932", - "102", - "118.263", - "197.946", - "239.967", - "104.933", - "221.021", - "142.434", - "89.2945", - "66.7718", - "69.649", - "152.248", - "225.385", - "184.316", - "75.5215", - "75.8945", - "104.076", - "187.854", - "25.046", - "190.379", - "149.992", - "100.814", - "80.3066", - "148.808", - "163.544", - "217.107", - "46.9633", - "247.422", - "92.3624", - "148.636", - "92.6097", - "56.3401", - "232.823", - "167.798", - "270.532", - "95.6375", - "91.6637", - "181.156", - "218.571", - "70.5278", - "29.7141", - "42.3549", - "128.984", - "122.649", - "101.637", - "255.563", - "199.066", - "62.1002", - "112.302", - "250.444", - "80.0976", - "210.415", - "87.5881", - "145.574", - "169.655", - "111.641", - "180.678", - "71.9828", - "122.028", - "398.684", - "127.751", - "111.773", - "208.722", - "244.979", - "293.496", - "113.262", - "385.268", - "505.585", - "237.062", - "44.7759", - "59.1793", - "90.7383", - "295.394", - "150.724", - "184.006", - "107.67", - "68.6448", - "62.8101", - "122.35", - "209.189", - "174.168", - "266.661", - "263.537", - "210.636", - "125.141", - "103.83", - "138.565", - "137.958", - "142.308", - "121.507", - "111.648", - "80.845", - "370.636", - "246.002", - "193.256", - "212.824", - "148.664", - "192.409", - "209.49", - "201.344", - "76.9372", - "242.899", - "282.347", - "117.007", - "163.318", - "177.604", - "90.2264", - "140.626", - "67.3875", - "138.841", - "138.932", - "62.8863", - "46.8989", - "129.851", - "59.8312", - "123.762", - "150.767", - "78.3997", - "274.303", - "121.659", - "98.1386", - "197.796", - "131.537", - "246.086", - "255.544", - "183.736", - "139.861", - "0.900257", - "235.856", - "93.5785", - "77.619", - "292.756", - "188.865", - "191.522", - "322.246", - "87.1685", - "315.657", - "150.105", - "204.12", - "210.976", - "156.174", - "160.829", - "269.592", - "121.481", - "103.646", - "163.146", - "181.121", - "202.077", - "148.828", - "203.482", - "113.635", - "73.7598", - "116.402", - "116.451", - "211.556", - "210.216", - "62.0831", - "191.119", - "133.848", - "299.443", - "66.4774", - "117.285", - "39.1693", - "178.532", - "191.722", - "135.302", - "176.422", - "171.993", - "180.186", - "325.757", - "166.429", - "122.594", - "318.695", - "119.952", - "213.02", - "111.406", - "80.1492", - "75.5139", - "214.054", - "289.627", - "96.8886", - "207.387", - "153.966", - "191.074", - "114.82", - "43.4931", - "88.4963", - "130.662", - "146.064", - "236.074", - "315.98", - "60.096", - "56.3643", - "171.968", - "328.434", - "60.6317", - "125.117", - "135.13", - "313.452", - "125.212", - "100.359", - "191.817", - "117.466", - "42.4678", - "176.55", - "49.1297", - "88.8582", - "113.847", - "67.639", - "102.565", - "121.629", - "80.9719", - "132.859", - "96.297", - "341.636", - "84.7105", - "113.027", - "185.061", - "161.24", - "120.269", - "84.8832", - "283.673", - "97.2409", - "255.247", - "121.689", - "50.4676", - "205.978", - "87.4038", - "176.535", - "104.623", - "518.971", - "86.0329", - "212.946", - "211.62", - "171.028", - "71.2528", - "149.014", - "199.363", - "94.7841", - "234.777", - "126.507", - "107.284", - "112.678", - "102.384", - "96.0602", - "38.6807", - "221.016", - "242.802", - "199.131", - "230.224", - "271.461", - "62.822", - "524.298", - "87.4663", - "147.341", - "179.997", - "85.4574", - "87.6355", - "138.585", - "184.128", - "150.794", - "203.555", - "70.9459", - "146.539", - "325.603", - "325.157", - "111.205", - "141.839", - "188.576", - "152.136", - "162.893", - "121.073", - "136.343", - "170.793", - "134.791", - "92.4543", - "128.975", - "154.7", - "109.191", - "95.6425", - "47.154", - "121.759", - "142.427", - "75.854", - "191.641", - "35.4501", - "296.514", - "80.1232", - "158.579", - "370.989", - "164.9", - "74.1206", - "96.1554", - "109.621", - "130.199", - "127.457", - "118.078", - "81.6078", - "77.4404", - "103.339", - "395.932", - "63.5299", - "177.681", - "132.125", - "86.1391", - "171.105", - "135.573", - "74.2978", - "249.857", - "83.6921", - "303.81", - "33.8337", - "63.9733", - "97.5111", - "161.178", - "220.269", - "196.182", - "158.006", - "199.399", - "146.908", - "366.553", - "109.302", - "322.951", - "91.9893", - "218.763", - "137.933", - "186.993", - "116.711", - "146.746", - "147.303", - "205.222", - "162.337", - "192.567", - "134.172", - "196.233", - "92.0535", - "112.837", - "118.808", - "177.176", - "324.509", - "128.243", - "197.622", - "101.81", - "145.981", - "150.358", - "296.139", - "62.2769", - "133.267", - "42.9027", - "116.327", - "67.0553", - "295.658", - "112.402", - "162.345", - "165.433", - "117.139", - "177.798", - "74.2716", - "87.3393", - "78.5399", - "276.671", - "73.3072", - "61.6144", - "210.969", - "295.519", - "25.2399", - "97.6259", - "67.0968", - "157.593", - "76.5594", - "255.544", - "192.059", - "91.803", - "257.775", - "163.392", - "131.976", - "222.402", - "182.487", - "169.182", - "75.2143", - "106.699", - "200.151", - "232.161", - "154.017", - "104.861", - "152.996", - "78.4536", - "230.233", - "91.4783", - "210.787", - "233.391", - "214.305", - "215.726", - "83.4136", - "77.0635", - "162.719", - "42.4814", - "80.8159", - "170.894", - "127.851", - "179.526", - "151.078", - "282.954", - "173.151", - "125.959", - "121.772", - "70.5213", - "72.8344", - "114.501", - "229.222", - "82.4414", - "153.239", - "80.0855", - "155.45", - "135.841", - "222.178", - "202.502", - "151.513", - "162.015", - "409.894", - "223.761", - "77.868", - "213.399", - "156.017", - "124.367", - "303.066", - "218.284", - "281.817", - "147.28", - "51.0788", - "123.469", - "264.542", - "117.557", - "251.253", - "129.667", - "107.558", - "129.137", - "91.1672", - "179.031", - "158.144", - "113.83", - "146.293", - "133.062", - "90.6974", - "112.95", - "62.5129", - "138.128", - "67.5076", - "101.278", - "108.585", - "292.141", - "281.084", - "133.43", - "279.984", - "133.186", - "165.519", - "215.375", - "116.002", - "68.7449", - "46.5646", - "87.9545", - "225.146", - "196.445", - "104.289", - "224.503", - "84.3242", - "81.8748", - "65.1787", - "239.39", - "205.671", - "150.057", - "104.467", - "294.358", - "276.004", - "268.771", - "140.77", - "60.4518", - "261.855", - "145.263", - "69.58", - "200.31", - "161.796", - "79.8187", - "76.3648", - "248.041", - "75.7139", - "310.269", - "163.109", - "91.6113", - "312.409", - "125.416", - "98.016", - "379.571", - "114.965", - "111.083", - "137.96", - "180.722", - "308.606", - "51.3028", - "188.913", - "170.272", - "101.884", - "111.037", - "200.267", - "79.4949", - "120.581", - "73.4149", - "159.725", - "131.84", - "311.144", - "62.5095", - "138.426", - "134.114", - "96.9516", - "116.823", - "153.349", - "276.657", - "129.681", - "191.465", - "155.806", - "151.968", - "378.522", - "208.098", - "194.326", - "82.5396", - "145.483", - "138.133" - ], - "marker": { - "size": 2, - "color": "rgb(226, 227, 157)" - } - }, - { - "mode": "none", - "name": "< 64 Not Shown For Brevity", - "type": "scatter3d", - "xsrc": "JohnMaddock:37:afbc13", - "x": [ - "0" - ], - "ysrc": "JohnMaddock:37:e0c914", - "y": [ - "0" - ], - "zsrc": "JohnMaddock:37:27027b", - "z": [ - "0" - ] - } - ], - "layout": { - "scene": { - "xaxis": { - "type": "linear", - "title": { - "text": "a" - } - }, - "yaxis": { - "type": "linear", - "title": { - "text": "b" - } - }, - "camera": { - "up": { - "x": 0, - "y": 0, - "z": 1 - }, - "eye": { - "x": -1.338175508111319, - "y": -1.4074097814681177, - "z": -0.9570705389462572 - }, - "center": { - "x": 0, - "y": 0, - "z": 0 - }, - "projection": { - "type": "perspective" - } - }, - "aspectmode": "auto", - "aspectratio": { - "x": 1.240208352103052, - "y": 1.2397605392647444, - "z": 0.6503805415489837 - } - }, - "title": { - "text": "Error Plot For 1F1(a, b, z)

\nFor -100 < b < 0 and 0 < a,z < 1000
\n
\n(Taken from 100000 uniformly distributed points)
" - }, - "xaxis": { - "range": [ - -1, - 6 - ], - "autorange": true - }, - "yaxis": { - "range": [ - -1, - 4 - ], - "autorange": true - }, - "autosize": true, - "template": { - "data": { - "bar": [ - { - "type": "bar", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "table": [ - { - "type": "table", - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - } - } - ], - "carpet": [ - { - "type": "carpet", - "aaxis": { - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "endlinecolor": "#2a3f5f", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "endlinecolor": "#2a3f5f", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - } - } - ], - "mesh3d": [ - { - "type": "mesh3d", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "contour": [ - { - "type": "contour", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "heatmap": [ - { - "type": "heatmap", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "scatter": [ - { - "type": "scatter", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "surface": [ - { - "type": "surface", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "heatmapgl": [ - { - "type": "heatmapgl", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "histogram": [ - { - "type": "histogram", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - }, - "type": "parcoords" - } - ], - "scatter3d": [ - { - "type": "scatter3d", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scattergl": [ - { - "type": "scattergl", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "choropleth": [ - { - "type": "choropleth", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "scattergeo": [ - { - "type": "scattergeo", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "histogram2d": [ - { - "type": "histogram2d", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "scatterpolar": [ - { - "type": "scatterpolar", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "contourcarpet": [ - { - "type": "contourcarpet", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "scattercarpet": [ - { - "type": "scattercarpet", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scattermapbox": [ - { - "type": "scattermapbox", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scatterpolargl": [ - { - "type": "scatterpolargl", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scatterternary": [ - { - "type": "scatterternary", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "histogram2dcontour": [ - { - "type": "histogram2dcontour", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ] - }, - "layout": { - "geo": { - "bgcolor": "white", - "showland": true, - "lakecolor": "white", - "landcolor": "white", - "showlakes": true, - "subunitcolor": "#C8D4E3" - }, - "font": { - "color": "#2a3f5f" - }, - "polar": { - "bgcolor": "white", - "radialaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8" - }, - "angularaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8" - } - }, - "scene": { - "xaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - }, - "yaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - }, - "zaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "automargin": true, - "zerolinecolor": "#EBF0F8", - "zerolinewidth": 2 - }, - "yaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "automargin": true, - "zerolinecolor": "#EBF0F8", - "zerolinewidth": 2 - }, - "ternary": { - "aaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "baxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "caxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "bgcolor": "white" - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#19d3f3", - "#e763fa", - "#fecb52", - "#ffa15a", - "#ff6692", - "#b6e880" - ], - "hovermode": "closest", - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0508b8" - ], - [ - 0.0893854748603352, - "#1910d8" - ], - [ - 0.1787709497206704, - "#3c19f0" - ], - [ - 0.2681564245810056, - "#6b1cfb" - ], - [ - 0.3575418994413408, - "#981cfd" - ], - [ - 0.44692737430167595, - "#bf1cfd" - ], - [ - 0.5363128491620112, - "#dd2bfd" - ], - [ - 0.6256983240223464, - "#f246fe" - ], - [ - 0.7150837988826816, - "#fc67fd" - ], - [ - 0.8044692737430168, - "#fe88fc" - ], - [ - 0.8938547486033519, - "#fea5fd" - ], - [ - 0.9832402234636871, - "#febefe" - ], - [ - 1, - "#fec3fe" - ] - ], - "sequentialminus": [ - [ - 0, - "#0508b8" - ], - [ - 0.0893854748603352, - "#1910d8" - ], - [ - 0.1787709497206704, - "#3c19f0" - ], - [ - 0.2681564245810056, - "#6b1cfb" - ], - [ - 0.3575418994413408, - "#981cfd" - ], - [ - 0.44692737430167595, - "#bf1cfd" - ], - [ - 0.5363128491620112, - "#dd2bfd" - ], - [ - 0.6256983240223464, - "#f246fe" - ], - [ - 0.7150837988826816, - "#fc67fd" - ], - [ - 0.8044692737430168, - "#fe88fc" - ], - [ - 0.8938547486033519, - "#fea5fd" - ], - [ - 0.9832402234636871, - "#febefe" - ], - [ - 1, - "#fec3fe" - ] - ] - }, - "plot_bgcolor": "white", - "paper_bgcolor": "white", - "shapedefaults": { - "line": { - "width": 0 - }, - "opacity": 0.4, - "fillcolor": "#506784" - }, - "annotationdefaults": { - "arrowhead": 0, - "arrowcolor": "#506784", - "arrowwidth": 1 - } - }, - "themeRef": "PLOTLY_WHITE" - }, - "showlegend": true - }, - "frames": [] -} \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/plotlyjs-bundle.js boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/plotlyjs-bundle.js --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/plotlyjs-bundle.js 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/plotlyjs-bundle.js 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Plotly=t()}}(function(){return function(){return function t(e,r,n){function i(o,s){if(!r[o]){if(!e[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(a)return a(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[o]={exports:{}};e[o][0].call(c.exports,function(t){var r=e[o][1][t];return i(r||t)},c,c.exports,t,e,r,n)}return r[o].exports}for(var a="function"==typeof require&&require,o=0;oa&&(b=a);var o=e.min(i,function(t){return(y-n-(t.length-1)*b)/e.sum(t,c)});i.forEach(function(t){t.forEach(function(t,e){t.y1=(t.y0=e)+t.value*o})}),t.links.forEach(function(t){t.width=t.value*o})})(),d();for(var a=1,o=k;o>0;--o)l(a*=.99),d(),s(a),d();function s(t){i.forEach(function(r){r.forEach(function(r){if(r.targetLinks.length){var n=(e.sum(r.targetLinks,h)/e.sum(r.targetLinks,c)-f(r))*t;r.y0+=n,r.y1+=n}})})}function l(t){i.slice().reverse().forEach(function(r){r.forEach(function(r){if(r.sourceLinks.length){var n=(e.sum(r.sourceLinks,p)/e.sum(r.sourceLinks,c)-f(r))*t;r.y0+=n,r.y1+=n}})})}function d(){i.forEach(function(t){var e,r,i,a=n,o=t.length;for(t.sort(u),i=0;i0&&(e.y0+=r,e.y1+=r),a=e.y1+b;if((r=a-b-y)>0)for(a=e.y0-=r,e.y1-=r,i=o-2;i>=0;--i)e=t[i],(r=e.y1+b-a)>0&&(e.y0-=r,e.y1-=r),a=e.y0})}}(a),S(a),a}function S(t){t.nodes.forEach(function(t){t.sourceLinks.sort(l),t.targetLinks.sort(s)}),t.nodes.forEach(function(t){var e=t.y0,r=e;t.sourceLinks.forEach(function(t){t.y0=e+t.width/2,e+=t.width}),t.targetLinks.forEach(function(t){t.y1=r+t.width/2,r+=t.width})})}return E.update=function(t){return S(t),t},E.nodeId=function(t){return arguments.length?(_="function"==typeof t?t:o(t),E):_},E.nodeAlign=function(t){return arguments.length?(w="function"==typeof t?t:o(t),E):w},E.nodeWidth=function(t){return arguments.length?(x=+t,E):x},E.nodePadding=function(t){return arguments.length?(b=+t,E):b},E.nodes=function(t){return arguments.length?(A="function"==typeof t?t:o(t),E):A},E.links=function(t){return arguments.length?(M="function"==typeof t?t:o(t),E):M},E.size=function(e){return arguments.length?(t=n=0,i=+e[0],y=+e[1],E):[i-t,y-n]},E.extent=function(e){return arguments.length?(t=+e[0][0],i=+e[1][0],n=+e[0][1],y=+e[1][1],E):[[t,n],[i,y]]},E.iterations=function(t){return arguments.length?(k=+t,E):k},E},t.sankeyCenter=function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,i)-1:0},t.sankeyLeft=function(t){return t.depth},t.sankeyRight=function(t,e){return e-1-t.height},t.sankeyJustify=a,t.sankeyLinkHorizontal=function(){return n.linkHorizontal().source(y).target(x)},Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?i(r,t("d3-array"),t("d3-collection"),t("d3-shape")):i(n.d3=n.d3||{},n.d3,n.d3,n.d3)},{"d3-array":95,"d3-collection":96,"d3-shape":106}],3:[function(t,e,r){"use strict";var n="undefined"==typeof WeakMap?t("weak-map"):WeakMap,i=t("gl-buffer"),a=t("gl-vao"),o=new n;e.exports=function(t){var e=o.get(t),r=e&&(e._triangleBuffer.handle||e._triangleBuffer.buffer);if(!r||!t.isBuffer(r)){var n=i(t,new Float32Array([-1,-1,-1,4,4,-1]));(e=a(t,[{buffer:n,type:t.FLOAT,size:2}]))._triangleBuffer=n,o.set(t,e)}e.bind(),t.drawArrays(t.TRIANGLES,0,3),e.unbind()}},{"gl-buffer":197,"gl-vao":371,"weak-map":1395}],4:[function(t,e,r){e.exports=function(t){var e=0,r=0,n=0,i=0;return t.map(function(t){var a=(t=t.slice())[0],o=a.toUpperCase();if(a!=o)switch(t[0]=o,a){case"a":t[6]+=n,t[7]+=i;break;case"v":t[1]+=i;break;case"h":t[1]+=n;break;default:for(var s=1;si&&(i=t[o]),t[o]=0;u--)if(c[u]!==f[u])return!1;for(u=c.length-1;u>=0;u--)if(l=c[u],!y(t[l],e[l],r,n))return!1;return!0}(t,e,r,o))}return r?t===e:t==e}function x(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function b(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function _(t,e,r,n){var i;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=function(t){var e;try{t()}catch(t){e=t}return e}(e),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),t&&!i&&g(i,r,"Missing expected exception"+n);var o="string"==typeof n,s=!t&&i&&!r;if((!t&&a.isError(i)&&o&&b(i,r)||s)&&g(i,r,"Got unwanted exception"+n),t&&i&&r&&!b(i,r)||!t&&i)throw i}f.AssertionError=function(t){var e;this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=d(m((e=this).actual),128)+" "+e.operator+" "+d(m(e.expected),128),this.generatedMessage=!0);var r=t.stackStartFunction||g;if(Error.captureStackTrace)Error.captureStackTrace(this,r);else{var n=new Error;if(n.stack){var i=n.stack,a=p(r),o=i.indexOf("\n"+a);if(o>=0){var s=i.indexOf("\n",o+1);i=i.substring(s+1)}this.stack=i}}},a.inherits(f.AssertionError,Error),f.fail=g,f.ok=v,f.equal=function(t,e,r){t!=e&&g(t,e,r,"==",f.equal)},f.notEqual=function(t,e,r){t==e&&g(t,e,r,"!=",f.notEqual)},f.deepEqual=function(t,e,r){y(t,e,!1)||g(t,e,r,"deepEqual",f.deepEqual)},f.deepStrictEqual=function(t,e,r){y(t,e,!0)||g(t,e,r,"deepStrictEqual",f.deepStrictEqual)},f.notDeepEqual=function(t,e,r){y(t,e,!1)&&g(t,e,r,"notDeepEqual",f.notDeepEqual)},f.notDeepStrictEqual=function t(e,r,n){y(e,r,!0)&&g(e,r,n,"notDeepStrictEqual",t)},f.strictEqual=function(t,e,r){t!==e&&g(t,e,r,"===",f.strictEqual)},f.notStrictEqual=function(t,e,r){t===e&&g(t,e,r,"!==",f.notStrictEqual)},f.throws=function(t,e,r){_(!0,t,e,r)},f.doesNotThrow=function(t,e,r){_(!1,t,e,r)},f.ifError=function(t){if(t)throw t};var w=Object.keys||function(t){var e=[];for(var r in t)o.call(t,r)&&e.push(r);return e}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"util/":1392}],13:[function(t,e,r){e.exports=function(t){return atob(t)}},{}],14:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=e.length,a=new Array(r+1),o=0;o0?l-4:l;var c=0;for(e=0;e>16&255,s[c++]=n>>8&255,s[c++]=255&n;2===o?(n=i[t.charCodeAt(e)]<<2|i[t.charCodeAt(e+1)]>>4,s[c++]=255&n):1===o&&(n=i[t.charCodeAt(e)]<<10|i[t.charCodeAt(e+1)]<<4|i[t.charCodeAt(e+2)]>>2,s[c++]=n>>8&255,s[c++]=255&n);return s},r.fromByteArray=function(t){for(var e,r=t.length,i=r%3,a="",o=[],s=0,l=r-i;sl?l:s+16383));1===i?(e=t[r-1],a+=n[e>>2],a+=n[e<<4&63],a+="=="):2===i&&(e=(t[r-2]<<8)+t[r-1],a+=n[e>>10],a+=n[e>>4&63],a+=n[e<<2&63],a+="=");return o.push(a),o.join("")};for(var n=[],i=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,l=o.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function c(t,e,r){for(var i,a,o=[],s=e;s>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],16:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}},{"./lib/rationalize":26}],17:[function(t,e,r){"use strict";e.exports=function(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}},{}],18:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[1]),t[1].mul(e[0]))}},{"./lib/rationalize":26}],19:[function(t,e,r){"use strict";var n=t("./is-rat"),i=t("./lib/is-bn"),a=t("./lib/num-to-bn"),o=t("./lib/str-to-bn"),s=t("./lib/rationalize"),l=t("./div");e.exports=function t(e,r){if(n(e))return r?l(e,t(r)):[e[0].clone(),e[1].clone()];var u=0;var c,f;if(i(e))c=e.clone();else if("string"==typeof e)c=o(e);else{if(0===e)return[a(0),a(1)];if(e===Math.floor(e))c=a(e);else{for(;e!==Math.floor(e);)e*=Math.pow(2,256),u-=256;c=a(e)}}if(n(r))c.mul(r[1]),f=r[0].clone();else if(i(r))f=r.clone();else if("string"==typeof r)f=o(r);else if(r)if(r===Math.floor(r))f=a(r);else{for(;r!==Math.floor(r);)r*=Math.pow(2,256),u+=256;f=a(r)}else f=a(1);u>0?c=c.ushln(u):u<0&&(f=f.ushln(-u));return s(c,f)}},{"./div":18,"./is-rat":20,"./lib/is-bn":24,"./lib/num-to-bn":25,"./lib/rationalize":26,"./lib/str-to-bn":27}],20:[function(t,e,r){"use strict";var n=t("./lib/is-bn");e.exports=function(t){return Array.isArray(t)&&2===t.length&&n(t[0])&&n(t[1])}},{"./lib/is-bn":24}],21:[function(t,e,r){"use strict";var n=t("bn.js");e.exports=function(t){return t.cmp(new n(0))}},{"bn.js":35}],22:[function(t,e,r){"use strict";var n=t("./bn-sign");e.exports=function(t){var e=t.length,r=t.words,i=0;if(1===e)i=r[0];else if(2===e)i=r[0]+67108864*r[1];else for(var a=0;a20)return 52;return r+32}},{"bit-twiddle":33,"double-bits":113}],24:[function(t,e,r){"use strict";t("bn.js");e.exports=function(t){return t&&"object"==typeof t&&Boolean(t.words)}},{"bn.js":35}],25:[function(t,e,r){"use strict";var n=t("bn.js"),i=t("double-bits");e.exports=function(t){var e=i.exponent(t);return e<52?new n(t):new n(t*Math.pow(2,52-e)).ushln(e-52)}},{"bn.js":35,"double-bits":113}],26:[function(t,e,r){"use strict";var n=t("./num-to-bn"),i=t("./bn-sign");e.exports=function(t,e){var r=i(t),a=i(e);if(0===r)return[n(0),n(1)];if(0===a)return[n(0),n(0)];a<0&&(t=t.neg(),e=e.neg());var o=t.gcd(e);if(o.cmpn(1))return[t.div(o),e.div(o)];return[t,e]}},{"./bn-sign":21,"./num-to-bn":25}],27:[function(t,e,r){"use strict";var n=t("bn.js");e.exports=function(t){return new n(t)}},{"bn.js":35}],28:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[0]),t[1].mul(e[1]))}},{"./lib/rationalize":26}],29:[function(t,e,r){"use strict";var n=t("./lib/bn-sign");e.exports=function(t){return n(t[0])*n(t[1])}},{"./lib/bn-sign":21}],30:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}},{"./lib/rationalize":26}],31:[function(t,e,r){"use strict";var n=t("./lib/bn-to-num"),i=t("./lib/ctz");e.exports=function(t){var e=t[0],r=t[1];if(0===e.cmpn(0))return 0;var a=e.abs().divmod(r.abs()),o=a.div,s=n(o),l=a.mod,u=e.negative!==r.negative?-1:1;if(0===l.cmpn(0))return u*s;if(s){var c=i(s)+4,f=n(l.ushln(c).divRound(r));return u*(s+f*Math.pow(2,-c))}var h=r.bitLength()-l.bitLength()+53,f=n(l.ushln(h).divRound(r));return h<1023?u*f*Math.pow(2,-h):(f*=Math.pow(2,-1023),u*f*Math.pow(2,1023-h))}},{"./lib/bn-to-num":22,"./lib/ctz":23}],32:[function(t,e,r){"use strict";function n(t,e,r,n,i){var a=["function ",t,"(a,l,h,",n.join(","),"){",i?"":"var i=",r?"l-1":"h+1",";while(l<=h){var m=(l+h)>>>1,x=a[m]"];return i?e.indexOf("c")<0?a.push(";if(x===y){return m}else if(x<=y){"):a.push(";var p=c(x,y);if(p===0){return m}else if(p<=0){"):a.push(";if(",e,"){i=m;"),r?a.push("l=m+1}else{h=m-1}"):a.push("h=m-1}else{l=m+1}"),a.push("}"),i?a.push("return -1};"):a.push("return i};"),a.join("")}function i(t,e,r,i){return new Function([n("A","x"+t+"y",e,["y"],i),n("P","c(x,y)"+t+"0",e,["y","c"],i),"function dispatchBsearch",r,"(a,y,c,l,h){if(typeof(c)==='function'){return P(a,(l===void 0)?0:l|0,(h===void 0)?a.length-1:h|0,y,c)}else{return A(a,(c===void 0)?0:c|0,(l===void 0)?a.length-1:l|0,y)}}return dispatchBsearch",r].join(""))()}e.exports={ge:i(">=",!1,"GE"),gt:i(">",!1,"GT"),lt:i("<",!0,"LT"),le:i("<=",!0,"LE"),eq:i("-",!0,"EQ",!0)}},{}],33:[function(t,e,r){"use strict";function n(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}r.INT_BITS=32,r.INT_MAX=2147483647,r.INT_MIN=-1<<31,r.sign=function(t){return(t>0)-(t<0)},r.abs=function(t){var e=t>>31;return(t^e)-e},r.min=function(t,e){return e^(t^e)&-(t65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},r.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},r.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},r.countTrailingZeros=n,r.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)+1},r.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},r.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var i=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<>>8&255]<<16|i[t>>>16&255]<<8|i[t>>>24&255]},r.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},r.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},r.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},r.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},r.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>n(t)+1}},{}],34:[function(t,e,r){"use strict";var n=t("clamp");e.exports=function(t,e){e||(e={});var r,o,s,l,u,c,f,h,p,d,m,g=null==e.cutoff?.25:e.cutoff,v=null==e.radius?8:e.radius,y=e.channel||0;if(ArrayBuffer.isView(t)||Array.isArray(t)){if(!e.width||!e.height)throw Error("For raw data width and height should be provided by options");r=e.width,o=e.height,l=t,c=e.stride?e.stride:Math.floor(t.length/r/o)}else window.HTMLCanvasElement&&t instanceof window.HTMLCanvasElement?(f=(h=t).getContext("2d"),r=h.width,o=h.height,p=f.getImageData(0,0,r,o),l=p.data,c=4):window.CanvasRenderingContext2D&&t instanceof window.CanvasRenderingContext2D?(h=t.canvas,f=t,r=h.width,o=h.height,p=f.getImageData(0,0,r,o),l=p.data,c=4):window.ImageData&&t instanceof window.ImageData&&(p=t,r=t.width,o=t.height,l=p.data,c=4);if(s=Math.max(r,o),window.Uint8ClampedArray&&l instanceof window.Uint8ClampedArray||window.Uint8Array&&l instanceof window.Uint8Array)for(u=l,l=Array(r*o),d=0,m=u.length;d=49&&o<=54?o-49+10:o>=17&&o<=22?o-17+10:15&o}return n}function l(t,e,r,n){for(var i=0,a=Math.min(t.length,r),o=e;o=49?s-49+10:s>=17?s-17+10:s}return i}a.isBN=function(t){return t instanceof a||null!==t&&"object"==typeof t&&t.constructor.wordSize===a.wordSize&&Array.isArray(t.words)},a.max=function(t,e){return t.cmp(e)>0?t:e},a.min=function(t,e){return t.cmp(e)<0?t:e},a.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var i=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},a.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},a.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i=0;i-=3)o=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[a]|=o<>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);else if("le"===r)for(i=0,a=0;i>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);return this.strip()},a.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r=e;r-=6)i=s(t,r,r+6),this.words[n]|=i<>>26-a&4194303,(a+=24)>=26&&(a-=26,n++);r+6!==e&&(i=s(t,e,r+6),this.words[n]|=i<>>26-a&4194303),this.strip()},a.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var a=t.length-r,o=a%n,s=Math.min(a,a-o)+r,u=0,c=r;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],c=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],f=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function h(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],a=0|e.words[0],o=i*a,s=67108863&o,l=o/67108864|0;r.words[0]=s;for(var u=1;u>>26,f=67108863&l,h=Math.min(u,e.length-1),p=Math.max(0,u-t.length+1);p<=h;p++){var d=u-p|0;c+=(o=(i=0|t.words[d])*(a=0|e.words[p])+f)/67108864|0,f=67108863&o}r.words[u]=0|f,l=0|c}return 0!==l?r.words[u]=0|l:r.length--,r.strip()}a.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||"hex"===t){r="";for(var i=0,a=0,o=0;o>>24-i&16777215)||o!==this.length-1?u[6-l.length]+l+r:l+r,(i+=2)>=26&&(i-=26,o--)}for(0!==a&&(r=a.toString(16)+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var h=c[t],p=f[t];r="";var d=this.clone();for(d.negative=0;!d.isZero();){var m=d.modn(p).toString(t);r=(d=d.idivn(p)).isZero()?m+r:u[h-m.length]+m+r}for(this.isZero()&&(r="0"+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(t,e){return n("undefined"!=typeof o),this.toArrayLike(o,t,e)},a.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},a.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),a=r||Math.max(1,i);n(i<=a,"byte array longer than desired length"),n(a>0,"Requested array length <= 0"),this.strip();var o,s,l="le"===e,u=new t(a),c=this.clone();if(l){for(s=0;!c.isZero();s++)o=c.andln(255),c.iushrn(8),u[s]=o;for(;s=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},a.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},a.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;et.length?this.clone().ior(t):t.clone().ior(this)},a.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},a.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;rt.length?this.clone().iand(t):t.clone().iand(this)},a.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},a.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;nt.length?this.clone().ixor(t):t.clone().ixor(this)},a.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},a.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},a.prototype.notn=function(t){return this.clone().inotn(t)},a.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<t.length?(r=this,n=t):(r=t,n=this);for(var i=0,a=0;a>>26;for(;0!==i&&a>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;at.length?this.clone().iadd(t):t.clone().iadd(this)},a.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=t):(r=t,n=this);for(var a=0,o=0;o>26,this.words[o]=67108863&e;for(;0!==a&&o>26,this.words[o]=67108863&e;if(0===a&&o>>13,p=0|o[1],d=8191&p,m=p>>>13,g=0|o[2],v=8191&g,y=g>>>13,x=0|o[3],b=8191&x,_=x>>>13,w=0|o[4],A=8191&w,M=w>>>13,k=0|o[5],T=8191&k,E=k>>>13,S=0|o[6],C=8191&S,L=S>>>13,O=0|o[7],z=8191&O,D=O>>>13,P=0|o[8],I=8191&P,N=P>>>13,R=0|o[9],F=8191&R,B=R>>>13,j=0|s[0],V=8191&j,U=j>>>13,q=0|s[1],H=8191&q,G=q>>>13,W=0|s[2],Y=8191&W,Z=W>>>13,X=0|s[3],$=8191&X,J=X>>>13,K=0|s[4],Q=8191&K,tt=K>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,it=0|s[6],at=8191&it,ot=it>>>13,st=0|s[7],lt=8191&st,ut=st>>>13,ct=0|s[8],ft=8191&ct,ht=ct>>>13,pt=0|s[9],dt=8191&pt,mt=pt>>>13;r.negative=t.negative^e.negative,r.length=19;var gt=(u+(n=Math.imul(f,V))|0)+((8191&(i=(i=Math.imul(f,U))+Math.imul(h,V)|0))<<13)|0;u=((a=Math.imul(h,U))+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(d,V),i=(i=Math.imul(d,U))+Math.imul(m,V)|0,a=Math.imul(m,U);var vt=(u+(n=n+Math.imul(f,H)|0)|0)+((8191&(i=(i=i+Math.imul(f,G)|0)+Math.imul(h,H)|0))<<13)|0;u=((a=a+Math.imul(h,G)|0)+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(v,V),i=(i=Math.imul(v,U))+Math.imul(y,V)|0,a=Math.imul(y,U),n=n+Math.imul(d,H)|0,i=(i=i+Math.imul(d,G)|0)+Math.imul(m,H)|0,a=a+Math.imul(m,G)|0;var yt=(u+(n=n+Math.imul(f,Y)|0)|0)+((8191&(i=(i=i+Math.imul(f,Z)|0)+Math.imul(h,Y)|0))<<13)|0;u=((a=a+Math.imul(h,Z)|0)+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(b,V),i=(i=Math.imul(b,U))+Math.imul(_,V)|0,a=Math.imul(_,U),n=n+Math.imul(v,H)|0,i=(i=i+Math.imul(v,G)|0)+Math.imul(y,H)|0,a=a+Math.imul(y,G)|0,n=n+Math.imul(d,Y)|0,i=(i=i+Math.imul(d,Z)|0)+Math.imul(m,Y)|0,a=a+Math.imul(m,Z)|0;var xt=(u+(n=n+Math.imul(f,$)|0)|0)+((8191&(i=(i=i+Math.imul(f,J)|0)+Math.imul(h,$)|0))<<13)|0;u=((a=a+Math.imul(h,J)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(A,V),i=(i=Math.imul(A,U))+Math.imul(M,V)|0,a=Math.imul(M,U),n=n+Math.imul(b,H)|0,i=(i=i+Math.imul(b,G)|0)+Math.imul(_,H)|0,a=a+Math.imul(_,G)|0,n=n+Math.imul(v,Y)|0,i=(i=i+Math.imul(v,Z)|0)+Math.imul(y,Y)|0,a=a+Math.imul(y,Z)|0,n=n+Math.imul(d,$)|0,i=(i=i+Math.imul(d,J)|0)+Math.imul(m,$)|0,a=a+Math.imul(m,J)|0;var bt=(u+(n=n+Math.imul(f,Q)|0)|0)+((8191&(i=(i=i+Math.imul(f,tt)|0)+Math.imul(h,Q)|0))<<13)|0;u=((a=a+Math.imul(h,tt)|0)+(i>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(T,V),i=(i=Math.imul(T,U))+Math.imul(E,V)|0,a=Math.imul(E,U),n=n+Math.imul(A,H)|0,i=(i=i+Math.imul(A,G)|0)+Math.imul(M,H)|0,a=a+Math.imul(M,G)|0,n=n+Math.imul(b,Y)|0,i=(i=i+Math.imul(b,Z)|0)+Math.imul(_,Y)|0,a=a+Math.imul(_,Z)|0,n=n+Math.imul(v,$)|0,i=(i=i+Math.imul(v,J)|0)+Math.imul(y,$)|0,a=a+Math.imul(y,J)|0,n=n+Math.imul(d,Q)|0,i=(i=i+Math.imul(d,tt)|0)+Math.imul(m,Q)|0,a=a+Math.imul(m,tt)|0;var _t=(u+(n=n+Math.imul(f,rt)|0)|0)+((8191&(i=(i=i+Math.imul(f,nt)|0)+Math.imul(h,rt)|0))<<13)|0;u=((a=a+Math.imul(h,nt)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(C,V),i=(i=Math.imul(C,U))+Math.imul(L,V)|0,a=Math.imul(L,U),n=n+Math.imul(T,H)|0,i=(i=i+Math.imul(T,G)|0)+Math.imul(E,H)|0,a=a+Math.imul(E,G)|0,n=n+Math.imul(A,Y)|0,i=(i=i+Math.imul(A,Z)|0)+Math.imul(M,Y)|0,a=a+Math.imul(M,Z)|0,n=n+Math.imul(b,$)|0,i=(i=i+Math.imul(b,J)|0)+Math.imul(_,$)|0,a=a+Math.imul(_,J)|0,n=n+Math.imul(v,Q)|0,i=(i=i+Math.imul(v,tt)|0)+Math.imul(y,Q)|0,a=a+Math.imul(y,tt)|0,n=n+Math.imul(d,rt)|0,i=(i=i+Math.imul(d,nt)|0)+Math.imul(m,rt)|0,a=a+Math.imul(m,nt)|0;var wt=(u+(n=n+Math.imul(f,at)|0)|0)+((8191&(i=(i=i+Math.imul(f,ot)|0)+Math.imul(h,at)|0))<<13)|0;u=((a=a+Math.imul(h,ot)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(z,V),i=(i=Math.imul(z,U))+Math.imul(D,V)|0,a=Math.imul(D,U),n=n+Math.imul(C,H)|0,i=(i=i+Math.imul(C,G)|0)+Math.imul(L,H)|0,a=a+Math.imul(L,G)|0,n=n+Math.imul(T,Y)|0,i=(i=i+Math.imul(T,Z)|0)+Math.imul(E,Y)|0,a=a+Math.imul(E,Z)|0,n=n+Math.imul(A,$)|0,i=(i=i+Math.imul(A,J)|0)+Math.imul(M,$)|0,a=a+Math.imul(M,J)|0,n=n+Math.imul(b,Q)|0,i=(i=i+Math.imul(b,tt)|0)+Math.imul(_,Q)|0,a=a+Math.imul(_,tt)|0,n=n+Math.imul(v,rt)|0,i=(i=i+Math.imul(v,nt)|0)+Math.imul(y,rt)|0,a=a+Math.imul(y,nt)|0,n=n+Math.imul(d,at)|0,i=(i=i+Math.imul(d,ot)|0)+Math.imul(m,at)|0,a=a+Math.imul(m,ot)|0;var At=(u+(n=n+Math.imul(f,lt)|0)|0)+((8191&(i=(i=i+Math.imul(f,ut)|0)+Math.imul(h,lt)|0))<<13)|0;u=((a=a+Math.imul(h,ut)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(I,V),i=(i=Math.imul(I,U))+Math.imul(N,V)|0,a=Math.imul(N,U),n=n+Math.imul(z,H)|0,i=(i=i+Math.imul(z,G)|0)+Math.imul(D,H)|0,a=a+Math.imul(D,G)|0,n=n+Math.imul(C,Y)|0,i=(i=i+Math.imul(C,Z)|0)+Math.imul(L,Y)|0,a=a+Math.imul(L,Z)|0,n=n+Math.imul(T,$)|0,i=(i=i+Math.imul(T,J)|0)+Math.imul(E,$)|0,a=a+Math.imul(E,J)|0,n=n+Math.imul(A,Q)|0,i=(i=i+Math.imul(A,tt)|0)+Math.imul(M,Q)|0,a=a+Math.imul(M,tt)|0,n=n+Math.imul(b,rt)|0,i=(i=i+Math.imul(b,nt)|0)+Math.imul(_,rt)|0,a=a+Math.imul(_,nt)|0,n=n+Math.imul(v,at)|0,i=(i=i+Math.imul(v,ot)|0)+Math.imul(y,at)|0,a=a+Math.imul(y,ot)|0,n=n+Math.imul(d,lt)|0,i=(i=i+Math.imul(d,ut)|0)+Math.imul(m,lt)|0,a=a+Math.imul(m,ut)|0;var Mt=(u+(n=n+Math.imul(f,ft)|0)|0)+((8191&(i=(i=i+Math.imul(f,ht)|0)+Math.imul(h,ft)|0))<<13)|0;u=((a=a+Math.imul(h,ht)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(F,V),i=(i=Math.imul(F,U))+Math.imul(B,V)|0,a=Math.imul(B,U),n=n+Math.imul(I,H)|0,i=(i=i+Math.imul(I,G)|0)+Math.imul(N,H)|0,a=a+Math.imul(N,G)|0,n=n+Math.imul(z,Y)|0,i=(i=i+Math.imul(z,Z)|0)+Math.imul(D,Y)|0,a=a+Math.imul(D,Z)|0,n=n+Math.imul(C,$)|0,i=(i=i+Math.imul(C,J)|0)+Math.imul(L,$)|0,a=a+Math.imul(L,J)|0,n=n+Math.imul(T,Q)|0,i=(i=i+Math.imul(T,tt)|0)+Math.imul(E,Q)|0,a=a+Math.imul(E,tt)|0,n=n+Math.imul(A,rt)|0,i=(i=i+Math.imul(A,nt)|0)+Math.imul(M,rt)|0,a=a+Math.imul(M,nt)|0,n=n+Math.imul(b,at)|0,i=(i=i+Math.imul(b,ot)|0)+Math.imul(_,at)|0,a=a+Math.imul(_,ot)|0,n=n+Math.imul(v,lt)|0,i=(i=i+Math.imul(v,ut)|0)+Math.imul(y,lt)|0,a=a+Math.imul(y,ut)|0,n=n+Math.imul(d,ft)|0,i=(i=i+Math.imul(d,ht)|0)+Math.imul(m,ft)|0,a=a+Math.imul(m,ht)|0;var kt=(u+(n=n+Math.imul(f,dt)|0)|0)+((8191&(i=(i=i+Math.imul(f,mt)|0)+Math.imul(h,dt)|0))<<13)|0;u=((a=a+Math.imul(h,mt)|0)+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(F,H),i=(i=Math.imul(F,G))+Math.imul(B,H)|0,a=Math.imul(B,G),n=n+Math.imul(I,Y)|0,i=(i=i+Math.imul(I,Z)|0)+Math.imul(N,Y)|0,a=a+Math.imul(N,Z)|0,n=n+Math.imul(z,$)|0,i=(i=i+Math.imul(z,J)|0)+Math.imul(D,$)|0,a=a+Math.imul(D,J)|0,n=n+Math.imul(C,Q)|0,i=(i=i+Math.imul(C,tt)|0)+Math.imul(L,Q)|0,a=a+Math.imul(L,tt)|0,n=n+Math.imul(T,rt)|0,i=(i=i+Math.imul(T,nt)|0)+Math.imul(E,rt)|0,a=a+Math.imul(E,nt)|0,n=n+Math.imul(A,at)|0,i=(i=i+Math.imul(A,ot)|0)+Math.imul(M,at)|0,a=a+Math.imul(M,ot)|0,n=n+Math.imul(b,lt)|0,i=(i=i+Math.imul(b,ut)|0)+Math.imul(_,lt)|0,a=a+Math.imul(_,ut)|0,n=n+Math.imul(v,ft)|0,i=(i=i+Math.imul(v,ht)|0)+Math.imul(y,ft)|0,a=a+Math.imul(y,ht)|0;var Tt=(u+(n=n+Math.imul(d,dt)|0)|0)+((8191&(i=(i=i+Math.imul(d,mt)|0)+Math.imul(m,dt)|0))<<13)|0;u=((a=a+Math.imul(m,mt)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(F,Y),i=(i=Math.imul(F,Z))+Math.imul(B,Y)|0,a=Math.imul(B,Z),n=n+Math.imul(I,$)|0,i=(i=i+Math.imul(I,J)|0)+Math.imul(N,$)|0,a=a+Math.imul(N,J)|0,n=n+Math.imul(z,Q)|0,i=(i=i+Math.imul(z,tt)|0)+Math.imul(D,Q)|0,a=a+Math.imul(D,tt)|0,n=n+Math.imul(C,rt)|0,i=(i=i+Math.imul(C,nt)|0)+Math.imul(L,rt)|0,a=a+Math.imul(L,nt)|0,n=n+Math.imul(T,at)|0,i=(i=i+Math.imul(T,ot)|0)+Math.imul(E,at)|0,a=a+Math.imul(E,ot)|0,n=n+Math.imul(A,lt)|0,i=(i=i+Math.imul(A,ut)|0)+Math.imul(M,lt)|0,a=a+Math.imul(M,ut)|0,n=n+Math.imul(b,ft)|0,i=(i=i+Math.imul(b,ht)|0)+Math.imul(_,ft)|0,a=a+Math.imul(_,ht)|0;var Et=(u+(n=n+Math.imul(v,dt)|0)|0)+((8191&(i=(i=i+Math.imul(v,mt)|0)+Math.imul(y,dt)|0))<<13)|0;u=((a=a+Math.imul(y,mt)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(F,$),i=(i=Math.imul(F,J))+Math.imul(B,$)|0,a=Math.imul(B,J),n=n+Math.imul(I,Q)|0,i=(i=i+Math.imul(I,tt)|0)+Math.imul(N,Q)|0,a=a+Math.imul(N,tt)|0,n=n+Math.imul(z,rt)|0,i=(i=i+Math.imul(z,nt)|0)+Math.imul(D,rt)|0,a=a+Math.imul(D,nt)|0,n=n+Math.imul(C,at)|0,i=(i=i+Math.imul(C,ot)|0)+Math.imul(L,at)|0,a=a+Math.imul(L,ot)|0,n=n+Math.imul(T,lt)|0,i=(i=i+Math.imul(T,ut)|0)+Math.imul(E,lt)|0,a=a+Math.imul(E,ut)|0,n=n+Math.imul(A,ft)|0,i=(i=i+Math.imul(A,ht)|0)+Math.imul(M,ft)|0,a=a+Math.imul(M,ht)|0;var St=(u+(n=n+Math.imul(b,dt)|0)|0)+((8191&(i=(i=i+Math.imul(b,mt)|0)+Math.imul(_,dt)|0))<<13)|0;u=((a=a+Math.imul(_,mt)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(F,Q),i=(i=Math.imul(F,tt))+Math.imul(B,Q)|0,a=Math.imul(B,tt),n=n+Math.imul(I,rt)|0,i=(i=i+Math.imul(I,nt)|0)+Math.imul(N,rt)|0,a=a+Math.imul(N,nt)|0,n=n+Math.imul(z,at)|0,i=(i=i+Math.imul(z,ot)|0)+Math.imul(D,at)|0,a=a+Math.imul(D,ot)|0,n=n+Math.imul(C,lt)|0,i=(i=i+Math.imul(C,ut)|0)+Math.imul(L,lt)|0,a=a+Math.imul(L,ut)|0,n=n+Math.imul(T,ft)|0,i=(i=i+Math.imul(T,ht)|0)+Math.imul(E,ft)|0,a=a+Math.imul(E,ht)|0;var Ct=(u+(n=n+Math.imul(A,dt)|0)|0)+((8191&(i=(i=i+Math.imul(A,mt)|0)+Math.imul(M,dt)|0))<<13)|0;u=((a=a+Math.imul(M,mt)|0)+(i>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,n=Math.imul(F,rt),i=(i=Math.imul(F,nt))+Math.imul(B,rt)|0,a=Math.imul(B,nt),n=n+Math.imul(I,at)|0,i=(i=i+Math.imul(I,ot)|0)+Math.imul(N,at)|0,a=a+Math.imul(N,ot)|0,n=n+Math.imul(z,lt)|0,i=(i=i+Math.imul(z,ut)|0)+Math.imul(D,lt)|0,a=a+Math.imul(D,ut)|0,n=n+Math.imul(C,ft)|0,i=(i=i+Math.imul(C,ht)|0)+Math.imul(L,ft)|0,a=a+Math.imul(L,ht)|0;var Lt=(u+(n=n+Math.imul(T,dt)|0)|0)+((8191&(i=(i=i+Math.imul(T,mt)|0)+Math.imul(E,dt)|0))<<13)|0;u=((a=a+Math.imul(E,mt)|0)+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(F,at),i=(i=Math.imul(F,ot))+Math.imul(B,at)|0,a=Math.imul(B,ot),n=n+Math.imul(I,lt)|0,i=(i=i+Math.imul(I,ut)|0)+Math.imul(N,lt)|0,a=a+Math.imul(N,ut)|0,n=n+Math.imul(z,ft)|0,i=(i=i+Math.imul(z,ht)|0)+Math.imul(D,ft)|0,a=a+Math.imul(D,ht)|0;var Ot=(u+(n=n+Math.imul(C,dt)|0)|0)+((8191&(i=(i=i+Math.imul(C,mt)|0)+Math.imul(L,dt)|0))<<13)|0;u=((a=a+Math.imul(L,mt)|0)+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(F,lt),i=(i=Math.imul(F,ut))+Math.imul(B,lt)|0,a=Math.imul(B,ut),n=n+Math.imul(I,ft)|0,i=(i=i+Math.imul(I,ht)|0)+Math.imul(N,ft)|0,a=a+Math.imul(N,ht)|0;var zt=(u+(n=n+Math.imul(z,dt)|0)|0)+((8191&(i=(i=i+Math.imul(z,mt)|0)+Math.imul(D,dt)|0))<<13)|0;u=((a=a+Math.imul(D,mt)|0)+(i>>>13)|0)+(zt>>>26)|0,zt&=67108863,n=Math.imul(F,ft),i=(i=Math.imul(F,ht))+Math.imul(B,ft)|0,a=Math.imul(B,ht);var Dt=(u+(n=n+Math.imul(I,dt)|0)|0)+((8191&(i=(i=i+Math.imul(I,mt)|0)+Math.imul(N,dt)|0))<<13)|0;u=((a=a+Math.imul(N,mt)|0)+(i>>>13)|0)+(Dt>>>26)|0,Dt&=67108863;var Pt=(u+(n=Math.imul(F,dt))|0)+((8191&(i=(i=Math.imul(F,mt))+Math.imul(B,dt)|0))<<13)|0;return u=((a=Math.imul(B,mt))+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,l[0]=gt,l[1]=vt,l[2]=yt,l[3]=xt,l[4]=bt,l[5]=_t,l[6]=wt,l[7]=At,l[8]=Mt,l[9]=kt,l[10]=Tt,l[11]=Et,l[12]=St,l[13]=Ct,l[14]=Lt,l[15]=Ot,l[16]=zt,l[17]=Dt,l[18]=Pt,0!==u&&(l[19]=u,r.length++),r};function d(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x=t,this.y=e}Math.imul||(p=h),a.prototype.mulTo=function(t,e){var r=this.length+t.length;return 10===this.length&&10===t.length?p(this,t,e):r<63?h(this,t,e):r<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,a=0;a>>26)|0)>>>26,o&=67108863}r.words[a]=s,n=o,o=i}return 0!==n?r.words[a]=n:r.length--,r.strip()}(this,t,e):d(this,t,e)},m.prototype.makeRBT=function(t){for(var e=new Array(t),r=a.prototype._countBits(t)-1,n=0;n>=1;return n},m.prototype.permute=function(t,e,r,n,i,a){for(var o=0;o>>=1)i++;return 1<>>=13,r[2*o+1]=8191&a,a>>>=13;for(o=2*e;o>=26,e+=i/67108864|0,e+=a>>>26,this.words[r]=67108863&a}return 0!==e&&(this.words[r]=e,this.length++),this},a.prototype.muln=function(t){return this.clone().imuln(t)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r>>i}return e}(t);if(0===e.length)return new a(1);for(var r=this,n=0;n=0);var e,r=t%26,i=(t-r)/26,a=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(e=0;e>>26-r}o&&(this.words[e]=o,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e=0),i=e?(e-e%26)/26:0;var a=t%26,o=Math.min((t-a)/26,this.length),s=67108863^67108863>>>a<o)for(this.length-=o,u=0;u=0&&(0!==c||u>=i);u--){var f=0|this.words[u];this.words[u]=c<<26-a|f>>>a,c=f&s}return l&&0!==c&&(l.words[l.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},a.prototype.shln=function(t){return this.clone().ishln(t)},a.prototype.ushln=function(t){return this.clone().iushln(t)},a.prototype.shrn=function(t){return this.clone().ishrn(t)},a.prototype.ushrn=function(t){return this.clone().iushrn(t)},a.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},a.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e>26)-(l/67108864|0),this.words[i+r]=67108863&a}for(;i>26,this.words[i+r]=67108863&a;if(0===s)return this.strip();for(n(-1===s),s=0,i=0;i>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},a.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),i=t,o=0|i.words[i.length-1];0!==(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,l=n.length-i.length;if("mod"!==e){(s=new a(null)).length=l+1,s.words=new Array(s.length);for(var u=0;u=0;f--){var h=67108864*(0|n.words[i.length+f])+(0|n.words[i.length+f-1]);for(h=Math.min(h/o|0,67108863),n._ishlnsubmul(i,h,f);0!==n.negative;)h--,n.negative=0,n._ishlnsubmul(i,1,f),n.isZero()||(n.negative^=1);s&&(s.words[f]=h)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(t)),{div:i,mod:o}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(t)),{div:s.div,mod:o}):t.length>this.length||this.cmp(t)<0?{div:new a(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new a(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new a(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,o,s},a.prototype.div=function(t){return this.divmod(t,"div",!1).div},a.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},a.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},a.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),a=r.cmp(n);return a<0||1===i&&0===a?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},a.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},a.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},a.prototype.divn=function(t){return this.clone().idivn(t)},a.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new a(1),o=new a(0),s=new a(0),l=new a(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var c=r.clone(),f=e.clone();!e.isZero();){for(var h=0,p=1;0==(e.words[0]&p)&&h<26;++h,p<<=1);if(h>0)for(e.iushrn(h);h-- >0;)(i.isOdd()||o.isOdd())&&(i.iadd(c),o.isub(f)),i.iushrn(1),o.iushrn(1);for(var d=0,m=1;0==(r.words[0]&m)&&d<26;++d,m<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(c),l.isub(f)),s.iushrn(1),l.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),o.isub(l)):(r.isub(e),s.isub(i),l.isub(o))}return{a:s,b:l,gcd:r.iushln(u)}},a.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,o=new a(1),s=new a(0),l=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var u=0,c=1;0==(e.words[0]&c)&&u<26;++u,c<<=1);if(u>0)for(e.iushrn(u);u-- >0;)o.isOdd()&&o.iadd(l),o.iushrn(1);for(var f=0,h=1;0==(r.words[0]&h)&&f<26;++f,h<<=1);if(f>0)for(r.iushrn(f);f-- >0;)s.isOdd()&&s.iadd(l),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),o.isub(s)):(r.isub(e),s.isub(o))}return(i=0===e.cmpn(1)?o:s).cmpn(0)<0&&i.iadd(t),i},a.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var a=e;e=r,r=a}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},a.prototype.invm=function(t){return this.egcd(t).a.umod(t)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(t){return this.words[0]&t},a.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<>>26,s&=67108863,this.words[o]=s}return 0!==a&&(this.words[o]=a,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];e=i===t?0:it.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){ni&&(e=1);break}}return e},a.prototype.gtn=function(t){return 1===this.cmpn(t)},a.prototype.gt=function(t){return 1===this.cmp(t)},a.prototype.gten=function(t){return this.cmpn(t)>=0},a.prototype.gte=function(t){return this.cmp(t)>=0},a.prototype.ltn=function(t){return-1===this.cmpn(t)},a.prototype.lt=function(t){return-1===this.cmp(t)},a.prototype.lten=function(t){return this.cmpn(t)<=0},a.prototype.lte=function(t){return this.cmp(t)<=0},a.prototype.eqn=function(t){return 0===this.cmpn(t)},a.prototype.eq=function(t){return 0===this.cmp(t)},a.red=function(t){return new w(t)},a.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},a.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(t){return this.red=t,this},a.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},a.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},a.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},a.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},a.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},a.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},a.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},a.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},a.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var g={k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name=t,this.p=new a(e,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function y(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function x(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function b(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function w(t){if("string"==typeof t){var e=a._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function A(t){w.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}v.prototype._tmp=function(){var t=new a(null);return t.words=new Array(Math.ceil(this.n/13)),t},v.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e0?r.isub(this.p):r.strip(),r},v.prototype.split=function(t,e){t.iushrn(this.n,0,e)},v.prototype.imulK=function(t){return t.imul(this.k)},i(y,v),y.prototype.split=function(t,e){for(var r=Math.min(t.length,9),n=0;n>>22,i=a}i>>>=22,t.words[n-10]=i,0===i&&t.length>10?t.length-=10:t.length-=9},y.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},a._prime=function(t){if(g[t])return g[t];var e;if("k256"===t)e=new y;else if("p224"===t)e=new x;else if("p192"===t)e=new b;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new _}return g[t]=e,e},w.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},w.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},w.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},w.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},w.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},w.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},w.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},w.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},w.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},w.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},w.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},w.prototype.isqr=function(t){return this.imul(t,t.clone())},w.prototype.sqr=function(t){return this.mul(t,t)},w.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new a(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),o=0;!i.isZero()&&0===i.andln(1);)o++,i.iushrn(1);n(!i.isZero());var s=new a(1).toRed(this),l=s.redNeg(),u=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new a(2*c*c).toRed(this);0!==this.pow(c,u).cmp(l);)c.redIAdd(l);for(var f=this.pow(c,i),h=this.pow(t,i.addn(1).iushrn(1)),p=this.pow(t,i),d=o;0!==p.cmp(s);){for(var m=p,g=0;0!==m.cmp(s);g++)m=m.redSqr();n(g=0;n--){for(var u=e.words[n],c=l-1;c>=0;c--){var f=u>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==f||0!==o?(o<<=1,o|=f,(4===++s||0===n&&0===c)&&(i=this.mul(i,r[o]),s=0,o=0)):s=0}l=26}return i},w.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},w.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},a.mont=function(t){return new A(t)},i(A,w),A.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},A.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},A.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},A.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new a(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},A.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}("undefined"==typeof e||e,this)},{buffer:44}],36:[function(t,e,r){"use strict";e.exports=function(t){var e,r,n,i=t.length,a=0;for(e=0;e>>1;if(!(c<=0)){var f,h=i.mallocDouble(2*c*s),p=i.mallocInt32(s);if((s=l(t,c,h,p))>0){if(1===c&&n)a.init(s),f=a.sweepComplete(c,r,0,s,h,p,0,s,h,p);else{var d=i.mallocDouble(2*c*u),m=i.mallocInt32(u);(u=l(e,c,d,m))>0&&(a.init(s+u),f=1===c?a.sweepBipartite(c,r,0,s,h,p,0,u,d,m):o(c,r,n,s,h,p,u,d,m),i.free(d),i.free(m))}i.free(h),i.free(p)}return f}}}function c(t,e){n.push([t,e])}},{"./lib/intersect":39,"./lib/sweep":43,"typedarray-pool":1385}],38:[function(t,e,r){"use strict";var n="d",i="ax",a="vv",o="fp",s="es",l="rs",u="re",c="rb",f="ri",h="rp",p="bs",d="be",m="bb",g="bi",v="bp",y="rv",x="Q",b=[n,i,a,l,u,c,f,p,d,m,g];function _(t){var e="bruteForce"+(t?"Full":"Partial"),r=[],_=b.slice();t||_.splice(3,0,o);var w=["function "+e+"("+_.join()+"){"];function A(e,o){var _=function(t,e,r){var o="bruteForce"+(t?"Red":"Blue")+(e?"Flip":"")+(r?"Full":""),_=["function ",o,"(",b.join(),"){","var ",s,"=2*",n,";"],w="for(var i="+l+","+h+"="+s+"*"+l+";i<"+u+";++i,"+h+"+="+s+"){var x0="+c+"["+i+"+"+h+"],x1="+c+"["+i+"+"+h+"+"+n+"],xi="+f+"[i];",A="for(var j="+p+","+v+"="+s+"*"+p+";j<"+d+";++j,"+v+"+="+s+"){var y0="+m+"["+i+"+"+v+"],"+(r?"y1="+m+"["+i+"+"+v+"+"+n+"],":"")+"yi="+g+"[j];";return t?_.push(w,x,":",A):_.push(A,x,":",w),r?_.push("if(y1"+d+"-"+p+"){"),t?(A(!0,!1),w.push("}else{"),A(!1,!1)):(w.push("if("+o+"){"),A(!0,!0),w.push("}else{"),A(!0,!1),w.push("}}else{if("+o+"){"),A(!1,!0),w.push("}else{"),A(!1,!1),w.push("}")),w.push("}}return "+e);var M=r.join("")+w.join("");return new Function(M)()}r.partial=_(!1),r.full=_(!0)},{}],39:[function(t,e,r){"use strict";e.exports=function(t,e,r,a,c,E,S,C,L){!function(t,e){var r=8*i.log2(e+1)*(t+1)|0,a=i.nextPow2(b*r);w.length0;){var P=(z-=1)*b,I=w[P],N=w[P+1],R=w[P+2],F=w[P+3],B=w[P+4],j=w[P+5],V=z*_,U=A[V],q=A[V+1],H=1&j,G=!!(16&j),W=c,Y=E,Z=C,X=L;if(H&&(W=C,Y=L,Z=c,X=E),!(2&j&&(R=g(t,I,N,R,W,Y,q),N>=R)||4&j&&(N=v(t,I,N,R,W,Y,U))>=R)){var $=R-N,J=B-F;if(G){if(t*$*($+J)=p0)&&!(p1>=hi)",["p0","p1"]),m=c("lo===p0",["p0"]),g=c("lo>>1,h=2*t,p=f,d=s[h*f+e];for(;u=x?(p=y,d=x):v>=_?(p=g,d=v):(p=b,d=_):x>=_?(p=y,d=x):_>=v?(p=g,d=v):(p=b,d=_);for(var w=h*(c-1),A=h*p,M=0;Mr&&i[f+e]>u;--c,f-=o){for(var h=f,p=f+o,d=0;d=0&&i.push("lo=e[k+n]");t.indexOf("hi")>=0&&i.push("hi=e[k+o]");return r.push(n.replace("_",i.join()).replace("$",t)),Function.apply(void 0,r)};var n="for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m"},{}],42:[function(t,e,r){"use strict";e.exports=function(t,e){e<=4*n?i(0,e-1,t):function t(e,r,f){var h=(r-e+1)/6|0,p=e+h,d=r-h,m=e+r>>1,g=m-h,v=m+h,y=p,x=g,b=m,_=v,w=d,A=e+1,M=r-1,k=0;u(y,x,f)&&(k=y,y=x,x=k);u(_,w,f)&&(k=_,_=w,w=k);u(y,b,f)&&(k=y,y=b,b=k);u(x,b,f)&&(k=x,x=b,b=k);u(y,_,f)&&(k=y,y=_,_=k);u(b,_,f)&&(k=b,b=_,_=k);u(x,w,f)&&(k=x,x=w,w=k);u(x,b,f)&&(k=x,x=b,b=k);u(_,w,f)&&(k=_,_=w,w=k);var T=f[2*x];var E=f[2*x+1];var S=f[2*_];var C=f[2*_+1];var L=2*y;var O=2*b;var z=2*w;var D=2*p;var P=2*m;var I=2*d;for(var N=0;N<2;++N){var R=f[L+N],F=f[O+N],B=f[z+N];f[D+N]=R,f[P+N]=F,f[I+N]=B}o(g,e,f);o(v,r,f);for(var j=A;j<=M;++j)if(c(j,T,E,f))j!==A&&a(j,A,f),++A;else if(!c(j,S,C,f))for(;;){if(c(M,S,C,f)){c(M,T,E,f)?(s(j,A,M,f),++A,--M):(a(j,M,f),--M);break}if(--Mt;){var u=r[l-2],c=r[l-1];if(ur[e+1])}function c(t,e,r,n){var i=n[t*=2];return i>>1;a(p,E);for(var S=0,C=0,A=0;A=o)d(u,c,C--,L=L-o|0);else if(L>=0)d(s,l,S--,L);else if(L<=-o){L=-L-o|0;for(var O=0;O>>1;a(p,S);for(var C=0,L=0,O=0,M=0;M>1==p[2*M+3]>>1&&(D=2,M+=1),z<0){for(var P=-(z>>1)-1,I=0;I>1)-1;0===D?d(s,l,C--,P):1===D?d(u,c,L--,P):2===D&&d(f,h,O--,P)}}},scanBipartite:function(t,e,r,n,i,u,c,f,h,g,v,y){var x=0,b=2*t,_=e,w=e+t,A=1,M=1;n?M=o:A=o;for(var k=i;k>>1;a(p,C);for(var L=0,k=0;k=o?(z=!n,T-=o):(z=!!n,T-=1),z)m(s,l,L++,T);else{var D=y[T],P=b*T,I=v[P+e+1],N=v[P+e+1+t];t:for(var R=0;R>>1;a(p,A);for(var M=0,x=0;x=o)s[M++]=b-o;else{var T=d[b-=1],E=g*b,S=h[E+e+1],C=h[E+e+1+t];t:for(var L=0;L=0;--L)if(s[L]===b){for(var P=L+1;P0&&s.length>a){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+' "'+String(e)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');l.name="MaxListenersExceededWarning",l.emitter=t,l.type=e,l.count=s.length,"object"==typeof console&&console.warn&&console.warn("%s: %s",l.name,l.message)}}else s=o[e]=r,++t._eventsCount;return t}function h(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var t=new Array(arguments.length),e=0;e1&&(e=arguments[1]),e instanceof Error)throw e;var l=new Error('Unhandled "error" event. ('+e+")");throw l.context=e,l}if(!(r=o[t]))return!1;var u="function"==typeof r;switch(n=arguments.length){case 1:!function(t,e,r){if(e)t.call(r);else for(var n=t.length,i=g(t,n),a=0;a=0;o--)if(r[o]===e||r[o].listener===e){s=r[o].listener,a=o;break}if(a<0)return this;0===a?r.shift():function(t,e){for(var r=e,n=r+1,i=t.length;n=0;a--)this.removeListener(t,e[a]);return this},o.prototype.listeners=function(t){return d(this,t,!0)},o.prototype.rawListeners=function(t){return d(this,t,!1)},o.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):m.call(t,e)},o.prototype.listenerCount=m,o.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],46:[function(t,e,r){"use strict";var n=t("base64-js"),i=t("ieee754");r.Buffer=s,r.SlowBuffer=function(t){+t!=t&&(t=0);return s.alloc(+t)},r.INSPECT_MAX_BYTES=50;var a=2147483647;function o(t){if(t>a)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return e.__proto__=s.prototype,e}function s(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return c(t)}return l(t,e,r)}function l(t,e,r){if("string"==typeof t)return function(t,e){"string"==typeof e&&""!==e||(e="utf8");if(!s.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var r=0|p(t,e),n=o(r),i=n.write(t,e);i!==r&&(n=n.slice(0,i));return n}(t,e);if(ArrayBuffer.isView(t))return f(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(j(t,ArrayBuffer)||t&&j(t.buffer,ArrayBuffer))return function(t,e,r){if(e<0||t.byteLength=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|t}function p(t,e){if(s.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||j(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return R(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return F(t).length;default:if(i)return n?-1:R(t).length;e=(""+e).toLowerCase(),i=!0}}function d(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function m(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),V(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=s.from(e,n)),s.isBuffer(e))return 0===e.length?-1:g(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):g(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function g(t,e,r,n,i){var a,o=1,s=t.length,l=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}function u(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var c=-1;for(a=r;as&&(r=s-l),a=r;a>=0;a--){for(var f=!0,h=0;hi&&(n=i):n=i;var a=e.length;n>a/2&&(n=a/2);for(var o=0;o>8,i=r%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function A(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function M(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:u>223?3:u>191?2:1;if(i+f<=r)switch(f){case 1:u<128&&(c=u);break;case 2:128==(192&(a=t[i+1]))&&(l=(31&u)<<6|63&a)>127&&(c=l);break;case 3:a=t[i+1],o=t[i+2],128==(192&a)&&128==(192&o)&&(l=(15&u)<<12|(63&a)<<6|63&o)>2047&&(l<55296||l>57343)&&(c=l);break;case 4:a=t[i+1],o=t[i+2],s=t[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&(l=(15&u)<<18|(63&a)<<12|(63&o)<<6|63&s)>65535&&l<1114112&&(c=l)}null===c?(c=65533,f=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=f}return function(t){var e=t.length;if(e<=k)return String.fromCharCode.apply(String,t);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return S(this,e,r);case"utf8":case"utf-8":return M(this,e,r);case"ascii":return T(this,e,r);case"latin1":case"binary":return E(this,e,r);case"base64":return A(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},s.prototype.toLocaleString=s.prototype.toString,s.prototype.equals=function(t){if(!s.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===s.compare(this,t)},s.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return t=this.toString("hex",0,e).replace(/(.{2})/g,"$1 ").trim(),this.length>e&&(t+=" ... "),""},s.prototype.compare=function(t,e,r,n,i){if(j(t,Uint8Array)&&(t=s.from(t,t.offset,t.byteLength)),!s.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var a=(i>>>=0)-(n>>>=0),o=(r>>>=0)-(e>>>=0),l=Math.min(a,o),u=this.slice(n,i),c=t.slice(e,r),f=0;f>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var a=!1;;)switch(n){case"hex":return v(this,t,e,r);case"utf8":case"utf-8":return y(this,t,e,r);case"ascii":return x(this,t,e,r);case"latin1":case"binary":return b(this,t,e,r);case"base64":return _(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return w(this,t,e,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var k=4096;function T(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",a=e;ar)throw new RangeError("Trying to access beyond buffer length")}function O(t,e,r,n,i,a){if(!s.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function z(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function D(t,e,r,n,a){return e=+e,r>>>=0,a||z(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function P(t,e,r,n,a){return e=+e,r>>>=0,a||z(t,0,r,8),i.write(t,e,r,n,52,8),r+8}s.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||L(t,e,this.length);for(var n=this[t],i=1,a=0;++a>>=0,e>>>=0,r||L(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},s.prototype.readUInt8=function(t,e){return t>>>=0,e||L(t,1,this.length),this[t]},s.prototype.readUInt16LE=function(t,e){return t>>>=0,e||L(t,2,this.length),this[t]|this[t+1]<<8},s.prototype.readUInt16BE=function(t,e){return t>>>=0,e||L(t,2,this.length),this[t]<<8|this[t+1]},s.prototype.readUInt32LE=function(t,e){return t>>>=0,e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},s.prototype.readUInt32BE=function(t,e){return t>>>=0,e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},s.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);for(var n=this[t],i=1,a=0;++a=(i*=128)&&(n-=Math.pow(2,8*e)),n},s.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},s.prototype.readInt8=function(t,e){return t>>>=0,e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},s.prototype.readInt16LE=function(t,e){t>>>=0,e||L(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt16BE=function(t,e){t>>>=0,e||L(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt32LE=function(t,e){return t>>>=0,e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},s.prototype.readInt32BE=function(t,e){return t>>>=0,e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},s.prototype.readFloatLE=function(t,e){return t>>>=0,e||L(t,4,this.length),i.read(this,t,!0,23,4)},s.prototype.readFloatBE=function(t,e){return t>>>=0,e||L(t,4,this.length),i.read(this,t,!1,23,4)},s.prototype.readDoubleLE=function(t,e){return t>>>=0,e||L(t,8,this.length),i.read(this,t,!0,52,8)},s.prototype.readDoubleBE=function(t,e){return t>>>=0,e||L(t,8,this.length),i.read(this,t,!1,52,8)},s.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||O(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[e]=255&t;++a>>=0,r>>>=0,n)||O(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+r},s.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,1,255,0),this[e]=255&t,e+1},s.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},s.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},s.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},s.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},s.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);O(this,t,e,r,i-1,-i)}var a=0,o=1,s=0;for(this[e]=255&t;++a>0)-s&255;return e+r},s.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);O(this,t,e,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},s.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},s.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},s.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},s.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},s.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||O(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},s.prototype.writeFloatLE=function(t,e,r){return D(this,t,e,!0,r)},s.prototype.writeFloatBE=function(t,e,r){return D(this,t,e,!1,r)},s.prototype.writeDoubleLE=function(t,e,r){return P(this,t,e,!0,r)},s.prototype.writeDoubleBE=function(t,e,r){return P(this,t,e,!1,r)},s.prototype.copy=function(t,e,r,n){if(!s.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--a)t[a+e]=this[a+r];else Uint8Array.prototype.set.call(t,this.subarray(r,n),e);return i},s.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!s.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){var i=t.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(t=i)}}else"number"==typeof t&&(t&=255);if(e<0||this.length>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(a=e;a55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function F(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(I,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function B(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function j(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function V(t){return t!=t}},{"base64-js":15,ieee754:415}],47:[function(t,e,r){"use strict";var n=t("./lib/monotone"),i=t("./lib/triangulation"),a=t("./lib/delaunay"),o=t("./lib/filter");function s(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function l(t,e){return t[0]-e[0]||t[1]-e[1]}function u(t,e,r){return e in t?t[e]:r}e.exports=function(t,e,r){Array.isArray(e)?(r=r||{},e=e||[]):(r=e||{},e=[]);var c=!!u(r,"delaunay",!0),f=!!u(r,"interior",!0),h=!!u(r,"exterior",!0),p=!!u(r,"infinity",!1);if(!f&&!h||0===t.length)return[];var d=n(t,e);if(c||f!==h||p){for(var m=i(t.length,function(t){return t.map(s).sort(l)}(e)),g=0;g0;){for(var c=r.pop(),s=r.pop(),f=-1,h=-1,l=o[s],d=1;d=0||(e.flip(s,c),i(t,e,r,f,s,h),i(t,e,r,s,h,f),i(t,e,r,h,c,f),i(t,e,r,c,f,h)))}}},{"binary-search-bounds":32,"robust-in-sphere":1348}],49:[function(t,e,r){"use strict";var n,i=t("binary-search-bounds");function a(t,e,r,n,i,a,o){this.cells=t,this.neighbor=e,this.flags=n,this.constraint=r,this.active=i,this.next=a,this.boundary=o}function o(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}e.exports=function(t,e,r){var n=function(t,e){for(var r=t.cells(),n=r.length,i=0;i0||l.length>0;){for(;s.length>0;){var p=s.pop();if(u[p]!==-i){u[p]=i;c[p];for(var d=0;d<3;++d){var m=h[3*p+d];m>=0&&0===u[m]&&(f[3*p+d]?l.push(m):(s.push(m),u[m]=i))}}}var g=l;l=s,s=g,l.length=0,i=-i}var v=function(t,e,r){for(var n=0,i=0;i1&&i(r[h[p-2]],r[h[p-1]],a)>0;)t.push([h[p-1],h[p-2],o]),p-=1;h.length=p,h.push(o);var d=c.upperIds;for(p=d.length;p>1&&i(r[d[p-2]],r[d[p-1]],a)<0;)t.push([d[p-2],d[p-1],o]),p-=1;d.length=p,d.push(o)}}function p(t,e){var r;return(r=t.a[0]v[0]&&i.push(new u(v,g,s,f),new u(g,v,o,f))}i.sort(c);for(var y=i[0].a[0]-(1+Math.abs(i[0].a[0]))*Math.pow(2,-52),x=[new l([y,1],[y,0],-1,[],[],[],[])],b=[],f=0,_=i.length;f<_;++f){var w=i[f],A=w.type;A===a?h(b,x,t,w.a,w.idx):A===s?d(x,t,w):m(x,t,w)}return b}},{"binary-search-bounds":32,"robust-orientation":1350}],51:[function(t,e,r){"use strict";var n=t("binary-search-bounds");function i(t,e){this.stars=t,this.edges=e}e.exports=function(t,e){for(var r=new Array(t),n=0;n=0}}(),a.removeTriangle=function(t,e,r){var n=this.stars;o(n[t],e,r),o(n[e],r,t),o(n[r],t,e)},a.addTriangle=function(t,e,r){var n=this.stars;n[t].push(e,r),n[e].push(r,t),n[r].push(t,e)},a.opposite=function(t,e){for(var r=this.stars[e],n=1,i=r.length;nr?r:t:te?e:t}},{}],56:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n;if(r){n=e;for(var i=new Array(e.length),a=0;ae[2]?1:0)}function v(t,e,r){if(0!==t.length){if(e)for(var n=0;n=0;--a){var x=e[c=(E=n[a])[0]],b=x[0],_=x[1],w=t[b],A=t[_];if((w[0]-A[0]||w[1]-A[1])<0){var M=b;b=_,_=M}x[0]=b;var k,T=x[1]=E[1];for(i&&(k=x[2]);a>0&&n[a-1][0]===c;){var E,S=(E=n[--a])[1];i?e.push([T,S,k]):e.push([T,S]),T=S}i?e.push([T,_,k]):e.push([T,_])}return h}(t,e,h,g,r));return v(e,y,r),!!y||(h.length>0||g.length>0)}},{"./lib/rat-seg-intersect":57,"big-rat":19,"big-rat/cmp":17,"big-rat/to-float":31,"box-intersect":37,nextafter:631,"rat-vec":1321,"robust-segment-intersect":1353,"union-find":1386}],57:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var a=s(e,t),f=s(n,r),h=c(a,f);if(0===o(h))return null;var p=s(t,r),d=c(f,p),m=i(d,h),g=u(a,m);return l(t,g)};var n=t("big-rat/mul"),i=t("big-rat/div"),a=t("big-rat/sub"),o=t("big-rat/sign"),s=t("rat-vec/sub"),l=t("rat-vec/add"),u=t("rat-vec/muls");function c(t,e){return a(n(t[0],e[1]),n(t[1],e[0]))}},{"big-rat/div":18,"big-rat/mul":28,"big-rat/sign":29,"big-rat/sub":30,"rat-vec/add":1320,"rat-vec/muls":1322,"rat-vec/sub":1323}],58:[function(t,e,r){"use strict";var n=t("clamp");function i(t,e){null==e&&(e=!0);var r=t[0],i=t[1],a=t[2],o=t[3];return null==o&&(o=e?1:255),e&&(r*=255,i*=255,a*=255,o*=255),16777216*(r=255&n(r,0,255))+((i=255&n(i,0,255))<<16)+((a=255&n(a,0,255))<<8)+(o=255&n(o,0,255))}e.exports=i,e.exports.to=i,e.exports.from=function(t,e){var r=(t=+t)>>>24,n=(16711680&t)>>>16,i=(65280&t)>>>8,a=255&t;return!1===e?[r,n,i,a]:[r/255,n/255,i/255,a/255]}},{clamp:55}],59:[function(t,e,r){"use strict";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],60:[function(t,e,r){"use strict";var n=t("color-rgba"),i=t("clamp"),a=t("dtype");e.exports=function(t,e){"float"!==e&&e||(e="array"),"uint"===e&&(e="uint8"),"uint_clamped"===e&&(e="uint8_clamped");var r=new(a(e))(4),o="uint8"!==e&&"uint8_clamped"!==e;return t.length&&"string"!=typeof t||((t=n(t))[0]/=255,t[1]/=255,t[2]/=255),function(t){return t instanceof Uint8Array||t instanceof Uint8ClampedArray||!!(Array.isArray(t)&&(t[0]>1||0===t[0])&&(t[1]>1||0===t[1])&&(t[2]>1||0===t[2])&&(!t[3]||t[3]>1))}(t)?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:255,o&&(r[0]/=255,r[1]/=255,r[2]/=255,r[3]/=255),r):(o?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:1):(r[0]=i(Math.floor(255*t[0]),0,255),r[1]=i(Math.floor(255*t[1]),0,255),r[2]=i(Math.floor(255*t[2]),0,255),r[3]=null==t[3]?255:i(Math.floor(255*t[3]),0,255)),r)}},{clamp:55,"color-rgba":62,dtype:116}],61:[function(t,e,r){(function(r){"use strict";var n=t("color-name"),i=t("is-plain-obj"),a=t("defined");e.exports=function(t){var e,s,l=[],u=1;if("string"==typeof t)if(n[t])l=n[t].slice(),s="rgb";else if("transparent"===t)u=0,s="rgb",l=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var c=t.slice(1),f=c.length,h=f<=4;u=1,h?(l=[parseInt(c[0]+c[0],16),parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16)],4===f&&(u=parseInt(c[3]+c[3],16)/255)):(l=[parseInt(c[0]+c[1],16),parseInt(c[2]+c[3],16),parseInt(c[4]+c[5],16)],8===f&&(u=parseInt(c[6]+c[7],16)/255)),l[0]||(l[0]=0),l[1]||(l[1]=0),l[2]||(l[2]=0),s="rgb"}else if(e=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\s*\(([^\)]*)\)/.exec(t)){var p=e[1],c=p.replace(/a$/,"");s=c;var f="cmyk"===c?4:"gray"===c?1:3;l=e[2].trim().split(/\s*,\s*/).map(function(t,e){if(/%$/.test(t))return e===f?parseFloat(t)/100:"rgb"===c?255*parseFloat(t)/100:parseFloat(t);if("h"===c[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!==o[t])return o[t]}return parseFloat(t)}),p===c&&l.push(1),u=void 0===l[f]?1:l[f],l=l.slice(0,f)}else t.length>10&&/[0-9](?:\s|\/)/.test(t)&&(l=t.match(/([0-9]+)/g).map(function(t){return parseFloat(t)}),s=t.match(/([a-z])/gi).join("").toLowerCase());else if("number"==typeof t)s="rgb",l=[t>>>16,(65280&t)>>>8,255&t];else if(i(t)){var d=a(t.r,t.red,t.R,null);null!==d?(s="rgb",l=[d,a(t.g,t.green,t.G),a(t.b,t.blue,t.B)]):(s="hsl",l=[a(t.h,t.hue,t.H),a(t.s,t.saturation,t.S),a(t.l,t.lightness,t.L,t.b,t.brightness)]),u=a(t.a,t.alpha,t.opacity,1),null!=t.opacity&&(u/=100)}else(Array.isArray(t)||r.ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(t))&&(l=[t[0],t[1],t[2]],s="rgb",u=4===t.length?t[3]:1);return{space:s,values:l,alpha:u}};var o={red:0,orange:60,yellow:120,green:180,blue:240,purple:300}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"color-name":59,defined:110,"is-plain-obj":426}],62:[function(t,e,r){"use strict";var n=t("color-parse"),i=t("color-space/hsl"),a=t("clamp");e.exports=function(t){var e,r=n(t);return r.space?((e=Array(3))[0]=a(r.values[0],0,255),e[1]=a(r.values[1],0,255),e[2]=a(r.values[2],0,255),"h"===r.space[0]&&(e=i.rgb(e)),e.push(a(r.alpha,0,1)),e):[]}},{clamp:55,"color-parse":63,"color-space/hsl":64}],63:[function(t,e,r){(function(r){"use strict";var n=t("color-name"),i=t("is-plain-obj"),a=t("defined");e.exports=function(t){var e,s,l=[],u=1;if("string"==typeof t)if(n[t])l=n[t].slice(),s="rgb";else if("transparent"===t)u=0,s="rgb",l=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var c=t.slice(1),f=c.length,h=f<=4;u=1,h?(l=[parseInt(c[0]+c[0],16),parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16)],4===f&&(u=parseInt(c[3]+c[3],16)/255)):(l=[parseInt(c[0]+c[1],16),parseInt(c[2]+c[3],16),parseInt(c[4]+c[5],16)],8===f&&(u=parseInt(c[6]+c[7],16)/255)),l[0]||(l[0]=0),l[1]||(l[1]=0),l[2]||(l[2]=0),s="rgb"}else if(e=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\s*\(([^\)]*)\)/.exec(t)){var p=e[1],c=p.replace(/a$/,"");s=c;var f="cmyk"===c?4:"gray"===c?1:3;l=e[2].trim().split(/\s*,\s*/).map(function(t,e){if(/%$/.test(t))return e===f?parseFloat(t)/100:"rgb"===c?255*parseFloat(t)/100:parseFloat(t);if("h"===c[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!==o[t])return o[t]}return parseFloat(t)}),p===c&&l.push(1),u=void 0===l[f]?1:l[f],l=l.slice(0,f)}else t.length>10&&/[0-9](?:\s|\/)/.test(t)&&(l=t.match(/([0-9]+)/g).map(function(t){return parseFloat(t)}),s=t.match(/([a-z])/gi).join("").toLowerCase());else if(isNaN(t))if(i(t)){var d=a(t.r,t.red,t.R,null);null!==d?(s="rgb",l=[d,a(t.g,t.green,t.G),a(t.b,t.blue,t.B)]):(s="hsl",l=[a(t.h,t.hue,t.H),a(t.s,t.saturation,t.S),a(t.l,t.lightness,t.L,t.b,t.brightness)]),u=a(t.a,t.alpha,t.opacity,1),null!=t.opacity&&(u/=100)}else(Array.isArray(t)||r.ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(t))&&(l=[t[0],t[1],t[2]],s="rgb",u=4===t.length?t[3]:1);else s="rgb",l=[t>>>16,(65280&t)>>>8,255&t];return{space:s,values:l,alpha:u}};var o={red:0,orange:60,yellow:120,green:180,blue:240,purple:300}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"color-name":59,defined:110,"is-plain-obj":426}],64:[function(t,e,r){"use strict";var n=t("./rgb");e.exports={name:"hsl",min:[0,0,0],max:[360,100,100],channel:["hue","saturation","lightness"],alias:["HSL"],rgb:function(t){var e,r,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[a=255*l,a,a];e=2*l-(r=l<.5?l*(1+s):l+s-l*s),i=[0,0,0];for(var u=0;u<3;u++)(n=o+1/3*-(u-1))<0?n++:n>1&&n--,a=6*n<1?e+6*(r-e)*n:2*n<1?r:3*n<2?e+(r-e)*(2/3-n)*6:e,i[u]=255*a;return i}},n.hsl=function(t){var e,r,n=t[0]/255,i=t[1]/255,a=t[2]/255,o=Math.min(n,i,a),s=Math.max(n,i,a),l=s-o;return s===o?e=0:n===s?e=(i-a)/l:i===s?e=2+(a-n)/l:a===s&&(e=4+(n-i)/l),(e=Math.min(60*e,360))<0&&(e+=360),r=(o+s)/2,[e,100*(s===o?0:r<=.5?l/(s+o):l/(2-s-o)),100*r]}},{"./rgb":65}],65:[function(t,e,r){"use strict";e.exports={name:"rgb",min:[0,0,0],max:[255,255,255],channel:["red","green","blue"],alias:["RGB"]}},{}],66:[function(t,e,r){e.exports={jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],cool:[{index:0,rgb:[0,255,255]},{index:1,rgb:[255,0,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:1,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],"rainbow-soft":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],"freesurface-blue":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],"freesurface-red":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],"velocity-blue":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],"velocity-green":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},{}],67:[function(t,e,r){"use strict";var n=t("./colorScale"),i=t("lerp");function a(t){return[t[0]/255,t[1]/255,t[2]/255,t[3]]}function o(t){for(var e,r="#",n=0;n<3;++n)r+=("00"+(e=(e=t[n]).toString(16))).substr(e.length);return r}function s(t){return"rgba("+t.join(",")+")"}e.exports=function(t){var e,r,l,u,c,f,h,p,d,m;t||(t={});p=(t.nshades||72)-1,h=t.format||"hex",(f=t.colormap)||(f="jet");if("string"==typeof f){if(f=f.toLowerCase(),!n[f])throw Error(f+" not a supported colorscale");c=n[f]}else{if(!Array.isArray(f))throw Error("unsupported colormap option",f);c=f.slice()}if(c.length>p)throw new Error(f+" map requires nshades to be at least size "+c.length);d=Array.isArray(t.alpha)?2!==t.alpha.length?[1,1]:t.alpha.slice():"number"==typeof t.alpha?[t.alpha,t.alpha]:[1,1];e=c.map(function(t){return Math.round(t.index*p)}),d[0]=Math.min(Math.max(d[0],0),1),d[1]=Math.min(Math.max(d[1],0),1);var g=c.map(function(t,e){var r=c[e].index,n=c[e].rgb.slice();return 4===n.length&&n[3]>=0&&n[3]<=1?n:(n[3]=d[0]+(d[1]-d[0])*r,n)}),v=[];for(m=0;m0?-1:l(t,e,a)?-1:1:0===s?u>0?1:l(t,e,r)?1:-1:i(u-s)}var h=n(t,e,r);if(h>0)return o>0&&n(t,e,a)>0?1:-1;if(h<0)return o>0||n(t,e,a)>0?1:-1;var p=n(t,e,a);return p>0?1:l(t,e,r)?1:-1};var n=t("robust-orientation"),i=t("signum"),a=t("two-sum"),o=t("robust-product"),s=t("robust-sum");function l(t,e,r){var n=a(t[0],-e[0]),i=a(t[1],-e[1]),l=a(r[0],-e[0]),u=a(r[1],-e[1]),c=s(o(n,l),o(i,u));return c[c.length-1]>=0}},{"robust-orientation":1350,"robust-product":1351,"robust-sum":1355,signum:69,"two-sum":1383}],69:[function(t,e,r){"use strict";e.exports=function(t){return t<0?-1:t>0?1:0}},{}],70:[function(t,e,r){e.exports=function(t,e){var r=t.length,a=t.length-e.length;if(a)return a;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return t[0]+t[1]-e[0]-e[1]||n(t[0],t[1])-n(e[0],e[1]);case 3:var o=t[0]+t[1],s=e[0]+e[1];if(a=o+t[2]-(s+e[2]))return a;var l=n(t[0],t[1]),u=n(e[0],e[1]);return n(l,t[2])-n(u,e[2])||n(l+t[2],o)-n(u+e[2],s);case 4:var c=t[0],f=t[1],h=t[2],p=t[3],d=e[0],m=e[1],g=e[2],v=e[3];return c+f+h+p-(d+m+g+v)||n(c,f,h,p)-n(d,m,g,v,d)||n(c+f,c+h,c+p,f+h,f+p,h+p)-n(d+m,d+g,d+v,m+g,m+v,g+v)||n(c+f+h,c+f+p,c+h+p,f+h+p)-n(d+m+g,d+m+v,d+g+v,m+g+v);default:for(var y=t.slice().sort(i),x=e.slice().sort(i),b=0;b0&&o();break;case"number":n.im=0,n.re=t;break;default:o()}isNaN(n.re)||isNaN(n.im)};function u(t,e){if(!(this instanceof u))return new u(t,e);l(t,e),this.re=n.re,this.im=n.im}u.prototype={re:0,im:0,sign:function(){var t=this.abs();return new u(this.re/t,this.im/t)},add:function(t,e){return l(t,e),new u(this.re+n.re,this.im+n.im)},sub:function(t,e){return l(t,e),new u(this.re-n.re,this.im-n.im)},mul:function(t,e){return l(t,e),0===n.im&&0===this.im?new u(this.re*n.re,0):new u(this.re*n.re-this.im*n.im,this.re*n.im+this.im*n.re)},div:function(t,e){l(t,e),t=this.re,e=this.im;var r,i,a=n.re,o=n.im;return 0===o?0===a?new u(0!==t?t/0:0,0!==e?e/0:0):new u(t/a,e/a):Math.abs(a)=0)return new u(Math.pow(t,n.re),0);if(0===t)switch((n.re%4+4)%4){case 0:return new u(Math.pow(e,n.re),0);case 1:return new u(0,Math.pow(e,n.re));case 2:return new u(-Math.pow(e,n.re),0);case 3:return new u(0,-Math.pow(e,n.re))}}var r=Math.atan2(e,t),i=s(t,e);return t=Math.exp(n.re*i-n.im*r),e=n.im*i+n.re*r,new u(t*Math.cos(e),t*Math.sin(e))},sqrt:function(){var t,e,r=this.re,n=this.im,i=this.abs();if(r>=0){if(0===n)return new u(Math.sqrt(r),0);t=.5*Math.sqrt(2*(i+r))}else t=Math.abs(n)/Math.sqrt(2*(i-r));return e=r<=0?.5*Math.sqrt(2*(i-r)):Math.abs(n)/Math.sqrt(2*(i+r)),new u(t,n<0?-e:e)},exp:function(){var t=Math.exp(this.re);return this.im,new u(t*Math.cos(this.im),t*Math.sin(this.im))},log:function(){var t=this.re,e=this.im;return new u(s(t,e),Math.atan2(e,t))},abs:function(){return t=this.re,e=this.im,r=Math.abs(t),n=Math.abs(e),r<3e3&&n<3e3?Math.sqrt(r*r+n*n):(r1&&0===e,n=1-t,i=1+t,a=n*n+e*e,o=0!==a?new u((i*n-e*e)/a,(e*n+i*e)/a):new u(-1!==t?t/0:0,0!==e?e/0:0),l=o.re;return o.re=s(o.re,o.im)/2,o.im=Math.atan2(o.im,l)/2,r&&(o.im=-o.im),o},acoth:function(){var t=this.re,e=this.im;if(0===t&&0===e)return new u(0,Math.PI/2);var r=t*t+e*e;return 0!==r?new u(t/r,-e/r).atanh():new u(0!==t?t/0:0,0!==e?-e/0:0).atanh()},acsch:function(){var t=this.re,e=this.im;if(0===e)return new u(0!==t?Math.log(t+Math.sqrt(t*t+1)):1/0,0);var r=t*t+e*e;return 0!==r?new u(t/r,-e/r).asinh():new u(0!==t?t/0:0,0!==e?-e/0:0).asinh()},asech:function(){var t=this.re,e=this.im;if(0===t&&0===e)return new u(1/0,0);var r=t*t+e*e;return 0!==r?new u(t/r,-e/r).acosh():new u(0!==t?t/0:0,0!==e?-e/0:0).acosh()},inverse:function(){var t=this.re,e=this.im,r=t*t+e*e;return new u(0!==t?t/r:0,0!==e?-e/r:0)},conjugate:function(){return new u(this.re,-this.im)},neg:function(){return new u(-this.re,-this.im)},ceil:function(t){return t=Math.pow(10,t||0),new u(Math.ceil(this.re*t)/t,Math.ceil(this.im*t)/t)},floor:function(t){return t=Math.pow(10,t||0),new u(Math.floor(this.re*t)/t,Math.floor(this.im*t)/t)},round:function(t){return t=Math.pow(10,t||0),new u(Math.round(this.re*t)/t,Math.round(this.im*t)/t)},equals:function(t,e){return l(t,e),Math.abs(n.re-this.re)<=u.EPSILON&&Math.abs(n.im-this.im)<=u.EPSILON},clone:function(){return new u(this.re,this.im)},toString:function(){var t=this.re,e=this.im,r="";return isNaN(t)||isNaN(e)?"NaN":(0!==t&&(r+=t),0!==e&&(0!==t?r+=e<0?" - ":" + ":e<0&&(r+="-"),1!==(e=Math.abs(e))&&(r+=e),r+="i"),r||"0")},toVector:function(){return[this.re,this.im]},valueOf:function(){return 0===this.im?this.re:null},isNaN:function(){return isNaN(this.re)||isNaN(this.im)},isFinite:function(){return isFinite(this.re)&&isFinite(this.im)}},u.ZERO=new u(0,0),u.ONE=new u(1,0),u.I=new u(0,1),u.PI=new u(Math.PI,0),u.E=new u(Math.E,0),u.EPSILON=1e-16,"object"==typeof r?e.exports=u:t.Complex=u}(this)},{}],73:[function(t,e,r){"use strict";var n=t("./lib/ch1d"),i=t("./lib/ch2d"),a=t("./lib/chnd");e.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[[0]];var r=t[0].length;if(0===r)return[];if(1===r)return n(t);if(2===r)return i(t);return a(t,r)}},{"./lib/ch1d":74,"./lib/ch2d":75,"./lib/chnd":76}],74:[function(t,e,r){"use strict";e.exports=function(t){for(var e=0,r=0,n=1;nt[r][0]&&(r=n);return er?[[r],[e]]:[[e]]}},{}],75:[function(t,e,r){"use strict";e.exports=function(t){var e=n(t),r=e.length;if(r<=2)return[];for(var i=new Array(r),a=e[r-1],o=0;o=e[l]&&(s+=1);a[o]=s}}return t}(o,r)}};var n=t("incremental-convex-hull"),i=t("affine-hull")},{"affine-hull":6,"incremental-convex-hull":416}],77:[function(t,e,r){e.exports={AFG:"afghan",ALA:"\\b\\wland",ALB:"albania",DZA:"algeria",ASM:"^(?=.*americ).*samoa",AND:"andorra",AGO:"angola",AIA:"anguill?a",ATA:"antarctica",ATG:"antigua",ARG:"argentin",ARM:"armenia",ABW:"^(?!.*bonaire).*\\baruba",AUS:"australia",AUT:"^(?!.*hungary).*austria|\\baustri.*\\bemp",AZE:"azerbaijan",BHS:"bahamas",BHR:"bahrain",BGD:"bangladesh|^(?=.*east).*paki?stan",BRB:"barbados",BLR:"belarus|byelo",BEL:"^(?!.*luxem).*belgium",BLZ:"belize|^(?=.*british).*honduras",BEN:"benin|dahome",BMU:"bermuda",BTN:"bhutan",BOL:"bolivia",BES:"^(?=.*bonaire).*eustatius|^(?=.*carib).*netherlands|\\bbes.?islands",BIH:"herzegovina|bosnia",BWA:"botswana|bechuana",BVT:"bouvet",BRA:"brazil",IOT:"british.?indian.?ocean",BRN:"brunei",BGR:"bulgaria",BFA:"burkina|\\bfaso|upper.?volta",BDI:"burundi",CPV:"verde",KHM:"cambodia|kampuchea|khmer",CMR:"cameroon",CAN:"canada",CYM:"cayman",CAF:"\\bcentral.african.republic",TCD:"\\bchad",CHL:"\\bchile",CHN:"^(?!.*\\bmac)(?!.*\\bhong)(?!.*\\btai)(?!.*\\brep).*china|^(?=.*peo)(?=.*rep).*china",CXR:"christmas",CCK:"\\bcocos|keeling",COL:"colombia",COM:"comoro",COG:"^(?!.*\\bdem)(?!.*\\bd[\\.]?r)(?!.*kinshasa)(?!.*zaire)(?!.*belg)(?!.*l.opoldville)(?!.*free).*\\bcongo",COK:"\\bcook",CRI:"costa.?rica",CIV:"ivoire|ivory",HRV:"croatia",CUB:"\\bcuba",CUW:"^(?!.*bonaire).*\\bcura(c|\xe7)ao",CYP:"cyprus",CSK:"czechoslovakia",CZE:"^(?=.*rep).*czech|czechia|bohemia",COD:"\\bdem.*congo|congo.*\\bdem|congo.*\\bd[\\.]?r|\\bd[\\.]?r.*congo|belgian.?congo|congo.?free.?state|kinshasa|zaire|l.opoldville|drc|droc|rdc",DNK:"denmark",DJI:"djibouti",DMA:"dominica(?!n)",DOM:"dominican.rep",ECU:"ecuador",EGY:"egypt",SLV:"el.?salvador",GNQ:"guine.*eq|eq.*guine|^(?=.*span).*guinea",ERI:"eritrea",EST:"estonia",ETH:"ethiopia|abyssinia",FLK:"falkland|malvinas",FRO:"faroe|faeroe",FJI:"fiji",FIN:"finland",FRA:"^(?!.*\\bdep)(?!.*martinique).*france|french.?republic|\\bgaul",GUF:"^(?=.*french).*guiana",PYF:"french.?polynesia|tahiti",ATF:"french.?southern",GAB:"gabon",GMB:"gambia",GEO:"^(?!.*south).*georgia",DDR:"german.?democratic.?republic|democratic.?republic.*germany|east.germany",DEU:"^(?!.*east).*germany|^(?=.*\\bfed.*\\brep).*german",GHA:"ghana|gold.?coast",GIB:"gibraltar",GRC:"greece|hellenic|hellas",GRL:"greenland",GRD:"grenada",GLP:"guadeloupe",GUM:"\\bguam",GTM:"guatemala",GGY:"guernsey",GIN:"^(?!.*eq)(?!.*span)(?!.*bissau)(?!.*portu)(?!.*new).*guinea",GNB:"bissau|^(?=.*portu).*guinea",GUY:"guyana|british.?guiana",HTI:"haiti",HMD:"heard.*mcdonald",VAT:"holy.?see|vatican|papal.?st",HND:"^(?!.*brit).*honduras",HKG:"hong.?kong",HUN:"^(?!.*austr).*hungary",ISL:"iceland",IND:"india(?!.*ocea)",IDN:"indonesia",IRN:"\\biran|persia",IRQ:"\\biraq|mesopotamia",IRL:"(^ireland)|(^republic.*ireland)",IMN:"^(?=.*isle).*\\bman",ISR:"israel",ITA:"italy",JAM:"jamaica",JPN:"japan",JEY:"jersey",JOR:"jordan",KAZ:"kazak",KEN:"kenya|british.?east.?africa|east.?africa.?prot",KIR:"kiribati",PRK:"^(?=.*democrat|people|north|d.*p.*.r).*\\bkorea|dprk|korea.*(d.*p.*r)",KWT:"kuwait",KGZ:"kyrgyz|kirghiz",LAO:"\\blaos?\\b",LVA:"latvia",LBN:"lebanon",LSO:"lesotho|basuto",LBR:"liberia",LBY:"libya",LIE:"liechtenstein",LTU:"lithuania",LUX:"^(?!.*belg).*luxem",MAC:"maca(o|u)",MDG:"madagascar|malagasy",MWI:"malawi|nyasa",MYS:"malaysia",MDV:"maldive",MLI:"\\bmali\\b",MLT:"\\bmalta",MHL:"marshall",MTQ:"martinique",MRT:"mauritania",MUS:"mauritius",MYT:"\\bmayotte",MEX:"\\bmexic",FSM:"fed.*micronesia|micronesia.*fed",MCO:"monaco",MNG:"mongolia",MNE:"^(?!.*serbia).*montenegro",MSR:"montserrat",MAR:"morocco|\\bmaroc",MOZ:"mozambique",MMR:"myanmar|burma",NAM:"namibia",NRU:"nauru",NPL:"nepal",NLD:"^(?!.*\\bant)(?!.*\\bcarib).*netherlands",ANT:"^(?=.*\\bant).*(nether|dutch)",NCL:"new.?caledonia",NZL:"new.?zealand",NIC:"nicaragua",NER:"\\bniger(?!ia)",NGA:"nigeria",NIU:"niue",NFK:"norfolk",MNP:"mariana",NOR:"norway",OMN:"\\boman|trucial",PAK:"^(?!.*east).*paki?stan",PLW:"palau",PSE:"palestin|\\bgaza|west.?bank",PAN:"panama",PNG:"papua|new.?guinea",PRY:"paraguay",PER:"peru",PHL:"philippines",PCN:"pitcairn",POL:"poland",PRT:"portugal",PRI:"puerto.?rico",QAT:"qatar",KOR:"^(?!.*d.*p.*r)(?!.*democrat)(?!.*people)(?!.*north).*\\bkorea(?!.*d.*p.*r)",MDA:"moldov|b(a|e)ssarabia",REU:"r(e|\xe9)union",ROU:"r(o|u|ou)mania",RUS:"\\brussia|soviet.?union|u\\.?s\\.?s\\.?r|socialist.?republics",RWA:"rwanda",BLM:"barth(e|\xe9)lemy",SHN:"helena",KNA:"kitts|\\bnevis",LCA:"\\blucia",MAF:"^(?=.*collectivity).*martin|^(?=.*france).*martin(?!ique)|^(?=.*french).*martin(?!ique)",SPM:"miquelon",VCT:"vincent",WSM:"^(?!.*amer).*samoa",SMR:"san.?marino",STP:"\\bs(a|\xe3)o.?tom(e|\xe9)",SAU:"\\bsa\\w*.?arabia",SEN:"senegal",SRB:"^(?!.*monte).*serbia",SYC:"seychell",SLE:"sierra",SGP:"singapore",SXM:"^(?!.*martin)(?!.*saba).*maarten",SVK:"^(?!.*cze).*slovak",SVN:"slovenia",SLB:"solomon",SOM:"somali",ZAF:"south.africa|s\\\\..?africa",SGS:"south.?georgia|sandwich",SSD:"\\bs\\w*.?sudan",ESP:"spain",LKA:"sri.?lanka|ceylon",SDN:"^(?!.*\\bs(?!u)).*sudan",SUR:"surinam|dutch.?guiana",SJM:"svalbard",SWZ:"swaziland",SWE:"sweden",CHE:"switz|swiss",SYR:"syria",TWN:"taiwan|taipei|formosa|^(?!.*peo)(?=.*rep).*china",TJK:"tajik",THA:"thailand|\\bsiam",MKD:"macedonia|fyrom",TLS:"^(?=.*leste).*timor|^(?=.*east).*timor",TGO:"togo",TKL:"tokelau",TON:"tonga",TTO:"trinidad|tobago",TUN:"tunisia",TUR:"turkey",TKM:"turkmen",TCA:"turks",TUV:"tuvalu",UGA:"uganda",UKR:"ukrain",ARE:"emirates|^u\\.?a\\.?e\\.?$|united.?arab.?em",GBR:"united.?kingdom|britain|^u\\.?k\\.?$",TZA:"tanzania",USA:"united.?states\\b(?!.*islands)|\\bu\\.?s\\.?a\\.?\\b|^\\s*u\\.?s\\.?\\b(?!.*islands)",UMI:"minor.?outlying.?is",URY:"uruguay",UZB:"uzbek",VUT:"vanuatu|new.?hebrides",VEN:"venezuela",VNM:"^(?!.*republic).*viet.?nam|^(?=.*socialist).*viet.?nam",VGB:"^(?=.*\\bu\\.?\\s?k).*virgin|^(?=.*brit).*virgin|^(?=.*kingdom).*virgin",VIR:"^(?=.*\\bu\\.?\\s?s).*virgin|^(?=.*states).*virgin",WLF:"futuna|wallis",ESH:"western.sahara",YEM:"^(?!.*arab)(?!.*north)(?!.*sana)(?!.*peo)(?!.*dem)(?!.*south)(?!.*aden)(?!.*\\bp\\.?d\\.?r).*yemen",YMD:"^(?=.*peo).*yemen|^(?!.*rep)(?=.*dem).*yemen|^(?=.*south).*yemen|^(?=.*aden).*yemen|^(?=.*\\bp\\.?d\\.?r).*yemen",YUG:"yugoslavia",ZMB:"zambia|northern.?rhodesia",EAZ:"zanzibar",ZWE:"zimbabwe|^(?!.*northern).*rhodesia"}},{}],78:[function(t,e,r){e.exports=["xx-small","x-small","small","medium","large","x-large","xx-large","larger","smaller"]},{}],79:[function(t,e,r){e.exports=["normal","condensed","semi-condensed","extra-condensed","ultra-condensed","expanded","semi-expanded","extra-expanded","ultra-expanded"]},{}],80:[function(t,e,r){e.exports=["normal","italic","oblique"]},{}],81:[function(t,e,r){e.exports=["normal","bold","bolder","lighter","100","200","300","400","500","600","700","800","900"]},{}],82:[function(t,e,r){"use strict";e.exports={parse:t("./parse"),stringify:t("./stringify")}},{"./parse":84,"./stringify":85}],83:[function(t,e,r){"use strict";var n=t("css-font-size-keywords");e.exports={isSize:function(t){return/^[\d\.]/.test(t)||-1!==t.indexOf("/")||-1!==n.indexOf(t)}}},{"css-font-size-keywords":78}],84:[function(t,e,r){"use strict";var n=t("unquote"),i=t("css-global-keywords"),a=t("css-system-font-keywords"),o=t("css-font-weight-keywords"),s=t("css-font-style-keywords"),l=t("css-font-stretch-keywords"),u=t("string-split-by"),c=t("./lib/util").isSize;e.exports=h;var f=h.cache={};function h(t){if("string"!=typeof t)throw new Error("Font argument must be a string.");if(f[t])return f[t];if(""===t)throw new Error("Cannot parse an empty string.");if(-1!==a.indexOf(t))return f[t]={system:t};for(var e,r={style:"normal",variant:"normal",weight:"normal",stretch:"normal",lineHeight:"normal",size:"1rem",family:["serif"]},h=u(t,/\s+/);e=h.shift();){if(-1!==i.indexOf(e))return["style","variant","weight","stretch"].forEach(function(t){r[t]=e}),f[t]=r;if(-1===s.indexOf(e))if("normal"!==e&&"small-caps"!==e)if(-1===l.indexOf(e)){if(-1===o.indexOf(e)){if(c(e)){var d=u(e,"/");if(r.size=d[0],null!=d[1]?r.lineHeight=p(d[1]):"/"===h[0]&&(h.shift(),r.lineHeight=p(h.shift())),!h.length)throw new Error("Missing required font-family.");return r.family=u(h.join(" "),/\s*,\s*/).map(n),f[t]=r}throw new Error("Unknown or unsupported font token: "+e)}r.weight=e}else r.stretch=e;else r.variant=e;else r.style=e}throw new Error("Missing required font-size.")}function p(t){var e=parseFloat(t);return e.toString()===t?e:t}},{"./lib/util":83,"css-font-stretch-keywords":79,"css-font-style-keywords":80,"css-font-weight-keywords":81,"css-global-keywords":86,"css-system-font-keywords":87,"string-split-by":1368,unquote:1388}],85:[function(t,e,r){"use strict";var n=t("pick-by-alias"),i=t("./lib/util").isSize,a=m(t("css-global-keywords")),o=m(t("css-system-font-keywords")),s=m(t("css-font-weight-keywords")),l=m(t("css-font-style-keywords")),u=m(t("css-font-stretch-keywords")),c={normal:1,"small-caps":1},f={serif:1,"sans-serif":1,monospace:1,cursive:1,fantasy:1,"system-ui":1},h="1rem",p="serif";function d(t,e){if(t&&!e[t]&&!a[t])throw Error("Unknown keyword `"+t+"`");return t}function m(t){for(var e={},r=0;r=0;--p)a[p]=u*t[p]+c*e[p]+f*r[p]+h*n[p];return a}return u*t+c*e+f*r+h*n},e.exports.derivative=function(t,e,r,n,i,a){var o=6*i*i-6*i,s=3*i*i-4*i+1,l=-6*i*i+6*i,u=3*i*i-2*i;if(t.length){a||(a=new Array(t.length));for(var c=t.length-1;c>=0;--c)a[c]=o*t[c]+s*e[c]+l*r[c]+u*n[c];return a}return o*t+s*e+l*r[c]+u*n}},{}],89:[function(t,e,r){"use strict";var n=t("./lib/thunk.js");function i(){this.argTypes=[],this.shimArgs=[],this.arrayArgs=[],this.arrayBlockIndices=[],this.scalarArgs=[],this.offsetArgs=[],this.offsetArgIndex=[],this.indexArgs=[],this.shapeArgs=[],this.funcName="",this.pre=null,this.body=null,this.post=null,this.debug=!1}e.exports=function(t){var e=new i;e.pre=t.pre,e.body=t.body,e.post=t.post;var r=t.args.slice(0);e.argTypes=r;for(var a=0;a0)throw new Error("cwise: pre() block may not reference array args");if(a0)throw new Error("cwise: post() block may not reference array args")}else if("scalar"===o)e.scalarArgs.push(a),e.shimArgs.push("scalar"+a);else if("index"===o){if(e.indexArgs.push(a),a0)throw new Error("cwise: pre() block may not reference array index");if(a0)throw new Error("cwise: post() block may not reference array index")}else if("shape"===o){if(e.shapeArgs.push(a),ar.length)throw new Error("cwise: Too many arguments in pre() block");if(e.body.args.length>r.length)throw new Error("cwise: Too many arguments in body() block");if(e.post.args.length>r.length)throw new Error("cwise: Too many arguments in post() block");return e.debug=!!t.printCode||!!t.debug,e.funcName=t.funcName||"cwise",e.blockSize=t.blockSize||64,n(e)}},{"./lib/thunk.js":91}],90:[function(t,e,r){"use strict";var n=t("uniq");function i(t,e,r){var n,i,a=t.length,o=e.arrayArgs.length,s=e.indexArgs.length>0,l=[],u=[],c=0,f=0;for(n=0;n0&&l.push("var "+u.join(",")),n=a-1;n>=0;--n)c=t[n],l.push(["for(i",n,"=0;i",n,"0&&l.push(["index[",f,"]-=s",f].join("")),l.push(["++index[",c,"]"].join(""))),l.push("}")}return l.join("\n")}function a(t,e,r){for(var n=t.body,i=[],a=[],o=0;o0&&y.push("shape=SS.slice(0)"),t.indexArgs.length>0){var x=new Array(r);for(l=0;l0&&v.push("var "+y.join(",")),l=0;l3&&v.push(a(t.pre,t,s));var A=a(t.body,t,s),M=function(t){for(var e=0,r=t[0].length;e0,u=[],c=0;c0;){"].join("")),u.push(["if(j",c,"<",s,"){"].join("")),u.push(["s",e[c],"=j",c].join("")),u.push(["j",c,"=0"].join("")),u.push(["}else{s",e[c],"=",s].join("")),u.push(["j",c,"-=",s,"}"].join("")),l&&u.push(["index[",e[c],"]=j",c].join(""));for(c=0;c3&&v.push(a(t.post,t,s)),t.debug&&console.log("-----Generated cwise routine for ",e,":\n"+v.join("\n")+"\n----------");var k=[t.funcName||"unnamed","_cwise_loop_",o[0].join("s"),"m",M,function(t){for(var e=new Array(t.length),r=!0,n=0;n0&&(r=r&&e[n]===e[n-1])}return r?e[0]:e.join("")}(s)].join("");return new Function(["function ",k,"(",g.join(","),"){",v.join("\n"),"} return ",k].join(""))()}},{uniq:1387}],91:[function(t,e,r){"use strict";var n=t("./compile.js");e.exports=function(t){var e=["'use strict'","var CACHED={}"],r=[],i=t.funcName+"_cwise_thunk";e.push(["return function ",i,"(",t.shimArgs.join(","),"){"].join(""));for(var a=[],o=[],s=[["array",t.arrayArgs[0],".shape.slice(",Math.max(0,t.arrayBlockIndices[0]),t.arrayBlockIndices[0]<0?","+t.arrayBlockIndices[0]+")":")"].join("")],l=[],u=[],c=0;c0&&(l.push("array"+t.arrayArgs[0]+".shape.length===array"+f+".shape.length+"+(Math.abs(t.arrayBlockIndices[0])-Math.abs(t.arrayBlockIndices[c]))),u.push("array"+t.arrayArgs[0]+".shape[shapeIndex+"+Math.max(0,t.arrayBlockIndices[0])+"]===array"+f+".shape[shapeIndex+"+Math.max(0,t.arrayBlockIndices[c])+"]"))}for(t.arrayArgs.length>1&&(e.push("if (!("+l.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same dimensionality!')"),e.push("for(var shapeIndex=array"+t.arrayArgs[0]+".shape.length-"+Math.abs(t.arrayBlockIndices[0])+"; shapeIndex--\x3e0;) {"),e.push("if (!("+u.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same shape!')"),e.push("}")),c=0;ce?1:t>=e?0:NaN},r=function(t){var r;return 1===t.length&&(r=t,t=function(t,n){return e(r(t),n)}),{left:function(e,r,n,i){for(null==n&&(n=0),null==i&&(i=e.length);n>>1;t(e[a],r)<0?n=a+1:i=a}return n},right:function(e,r,n,i){for(null==n&&(n=0),null==i&&(i=e.length);n>>1;t(e[a],r)>0?i=a:n=a+1}return n}}};var n=r(e),i=n.right,a=n.left;function o(t,e){return[t,e]}var s=function(t){return null===t?NaN:+t},l=function(t,e){var r,n,i=t.length,a=0,o=-1,l=0,u=0;if(null==e)for(;++o1)return u/(a-1)},u=function(t,e){var r=l(t,e);return r?Math.sqrt(r):r},c=function(t,e){var r,n,i,a=t.length,o=-1;if(null==e){for(;++o=r)for(n=i=r;++or&&(n=r),i=r)for(n=i=r;++or&&(n=r),i=0?(a>=v?10:a>=y?5:a>=x?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=v?10:a>=y?5:a>=x?2:1)}function _(t,e,r){var n=Math.abs(e-t)/Math.max(0,r),i=Math.pow(10,Math.floor(Math.log(n)/Math.LN10)),a=n/i;return a>=v?i*=10:a>=y?i*=5:a>=x&&(i*=2),e=1)return+r(t[n-1],n-1,t);var n,i=(n-1)*e,a=Math.floor(i),o=+r(t[a],a,t);return o+(+r(t[a+1],a+1,t)-o)*(i-a)}},M=function(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a=r)for(n=r;++ar&&(n=r)}else for(;++a=r)for(n=r;++ar&&(n=r);return n},k=function(t){if(!(i=t.length))return[];for(var e=-1,r=M(t,T),n=new Array(r);++et?1:e>=t?0:NaN},t.deviation=u,t.extent=c,t.histogram=function(){var t=m,e=c,r=w;function n(n){var a,o,s=n.length,l=new Array(s);for(a=0;af;)h.pop(),--p;var d,m=new Array(p+1);for(a=0;a<=p;++a)(d=m[a]=[]).x0=a>0?h[a-1]:c,d.x1=a=r)for(n=r;++an&&(n=r)}else for(;++a=r)for(n=r;++an&&(n=r);return n},t.mean=function(t,e){var r,n=t.length,i=n,a=-1,o=0;if(null==e)for(;++a=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r},t.min=M,t.pairs=function(t,e){null==e&&(e=o);for(var r=0,n=t.length-1,i=t[0],a=new Array(n<0?0:n);r0)return[t];if((n=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s=l.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var s,u,f,h=-1,p=n.length,d=l[i++],m=r(),g=a();++hl.length)return r;var i,a=u[n-1];return null!=e&&n>=l.length?i=r.entries():(i=[],r.each(function(e,r){i.push({key:r,values:t(e,n)})})),null!=a?i.sort(function(t,e){return a(t.key,e.key)}):i}(c(t,0,a,o),0)},key:function(t){return l.push(t),s},sortKeys:function(t){return u[l.length-1]=t,s},sortValues:function(e){return t=e,s},rollup:function(t){return e=t,s}}},t.set=u,t.map=r,t.keys=function(t){var e=[];for(var r in t)e.push(r);return e},t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],97:[function(t,e,r){var n;n=this,function(t){"use strict";var e=function(t,e,r){t.prototype=e.prototype=r,r.constructor=t};function r(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}function n(){}var i="\\s*([+-]?\\d+)\\s*",a="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",o="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",s=/^#([0-9a-f]{3})$/,l=/^#([0-9a-f]{6})$/,u=new RegExp("^rgb\\("+[i,i,i]+"\\)$"),c=new RegExp("^rgb\\("+[o,o,o]+"\\)$"),f=new RegExp("^rgba\\("+[i,i,i,a]+"\\)$"),h=new RegExp("^rgba\\("+[o,o,o,a]+"\\)$"),p=new RegExp("^hsl\\("+[a,o,o]+"\\)$"),d=new RegExp("^hsla\\("+[a,o,o,a]+"\\)$"),m={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function g(t){var e;return t=(t+"").trim().toLowerCase(),(e=s.exec(t))?new _((e=parseInt(e[1],16))>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):(e=l.exec(t))?v(parseInt(e[1],16)):(e=u.exec(t))?new _(e[1],e[2],e[3],1):(e=c.exec(t))?new _(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=f.exec(t))?y(e[1],e[2],e[3],e[4]):(e=h.exec(t))?y(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=p.exec(t))?w(e[1],e[2]/100,e[3]/100,1):(e=d.exec(t))?w(e[1],e[2]/100,e[3]/100,e[4]):m.hasOwnProperty(t)?v(m[t]):"transparent"===t?new _(NaN,NaN,NaN,0):null}function v(t){return new _(t>>16&255,t>>8&255,255&t,1)}function y(t,e,r,n){return n<=0&&(t=e=r=NaN),new _(t,e,r,n)}function x(t){return t instanceof n||(t=g(t)),t?new _((t=t.rgb()).r,t.g,t.b,t.opacity):new _}function b(t,e,r,n){return 1===arguments.length?x(t):new _(t,e,r,null==n?1:n)}function _(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function w(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new M(t,e,r,n)}function A(t,e,r,i){return 1===arguments.length?function(t){if(t instanceof M)return new M(t.h,t.s,t.l,t.opacity);if(t instanceof n||(t=g(t)),!t)return new M;if(t instanceof M)return t;var e=(t=t.rgb()).r/255,r=t.g/255,i=t.b/255,a=Math.min(e,r,i),o=Math.max(e,r,i),s=NaN,l=o-a,u=(o+a)/2;return l?(s=e===o?(r-i)/l+6*(r0&&u<1?0:s,new M(s,l,u,t.opacity)}(t):new M(t,e,r,null==i?1:i)}function M(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function k(t,e,r){return 255*(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)}e(n,g,{displayable:function(){return this.rgb().displayable()},toString:function(){return this.rgb()+""}}),e(_,b,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new _(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new _(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},toString:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}})),e(M,A,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new M(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new M(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new _(k(t>=240?t-240:t+120,i,n),k(t,i,n),k(t<120?t+240:t-120,i,n),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var T=Math.PI/180,E=180/Math.PI,S=.95047,C=1,L=1.08883,O=4/29,z=6/29,D=3*z*z,P=z*z*z;function I(t){if(t instanceof R)return new R(t.l,t.a,t.b,t.opacity);if(t instanceof q){var e=t.h*T;return new R(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}t instanceof _||(t=x(t));var r=V(t.r),n=V(t.g),i=V(t.b),a=F((.4124564*r+.3575761*n+.1804375*i)/S),o=F((.2126729*r+.7151522*n+.072175*i)/C);return new R(116*o-16,500*(a-o),200*(o-F((.0193339*r+.119192*n+.9503041*i)/L)),t.opacity)}function N(t,e,r,n){return 1===arguments.length?I(t):new R(t,e,r,null==n?1:n)}function R(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function F(t){return t>P?Math.pow(t,1/3):t/D+O}function B(t){return t>z?t*t*t:D*(t-O)}function j(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function V(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function U(t,e,r,n){return 1===arguments.length?function(t){if(t instanceof q)return new q(t.h,t.c,t.l,t.opacity);t instanceof R||(t=I(t));var e=Math.atan2(t.b,t.a)*E;return new q(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}(t):new q(t,e,r,null==n?1:n)}function q(t,e,r,n){this.h=+t,this.c=+e,this.l=+r,this.opacity=+n}e(R,N,r(n,{brighter:function(t){return new R(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new R(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return t=C*B(t),new _(j(3.2404542*(e=S*B(e))-1.5371385*t-.4985314*(r=L*B(r))),j(-.969266*e+1.8760108*t+.041556*r),j(.0556434*e-.2040259*t+1.0572252*r),this.opacity)}})),e(q,U,r(n,{brighter:function(t){return new q(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new q(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return I(this).rgb()}}));var H=-.14861,G=1.78277,W=-.29227,Y=-.90649,Z=1.97294,X=Z*Y,$=Z*G,J=G*W-Y*H;function K(t,e,r,n){return 1===arguments.length?function(t){if(t instanceof Q)return new Q(t.h,t.s,t.l,t.opacity);t instanceof _||(t=x(t));var e=t.r/255,r=t.g/255,n=t.b/255,i=(J*n+X*e-$*r)/(J+X-$),a=n-i,o=(Z*(r-i)-W*a)/Y,s=Math.sqrt(o*o+a*a)/(Z*i*(1-i)),l=s?Math.atan2(o,a)*E-120:NaN;return new Q(l<0?l+360:l,s,i,t.opacity)}(t):new Q(t,e,r,null==n?1:n)}function Q(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}e(Q,K,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Q(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Q(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*T,e=+this.l,r=isNaN(this.s)?0:this.s*e*(1-e),n=Math.cos(t),i=Math.sin(t);return new _(255*(e+r*(H*n+G*i)),255*(e+r*(W*n+Y*i)),255*(e+r*(Z*n)),this.opacity)}})),t.color=g,t.rgb=b,t.hsl=A,t.lab=N,t.hcl=U,t.cubehelix=K,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],98:[function(t,e,r){var n;n=this,function(t){"use strict";var e={value:function(){}};function r(){for(var t,e=0,r=arguments.length,i={};e=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})),l=-1,u=s.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++l0)for(var r,n,i=new Array(r),a=0;ah+u||np+u||ac.index){var f=h-s.x-s.vx,g=p-s.y-s.vy,v=f*f+g*g;vt.r&&(t.r=t[e].r)}function h(){if(r){var e,i,a=r.length;for(n=new Array(a),e=0;e=u)){(t.data!==r||t.next)&&(0===f&&(d+=(f=o())*f),0===h&&(d+=(h=o())*h),d1?(null==r?c.remove(t):c.set(t,y(r)),e):c.get(t)},find:function(e,r,n){var i,a,o,s,l,u=0,c=t.length;for(null==n?n=1/0:n*=n,u=0;u1?(h.on(t,r),e):h.on(t)}}},t.forceX=function(t){var e,r,n,i=a(.1);function o(t){for(var i,a=0,o=e.length;a=1?(n=1,e-1):Math.floor(n*e),a=t[i],o=t[i+1],s=i>0?t[i-1]:2*a-o,l=i180||r<-180?r-360*Math.round(r/360):r):a(isNaN(t)?e:t)}function l(t){return 1==(t=+t)?u:function(e,r){return r-e?function(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}(e,r,t):a(isNaN(e)?r:e)}}function u(t,e){var r=e-t;return r?o(t,r):a(isNaN(t)?e:t)}var c=function t(r){var n=l(r);function i(t,r){var i=n((t=e.rgb(t)).r,(r=e.rgb(r)).r),a=n(t.g,r.g),o=n(t.b,r.b),s=u(t.opacity,r.opacity);return function(e){return t.r=i(e),t.g=a(e),t.b=o(e),t.opacity=s(e),t+""}}return i.gamma=t,i}(1);function f(t){return function(r){var n,i,a=r.length,o=new Array(a),s=new Array(a),l=new Array(a);for(n=0;na&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:g(r,n)})),a=x.lastIndex;return a180?e+=360:e-t>180&&(t+=360),a.push({i:r.push(i(r)+"rotate(",null,n)-2,x:g(t,e)})):e&&r.push(i(r)+"rotate("+e+n)}(a.rotate,o.rotate,s,l),function(t,e,r,a){t!==e?a.push({i:r.push(i(r)+"skewX(",null,n)-2,x:g(t,e)}):e&&r.push(i(r)+"skewX("+e+n)}(a.skewX,o.skewX,s,l),function(t,e,r,n,a,o){if(t!==r||e!==n){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:g(t,r)},{i:s-2,x:g(e,n)})}else 1===r&&1===n||a.push(i(a)+"scale("+r+","+n+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,l),a=o=null,function(t){for(var e,r=-1,n=l.length;++r1e-6)if(Math.abs(f*l-u*c)>1e-6&&a){var p=n-o,d=i-s,m=l*l+u*u,g=p*p+d*d,v=Math.sqrt(m),y=Math.sqrt(h),x=a*Math.tan((e-Math.acos((m+h-g)/(2*v*y)))/2),b=x/y,_=x/v;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*c)+","+(r+b*f)),this._+="A"+a+","+a+",0,0,"+ +(f*p>c*d)+","+(this._x1=t+_*l)+","+(this._y1=r+_*u)}else this._+="L"+(this._x1=t)+","+(this._y1=r);else;},arc:function(t,i,a,o,s,l){t=+t,i=+i;var u=(a=+a)*Math.cos(o),c=a*Math.sin(o),f=t+u,h=i+c,p=1^l,d=l?o-s:s-o;if(a<0)throw new Error("negative radius: "+a);null===this._x1?this._+="M"+f+","+h:(Math.abs(this._x1-f)>1e-6||Math.abs(this._y1-h)>1e-6)&&(this._+="L"+f+","+h),a&&(d<0&&(d=d%r+r),d>n?this._+="A"+a+","+a+",0,1,"+p+","+(t-u)+","+(i-c)+"A"+a+","+a+",0,1,"+p+","+(this._x1=f)+","+(this._y1=h):d>1e-6&&(this._+="A"+a+","+a+",0,"+ +(d>=e)+","+p+","+(this._x1=t+a*Math.cos(s))+","+(this._y1=i+a*Math.sin(s))))},rect:function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},toString:function(){return this._}},t.path=a,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],102:[function(t,e,r){var n;n=this,function(t){"use strict";function e(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var i,a,o,s,l,u,c,f,h,p=t._root,d={data:n},m=t._x0,g=t._y0,v=t._x1,y=t._y1;if(!p)return t._root=d,t;for(;p.length;)if((u=e>=(a=(m+v)/2))?m=a:v=a,(c=r>=(o=(g+y)/2))?g=o:y=o,i=p,!(p=p[f=c<<1|u]))return i[f]=d,t;if(s=+t._x.call(null,p.data),l=+t._y.call(null,p.data),e===s&&r===l)return d.next=p,i?i[f]=d:t._root=d,t;do{i=i?i[f]=new Array(4):t._root=new Array(4),(u=e>=(a=(m+v)/2))?m=a:v=a,(c=r>=(o=(g+y)/2))?g=o:y=o}while((f=c<<1|u)==(h=(l>=o)<<1|s>=a));return i[h]=p,i[f]=d,t}var r=function(t,e,r,n,i){this.node=t,this.x0=e,this.y0=r,this.x1=n,this.y1=i};function n(t){return t[0]}function i(t){return t[1]}function a(t,e,r){var a=new o(null==e?n:e,null==r?i:r,NaN,NaN,NaN,NaN);return null==t?a:a.addAll(t)}function o(t,e,r,n,i,a){this._x=t,this._y=e,this._x0=r,this._y0=n,this._x1=i,this._y1=a,this._root=void 0}function s(t){for(var e={data:t.data},r=e;t=t.next;)r=r.next={data:t.data};return e}var l=a.prototype=o.prototype;l.copy=function(){var t,e,r=new o(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root;if(!n)return r;if(!n.length)return r._root=s(n),r;for(t=[{source:n,target:r._root=new Array(4)}];n=t.pop();)for(var i=0;i<4;++i)(e=n.source[i])&&(e.length?t.push({source:e,target:n.target[i]=new Array(4)}):n.target[i]=s(e));return r},l.add=function(t){var r=+this._x.call(null,t),n=+this._y.call(null,t);return e(this.cover(r,n),r,n,t)},l.addAll=function(t){var r,n,i,a,o=t.length,s=new Array(o),l=new Array(o),u=1/0,c=1/0,f=-1/0,h=-1/0;for(n=0;nf&&(f=i),ah&&(h=a));for(ft||t>i||n>e||e>a))return this;var o,s,l=i-r,u=this._root;switch(s=(e<(n+a)/2)<<1|t<(r+i)/2){case 0:do{(o=new Array(4))[s]=u,u=o}while(a=n+(l*=2),t>(i=r+l)||e>a);break;case 1:do{(o=new Array(4))[s]=u,u=o}while(a=n+(l*=2),(r=i-l)>t||e>a);break;case 2:do{(o=new Array(4))[s]=u,u=o}while(n=a-(l*=2),t>(i=r+l)||n>e);break;case 3:do{(o=new Array(4))[s]=u,u=o}while(n=a-(l*=2),(r=i-l)>t||n>e)}this._root&&this._root.length&&(this._root=u)}return this._x0=r,this._y0=n,this._x1=i,this._y1=a,this},l.data=function(){var t=[];return this.visit(function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)}),t},l.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},l.find=function(t,e,n){var i,a,o,s,l,u,c,f=this._x0,h=this._y0,p=this._x1,d=this._y1,m=[],g=this._root;for(g&&m.push(new r(g,f,h,p,d)),null==n?n=1/0:(f=t-n,h=e-n,p=t+n,d=e+n,n*=n);u=m.pop();)if(!(!(g=u.node)||(a=u.x0)>p||(o=u.y0)>d||(s=u.x1)=y)<<1|t>=v)&&(u=m[m.length-1],m[m.length-1]=m[m.length-1-c],m[m.length-1-c]=u)}else{var x=t-+this._x.call(null,g.data),b=e-+this._y.call(null,g.data),_=x*x+b*b;if(_=(s=(d+g)/2))?d=s:g=s,(c=o>=(l=(m+v)/2))?m=l:v=l,e=p,!(p=p[f=c<<1|u]))return this;if(!p.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(r=e,h=f)}for(;p.data!==t;)if(n=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,n?(i?n.next=i:delete n.next,this):e?(i?e[f]=i:delete e[f],(p=e[0]||e[1]||e[2]||e[3])&&p===(e[3]||e[2]||e[1]||e[0])&&!p.length&&(r?r[h]=p:this._root=p),this):(this._root=i,this)},l.removeAll=function(t){for(var e=0,r=t.length;e1||i>1)}function S(t,e,r){return t.sort(L),t.forEach(function(n,i){var a,o,s=0;if(W(n,r)&&E(n))n.circularPathData.verticalBuffer=s+n.width/2;else{for(var l=0;lo.source.column)){var u=t[l].circularPathData.verticalBuffer+t[l].width/2+e;s=u>s?u:s}n.circularPathData.verticalBuffer=s+n.width/2}}),t}function C(t,r,i,a){var o=e.min(t.links,function(t){return t.source.y0});t.links.forEach(function(t){t.circular&&(t.circularPathData={})}),S(t.links.filter(function(t){return"top"==t.circularLinkType}),r,a),S(t.links.filter(function(t){return"bottom"==t.circularLinkType}),r,a),t.links.forEach(function(e){if(e.circular){if(e.circularPathData.arcRadius=e.width+w,e.circularPathData.leftNodeBuffer=5,e.circularPathData.rightNodeBuffer=5,e.circularPathData.sourceWidth=e.source.x1-e.source.x0,e.circularPathData.sourceX=e.source.x0+e.circularPathData.sourceWidth,e.circularPathData.targetX=e.target.x0,e.circularPathData.sourceY=e.y0,e.circularPathData.targetY=e.y1,W(e,a)&&E(e))e.circularPathData.leftSmallArcRadius=w+e.width/2,e.circularPathData.leftLargeArcRadius=w+e.width/2,e.circularPathData.rightSmallArcRadius=w+e.width/2,e.circularPathData.rightLargeArcRadius=w+e.width/2,"bottom"==e.circularLinkType?(e.circularPathData.verticalFullExtent=e.source.y1+_+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent=e.source.y0-_-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius);else{var s=e.source.column,l=e.circularLinkType,u=t.links.filter(function(t){return t.source.column==s&&t.circularLinkType==l});"bottom"==e.circularLinkType?u.sort(z):u.sort(O);var c=0;u.forEach(function(t,n){t.circularLinkID==e.circularLinkID&&(e.circularPathData.leftSmallArcRadius=w+e.width/2+c,e.circularPathData.leftLargeArcRadius=w+e.width/2+n*r+c),c+=t.width}),s=e.target.column,u=t.links.filter(function(t){return t.target.column==s&&t.circularLinkType==l}),"bottom"==e.circularLinkType?u.sort(P):u.sort(D),c=0,u.forEach(function(t,n){t.circularLinkID==e.circularLinkID&&(e.circularPathData.rightSmallArcRadius=w+e.width/2+c,e.circularPathData.rightLargeArcRadius=w+e.width/2+n*r+c),c+=t.width}),"bottom"==e.circularLinkType?(e.circularPathData.verticalFullExtent=Math.max(i,e.source.y1,e.target.y1)+_+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent=o-_-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius)}e.circularPathData.leftInnerExtent=e.circularPathData.sourceX+e.circularPathData.leftNodeBuffer,e.circularPathData.rightInnerExtent=e.circularPathData.targetX-e.circularPathData.rightNodeBuffer,e.circularPathData.leftFullExtent=e.circularPathData.sourceX+e.circularPathData.leftLargeArcRadius+e.circularPathData.leftNodeBuffer,e.circularPathData.rightFullExtent=e.circularPathData.targetX-e.circularPathData.rightLargeArcRadius-e.circularPathData.rightNodeBuffer}if(e.circular)e.path=function(t){var e="";e="top"==t.circularLinkType?"M"+t.circularPathData.sourceX+" "+t.circularPathData.sourceY+" L"+t.circularPathData.leftInnerExtent+" "+t.circularPathData.sourceY+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftSmallArcRadius+" 0 0 0 "+t.circularPathData.leftFullExtent+" "+(t.circularPathData.sourceY-t.circularPathData.leftSmallArcRadius)+" L"+t.circularPathData.leftFullExtent+" "+t.circularPathData.verticalLeftInnerExtent+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftLargeArcRadius+" 0 0 0 "+t.circularPathData.leftInnerExtent+" "+t.circularPathData.verticalFullExtent+" L"+t.circularPathData.rightInnerExtent+" "+t.circularPathData.verticalFullExtent+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightLargeArcRadius+" 0 0 0 "+t.circularPathData.rightFullExtent+" "+t.circularPathData.verticalRightInnerExtent+" L"+t.circularPathData.rightFullExtent+" "+(t.circularPathData.targetY-t.circularPathData.rightSmallArcRadius)+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightSmallArcRadius+" 0 0 0 "+t.circularPathData.rightInnerExtent+" "+t.circularPathData.targetY+" L"+t.circularPathData.targetX+" "+t.circularPathData.targetY:"M"+t.circularPathData.sourceX+" "+t.circularPathData.sourceY+" L"+t.circularPathData.leftInnerExtent+" "+t.circularPathData.sourceY+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftSmallArcRadius+" 0 0 1 "+t.circularPathData.leftFullExtent+" "+(t.circularPathData.sourceY+t.circularPathData.leftSmallArcRadius)+" L"+t.circularPathData.leftFullExtent+" "+t.circularPathData.verticalLeftInnerExtent+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftLargeArcRadius+" 0 0 1 "+t.circularPathData.leftInnerExtent+" "+t.circularPathData.verticalFullExtent+" L"+t.circularPathData.rightInnerExtent+" "+t.circularPathData.verticalFullExtent+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightLargeArcRadius+" 0 0 1 "+t.circularPathData.rightFullExtent+" "+t.circularPathData.verticalRightInnerExtent+" L"+t.circularPathData.rightFullExtent+" "+(t.circularPathData.targetY+t.circularPathData.rightSmallArcRadius)+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightSmallArcRadius+" 0 0 1 "+t.circularPathData.rightInnerExtent+" "+t.circularPathData.targetY+" L"+t.circularPathData.targetX+" "+t.circularPathData.targetY;return e}(e);else{var f=n.linkHorizontal().source(function(t){return[t.source.x0+(t.source.x1-t.source.x0),t.y0]}).target(function(t){return[t.target.x0,t.y1]});e.path=f(e)}})}function L(t,e){return I(t)==I(e)?"bottom"==t.circularLinkType?z(t,e):O(t,e):I(e)-I(t)}function O(t,e){return t.y0-e.y0}function z(t,e){return e.y0-t.y0}function D(t,e){return t.y1-e.y1}function P(t,e){return e.y1-t.y1}function I(t){return t.target.column-t.source.column}function N(t){return t.target.x0-t.source.x1}function R(t,e){var r=k(t),n=N(e)/Math.tan(r);return"up"==G(t)?t.y1+n:t.y1-n}function F(t,e){var r=k(t),n=N(e)/Math.tan(r);return"up"==G(t)?t.y1-n:t.y1+n}function B(t,e,r,n){t.links.forEach(function(i){if(!i.circular&&i.target.column-i.source.column>1){var a=i.source.column+1,o=i.target.column-1,s=1,l=o-a+1;for(s=1;a<=o;a++,s++)t.nodes.forEach(function(o){if(o.column==a){var u,c=s/(l+1),f=Math.pow(1-c,3),h=3*c*Math.pow(1-c,2),p=3*Math.pow(c,2)*(1-c),d=Math.pow(c,3),m=f*i.y0+h*i.y0+p*i.y1+d*i.y1,g=m-i.width/2,v=m+i.width/2;g>o.y0&&go.y0&&vo.y1&&V(t,u,e,r)})):go.y1&&(u=v-o.y0+10,o=V(o,u,e,r),t.nodes.forEach(function(t){b(t,n)!=b(o,n)&&t.column==o.column&&t.y0o.y1&&V(t,u,e,r)}))}})}})}function j(t,e){return t.y0>e.y0&&t.y0e.y0&&t.y1e.y1)}function V(t,e,r,n){return t.y0+e>=r&&t.y1+e<=n&&(t.y0=t.y0+e,t.y1=t.y1+e,t.targetLinks.forEach(function(t){t.y1=t.y1+e}),t.sourceLinks.forEach(function(t){t.y0=t.y0+e})),t}function U(t,e,r,n){t.nodes.forEach(function(i){n&&i.y+(i.y1-i.y0)>e&&(i.y=i.y-(i.y+(i.y1-i.y0)-e));var a=t.links.filter(function(t){return b(t.source,r)==b(i,r)}),o=a.length;o>1&&a.sort(function(t,e){if(!t.circular&&!e.circular){if(t.target.column==e.target.column)return t.y1-e.y1;if(!H(t,e))return t.y1-e.y1;if(t.target.column>e.target.column){var r=F(e,t);return t.y1-r}if(e.target.column>t.target.column)return F(t,e)-e.y1}return t.circular&&!e.circular?"top"==t.circularLinkType?-1:1:e.circular&&!t.circular?"top"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&"top"==t.circularLinkType?t.target.column===e.target.column?t.target.y1-e.target.y1:e.target.column-t.target.column:t.circularLinkType===e.circularLinkType&&"bottom"==t.circularLinkType?t.target.column===e.target.column?e.target.y1-t.target.y1:t.target.column-e.target.column:"top"==t.circularLinkType?-1:1:void 0});var s=i.y0;a.forEach(function(t){t.y0=s+t.width/2,s+=t.width}),a.forEach(function(t,e){if("bottom"==t.circularLinkType){for(var r=e+1,n=0;r1&&n.sort(function(t,e){if(!t.circular&&!e.circular){if(t.source.column==e.source.column)return t.y0-e.y0;if(!H(t,e))return t.y0-e.y0;if(e.source.column0?"up":"down"}function W(t,e){return b(t.source,e)==b(t.target,e)}t.sankeyCircular=function(){var t,n,a=0,b=0,k=1,E=1,S=24,L=g,O=o,z=v,D=y,P=32,I=2,N=null;function R(){var o={nodes:z.apply(null,arguments),links:D.apply(null,arguments)};!function(t){t.nodes.forEach(function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]});var e=r.map(t.nodes,L);t.links.forEach(function(t,r){t.index=r;var n=t.source,i=t.target;"object"!==("undefined"==typeof n?"undefined":l(n))&&(n=t.source=x(e,n)),"object"!==("undefined"==typeof i?"undefined":l(i))&&(i=t.target=x(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)})}(o),function(t,e,r){var n=0;if(null===r){for(var a=[],o=0;o0?r+_+w:r,bottom:n=n>0?n+_+w:n,left:a=a>0?a+_+w:a,right:i=i>0?i+_+w:i}}(i),c=function(t,r){var n=e.max(t.nodes,function(t){return t.column}),i=k-a,o=E-b,s=i+r.right+r.left,l=o+r.top+r.bottom,u=i/s,c=o/l;return a=a*u+r.left,k=0==r.right?k:k*u,b=b*c+r.top,E*=c,t.nodes.forEach(function(t){t.x0=a+t.column*((k-a-S)/n),t.x1=t.x0+S}),c}(i,u);s*=c,i.links.forEach(function(t){t.width=t.value*s}),l.forEach(function(t){var e=t.length;t.forEach(function(t,n){t.depth==l.length-1&&1==e?(t.y0=E/2-t.value*s,t.y1=t.y0+t.value*s):0==t.depth&&1==e?(t.y0=E/2-t.value*s,t.y1=t.y0+t.value*s):t.partOfCycle?0==T(t,r)?(t.y0=E/2+n,t.y1=t.y0+t.value*s):"top"==t.circularLinkType?(t.y0=b+n,t.y1=t.y0+t.value*s):(t.y0=E-t.value*s-n,t.y1=t.y0+t.value*s):0==u.top||0==u.bottom?(t.y0=(E-b)/e*n,t.y1=t.y0+t.value*s):(t.y0=(E-b)/2-e/2+n,t.y1=t.y0+t.value*s)})})})(s),v();for(var u=1,c=o;c>0;--c)g(u*=.99,s),v();function g(t,r){var n=l.length;l.forEach(function(i){var a=i.length,o=i[0].depth;i.forEach(function(i){var s;if(i.sourceLinks.length||i.targetLinks.length)if(i.partOfCycle&&T(i,r)>0);else if(0==o&&1==a)s=i.y1-i.y0,i.y0=E/2-s/2,i.y1=E/2+s/2;else if(o==n-1&&1==a)s=i.y1-i.y0,i.y0=E/2-s/2,i.y1=E/2+s/2;else{var l=e.mean(i.sourceLinks,m),u=e.mean(i.targetLinks,d),c=((l&&u?(l+u)/2:l||u)-p(i))*t;i.y0+=c,i.y1+=c}})})}function v(){l.forEach(function(e){var r,n,i,a=b,o=e.length;for(e.sort(f),i=0;i0&&(r.y0+=n,r.y1+=n),a=r.y1+t;if((n=a-t-E)>0)for(a=r.y0-=n,r.y1-=n,i=o-2;i>=0;--i)r=e[i],(n=r.y1+t-a)>0&&(r.y0-=n,r.y1-=n),a=r.y0})}}(o,P,L),F(o);for(var s=0;s<4;s++)U(o,E,L),q(o,0,L),B(o,b,E,L),U(o,E,L),q(o,0,L);return function(t,r,n){var i=t.nodes,a=t.links,o=!1,s=!1;if(a.forEach(function(t){"top"==t.circularLinkType?o=!0:"bottom"==t.circularLinkType&&(s=!0)}),0==o||0==s){var l=e.min(i,function(t){return t.y0}),u=e.max(i,function(t){return t.y1}),c=u-l,f=n-r,h=f/c;i.forEach(function(t){var e=(t.y1-t.y0)*h;t.y0=(t.y0-l)*h,t.y1=t.y0+e}),a.forEach(function(t){t.y0=(t.y0-l)*h,t.y1=(t.y1-l)*h,t.width=t.width*h})}}(o,b,E),C(o,I,E,L),o}function F(t){t.nodes.forEach(function(t){t.sourceLinks.sort(c),t.targetLinks.sort(u)}),t.nodes.forEach(function(t){var e=t.y0,r=e,n=t.y1,i=n;t.sourceLinks.forEach(function(t){t.circular?(t.y0=n-t.width/2,n-=t.width):(t.y0=e+t.width/2,e+=t.width)}),t.targetLinks.forEach(function(t){t.circular?(t.y1=i-t.width/2,i-=t.width):(t.y1=r+t.width/2,r+=t.width)})})}return R.nodeId=function(t){return arguments.length?(L="function"==typeof t?t:s(t),R):L},R.nodeAlign=function(t){return arguments.length?(O="function"==typeof t?t:s(t),R):O},R.nodeWidth=function(t){return arguments.length?(S=+t,R):S},R.nodePadding=function(e){return arguments.length?(t=+e,R):t},R.nodes=function(t){return arguments.length?(z="function"==typeof t?t:s(t),R):z},R.links=function(t){return arguments.length?(D="function"==typeof t?t:s(t),R):D},R.size=function(t){return arguments.length?(a=b=0,k=+t[0],E=+t[1],R):[k-a,E-b]},R.extent=function(t){return arguments.length?(a=+t[0][0],k=+t[1][0],b=+t[0][1],E=+t[1][1],R):[[a,b],[k,E]]},R.iterations=function(t){return arguments.length?(P=+t,R):P},R.circularLinkGap=function(t){return arguments.length?(I=+t,R):I},R.nodePaddingRatio=function(t){return arguments.length?(n=+t,R):n},R.sortNodes=function(t){return arguments.length?(N=t,R):N},R.update=function(t){return M(t,L),F(t),t.links.forEach(function(t){t.circular&&(t.circularLinkType=t.y0+t.y1e?1:t>=e?0:NaN}function r(t){var r;return 1===t.length&&(r=t,t=function(t,n){return e(r(t),n)}),{left:function(e,r,n,i){for(null==n&&(n=0),null==i&&(i=e.length);n>>1;t(e[a],r)<0?n=a+1:i=a}return n},right:function(e,r,n,i){for(null==n&&(n=0),null==i&&(i=e.length);n>>1;t(e[a],r)>0?i=a:n=a+1}return n}}}var n=r(e),i=n.right,a=n.left;function o(t,e){return[t,e]}function s(t){return null===t?NaN:+t}function l(t,e){var r,n,i=t.length,a=0,o=-1,l=0,u=0;if(null==e)for(;++o1)return u/(a-1)}function u(t,e){var r=l(t,e);return r?Math.sqrt(r):r}function c(t,e){var r,n,i,a=t.length,o=-1;if(null==e){for(;++o=r)for(n=i=r;++or&&(n=r),i=r)for(n=i=r;++or&&(n=r),i=0?(a>=v?10:a>=y?5:a>=x?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=v?10:a>=y?5:a>=x?2:1)}function _(t,e,r){var n=Math.abs(e-t)/Math.max(0,r),i=Math.pow(10,Math.floor(Math.log(n)/Math.LN10)),a=n/i;return a>=v?i*=10:a>=y?i*=5:a>=x&&(i*=2),e=1)return+r(t[n-1],n-1,t);var n,i=(n-1)*e,a=Math.floor(i),o=+r(t[a],a,t);return o+(+r(t[a+1],a+1,t)-o)*(i-a)}}function M(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a=r)for(n=r;++ar&&(n=r)}else for(;++a=r)for(n=r;++ar&&(n=r);return n}function k(t){if(!(i=t.length))return[];for(var e=-1,r=M(t,T),n=new Array(r);++et?1:e>=t?0:NaN},t.deviation=u,t.extent=c,t.histogram=function(){var t=m,e=c,r=w;function n(n){var a,o,s=n.length,l=new Array(s);for(a=0;af;)h.pop(),--p;var d,m=new Array(p+1);for(a=0;a<=p;++a)(d=m[a]=[]).x0=a>0?h[a-1]:c,d.x1=a=r)for(n=r;++an&&(n=r)}else for(;++a=r)for(n=r;++an&&(n=r);return n},t.mean=function(t,e){var r,n=t.length,i=n,a=-1,o=0;if(null==e)for(;++a=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r},t.min=M,t.pairs=function(t,e){null==e&&(e=o);for(var r=0,n=t.length-1,i=t[0],a=new Array(n<0?0:n);r0)return[t];if((n=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s=l.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var s,u,f,h=-1,p=n.length,d=l[i++],m=r(),g=a();++hl.length)return r;var i,a=u[n-1];return null!=e&&n>=l.length?i=r.entries():(i=[],r.each(function(e,r){i.push({key:r,values:t(e,n)})})),null!=a?i.sort(function(t,e){return a(t.key,e.key)}):i}(c(t,0,a,o),0)},key:function(t){return l.push(t),s},sortKeys:function(t){return u[l.length-1]=t,s},sortValues:function(e){return t=e,s},rollup:function(t){return e=t,s}}},t.set=u,t.map=r,t.keys=function(t){var e=[];for(var r in t)e.push(r);return e},t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],106:[function(t,e,r){var n,i;n=this,i=function(t,e){"use strict";function r(t){return function(){return t}}var n=Math.abs,i=Math.atan2,a=Math.cos,o=Math.max,s=Math.min,l=Math.sin,u=Math.sqrt,c=1e-12,f=Math.PI,h=f/2,p=2*f;function d(t){return t>=1?h:t<=-1?-h:Math.asin(t)}function m(t){return t.innerRadius}function g(t){return t.outerRadius}function v(t){return t.startAngle}function y(t){return t.endAngle}function x(t){return t&&t.padAngle}function b(t,e,r,n,i,a,s){var l=t-r,c=e-n,f=(s?a:-a)/u(l*l+c*c),h=f*c,p=-f*l,d=t+h,m=e+p,g=r+h,v=n+p,y=(d+g)/2,x=(m+v)/2,b=g-d,_=v-m,w=b*b+_*_,A=i-a,M=d*v-g*m,k=(_<0?-1:1)*u(o(0,A*A*w-M*M)),T=(M*_-b*k)/w,E=(-M*b-_*k)/w,S=(M*_+b*k)/w,C=(-M*b+_*k)/w,L=T-y,O=E-x,z=S-y,D=C-x;return L*L+O*O>z*z+D*D&&(T=S,E=C),{cx:T,cy:E,x01:-h,y01:-p,x11:T*(i/A-1),y11:E*(i/A-1)}}function _(t){this._context=t}function w(t){return new _(t)}function A(t){return t[0]}function M(t){return t[1]}function k(){var t=A,n=M,i=r(!0),a=null,o=w,s=null;function l(r){var l,u,c,f=r.length,h=!1;for(null==a&&(s=o(c=e.path())),l=0;l<=f;++l)!(l=f;--h)u.point(v[h],y[h]);u.lineEnd(),u.areaEnd()}g&&(v[c]=+t(p,c,r),y[c]=+i(p,c,r),u.point(n?+n(p,c,r):v[c],a?+a(p,c,r):y[c]))}if(d)return u=null,d+""||null}function f(){return k().defined(o).curve(l).context(s)}return c.x=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),n=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),c):t},c.x1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:r(+t),c):n},c.y=function(t){return arguments.length?(i="function"==typeof t?t:r(+t),a=null,c):i},c.y0=function(t){return arguments.length?(i="function"==typeof t?t:r(+t),c):i},c.y1=function(t){return arguments.length?(a=null==t?null:"function"==typeof t?t:r(+t),c):a},c.lineX0=c.lineY0=function(){return f().x(t).y(i)},c.lineY1=function(){return f().x(t).y(a)},c.lineX1=function(){return f().x(n).y(i)},c.defined=function(t){return arguments.length?(o="function"==typeof t?t:r(!!t),c):o},c.curve=function(t){return arguments.length?(l=t,null!=s&&(u=l(s)),c):l},c.context=function(t){return arguments.length?(null==t?s=u=null:u=l(s=t),c):s},c}function E(t,e){return et?1:e>=t?0:NaN}function S(t){return t}_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var C=O(w);function L(t){this._curve=t}function O(t){function e(e){return new L(t(e))}return e._curve=t,e}function z(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(O(t)):e()._curve},t}function D(){return z(k().curve(C))}function P(){var t=T().curve(C),e=t.curve,r=t.lineX0,n=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return z(r())},delete t.lineX0,t.lineEndAngle=function(){return z(n())},delete t.lineX1,t.lineInnerRadius=function(){return z(i())},delete t.lineY0,t.lineOuterRadius=function(){return z(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(O(t)):e()._curve},t}function I(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]}L.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var N=Array.prototype.slice;function R(t){return t.source}function F(t){return t.target}function B(t){var n=R,i=F,a=A,o=M,s=null;function l(){var r,l=N.call(arguments),u=n.apply(this,l),c=i.apply(this,l);if(s||(s=r=e.path()),t(s,+a.apply(this,(l[0]=u,l)),+o.apply(this,l),+a.apply(this,(l[0]=c,l)),+o.apply(this,l)),r)return s=null,r+""||null}return l.source=function(t){return arguments.length?(n=t,l):n},l.target=function(t){return arguments.length?(i=t,l):i},l.x=function(t){return arguments.length?(a="function"==typeof t?t:r(+t),l):a},l.y=function(t){return arguments.length?(o="function"==typeof t?t:r(+t),l):o},l.context=function(t){return arguments.length?(s=null==t?null:t,l):s},l}function j(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function V(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e,r=(r+i)/2,n,r,n,i)}function U(t,e,r,n,i){var a=I(e,r),o=I(e,r=(r+i)/2),s=I(n,r),l=I(n,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],l[0],l[1])}var q={draw:function(t,e){var r=Math.sqrt(e/f);t.moveTo(r,0),t.arc(0,0,r,0,p)}},H={draw:function(t,e){var r=Math.sqrt(e/5)/2;t.moveTo(-3*r,-r),t.lineTo(-r,-r),t.lineTo(-r,-3*r),t.lineTo(r,-3*r),t.lineTo(r,-r),t.lineTo(3*r,-r),t.lineTo(3*r,r),t.lineTo(r,r),t.lineTo(r,3*r),t.lineTo(-r,3*r),t.lineTo(-r,r),t.lineTo(-3*r,r),t.closePath()}},G=Math.sqrt(1/3),W=2*G,Y={draw:function(t,e){var r=Math.sqrt(e/W),n=r*G;t.moveTo(0,-r),t.lineTo(n,0),t.lineTo(0,r),t.lineTo(-n,0),t.closePath()}},Z=Math.sin(f/10)/Math.sin(7*f/10),X=Math.sin(p/10)*Z,$=-Math.cos(p/10)*Z,J={draw:function(t,e){var r=Math.sqrt(.8908130915292852*e),n=X*r,i=$*r;t.moveTo(0,-r),t.lineTo(n,i);for(var a=1;a<5;++a){var o=p*a/5,s=Math.cos(o),l=Math.sin(o);t.lineTo(l*r,-s*r),t.lineTo(s*n-l*i,l*n+s*i)}t.closePath()}},K={draw:function(t,e){var r=Math.sqrt(e),n=-r/2;t.rect(n,n,r,r)}},Q=Math.sqrt(3),tt={draw:function(t,e){var r=-Math.sqrt(e/(3*Q));t.moveTo(0,2*r),t.lineTo(-Q*r,-r),t.lineTo(Q*r,-r),t.closePath()}},et=-.5,rt=Math.sqrt(3)/2,nt=1/Math.sqrt(12),it=3*(nt/2+1),at={draw:function(t,e){var r=Math.sqrt(e/it),n=r/2,i=r*nt,a=n,o=r*nt+r,s=-a,l=o;t.moveTo(n,i),t.lineTo(a,o),t.lineTo(s,l),t.lineTo(et*n-rt*i,rt*n+et*i),t.lineTo(et*a-rt*o,rt*a+et*o),t.lineTo(et*s-rt*l,rt*s+et*l),t.lineTo(et*n+rt*i,et*i-rt*n),t.lineTo(et*a+rt*o,et*o-rt*a),t.lineTo(et*s+rt*l,et*l-rt*s),t.closePath()}},ot=[q,H,Y,K,J,tt,at];function st(){}function lt(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function ut(t){this._context=t}function ct(t){this._context=t}function ft(t){this._context=t}function ht(t,e){this._basis=new ut(t),this._beta=e}ut.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:lt(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ct.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ft.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ht.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n,i=t[0],a=e[0],o=t[r]-i,s=e[r]-a,l=-1;++l<=r;)n=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(i+n*o),this._beta*e[l]+(1-this._beta)*(a+n*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var pt=function t(e){function r(t){return 1===e?new ut(t):new ht(t,e)}return r.beta=function(e){return t(+e)},r}(.85);function dt(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function mt(t,e){this._context=t,this._k=(1-e)/6}mt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:dt(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var gt=function t(e){function r(t){return new mt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function vt(t,e){this._context=t,this._k=(1-e)/6}vt.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var yt=function t(e){function r(t){return new vt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function xt(t,e){this._context=t,this._k=(1-e)/6}xt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var bt=function t(e){function r(t){return new xt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function _t(t,e,r){var n=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>c){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>c){var u=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*u+t._x1*t._l23_2a-e*t._l12_2a)/f,o=(o*u+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,o,t._x2,t._y2)}function wt(t,e){this._context=t,this._alpha=e}wt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var At=function t(e){function r(t){return e?new wt(t,e):new mt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Mt(t,e){this._context=t,this._alpha=e}Mt.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var kt=function t(e){function r(t){return e?new Mt(t,e):new vt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Tt(t,e){this._context=t,this._alpha=e}Tt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Et=function t(e){function r(t){return e?new Tt(t,e):new xt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function St(t){this._context=t}function Ct(t){return t<0?-1:1}function Lt(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),o=(r-t._y1)/(i||n<0&&-0),s=(a*i+o*n)/(n+i);return(Ct(a)+Ct(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function Ot(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function zt(t,e,r){var n=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-n)/3;t._context.bezierCurveTo(n+s,i+s*e,a-s,o-s*r,a,o)}function Dt(t){this._context=t}function Pt(t){this._context=new It(t)}function It(t){this._context=t}function Nt(t){this._context=t}function Rt(t){var e,r,n=t.length-1,i=new Array(n),a=new Array(n),o=new Array(n);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[n-1]=(t[n]+i[n-1])/2,e=0;e1)for(var r,n,i,a=1,o=t[e[0]],s=o.length;a=0;)r[e]=e;return r}function Vt(t,e){return t[e]}function Ut(t){var e=t.map(qt);return jt(t).sort(function(t,r){return e[t]-e[r]})}function qt(t){for(var e,r=-1,n=0,i=t.length,a=-1/0;++ra&&(a=e,n=r);return n}function Ht(t){var e=t.map(Gt);return jt(t).sort(function(t,r){return e[t]-e[r]})}function Gt(t){for(var e,r=0,n=-1,i=t.length;++n=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}}this._x=t,this._y=e}},t.arc=function(){var t=m,o=g,_=r(0),w=null,A=v,M=y,k=x,T=null;function E(){var r,m,g,v=+t.apply(this,arguments),y=+o.apply(this,arguments),x=A.apply(this,arguments)-h,E=M.apply(this,arguments)-h,S=n(E-x),C=E>x;if(T||(T=r=e.path()),yc)if(S>p-c)T.moveTo(y*a(x),y*l(x)),T.arc(0,0,y,x,E,!C),v>c&&(T.moveTo(v*a(E),v*l(E)),T.arc(0,0,v,E,x,C));else{var L,O,z=x,D=E,P=x,I=E,N=S,R=S,F=k.apply(this,arguments)/2,B=F>c&&(w?+w.apply(this,arguments):u(v*v+y*y)),j=s(n(y-v)/2,+_.apply(this,arguments)),V=j,U=j;if(B>c){var q=d(B/v*l(F)),H=d(B/y*l(F));(N-=2*q)>c?(P+=q*=C?1:-1,I-=q):(N=0,P=I=(x+E)/2),(R-=2*H)>c?(z+=H*=C?1:-1,D-=H):(R=0,z=D=(x+E)/2)}var G=y*a(z),W=y*l(z),Y=v*a(I),Z=v*l(I);if(j>c){var X,$=y*a(D),J=y*l(D),K=v*a(P),Q=v*l(P);if(S1?0:g<-1?f:Math.acos(g))/2),at=u(X[0]*X[0]+X[1]*X[1]);V=s(j,(v-at)/(it-1)),U=s(j,(y-at)/(it+1))}}R>c?U>c?(L=b(K,Q,G,W,y,U,C),O=b($,J,Y,Z,y,U,C),T.moveTo(L.cx+L.x01,L.cy+L.y01),Uc&&N>c?V>c?(L=b(Y,Z,$,J,v,-V,C),O=b(G,W,K,Q,v,-V,C),T.lineTo(L.cx+L.x01,L.cy+L.y01),V0&&(d+=f);for(null!=e?m.sort(function(t,r){return e(g[t],g[r])}):null!=n&&m.sort(function(t,e){return n(r[t],r[e])}),s=0,u=d?(y-h*b)/d:0;s0?f*u:0)+b,g[l]={data:r[l],index:s,value:f,startAngle:v,endAngle:c,padAngle:x};return g}return s.value=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),s):t},s.sortValues=function(t){return arguments.length?(e=t,n=null,s):e},s.sort=function(t){return arguments.length?(n=t,e=null,s):n},s.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:r(+t),s):i},s.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:r(+t),s):a},s.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:r(+t),s):o},s},t.areaRadial=P,t.radialArea=P,t.lineRadial=D,t.radialLine=D,t.pointRadial=I,t.linkHorizontal=function(){return B(j)},t.linkVertical=function(){return B(V)},t.linkRadial=function(){var t=B(U);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t},t.symbol=function(){var t=r(q),n=r(64),i=null;function a(){var r;if(i||(i=r=e.path()),t.apply(this,arguments).draw(i,+n.apply(this,arguments)),r)return i=null,r+""||null}return a.type=function(e){return arguments.length?(t="function"==typeof e?e:r(e),a):t},a.size=function(t){return arguments.length?(n="function"==typeof t?t:r(+t),a):n},a.context=function(t){return arguments.length?(i=null==t?null:t,a):i},a},t.symbols=ot,t.symbolCircle=q,t.symbolCross=H,t.symbolDiamond=Y,t.symbolSquare=K,t.symbolStar=J,t.symbolTriangle=tt,t.symbolWye=at,t.curveBasisClosed=function(t){return new ct(t)},t.curveBasisOpen=function(t){return new ft(t)},t.curveBasis=function(t){return new ut(t)},t.curveBundle=pt,t.curveCardinalClosed=yt,t.curveCardinalOpen=bt,t.curveCardinal=gt,t.curveCatmullRomClosed=kt,t.curveCatmullRomOpen=Et,t.curveCatmullRom=At,t.curveLinearClosed=function(t){return new St(t)},t.curveLinear=w,t.curveMonotoneX=function(t){return new Dt(t)},t.curveMonotoneY=function(t){return new Pt(t)},t.curveNatural=function(t){return new Nt(t)},t.curveStep=function(t){return new Ft(t,.5)},t.curveStepAfter=function(t){return new Ft(t,1)},t.curveStepBefore=function(t){return new Ft(t,0)},t.stack=function(){var t=r([]),e=jt,n=Bt,i=Vt;function a(r){var a,o,s=t.apply(this,arguments),l=r.length,u=s.length,c=new Array(u);for(a=0;a0){for(var r,n,i,a=0,o=t[0].length;a1)for(var r,n,i,a,o,s,l=0,u=t[e[0]].length;l=0?(n[0]=a,n[1]=a+=i):i<0?(n[1]=o,n[0]=o+=i):n[0]=a},t.stackOffsetNone=Bt,t.stackOffsetSilhouette=function(t,e){if((r=t.length)>0){for(var r,n=0,i=t[e[0]],a=i.length;n0&&(n=(r=t[e[0]]).length)>0){for(var r,n,i,a=0,o=1;o=0&&r._call.call(null,t),r=r._next;--n}function v(){l=(s=c.now())+u,n=i=0;try{g()}finally{n=0,function(){var t,n,i=e,a=1/0;for(;i;)i._call?(a>i._time&&(a=i._time),t=i,i=i._next):(n=i._next,i._next=null,i=t?t._next=n:e=n);r=t,x(a)}(),l=0}}function y(){var t=c.now(),e=t-s;e>o&&(u-=e,s=t)}function x(t){n||(i&&(i=clearTimeout(i)),t-l>24?(t<1/0&&(i=setTimeout(v,t-c.now()-u)),a&&(a=clearInterval(a))):(a||(s=c.now(),a=setInterval(y,o)),n=1,f(v)))}d.prototype=m.prototype={constructor:d,restart:function(t,n,i){if("function"!=typeof t)throw new TypeError("callback is not a function");i=(null==i?h():+i)+(null==n?0:+n),this._next||r===this||(r?r._next=this:e=this,r=this),this._call=t,this._time=i,x()},stop:function(){this._call&&(this._call=null,this._time=1/0,x())}};t.now=h,t.timer=m,t.timerFlush=g,t.timeout=function(t,e,r){var n=new d;return e=null==e?0:+e,n.restart(function(r){n.stop(),t(r+e)},e,r),n},t.interval=function(t,e,r){var n=new d,i=e;return null==e?(n.restart(t,e,r),n):(e=+e,r=null==r?h():+r,n.restart(function a(o){o+=i,n.restart(a,i+=e,r),t(o)},e,r),n)},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],108:[function(t,e,r){!function(){var t={version:"3.5.17"},r=[].slice,n=function(t){return r.call(t)},i=this.document;function a(t){return t&&(t.ownerDocument||t.document||t).documentElement}function o(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}if(i)try{n(i.documentElement.childNodes)[0].nodeType}catch(t){n=function(t){for(var e=t.length,r=new Array(e);e--;)r[e]=t[e];return r}}if(Date.now||(Date.now=function(){return+new Date}),i)try{i.createElement("DIV").style.setProperty("opacity",0,"")}catch(t){var s=this.Element.prototype,l=s.setAttribute,u=s.setAttributeNS,c=this.CSSStyleDeclaration.prototype,f=c.setProperty;s.setAttribute=function(t,e){l.call(this,t,e+"")},s.setAttributeNS=function(t,e,r){u.call(this,t,e,r+"")},c.setProperty=function(t,e,r){f.call(this,t,e+"",r)}}function h(t,e){return te?1:t>=e?0:NaN}function p(t){return null===t?NaN:+t}function d(t){return!isNaN(t)}function m(t){return{left:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n>>1;t(e[a],r)<0?n=a+1:i=a}return n},right:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n>>1;t(e[a],r)>0?i=a:n=a+1}return n}}}t.ascending=h,t.descending=function(t,e){return et?1:e>=t?0:NaN},t.min=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i=n){r=n;break}for(;++in&&(r=n)}else{for(;++i=n){r=n;break}for(;++in&&(r=n)}return r},t.max=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i=n){r=n;break}for(;++ir&&(r=n)}else{for(;++i=n){r=n;break}for(;++ir&&(r=n)}return r},t.extent=function(t,e){var r,n,i,a=-1,o=t.length;if(1===arguments.length){for(;++a=n){r=i=n;break}for(;++an&&(r=n),i=n){r=i=n;break}for(;++an&&(r=n),i1)return o/(l-1)},t.deviation=function(){var e=t.variance.apply(this,arguments);return e?Math.sqrt(e):e};var g=m(h);function v(t){return t.length}t.bisectLeft=g.left,t.bisect=t.bisectRight=g.right,t.bisector=function(t){return m(1===t.length?function(e,r){return h(t(e),r)}:t)},t.shuffle=function(t,e,r){(a=arguments.length)<3&&(r=t.length,a<2&&(e=0));for(var n,i,a=r-e;a;)i=Math.random()*a--|0,n=t[a+e],t[a+e]=t[i+e],t[i+e]=n;return t},t.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},t.pairs=function(t){for(var e=0,r=t.length-1,n=t[0],i=new Array(r<0?0:r);e=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r};var y=Math.abs;function x(t,e){for(var r in e)Object.defineProperty(t.prototype,r,{value:e[r],enumerable:!1})}function b(){this._=Object.create(null)}t.range=function(t,e,r){if(arguments.length<3&&(r=1,arguments.length<2&&(e=t,t=0)),(e-t)/r==1/0)throw new Error("infinite range");var n,i=[],a=function(t){var e=1;for(;t*e%1;)e*=10;return e}(y(r)),o=-1;if(t*=a,e*=a,(r*=a)<0)for(;(n=t+r*++o)>e;)i.push(n/a);else for(;(n=t+r*++o)=i.length)return r?r.call(n,a):e?a.sort(e):a;for(var l,u,c,f,h=-1,p=a.length,d=i[s++],m=new b;++h=i.length)return e;var n=[],o=a[r++];return e.forEach(function(e,i){n.push({key:e,values:t(i,r)})}),o?n.sort(function(t,e){return o(t.key,e.key)}):n}(o(t.map,e,0),0)},n.key=function(t){return i.push(t),n},n.sortKeys=function(t){return a[i.length-1]=t,n},n.sortValues=function(t){return e=t,n},n.rollup=function(t){return r=t,n},n},t.set=function(t){var e=new L;if(t)for(var r=0,n=t.length;r=0&&(n=t.slice(r+1),t=t.slice(0,r)),t)return arguments.length<2?this[t].on(n):this[t].on(n,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(n,null);return this}},t.event=null,t.requote=function(t){return t.replace(V,"\\$&")};var V=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,U={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var r in e)t[r]=e[r]};function q(t){return U(t,Y),t}var H=function(t,e){return e.querySelector(t)},G=function(t,e){return e.querySelectorAll(t)},W=function(t,e){var r=t.matches||t[D(t,"matchesSelector")];return(W=function(t,e){return r.call(t,e)})(t,e)};"function"==typeof Sizzle&&(H=function(t,e){return Sizzle(t,e)[0]||null},G=Sizzle,W=Sizzle.matchesSelector),t.selection=function(){return t.select(i.documentElement)};var Y=t.selection.prototype=[];function Z(t){return"function"==typeof t?t:function(){return H(t,this)}}function X(t){return"function"==typeof t?t:function(){return G(t,this)}}Y.select=function(t){var e,r,n,i,a=[];t=Z(t);for(var o=-1,s=this.length;++o=0&&"xmlns"!==(r=t.slice(0,e))&&(t=t.slice(e+1)),J.hasOwnProperty(r)?{space:J[r],local:t}:t}},Y.attr=function(e,r){if(arguments.length<2){if("string"==typeof e){var n=this.node();return(e=t.ns.qualify(e)).local?n.getAttributeNS(e.space,e.local):n.getAttribute(e)}for(r in e)this.each(K(r,e[r]));return this}return this.each(K(e,r))},Y.classed=function(t,e){if(arguments.length<2){if("string"==typeof t){var r=this.node(),n=(t=et(t)).length,i=-1;if(e=r.classList){for(;++i=0;)(r=n[i])&&(a&&a!==r.nextSibling&&a.parentNode.insertBefore(r,a),a=r);return this},Y.sort=function(t){t=function(t){arguments.length||(t=h);return function(e,r){return e&&r?t(e.__data__,r.__data__):!e-!r}}.apply(this,arguments);for(var e=-1,r=this.length;++e0&&(e=e.slice(0,o));var l=dt.get(e);function u(){var t=this[a];t&&(this.removeEventListener(e,t,t.$),delete this[a])}return l&&(e=l,s=gt),o?r?function(){var t=s(r,n(arguments));u.call(this),this.addEventListener(e,this[a]=t,t.$=i),t._=r}:u:r?I:function(){var r,n=new RegExp("^__on([^.]+)"+t.requote(e)+"$");for(var i in this)if(r=i.match(n)){var a=this[i];this.removeEventListener(r[1],a,a.$),delete this[i]}}}t.selection.enter=ft,t.selection.enter.prototype=ht,ht.append=Y.append,ht.empty=Y.empty,ht.node=Y.node,ht.call=Y.call,ht.size=Y.size,ht.select=function(t){for(var e,r,n,i,a,o=[],s=-1,l=this.length;++s=n&&(n=e+1);!(o=s[n])&&++n0?1:t<0?-1:0}function zt(t,e,r){return(e[0]-t[0])*(r[1]-t[1])-(e[1]-t[1])*(r[0]-t[0])}function Dt(t){return t>1?0:t<-1?kt:Math.acos(t)}function Pt(t){return t>1?St:t<-1?-St:Math.asin(t)}function It(t){return((t=Math.exp(t))+1/t)/2}function Nt(t){return(t=Math.sin(t/2))*t}var Rt=Math.SQRT2;t.interpolateZoom=function(t,e){var r,n,i=t[0],a=t[1],o=t[2],s=e[0],l=e[1],u=e[2],c=s-i,f=l-a,h=c*c+f*f;if(h0&&(e=e.transition().duration(m)),e.call(w.event)}function E(){u&&u.domain(l.range().map(function(t){return(t-h.x)/h.k}).map(l.invert)),f&&f.domain(c.range().map(function(t){return(t-h.y)/h.k}).map(c.invert))}function S(t){g++||t({type:"zoomstart"})}function C(t){E(),t({type:"zoom",scale:h.k,translate:[h.x,h.y]})}function L(t){--g||(t({type:"zoomend"}),r=null)}function O(){var e=this,r=_.of(e,arguments),n=0,i=t.select(o(e)).on(y,function(){n=1,k(t.mouse(e),a),C(r)}).on(x,function(){i.on(y,null).on(x,null),s(n),L(r)}),a=A(t.mouse(e)),s=xt(e);fs.call(e),S(r)}function z(){var e,r=this,n=_.of(r,arguments),i={},a=0,o=".zoom-"+t.event.changedTouches[0].identifier,l="touchmove"+o,u="touchend"+o,c=[],f=t.select(r),p=xt(r);function d(){var n=t.touches(r);return e=h.k,n.forEach(function(t){t.identifier in i&&(i[t.identifier]=A(t))}),n}function m(){var e=t.event.target;t.select(e).on(l,g).on(u,y),c.push(e);for(var n=t.event.changedTouches,o=0,f=n.length;o1){v=p[0];var x=p[1],b=v[0]-x[0],_=v[1]-x[1];a=b*b+_*_}}function g(){var o,l,u,c,f=t.touches(r);fs.call(r);for(var h=0,p=f.length;h360?t-=360:t<0&&(t+=360),t<60?n+(i-n)*t/60:t<180?i:t<240?n+(i-n)*(240-t)/60:n}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)?0:e<0?0:e>1?1:e,n=2*(r=r<0?0:r>1?1:r)-(i=r<=.5?r*(1+e):r+e-r*e),new ae(a(t+120),a(t),a(t-120))}function Gt(e,r,n){return this instanceof Gt?(this.h=+e,this.c=+r,void(this.l=+n)):arguments.length<2?e instanceof Gt?new Gt(e.h,e.c,e.l):ee(e instanceof Zt?e.l:(e=he((e=t.rgb(e)).r,e.g,e.b)).l,e.a,e.b):new Gt(e,r,n)}qt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ut(this.h,this.s,this.l/t)},qt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ut(this.h,this.s,t*this.l)},qt.rgb=function(){return Ht(this.h,this.s,this.l)},t.hcl=Gt;var Wt=Gt.prototype=new Vt;function Yt(t,e,r){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new Zt(r,Math.cos(t*=Ct)*e,Math.sin(t)*e)}function Zt(t,e,r){return this instanceof Zt?(this.l=+t,this.a=+e,void(this.b=+r)):arguments.length<2?t instanceof Zt?new Zt(t.l,t.a,t.b):t instanceof Gt?Yt(t.h,t.c,t.l):he((t=ae(t)).r,t.g,t.b):new Zt(t,e,r)}Wt.brighter=function(t){return new Gt(this.h,this.c,Math.min(100,this.l+Xt*(arguments.length?t:1)))},Wt.darker=function(t){return new Gt(this.h,this.c,Math.max(0,this.l-Xt*(arguments.length?t:1)))},Wt.rgb=function(){return Yt(this.h,this.c,this.l).rgb()},t.lab=Zt;var Xt=18,$t=.95047,Jt=1,Kt=1.08883,Qt=Zt.prototype=new Vt;function te(t,e,r){var n=(t+16)/116,i=n+e/500,a=n-r/200;return new ae(ie(3.2404542*(i=re(i)*$t)-1.5371385*(n=re(n)*Jt)-.4985314*(a=re(a)*Kt)),ie(-.969266*i+1.8760108*n+.041556*a),ie(.0556434*i-.2040259*n+1.0572252*a))}function ee(t,e,r){return t>0?new Gt(Math.atan2(r,e)*Lt,Math.sqrt(e*e+r*r),t):new Gt(NaN,NaN,t)}function re(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function ne(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function ie(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function ae(t,e,r){return this instanceof ae?(this.r=~~t,this.g=~~e,void(this.b=~~r)):arguments.length<2?t instanceof ae?new ae(t.r,t.g,t.b):ce(""+t,ae,Ht):new ae(t,e,r)}function oe(t){return new ae(t>>16,t>>8&255,255&t)}function se(t){return oe(t)+""}Qt.brighter=function(t){return new Zt(Math.min(100,this.l+Xt*(arguments.length?t:1)),this.a,this.b)},Qt.darker=function(t){return new Zt(Math.max(0,this.l-Xt*(arguments.length?t:1)),this.a,this.b)},Qt.rgb=function(){return te(this.l,this.a,this.b)},t.rgb=ae;var le=ae.prototype=new Vt;function ue(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function ce(t,e,r){var n,i,a,o=0,s=0,l=0;if(n=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(i=n[2].split(","),n[1]){case"hsl":return r(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return e(de(i[0]),de(i[1]),de(i[2]))}return(a=me.get(t))?e(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&a)>>4,o|=o>>4,s=240&a,s|=s>>4,l=15&a,l|=l<<4):7===t.length&&(o=(16711680&a)>>16,s=(65280&a)>>8,l=255&a)),e(o,s,l))}function fe(t,e,r){var n,i,a=Math.min(t/=255,e/=255,r/=255),o=Math.max(t,e,r),s=o-a,l=(o+a)/2;return s?(i=l<.5?s/(o+a):s/(2-o-a),n=t==o?(e-r)/s+(e0&&l<1?0:n),new Ut(n,i,l)}function he(t,e,r){var n=ne((.4124564*(t=pe(t))+.3575761*(e=pe(e))+.1804375*(r=pe(r)))/$t),i=ne((.2126729*t+.7151522*e+.072175*r)/Jt);return Zt(116*i-16,500*(n-i),200*(i-ne((.0193339*t+.119192*e+.9503041*r)/Kt)))}function pe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function de(t){var e=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*e):e}le.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,r=this.g,n=this.b,i=30;return e||r||n?(e&&e=200&&e<300||304===e){try{t=i.call(o,u)}catch(t){return void s.error.call(o,t)}s.load.call(o,t)}else s.error.call(o,u)}return!this.XDomainRequest||"withCredentials"in u||!/^(http(s)?:)?\/\//.test(e)||(u=new XDomainRequest),"onload"in u?u.onload=u.onerror=f:u.onreadystatechange=function(){u.readyState>3&&f()},u.onprogress=function(e){var r=t.event;t.event=e;try{s.progress.call(o,u)}finally{t.event=r}},o.header=function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?l[t]:(null==e?delete l[t]:l[t]=e+"",o)},o.mimeType=function(t){return arguments.length?(r=null==t?null:t+"",o):r},o.responseType=function(t){return arguments.length?(c=t,o):c},o.response=function(t){return i=t,o},["get","post"].forEach(function(t){o[t]=function(){return o.send.apply(o,[t].concat(n(arguments)))}}),o.send=function(t,n,i){if(2===arguments.length&&"function"==typeof n&&(i=n,n=null),u.open(t,e,!0),null==r||"accept"in l||(l.accept=r+",*/*"),u.setRequestHeader)for(var a in l)u.setRequestHeader(a,l[a]);return null!=r&&u.overrideMimeType&&u.overrideMimeType(r),null!=c&&(u.responseType=c),null!=i&&o.on("error",i).on("load",function(t){i(null,t)}),s.beforesend.call(o,u),u.send(null==n?null:n),o},o.abort=function(){return u.abort(),o},t.rebind(o,s,"on"),null==a?o:o.get(function(t){return 1===t.length?function(e,r){t(null==e?r:null)}:t}(a))}me.forEach(function(t,e){me.set(t,oe(e))}),t.functor=ge,t.xhr=ve(O),t.dsv=function(t,e){var r=new RegExp('["'+t+"\n]"),n=t.charCodeAt(0);function i(t,r,n){arguments.length<3&&(n=r,r=null);var i=ye(t,e,null==r?a:o(r),n);return i.row=function(t){return arguments.length?i.response(null==(r=t)?a:o(t)):r},i}function a(t){return i.parse(t.responseText)}function o(t){return function(e){return i.parse(e.responseText,t)}}function s(e){return e.map(l).join(t)}function l(t){return r.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}return i.parse=function(t,e){var r;return i.parseRows(t,function(t,n){if(r)return r(t,n-1);var i=new Function("d","return {"+t.map(function(t,e){return JSON.stringify(t)+": d["+e+"]"}).join(",")+"}");r=e?function(t,r){return e(i(t),r)}:i})},i.parseRows=function(t,e){var r,i,a={},o={},s=[],l=t.length,u=0,c=0;function f(){if(u>=l)return o;if(i)return i=!1,a;var e=u;if(34===t.charCodeAt(e)){for(var r=e;r++24?(isFinite(e)&&(clearTimeout(we),we=setTimeout(ke,e)),_e=0):(_e=1,Ae(ke))}function Te(){for(var t=Date.now(),e=xe;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Ee(){for(var t,e=xe,r=1/0;e;)e.c?(e.t8?function(t){return t/r}:function(t){return t*r},symbol:t}});t.formatPrefix=function(e,r){var n=0;return(e=+e)&&(e<0&&(e*=-1),r&&(e=t.round(e,Se(e,r))),n=1+Math.floor(1e-12+Math.log(e)/Math.LN10),n=Math.max(-24,Math.min(24,3*Math.floor((n-1)/3)))),Ce[8+n/3]};var Le=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Oe=t.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(e,r){return(e=t.round(e,Se(e,r))).toFixed(Math.max(0,Math.min(20,Se(e*(1+1e-15),r))))}});function ze(t){return t+""}var De=t.time={},Pe=Date;function Ie(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}Ie.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Ne.setUTCDate.apply(this._,arguments)},setDay:function(){Ne.setUTCDay.apply(this._,arguments)},setFullYear:function(){Ne.setUTCFullYear.apply(this._,arguments)},setHours:function(){Ne.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Ne.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Ne.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Ne.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Ne.setUTCSeconds.apply(this._,arguments)},setTime:function(){Ne.setTime.apply(this._,arguments)}};var Ne=Date.prototype;function Re(t,e,r){function n(e){var r=t(e),n=a(r,1);return e-r1)for(;o68?1900:2e3),r+i[0].length):-1}function $e(t,e,r){return/^[+-]\d{4}$/.test(e=e.slice(r,r+5))?(t.Z=-e,r+5):-1}function Je(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function Ke(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function Qe(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+3));return n?(t.j=+n[0],r+n[0].length):-1}function tr(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function er(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function rr(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function nr(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function ir(t){var e=t.getTimezoneOffset(),r=e>0?"-":"+",n=y(e)/60|0,i=y(e)%60;return r+Ue(n,"0",2)+Ue(i,"0",2)}function ar(t,e,r){Ve.lastIndex=0;var n=Ve.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function or(t){for(var e=t.length,r=-1;++r0&&s>0&&(l+s+1>e&&(s=Math.max(1,e-l)),a.push(t.substring(r-=s,r+s)),!((l+=s+1)>e));)s=i[o=(o+1)%i.length];return a.reverse().join(n)}:O;return function(e){var n=Le.exec(e),i=n[1]||" ",s=n[2]||">",l=n[3]||"-",u=n[4]||"",c=n[5],f=+n[6],h=n[7],p=n[8],d=n[9],m=1,g="",v="",y=!1,x=!0;switch(p&&(p=+p.substring(1)),(c||"0"===i&&"="===s)&&(c=i="0",s="="),d){case"n":h=!0,d="g";break;case"%":m=100,v="%",d="f";break;case"p":m=100,v="%",d="r";break;case"b":case"o":case"x":case"X":"#"===u&&(g="0"+d.toLowerCase());case"c":x=!1;case"d":y=!0,p=0;break;case"s":m=-1,d="r"}"$"===u&&(g=a[0],v=a[1]),"r"!=d||p||(d="g"),null!=p&&("g"==d?p=Math.max(1,Math.min(21,p)):"e"!=d&&"f"!=d||(p=Math.max(0,Math.min(20,p)))),d=Oe.get(d)||ze;var b=c&&h;return function(e){var n=v;if(y&&e%1)return"";var a=e<0||0===e&&1/e<0?(e=-e,"-"):"-"===l?"":l;if(m<0){var u=t.formatPrefix(e,p);e=u.scale(e),n=u.symbol+v}else e*=m;var _,w,A=(e=d(e,p)).lastIndexOf(".");if(A<0){var M=x?e.lastIndexOf("e"):-1;M<0?(_=e,w=""):(_=e.substring(0,M),w=e.substring(M))}else _=e.substring(0,A),w=r+e.substring(A+1);!c&&h&&(_=o(_,1/0));var k=g.length+_.length+w.length+(b?0:a.length),T=k"===s?T+a+e:"^"===s?T.substring(0,k>>=1)+a+e+T.substring(k):a+(b?e:T+e))+n}}}(e),timeFormat:function(e){var r=e.dateTime,n=e.date,i=e.time,a=e.periods,o=e.days,s=e.shortDays,l=e.months,u=e.shortMonths;function c(t){var e=t.length;function r(r){for(var n,i,a,o=[],s=-1,l=0;++s=u)return-1;if(37===(i=e.charCodeAt(s++))){if(o=e.charAt(s++),!(a=w[o in Be?e.charAt(s++):o])||(n=a(t,r,n))<0)return-1}else if(i!=r.charCodeAt(n++))return-1}return n}c.utc=function(t){var e=c(t);function r(t){try{var r=new(Pe=Ie);return r._=t,e(r)}finally{Pe=Date}}return r.parse=function(t){try{Pe=Ie;var r=e.parse(t);return r&&r._}finally{Pe=Date}},r.toString=e.toString,r},c.multi=c.utc.multi=or;var h=t.map(),p=qe(o),d=He(o),m=qe(s),g=He(s),v=qe(l),y=He(l),x=qe(u),b=He(u);a.forEach(function(t,e){h.set(t.toLowerCase(),e)});var _={a:function(t){return s[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return u[t.getMonth()]},B:function(t){return l[t.getMonth()]},c:c(r),d:function(t,e){return Ue(t.getDate(),e,2)},e:function(t,e){return Ue(t.getDate(),e,2)},H:function(t,e){return Ue(t.getHours(),e,2)},I:function(t,e){return Ue(t.getHours()%12||12,e,2)},j:function(t,e){return Ue(1+De.dayOfYear(t),e,3)},L:function(t,e){return Ue(t.getMilliseconds(),e,3)},m:function(t,e){return Ue(t.getMonth()+1,e,2)},M:function(t,e){return Ue(t.getMinutes(),e,2)},p:function(t){return a[+(t.getHours()>=12)]},S:function(t,e){return Ue(t.getSeconds(),e,2)},U:function(t,e){return Ue(De.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return Ue(De.mondayOfYear(t),e,2)},x:c(n),X:c(i),y:function(t,e){return Ue(t.getFullYear()%100,e,2)},Y:function(t,e){return Ue(t.getFullYear()%1e4,e,4)},Z:ir,"%":function(){return"%"}},w={a:function(t,e,r){m.lastIndex=0;var n=m.exec(e.slice(r));return n?(t.w=g.get(n[0].toLowerCase()),r+n[0].length):-1},A:function(t,e,r){p.lastIndex=0;var n=p.exec(e.slice(r));return n?(t.w=d.get(n[0].toLowerCase()),r+n[0].length):-1},b:function(t,e,r){x.lastIndex=0;var n=x.exec(e.slice(r));return n?(t.m=b.get(n[0].toLowerCase()),r+n[0].length):-1},B:function(t,e,r){v.lastIndex=0;var n=v.exec(e.slice(r));return n?(t.m=y.get(n[0].toLowerCase()),r+n[0].length):-1},c:function(t,e,r){return f(t,_.c.toString(),e,r)},d:Ke,e:Ke,H:tr,I:tr,j:Qe,L:nr,m:Je,M:er,p:function(t,e,r){var n=h.get(e.slice(r,r+=2).toLowerCase());return null==n?-1:(t.p=n,r)},S:rr,U:We,w:Ge,W:Ye,x:function(t,e,r){return f(t,_.x.toString(),e,r)},X:function(t,e,r){return f(t,_.X.toString(),e,r)},y:Xe,Y:Ze,Z:$e,"%":ar};return c}(e)}};var sr=t.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function lr(){}t.format=sr.numberFormat,t.geo={},lr.prototype={s:0,t:0,add:function(t){cr(t,this.t,ur),cr(ur.s,this.s,this),this.s?this.t+=ur.t:this.s=ur.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ur=new lr;function cr(t,e,r){var n=r.s=t+e,i=n-t,a=n-i;r.t=t-a+(e-i)}function fr(t,e){t&&pr.hasOwnProperty(t.type)&&pr[t.type](t,e)}t.geo.stream=function(t,e){t&&hr.hasOwnProperty(t.type)?hr[t.type](t,e):fr(t,e)};var hr={Feature:function(t,e){fr(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,n=-1,i=r.length;++n=0?1:-1,s=o*a,l=Math.cos(e),u=Math.sin(e),c=i*u,f=n*l+c*Math.cos(s),h=c*o*Math.sin(s);Sr.add(Math.atan2(h,f)),r=t,n=l,i=u}Cr.point=function(o,s){Cr.point=a,r=(t=o)*Ct,n=Math.cos(s=(e=s)*Ct/2+kt/4),i=Math.sin(s)},Cr.lineEnd=function(){a(t,e)}}function Or(t){var e=t[0],r=t[1],n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}function zr(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Dr(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Pr(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function Ir(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Nr(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function Rr(t){return[Math.atan2(t[1],t[0]),Pt(t[2])]}function Fr(t,e){return y(t[0]-e[0])At?i=90:u<-At&&(r=-90),f[0]=e,f[1]=n}};function p(t,a){c.push(f=[e=t,n=t]),ai&&(i=a)}function d(t,o){var s=Or([t*Ct,o*Ct]);if(l){var u=Dr(l,s),c=Dr([u[1],-u[0],0],u);Nr(c),c=Rr(c);var f=t-a,h=f>0?1:-1,d=c[0]*Lt*h,m=y(f)>180;if(m^(h*ai&&(i=g);else if(m^(h*a<(d=(d+360)%360-180)&&di&&(i=o);m?t_(e,n)&&(n=t):_(t,n)>_(e,n)&&(e=t):n>=e?(tn&&(n=t)):t>a?_(e,t)>_(e,n)&&(n=t):_(t,n)>_(e,n)&&(e=t)}else p(t,o);l=s,a=t}function m(){h.point=d}function g(){f[0]=e,f[1]=n,h.point=p,l=null}function v(t,e){if(l){var r=t-a;u+=y(r)>180?r+(r>0?360:-360):r}else o=t,s=e;Cr.point(t,e),d(t,e)}function x(){Cr.lineStart()}function b(){v(o,s),Cr.lineEnd(),y(u)>At&&(e=-(n=180)),f[0]=e,f[1]=n,l=null}function _(t,e){return(e-=t)<0?e+360:e}function w(t,e){return t[0]-e[0]}function A(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:t_(m[0],m[1])&&(m[1]=p[1]),_(p[0],m[1])>_(m[0],m[1])&&(m[0]=p[0])):s.push(m=p);for(var l,u,p,d=-1/0,m=(o=0,s[u=s.length-1]);o<=u;m=p,++o)p=s[o],(l=_(m[1],p[0]))>d&&(d=l,e=p[0],n=m[1])}return c=f=null,e===1/0||r===1/0?[[NaN,NaN],[NaN,NaN]]:[[e,r],[n,i]]}}(),t.geo.centroid=function(e){vr=yr=xr=br=_r=wr=Ar=Mr=kr=Tr=Er=0,t.geo.stream(e,Br);var r=kr,n=Tr,i=Er,a=r*r+n*n+i*i;return a=0;--s)i.point((f=c[s])[0],f[1]);else n(p.x,p.p.x,-1,i);p=p.p}c=(p=p.o).z,d=!d}while(!p.v);i.lineEnd()}}}function Zr(t){if(e=t.length){for(var e,r,n=0,i=t[0];++n=0?1:-1,A=w*_,M=A>kt,k=d*x;if(Sr.add(Math.atan2(k*w*Math.sin(A),m*b+k*Math.cos(A))),a+=M?_+w*Tt:_,M^h>=r^v>=r){var T=Dr(Or(f),Or(t));Nr(T);var E=Dr(i,T);Nr(E);var S=(M^_>=0?-1:1)*Pt(E[2]);(n>S||n===S&&(T[0]||T[1]))&&(o+=M^_>=0?1:-1)}if(!g++)break;h=v,d=x,m=b,f=t}}return(a<-At||a0){for(x||(o.polygonStart(),x=!0),o.lineStart();++a1&&2&e&&r.push(r.pop().concat(r.shift())),s.push(r.filter(Jr))}return c}}function Jr(t){return t.length>1}function Kr(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,r){t.push([e,r])},lineEnd:I,buffer:function(){var r=e;return e=[],t=null,r},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function Qr(t,e){return((t=t.x)[0]<0?t[1]-St-At:St-t[1])-((e=e.x)[0]<0?e[1]-St-At:St-e[1])}var tn=$r(Wr,function(t){var e,r=NaN,n=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?kt:-kt,l=y(a-r);y(l-kt)0?St:-St),t.point(i,n),t.lineEnd(),t.lineStart(),t.point(s,n),t.point(a,n),e=0):i!==s&&l>=kt&&(y(r-i)At?Math.atan((Math.sin(e)*(a=Math.cos(n))*Math.sin(r)-Math.sin(n)*(i=Math.cos(e))*Math.sin(t))/(i*a*o)):(e+n)/2}(r,n,a,o),t.point(i,n),t.lineEnd(),t.lineStart(),t.point(s,n),e=0),t.point(r=a,n=o),i=s},lineEnd:function(){t.lineEnd(),r=n=NaN},clean:function(){return 2-e}}},function(t,e,r,n){var i;if(null==t)i=r*St,n.point(-kt,i),n.point(0,i),n.point(kt,i),n.point(kt,0),n.point(kt,-i),n.point(0,-i),n.point(-kt,-i),n.point(-kt,0),n.point(-kt,i);else if(y(t[0]-e[0])>At){var a=t[0]0)){if(a/=h,h<0){if(a0){if(a>f)return;a>c&&(c=a)}if(a=r-l,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>c&&(c=a)}else if(h>0){if(a0)){if(a/=p,p<0){if(a0){if(a>f)return;a>c&&(c=a)}if(a=n-u,p||!(a<0)){if(a/=p,p<0){if(a>f)return;a>c&&(c=a)}else if(p>0){if(a0&&(i.a={x:l+c*h,y:u+c*p}),f<1&&(i.b={x:l+f*h,y:u+f*p}),i}}}}}}var rn=1e9;function nn(e,r,n,i){return function(l){var u,c,f,h,p,d,m,g,v,y,x,b=l,_=Kr(),w=en(e,r,n,i),A={point:T,lineStart:function(){A.point=E,c&&c.push(f=[]);y=!0,v=!1,m=g=NaN},lineEnd:function(){u&&(E(h,p),d&&v&&_.rejoin(),u.push(_.buffer()));A.point=T,v&&l.lineEnd()},polygonStart:function(){l=_,u=[],c=[],x=!0},polygonEnd:function(){l=b,u=t.merge(u);var r=function(t){for(var e=0,r=c.length,n=t[1],i=0;in&&zt(u,a,t)>0&&++e:a[1]<=n&&zt(u,a,t)<0&&--e,u=a;return 0!==e}([e,i]),n=x&&r,a=u.length;(n||a)&&(l.polygonStart(),n&&(l.lineStart(),M(null,null,1,l),l.lineEnd()),a&&Yr(u,o,r,M,l),l.polygonEnd()),u=c=f=null}};function M(t,o,l,u){var c=0,f=0;if(null==t||(c=a(t,l))!==(f=a(o,l))||s(t,o)<0^l>0)do{u.point(0===c||3===c?e:n,c>1?i:r)}while((c=(c+l+4)%4)!==f);else u.point(o[0],o[1])}function k(t,a){return e<=t&&t<=n&&r<=a&&a<=i}function T(t,e){k(t,e)&&l.point(t,e)}function E(t,e){var r=k(t=Math.max(-rn,Math.min(rn,t)),e=Math.max(-rn,Math.min(rn,e)));if(c&&f.push([t,e]),y)h=t,p=e,d=r,y=!1,r&&(l.lineStart(),l.point(t,e));else if(r&&v)l.point(t,e);else{var n={a:{x:m,y:g},b:{x:t,y:e}};w(n)?(v||(l.lineStart(),l.point(n.a.x,n.a.y)),l.point(n.b.x,n.b.y),r||l.lineEnd(),x=!1):r&&(l.lineStart(),l.point(t,e),x=!1)}m=t,g=e,v=r}return A};function a(t,i){return y(t[0]-e)0?0:3:y(t[0]-n)0?2:1:y(t[1]-r)0?1:0:i>0?3:2}function o(t,e){return s(t.x,e.x)}function s(t,e){var r=a(t,1),n=a(e,1);return r!==n?r-n:0===r?e[1]-t[1]:1===r?t[0]-e[0]:2===r?t[1]-e[1]:e[0]-t[0]}}function an(t){var e=0,r=kt/3,n=Cn(t),i=n(e,r);return i.parallels=function(t){return arguments.length?n(e=t[0]*kt/180,r=t[1]*kt/180):[e/kt*180,r/kt*180]},i}function on(t,e){var r=Math.sin(t),n=(r+Math.sin(e))/2,i=1+r*(2*n-r),a=Math.sqrt(i)/n;function o(t,e){var r=Math.sqrt(i-2*n*Math.sin(e))/n;return[r*Math.sin(t*=n),a-r*Math.cos(t)]}return o.invert=function(t,e){var r=a-e;return[Math.atan2(t,r)/n,Pt((i-(t*t+r*r)*n*n)/(2*n))]},o}t.geo.clipExtent=function(){var t,e,r,n,i,a,o={stream:function(t){return i&&(i.valid=!1),(i=a(t)).valid=!0,i},extent:function(s){return arguments.length?(a=nn(t=+s[0][0],e=+s[0][1],r=+s[1][0],n=+s[1][1]),i&&(i.valid=!1,i=null),o):[[t,e],[r,n]]}};return o.extent([[0,0],[960,500]])},(t.geo.conicEqualArea=function(){return an(on)}).raw=on,t.geo.albers=function(){return t.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},t.geo.albersUsa=function(){var e,r,n,i,a=t.geo.albers(),o=t.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=t.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,r){e=[t,r]}};function u(t){var a=t[0],o=t[1];return e=null,r(a,o),e||(n(a,o),e)||i(a,o),e}return u.invert=function(t){var e=a.scale(),r=a.translate(),n=(t[0]-r[0])/e,i=(t[1]-r[1])/e;return(i>=.12&&i<.234&&n>=-.425&&n<-.214?o:i>=.166&&i<.234&&n>=-.214&&n<-.115?s:a).invert(t)},u.stream=function(t){var e=a.stream(t),r=o.stream(t),n=s.stream(t);return{point:function(t,i){e.point(t,i),r.point(t,i),n.point(t,i)},sphere:function(){e.sphere(),r.sphere(),n.sphere()},lineStart:function(){e.lineStart(),r.lineStart(),n.lineStart()},lineEnd:function(){e.lineEnd(),r.lineEnd(),n.lineEnd()},polygonStart:function(){e.polygonStart(),r.polygonStart(),n.polygonStart()},polygonEnd:function(){e.polygonEnd(),r.polygonEnd(),n.polygonEnd()}}},u.precision=function(t){return arguments.length?(a.precision(t),o.precision(t),s.precision(t),u):a.precision()},u.scale=function(t){return arguments.length?(a.scale(t),o.scale(.35*t),s.scale(t),u.translate(a.translate())):a.scale()},u.translate=function(t){if(!arguments.length)return a.translate();var e=a.scale(),c=+t[0],f=+t[1];return r=a.translate(t).clipExtent([[c-.455*e,f-.238*e],[c+.455*e,f+.238*e]]).stream(l).point,n=o.translate([c-.307*e,f+.201*e]).clipExtent([[c-.425*e+At,f+.12*e+At],[c-.214*e-At,f+.234*e-At]]).stream(l).point,i=s.translate([c-.205*e,f+.212*e]).clipExtent([[c-.214*e+At,f+.166*e+At],[c-.115*e-At,f+.234*e-At]]).stream(l).point,u},u.scale(1070)};var sn,ln,un,cn,fn,hn,pn={point:I,lineStart:I,lineEnd:I,polygonStart:function(){ln=0,pn.lineStart=dn},polygonEnd:function(){pn.lineStart=pn.lineEnd=pn.point=I,sn+=y(ln/2)}};function dn(){var t,e,r,n;function i(t,e){ln+=n*t-r*e,r=t,n=e}pn.point=function(a,o){pn.point=i,t=r=a,e=n=o},pn.lineEnd=function(){i(t,e)}}var mn={point:function(t,e){tfn&&(fn=t);ehn&&(hn=e)},lineStart:I,lineEnd:I,polygonStart:I,polygonEnd:I};function gn(){var t=vn(4.5),e=[],r={point:n,lineStart:function(){r.point=i},lineEnd:o,polygonStart:function(){r.lineEnd=s},polygonEnd:function(){r.lineEnd=o,r.point=n},pointRadius:function(e){return t=vn(e),r},result:function(){if(e.length){var t=e.join("");return e=[],t}}};function n(r,n){e.push("M",r,",",n,t)}function i(t,n){e.push("M",t,",",n),r.point=a}function a(t,r){e.push("L",t,",",r)}function o(){r.point=n}function s(){e.push("Z")}return r}function vn(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}var yn,xn={point:bn,lineStart:_n,lineEnd:wn,polygonStart:function(){xn.lineStart=An},polygonEnd:function(){xn.point=bn,xn.lineStart=_n,xn.lineEnd=wn}};function bn(t,e){xr+=t,br+=e,++_r}function _n(){var t,e;function r(r,n){var i=r-t,a=n-e,o=Math.sqrt(i*i+a*a);wr+=o*(t+r)/2,Ar+=o*(e+n)/2,Mr+=o,bn(t=r,e=n)}xn.point=function(n,i){xn.point=r,bn(t=n,e=i)}}function wn(){xn.point=bn}function An(){var t,e,r,n;function i(t,e){var i=t-r,a=e-n,o=Math.sqrt(i*i+a*a);wr+=o*(r+t)/2,Ar+=o*(n+e)/2,Mr+=o,kr+=(o=n*t-r*e)*(r+t),Tr+=o*(n+e),Er+=3*o,bn(r=t,n=e)}xn.point=function(a,o){xn.point=i,bn(t=r=a,e=n=o)},xn.lineEnd=function(){i(t,e)}}function Mn(t){var e=4.5,r={point:n,lineStart:function(){r.point=i},lineEnd:o,polygonStart:function(){r.lineEnd=s},polygonEnd:function(){r.lineEnd=o,r.point=n},pointRadius:function(t){return e=t,r},result:I};function n(r,n){t.moveTo(r+e,n),t.arc(r,n,e,0,Tt)}function i(e,n){t.moveTo(e,n),r.point=a}function a(e,r){t.lineTo(e,r)}function o(){r.point=n}function s(){t.closePath()}return r}function kn(t){var e=.5,r=Math.cos(30*Ct),n=16;function i(e){return(n?function(e){var r,i,o,s,l,u,c,f,h,p,d,m,g={point:v,lineStart:y,lineEnd:b,polygonStart:function(){e.polygonStart(),g.lineStart=_},polygonEnd:function(){e.polygonEnd(),g.lineStart=y}};function v(r,n){r=t(r,n),e.point(r[0],r[1])}function y(){f=NaN,g.point=x,e.lineStart()}function x(r,i){var o=Or([r,i]),s=t(r,i);a(f,h,c,p,d,m,f=s[0],h=s[1],c=r,p=o[0],d=o[1],m=o[2],n,e),e.point(f,h)}function b(){g.point=v,e.lineEnd()}function _(){y(),g.point=w,g.lineEnd=A}function w(t,e){x(r=t,e),i=f,o=h,s=p,l=d,u=m,g.point=x}function A(){a(f,h,c,p,d,m,i,o,r,s,l,u,n,e),g.lineEnd=b,b()}return g}:function(e){return En(e,function(r,n){r=t(r,n),e.point(r[0],r[1])})})(e)}function a(n,i,o,s,l,u,c,f,h,p,d,m,g,v){var x=c-n,b=f-i,_=x*x+b*b;if(_>4*e&&g--){var w=s+p,A=l+d,M=u+m,k=Math.sqrt(w*w+A*A+M*M),T=Math.asin(M/=k),E=y(y(M)-1)e||y((x*O+b*z)/_-.5)>.3||s*p+l*d+u*m0&&16,i):Math.sqrt(e)},i}function Tn(t){this.stream=t}function En(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function Sn(t){return Cn(function(){return t})()}function Cn(e){var r,n,i,a,o,s,l=kn(function(t,e){return[(t=r(t,e))[0]*u+a,o-t[1]*u]}),u=150,c=480,f=250,h=0,p=0,d=0,m=0,g=0,v=tn,x=O,b=null,_=null;function w(t){return[(t=i(t[0]*Ct,t[1]*Ct))[0]*u+a,o-t[1]*u]}function A(t){return(t=i.invert((t[0]-a)/u,(o-t[1])/u))&&[t[0]*Lt,t[1]*Lt]}function M(){i=Gr(n=Dn(d,m,g),r);var t=r(h,p);return a=c-t[0]*u,o=f+t[1]*u,k()}function k(){return s&&(s.valid=!1,s=null),w}return w.stream=function(t){return s&&(s.valid=!1),(s=Ln(v(n,l(x(t))))).valid=!0,s},w.clipAngle=function(t){return arguments.length?(v=null==t?(b=t,tn):function(t){var e=Math.cos(t),r=e>0,n=y(e)>At;return $r(i,function(t){var e,s,l,u,c;return{lineStart:function(){u=l=!1,c=1},point:function(f,h){var p,d=[f,h],m=i(f,h),g=r?m?0:o(f,h):m?o(f+(f<0?kt:-kt),h):0;if(!e&&(u=l=m)&&t.lineStart(),m!==l&&(p=a(e,d),(Fr(e,p)||Fr(d,p))&&(d[0]+=At,d[1]+=At,m=i(d[0],d[1]))),m!==l)c=0,m?(t.lineStart(),p=a(d,e),t.point(p[0],p[1])):(p=a(e,d),t.point(p[0],p[1]),t.lineEnd()),e=p;else if(n&&e&&r^m){var v;g&s||!(v=a(d,e,!0))||(c=0,r?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!m||e&&Fr(e,d)||t.point(d[0],d[1]),e=d,l=m,s=g},lineEnd:function(){l&&t.lineEnd(),e=null},clean:function(){return c|(u&&l)<<1}}},Rn(t,6*Ct),r?[0,-t]:[-kt,t-kt]);function i(t,r){return Math.cos(t)*Math.cos(r)>e}function a(t,r,n){var i=[1,0,0],a=Dr(Or(t),Or(r)),o=zr(a,a),s=a[0],l=o-s*s;if(!l)return!n&&t;var u=e*o/l,c=-e*s/l,f=Dr(i,a),h=Ir(i,u);Pr(h,Ir(a,c));var p=f,d=zr(h,p),m=zr(p,p),g=d*d-m*(zr(h,h)-1);if(!(g<0)){var v=Math.sqrt(g),x=Ir(p,(-d-v)/m);if(Pr(x,h),x=Rr(x),!n)return x;var b,_=t[0],w=r[0],A=t[1],M=r[1];w<_&&(b=_,_=w,w=b);var k=w-_,T=y(k-kt)0^x[1]<(y(x[0]-_)kt^(_<=x[0]&&x[0]<=w)){var E=Ir(p,(-d+v)/m);return Pr(E,h),[x,Rr(E)]}}}function o(e,n){var i=r?t:kt-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}}((b=+t)*Ct),k()):b},w.clipExtent=function(t){return arguments.length?(_=t,x=t?nn(t[0][0],t[0][1],t[1][0],t[1][1]):O,k()):_},w.scale=function(t){return arguments.length?(u=+t,M()):u},w.translate=function(t){return arguments.length?(c=+t[0],f=+t[1],M()):[c,f]},w.center=function(t){return arguments.length?(h=t[0]%360*Ct,p=t[1]%360*Ct,M()):[h*Lt,p*Lt]},w.rotate=function(t){return arguments.length?(d=t[0]%360*Ct,m=t[1]%360*Ct,g=t.length>2?t[2]%360*Ct:0,M()):[d*Lt,m*Lt,g*Lt]},t.rebind(w,l,"precision"),function(){return r=e.apply(this,arguments),w.invert=r.invert&&A,M()}}function Ln(t){return En(t,function(e,r){t.point(e*Ct,r*Ct)})}function On(t,e){return[t,e]}function zn(t,e){return[t>kt?t-Tt:t<-kt?t+Tt:t,e]}function Dn(t,e,r){return t?e||r?Gr(In(t),Nn(e,r)):In(t):e||r?Nn(e,r):zn}function Pn(t){return function(e,r){return[(e+=t)>kt?e-Tt:e<-kt?e+Tt:e,r]}}function In(t){var e=Pn(t);return e.invert=Pn(-t),e}function Nn(t,e){var r=Math.cos(t),n=Math.sin(t),i=Math.cos(e),a=Math.sin(e);function o(t,e){var o=Math.cos(e),s=Math.cos(t)*o,l=Math.sin(t)*o,u=Math.sin(e),c=u*r+s*n;return[Math.atan2(l*i-c*a,s*r-u*n),Pt(c*i+l*a)]}return o.invert=function(t,e){var o=Math.cos(e),s=Math.cos(t)*o,l=Math.sin(t)*o,u=Math.sin(e),c=u*i-l*a;return[Math.atan2(l*i+u*a,s*r+c*n),Pt(c*r-s*n)]},o}function Rn(t,e){var r=Math.cos(t),n=Math.sin(t);return function(i,a,o,s){var l=o*e;null!=i?(i=Fn(r,i),a=Fn(r,a),(o>0?ia)&&(i+=o*Tt)):(i=t+o*Tt,a=t-.5*l);for(var u,c=i;o>0?c>a:c2?t[2]*Ct:0),e.invert=function(e){return(e=t.invert(e[0]*Ct,e[1]*Ct))[0]*=Lt,e[1]*=Lt,e},e},zn.invert=On,t.geo.circle=function(){var t,e,r=[0,0],n=6;function i(){var t="function"==typeof r?r.apply(this,arguments):r,n=Dn(-t[0]*Ct,-t[1]*Ct,0).invert,i=[];return e(null,null,1,{point:function(t,e){i.push(t=n(t,e)),t[0]*=Lt,t[1]*=Lt}}),{type:"Polygon",coordinates:[i]}}return i.origin=function(t){return arguments.length?(r=t,i):r},i.angle=function(r){return arguments.length?(e=Rn((t=+r)*Ct,n*Ct),i):t},i.precision=function(r){return arguments.length?(e=Rn(t*Ct,(n=+r)*Ct),i):n},i.angle(90)},t.geo.distance=function(t,e){var r,n=(e[0]-t[0])*Ct,i=t[1]*Ct,a=e[1]*Ct,o=Math.sin(n),s=Math.cos(n),l=Math.sin(i),u=Math.cos(i),c=Math.sin(a),f=Math.cos(a);return Math.atan2(Math.sqrt((r=f*o)*r+(r=u*c-l*f*s)*r),l*c+u*f*s)},t.geo.graticule=function(){var e,r,n,i,a,o,s,l,u,c,f,h,p=10,d=p,m=90,g=360,v=2.5;function x(){return{type:"MultiLineString",coordinates:b()}}function b(){return t.range(Math.ceil(i/m)*m,n,m).map(f).concat(t.range(Math.ceil(l/g)*g,s,g).map(h)).concat(t.range(Math.ceil(r/p)*p,e,p).filter(function(t){return y(t%m)>At}).map(u)).concat(t.range(Math.ceil(o/d)*d,a,d).filter(function(t){return y(t%g)>At}).map(c))}return x.lines=function(){return b().map(function(t){return{type:"LineString",coordinates:t}})},x.outline=function(){return{type:"Polygon",coordinates:[f(i).concat(h(s).slice(1),f(n).reverse().slice(1),h(l).reverse().slice(1))]}},x.extent=function(t){return arguments.length?x.majorExtent(t).minorExtent(t):x.minorExtent()},x.majorExtent=function(t){return arguments.length?(i=+t[0][0],n=+t[1][0],l=+t[0][1],s=+t[1][1],i>n&&(t=i,i=n,n=t),l>s&&(t=l,l=s,s=t),x.precision(v)):[[i,l],[n,s]]},x.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],o=+t[0][1],a=+t[1][1],r>e&&(t=r,r=e,e=t),o>a&&(t=o,o=a,a=t),x.precision(v)):[[r,o],[e,a]]},x.step=function(t){return arguments.length?x.majorStep(t).minorStep(t):x.minorStep()},x.majorStep=function(t){return arguments.length?(m=+t[0],g=+t[1],x):[m,g]},x.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],x):[p,d]},x.precision=function(t){return arguments.length?(v=+t,u=Bn(o,a,90),c=jn(r,e,v),f=Bn(l,s,90),h=jn(i,n,v),x):v},x.majorExtent([[-180,-90+At],[180,90-At]]).minorExtent([[-180,-80-At],[180,80+At]])},t.geo.greatArc=function(){var e,r,n=Vn,i=Un;function a(){return{type:"LineString",coordinates:[e||n.apply(this,arguments),r||i.apply(this,arguments)]}}return a.distance=function(){return t.geo.distance(e||n.apply(this,arguments),r||i.apply(this,arguments))},a.source=function(t){return arguments.length?(n=t,e="function"==typeof t?null:t,a):n},a.target=function(t){return arguments.length?(i=t,r="function"==typeof t?null:t,a):i},a.precision=function(){return arguments.length?a:0},a},t.geo.interpolate=function(t,e){return r=t[0]*Ct,n=t[1]*Ct,i=e[0]*Ct,a=e[1]*Ct,o=Math.cos(n),s=Math.sin(n),l=Math.cos(a),u=Math.sin(a),c=o*Math.cos(r),f=o*Math.sin(r),h=l*Math.cos(i),p=l*Math.sin(i),d=2*Math.asin(Math.sqrt(Nt(a-n)+o*l*Nt(i-r))),m=1/Math.sin(d),(g=d?function(t){var e=Math.sin(t*=d)*m,r=Math.sin(d-t)*m,n=r*c+e*h,i=r*f+e*p,a=r*s+e*u;return[Math.atan2(i,n)*Lt,Math.atan2(a,Math.sqrt(n*n+i*i))*Lt]}:function(){return[r*Lt,n*Lt]}).distance=d,g;var r,n,i,a,o,s,l,u,c,f,h,p,d,m,g},t.geo.length=function(e){return yn=0,t.geo.stream(e,qn),yn};var qn={sphere:I,point:I,lineStart:function(){var t,e,r;function n(n,i){var a=Math.sin(i*=Ct),o=Math.cos(i),s=y((n*=Ct)-t),l=Math.cos(s);yn+=Math.atan2(Math.sqrt((s=o*Math.sin(s))*s+(s=r*a-e*o*l)*s),e*a+r*o*l),t=n,e=a,r=o}qn.point=function(i,a){t=i*Ct,e=Math.sin(a*=Ct),r=Math.cos(a),qn.point=n},qn.lineEnd=function(){qn.point=qn.lineEnd=I}},lineEnd:I,polygonStart:I,polygonEnd:I};function Hn(t,e){function r(e,r){var n=Math.cos(e),i=Math.cos(r),a=t(n*i);return[a*i*Math.sin(e),a*Math.sin(r)]}return r.invert=function(t,r){var n=Math.sqrt(t*t+r*r),i=e(n),a=Math.sin(i),o=Math.cos(i);return[Math.atan2(t*a,n*o),Math.asin(n&&r*a/n)]},r}var Gn=Hn(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(t.geo.azimuthalEqualArea=function(){return Sn(Gn)}).raw=Gn;var Wn=Hn(function(t){var e=Math.acos(t);return e&&e/Math.sin(e)},O);function Yn(t,e){var r=Math.cos(t),n=function(t){return Math.tan(kt/4+t/2)},i=t===e?Math.sin(t):Math.log(r/Math.cos(e))/Math.log(n(e)/n(t)),a=r*Math.pow(n(t),i)/i;if(!i)return $n;function o(t,e){a>0?e<-St+At&&(e=-St+At):e>St-At&&(e=St-At);var r=a/Math.pow(n(e),i);return[r*Math.sin(i*t),a-r*Math.cos(i*t)]}return o.invert=function(t,e){var r=a-e,n=Ot(i)*Math.sqrt(t*t+r*r);return[Math.atan2(t,r)/i,2*Math.atan(Math.pow(a/n,1/i))-St]},o}function Zn(t,e){var r=Math.cos(t),n=t===e?Math.sin(t):(r-Math.cos(e))/(e-t),i=r/n+t;if(y(n)1&&zt(t[r[n-2]],t[r[n-1]],t[i])<=0;)--n;r[n++]=i}return r.slice(0,n)}function ii(t,e){return t[0]-e[0]||t[1]-e[1]}(t.geo.stereographic=function(){return Sn(Qn)}).raw=Qn,ti.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-St]},(t.geo.transverseMercator=function(){var t=Jn(ti),e=t.center,r=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return t?r([t[0],t[1],t.length>2?t[2]+90:90]):[(t=r())[0],t[1],t[2]-90]},r([0,0,90])}).raw=ti,t.geom={},t.geom.hull=function(t){var e=ei,r=ri;if(arguments.length)return n(t);function n(t){if(t.length<3)return[];var n,i=ge(e),a=ge(r),o=t.length,s=[],l=[];for(n=0;n=0;--n)p.push(t[s[u[n]][2]]);for(n=+f;nAt)s=s.L;else{if(!((i=a-wi(s,o))>At)){n>-At?(e=s.P,r=s):i>-At?(e=s,r=s.N):e=r=s;break}if(!s.R){e=s;break}s=s.R}var l=vi(t);if(fi.insert(e,l),e||r){if(e===r)return Ei(e),r=vi(e.site),fi.insert(l,r),l.edge=r.edge=Li(e.site,l.site),Ti(e),void Ti(r);if(r){Ei(e),Ei(r);var u=e.site,c=u.x,f=u.y,h=t.x-c,p=t.y-f,d=r.site,m=d.x-c,g=d.y-f,v=2*(h*g-p*m),y=h*h+p*p,x=m*m+g*g,b={x:(g*y-p*x)/v+c,y:(h*x-m*y)/v+f};Oi(r.edge,u,d,b),l.edge=Li(u,t,null,b),r.edge=Li(t,d,null,b),Ti(e),Ti(r)}else l.edge=Li(e.site,l.site)}}function _i(t,e){var r=t.site,n=r.x,i=r.y,a=i-e;if(!a)return n;var o=t.P;if(!o)return-1/0;var s=(r=o.site).x,l=r.y,u=l-e;if(!u)return s;var c=s-n,f=1/a-1/u,h=c/u;return f?(-h+Math.sqrt(h*h-2*f*(c*c/(-2*u)-l+u/2+i-a/2)))/f+n:(n+s)/2}function wi(t,e){var r=t.N;if(r)return _i(r,e);var n=t.site;return n.y===e?n.x:1/0}function Ai(t){this.site=t,this.edges=[]}function Mi(t,e){return e.angle-t.angle}function ki(){Pi(this),this.x=this.y=this.arc=this.site=this.cy=null}function Ti(t){var e=t.P,r=t.N;if(e&&r){var n=e.site,i=t.site,a=r.site;if(n!==a){var o=i.x,s=i.y,l=n.x-o,u=n.y-s,c=a.x-o,f=2*(l*(g=a.y-s)-u*c);if(!(f>=-Mt)){var h=l*l+u*u,p=c*c+g*g,d=(g*h-u*p)/f,m=(l*p-c*h)/f,g=m+s,v=mi.pop()||new ki;v.arc=t,v.site=i,v.x=d+o,v.y=g+Math.sqrt(d*d+m*m),v.cy=g,t.circle=v;for(var y=null,x=pi._;x;)if(v.y=s)return;if(h>d){if(a){if(a.y>=u)return}else a={x:g,y:l};r={x:g,y:u}}else{if(a){if(a.y1)if(h>d){if(a){if(a.y>=u)return}else a={x:(l-i)/n,y:l};r={x:(u-i)/n,y:u}}else{if(a){if(a.y=s)return}else a={x:o,y:n*o+i};r={x:s,y:n*s+i}}else{if(a){if(a.xAt||y(i-r)>At)&&(s.splice(o,0,new zi((v=a.site,x=c,b=y(n-f)At?{x:f,y:y(e-f)At?{x:y(r-d)At?{x:h,y:y(e-h)At?{x:y(r-p)=r&&u.x<=i&&u.y>=n&&u.y<=o?[[r,o],[i,o],[i,n],[r,n]]:[]).point=t[s]}),e}function s(t){return t.map(function(t,e){return{x:Math.round(n(t,e)/At)*At,y:Math.round(i(t,e)/At)*At,i:e}})}return o.links=function(t){return Fi(s(t)).edges.filter(function(t){return t.l&&t.r}).map(function(e){return{source:t[e.l.i],target:t[e.r.i]}})},o.triangles=function(t){var e=[];return Fi(s(t)).cells.forEach(function(r,n){for(var i,a,o,s,l=r.site,u=r.edges.sort(Mi),c=-1,f=u.length,h=u[f-1].edge,p=h.l===l?h.r:h.l;++ca&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:Gi(r,n)})),a=Zi.lastIndex;return am&&(m=l.x),l.y>g&&(g=l.y),u.push(l.x),c.push(l.y);else for(f=0;fm&&(m=b),_>g&&(g=_),u.push(b),c.push(_)}var w=m-p,A=g-d;function M(t,e,r,n,i,a,o,s){if(!isNaN(r)&&!isNaN(n))if(t.leaf){var l=t.x,u=t.y;if(null!=l)if(y(l-r)+y(u-n)<.01)k(t,e,r,n,i,a,o,s);else{var c=t.point;t.x=t.y=t.point=null,k(t,c,l,u,i,a,o,s),k(t,e,r,n,i,a,o,s)}else t.x=r,t.y=n,t.point=e}else k(t,e,r,n,i,a,o,s)}function k(t,e,r,n,i,a,o,s){var l=.5*(i+o),u=.5*(a+s),c=r>=l,f=n>=u,h=f<<1|c;t.leaf=!1,c?i=l:o=l,f?a=u:s=u,M(t=t.nodes[h]||(t.nodes[h]={leaf:!0,nodes:[],point:null,x:null,y:null}),e,r,n,i,a,o,s)}w>A?g=d+w:m=p+A;var T={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){M(T,t,+v(t,++f),+x(t,f),p,d,m,g)}};if(T.visit=function(t){!function t(e,r,n,i,a,o){if(!e(r,n,i,a,o)){var s=.5*(n+a),l=.5*(i+o),u=r.nodes;u[0]&&t(e,u[0],n,i,s,l),u[1]&&t(e,u[1],s,i,a,l),u[2]&&t(e,u[2],n,l,s,o),u[3]&&t(e,u[3],s,l,a,o)}}(t,T,p,d,m,g)},T.find=function(t){return function(t,e,r,n,i,a,o){var s,l=1/0;return function t(u,c,f,h,p){if(!(c>a||f>o||h=_)<<1|e>=b,A=w+4;w=0&&!(n=t.interpolators[i](e,r)););return n}function $i(t,e){var r,n=[],i=[],a=t.length,o=e.length,s=Math.min(t.length,e.length);for(r=0;r=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}function aa(t){return 1-Math.cos(t*St)}function oa(t){return Math.pow(2,10*(t-1))}function sa(t){return 1-Math.sqrt(1-t*t)}function la(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function ua(t,e){return e-=t,function(r){return Math.round(t+e*r)}}function ca(t){var e,r,n,i=[t.a,t.b],a=[t.c,t.d],o=ha(i),s=fa(i,a),l=ha(((e=a)[0]+=(n=-s)*(r=i)[0],e[1]+=n*r[1],e))||0;i[0]*a[1]=0?t.slice(0,n):t,a=n>=0?t.slice(n+1):"in";return i=Ki.get(i)||Ji,a=Qi.get(a)||O,e=a(i.apply(null,r.call(arguments,1))),function(t){return t<=0?0:t>=1?1:e(t)}},t.interpolateHcl=function(e,r){e=t.hcl(e),r=t.hcl(r);var n=e.h,i=e.c,a=e.l,o=r.h-n,s=r.c-i,l=r.l-a;isNaN(s)&&(s=0,i=isNaN(i)?r.c:i);isNaN(o)?(o=0,n=isNaN(n)?r.h:n):o>180?o-=360:o<-180&&(o+=360);return function(t){return Yt(n+o*t,i+s*t,a+l*t)+""}},t.interpolateHsl=function(e,r){e=t.hsl(e),r=t.hsl(r);var n=e.h,i=e.s,a=e.l,o=r.h-n,s=r.s-i,l=r.l-a;isNaN(s)&&(s=0,i=isNaN(i)?r.s:i);isNaN(o)?(o=0,n=isNaN(n)?r.h:n):o>180?o-=360:o<-180&&(o+=360);return function(t){return Ht(n+o*t,i+s*t,a+l*t)+""}},t.interpolateLab=function(e,r){e=t.lab(e),r=t.lab(r);var n=e.l,i=e.a,a=e.b,o=r.l-n,s=r.a-i,l=r.b-a;return function(t){return te(n+o*t,i+s*t,a+l*t)+""}},t.interpolateRound=ua,t.transform=function(e){var r=i.createElementNS(t.ns.prefix.svg,"g");return(t.transform=function(t){if(null!=t){r.setAttribute("transform",t);var e=r.transform.baseVal.consolidate()}return new ca(e?e.matrix:pa)})(e)},ca.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var pa={a:1,b:0,c:0,d:1,e:0,f:0};function da(t){return t.length?t.pop()+",":""}function ma(e,r){var n=[],i=[];return e=t.transform(e),r=t.transform(r),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push("translate(",null,",",null,")");n.push({i:i-4,x:Gi(t[0],e[0])},{i:i-2,x:Gi(t[1],e[1])})}else(e[0]||e[1])&&r.push("translate("+e+")")}(e.translate,r.translate,n,i),function(t,e,r,n){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),n.push({i:r.push(da(r)+"rotate(",null,")")-2,x:Gi(t,e)})):e&&r.push(da(r)+"rotate("+e+")")}(e.rotate,r.rotate,n,i),function(t,e,r,n){t!==e?n.push({i:r.push(da(r)+"skewX(",null,")")-2,x:Gi(t,e)}):e&&r.push(da(r)+"skewX("+e+")")}(e.skew,r.skew,n,i),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push(da(r)+"scale(",null,",",null,")");n.push({i:i-4,x:Gi(t[0],e[0])},{i:i-2,x:Gi(t[1],e[1])})}else 1===e[0]&&1===e[1]||r.push(da(r)+"scale("+e+")")}(e.scale,r.scale,n,i),e=r=null,function(t){for(var e,r=-1,a=i.length;++r0?n=t:(e.c=null,e.t=NaN,e=null,l.end({type:"end",alpha:n=0})):t>0&&(l.start({type:"start",alpha:n=t}),e=Me(s.tick)),s):n},s.start=function(){var t,e,r,n=v.length,l=y.length,c=u[0],d=u[1];for(t=0;t=0;)r.push(i[n])}function Ca(t,e){for(var r=[t],n=[];null!=(t=r.pop());)if(n.push(t),(a=t.children)&&(i=a.length))for(var i,a,o=-1;++o=0;)o.push(c=u[l]),c.parent=a,c.depth=a.depth+1;r&&(a.value=0),a.children=u}else r&&(a.value=+r.call(n,a,a.depth)||0),delete a.children;return Ca(i,function(e){var n,i;t&&(n=e.children)&&n.sort(t),r&&(i=e.parent)&&(i.value+=e.value)}),s}return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Sa(t,function(t){t.children&&(t.value=0)}),Ca(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},t.layout.partition=function(){var e=t.layout.hierarchy(),r=[1,1];function n(t,n){var i=e.call(this,t,n);return function t(e,r,n,i){var a=e.children;if(e.x=r,e.y=e.depth*i,e.dx=n,e.dy=i,a&&(o=a.length)){var o,s,l,u=-1;for(n=e.value?n/e.value:0;++us&&(s=n),o.push(n)}for(r=0;ri&&(n=r,i=e);return n}function qa(t){return t.reduce(Ha,0)}function Ha(t,e){return t+e[1]}function Ga(t,e){return Wa(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function Wa(t,e){for(var r=-1,n=+t[0],i=(t[1]-n)/e,a=[];++r<=e;)a[r]=i*r+n;return a}function Ya(e){return[t.min(e),t.max(e)]}function Za(t,e){return t.value-e.value}function Xa(t,e){var r=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=r,r._pack_prev=e}function $a(t,e){t._pack_next=e,e._pack_prev=t}function Ja(t,e){var r=e.x-t.x,n=e.y-t.y,i=t.r+e.r;return.999*i*i>r*r+n*n}function Ka(t){if((e=t.children)&&(l=e.length)){var e,r,n,i,a,o,s,l,u=1/0,c=-1/0,f=1/0,h=-1/0;if(e.forEach(Qa),(r=e[0]).x=-r.r,r.y=0,x(r),l>1&&((n=e[1]).x=n.r,n.y=0,x(n),l>2))for(eo(r,n,i=e[2]),x(i),Xa(r,i),r._pack_prev=i,Xa(i,n),n=r._pack_next,a=3;a0)for(o=-1;++o=f[0]&&l<=f[1]&&((s=u[t.bisect(h,l,1,d)-1]).y+=m,s.push(a[o]));return u}return a.value=function(t){return arguments.length?(r=t,a):r},a.range=function(t){return arguments.length?(n=ge(t),a):n},a.bins=function(t){return arguments.length?(i="number"==typeof t?function(e){return Wa(e,t)}:ge(t),a):i},a.frequency=function(t){return arguments.length?(e=!!t,a):e},a},t.layout.pack=function(){var e,r=t.layout.hierarchy().sort(Za),n=0,i=[1,1];function a(t,a){var o=r.call(this,t,a),s=o[0],l=i[0],u=i[1],c=null==e?Math.sqrt:"function"==typeof e?e:function(){return e};if(s.x=s.y=0,Ca(s,function(t){t.r=+c(t.value)}),Ca(s,Ka),n){var f=n*(e?1:Math.max(2*s.r/l,2*s.r/u))/2;Ca(s,function(t){t.r+=f}),Ca(s,Ka),Ca(s,function(t){t.r-=f})}return function t(e,r,n,i){var a=e.children;e.x=r+=i*e.x;e.y=n+=i*e.y;e.r*=i;if(a)for(var o=-1,s=a.length;++op.x&&(p=t),t.depth>d.depth&&(d=t)});var m=r(h,p)/2-h.x,g=n[0]/(p.x+r(p,h)/2+m),v=n[1]/(d.depth||1);Sa(c,function(t){t.x=(t.x+m)*g,t.y=t.depth*v})}return u}function o(t){var e=t.children,n=t.parent.children,i=t.i?n[t.i-1]:null;if(e.length){!function(t){var e,r=0,n=0,i=t.children,a=i.length;for(;--a>=0;)(e=i[a]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(t);var a=(e[0].z+e[e.length-1].z)/2;i?(t.z=i.z+r(t._,i._),t.m=t.z-a):t.z=a}else i&&(t.z=i.z+r(t._,i._));t.parent.A=function(t,e,n){if(e){for(var i,a=t,o=t,s=e,l=a.parent.children[0],u=a.m,c=o.m,f=s.m,h=l.m;s=io(s),a=no(a),s&&a;)l=no(l),(o=io(o)).a=t,(i=s.z+f-a.z-u+r(s._,a._))>0&&(ao(oo(s,t,n),t,i),u+=i,c+=i),f+=s.m,u+=a.m,h+=l.m,c+=o.m;s&&!io(o)&&(o.t=s,o.m+=f-c),a&&!no(l)&&(l.t=a,l.m+=u-h,n=t)}return n}(t,i,t.parent.A||n[0])}function s(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function l(t){t.x*=n[0],t.y=t.depth*n[1]}return a.separation=function(t){return arguments.length?(r=t,a):r},a.size=function(t){return arguments.length?(i=null==(n=t)?l:null,a):i?null:n},a.nodeSize=function(t){return arguments.length?(i=null==(n=t)?null:l,a):i?n:null},Ea(a,e)},t.layout.cluster=function(){var e=t.layout.hierarchy().sort(null).value(null),r=ro,n=[1,1],i=!1;function a(a,o){var s,l=e.call(this,a,o),u=l[0],c=0;Ca(u,function(e){var n=e.children;n&&n.length?(e.x=function(t){return t.reduce(function(t,e){return t+e.x},0)/t.length}(n),e.y=function(e){return 1+t.max(e,function(t){return t.y})}(n)):(e.x=s?c+=r(e,s):0,e.y=0,s=e)});var f=function t(e){var r=e.children;return r&&r.length?t(r[0]):e}(u),h=function t(e){var r,n=e.children;return n&&(r=n.length)?t(n[r-1]):e}(u),p=f.x-r(f,h)/2,d=h.x+r(h,f)/2;return Ca(u,i?function(t){t.x=(t.x-u.x)*n[0],t.y=(u.y-t.y)*n[1]}:function(t){t.x=(t.x-p)/(d-p)*n[0],t.y=(1-(u.y?t.y/u.y:1))*n[1]}),l}return a.separation=function(t){return arguments.length?(r=t,a):r},a.size=function(t){return arguments.length?(i=null==(n=t),a):i?null:n},a.nodeSize=function(t){return arguments.length?(i=null!=(n=t),a):i?n:null},Ea(a,e)},t.layout.treemap=function(){var e,r=t.layout.hierarchy(),n=Math.round,i=[1,1],a=null,o=so,s=!1,l="squarify",u=.5*(1+Math.sqrt(5));function c(t,e){for(var r,n,i=-1,a=t.length;++i0;)s.push(r=u[i-1]),s.area+=r.area,"squarify"!==l||(n=p(s,m))<=h?(u.pop(),h=n):(s.area-=s.pop().area,d(s,m,a,!1),m=Math.min(a.dx,a.dy),s.length=s.area=0,h=1/0);s.length&&(d(s,m,a,!0),s.length=s.area=0),e.forEach(f)}}function h(t){var e=t.children;if(e&&e.length){var r,n=o(t),i=e.slice(),a=[];for(c(i,n.dx*n.dy/t.value),a.area=0;r=i.pop();)a.push(r),a.area+=r.area,null!=r.z&&(d(a,r.z?n.dx:n.dy,n,!i.length),a.length=a.area=0);e.forEach(h)}}function p(t,e){for(var r,n=t.area,i=0,a=1/0,o=-1,s=t.length;++oi&&(i=r));return e*=e,(n*=n)?Math.max(e*i*u/n,n/(e*a*u)):1/0}function d(t,e,r,i){var a,o=-1,s=t.length,l=r.x,u=r.y,c=e?n(t.area/e):0;if(e==r.dx){for((i||c>r.dy)&&(c=r.dy);++or.dx)&&(c=r.dx);++o1);return t+e*r*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var e=t.random.normal.apply(t,arguments);return function(){return Math.exp(e())}},bates:function(e){var r=t.random.irwinHall(e);return function(){return r()/e}},irwinHall:function(t){return function(){for(var e=0,r=0;r2?go:fo,s=i?va:ga;return a=t(e,r,s,n),o=t(r,e,s,Xi),l}function l(t){return a(t)}l.invert=function(t){return o(t)};l.domain=function(t){return arguments.length?(e=t.map(Number),s()):e};l.range=function(t){return arguments.length?(r=t,s()):r};l.rangeRound=function(t){return l.range(t).interpolate(ua)};l.clamp=function(t){return arguments.length?(i=t,s()):i};l.interpolate=function(t){return arguments.length?(n=t,s()):n};l.ticks=function(t){return bo(e,t)};l.tickFormat=function(t,r){return _o(e,t,r)};l.nice=function(t){return yo(e,t),s()};l.copy=function(){return t(e,r,n,i)};return s()}([0,1],[0,1],Xi,!1)};var wo={s:1,g:1,p:1,r:1,e:1};function Ao(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}t.scale.log=function(){return function e(r,n,i,a){function o(t){return(i?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(n)}function s(t){return i?Math.pow(n,t):-Math.pow(n,-t)}function l(t){return r(o(t))}l.invert=function(t){return s(r.invert(t))};l.domain=function(t){return arguments.length?(i=t[0]>=0,r.domain((a=t.map(Number)).map(o)),l):a};l.base=function(t){return arguments.length?(n=+t,r.domain(a.map(o)),l):n};l.nice=function(){var t=ho(a.map(o),i?Math:ko);return r.domain(t),a=t.map(s),l};l.ticks=function(){var t=uo(a),e=[],r=t[0],l=t[1],u=Math.floor(o(r)),c=Math.ceil(o(l)),f=n%1?2:n;if(isFinite(c-u)){if(i){for(;u0;h--)e.push(s(u)*h);for(u=0;e[u]l;c--);e=e.slice(u,c)}return e};l.tickFormat=function(e,r){if(!arguments.length)return Mo;arguments.length<2?r=Mo:"function"!=typeof r&&(r=t.format(r));var i=Math.max(1,n*e/l.ticks().length);return function(t){var e=t/s(Math.round(o(t)));return e*n0?i[t-1]:r[0],tf?0:1;if(u=Et)return l(u,p)+(s?l(s,1-p):"")+"Z";var d,m,g,v,y,x,b,_,w,A,M,k,T=0,E=0,S=[];if((v=(+o.apply(this,arguments)||0)/2)&&(g=n===zo?Math.sqrt(s*s+u*u):+n.apply(this,arguments),p||(E*=-1),u&&(E=Pt(g/u*Math.sin(v))),s&&(T=Pt(g/s*Math.sin(v)))),u){y=u*Math.cos(c+E),x=u*Math.sin(c+E),b=u*Math.cos(f-E),_=u*Math.sin(f-E);var C=Math.abs(f-c-2*E)<=kt?0:1;if(E&&Fo(y,x,b,_)===p^C){var L=(c+f)/2;y=u*Math.cos(L),x=u*Math.sin(L),b=_=null}}else y=x=0;if(s){w=s*Math.cos(f-T),A=s*Math.sin(f-T),M=s*Math.cos(c+T),k=s*Math.sin(c+T);var O=Math.abs(c-f+2*T)<=kt?0:1;if(T&&Fo(w,A,M,k)===1-p^O){var z=(c+f)/2;w=s*Math.cos(z),A=s*Math.sin(z),M=k=null}}else w=A=0;if(h>At&&(d=Math.min(Math.abs(u-s)/2,+r.apply(this,arguments)))>.001){m=s0?0:1}function Bo(t,e,r,n,i){var a=t[0]-e[0],o=t[1]-e[1],s=(i?n:-n)/Math.sqrt(a*a+o*o),l=s*o,u=-s*a,c=t[0]+l,f=t[1]+u,h=e[0]+l,p=e[1]+u,d=(c+h)/2,m=(f+p)/2,g=h-c,v=p-f,y=g*g+v*v,x=r-n,b=c*p-h*f,_=(v<0?-1:1)*Math.sqrt(Math.max(0,x*x*y-b*b)),w=(b*v-g*_)/y,A=(-b*g-v*_)/y,M=(b*v+g*_)/y,k=(-b*g+v*_)/y,T=w-d,E=A-m,S=M-d,C=k-m;return T*T+E*E>S*S+C*C&&(w=M,A=k),[[w-l,A-u],[w*r/x,A*r/x]]}function jo(t){var e=ei,r=ri,n=Wr,i=Uo,a=i.key,o=.7;function s(a){var s,l=[],u=[],c=-1,f=a.length,h=ge(e),p=ge(r);function d(){l.push("M",i(t(u),o))}for(;++c1&&i.push("H",n[0]);return i.join("")},"step-before":Ho,"step-after":Go,basis:Zo,"basis-open":function(t){if(t.length<4)return Uo(t);var e,r=[],n=-1,i=t.length,a=[0],o=[0];for(;++n<3;)e=t[n],a.push(e[0]),o.push(e[1]);r.push(Xo(Ko,a)+","+Xo(Ko,o)),--n;for(;++n9&&(i=3*e/Math.sqrt(i),o[s]=i*r,o[s+1]=i*n));s=-1;for(;++s<=l;)i=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),a.push([i||0,o[s]*i||0]);return a}(t))}});function Uo(t){return t.length>1?t.join("L"):t+"Z"}function qo(t){return t.join("L")+"Z"}function Ho(t){for(var e=0,r=t.length,n=t[0],i=[n[0],",",n[1]];++e1){s=e[1],a=t[l],l++,n+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(a[0]-s[0])+","+(a[1]-s[1])+","+a[0]+","+a[1];for(var u=2;ukt)+",1 "+e}function l(t,e,r,n){return"Q 0,0 "+n}return a.radius=function(t){return arguments.length?(r=ge(t),a):r},a.source=function(e){return arguments.length?(t=ge(e),a):t},a.target=function(t){return arguments.length?(e=ge(t),a):e},a.startAngle=function(t){return arguments.length?(n=ge(t),a):n},a.endAngle=function(t){return arguments.length?(i=ge(t),a):i},a},t.svg.diagonal=function(){var t=Vn,e=Un,r=is;function n(n,i){var a=t.call(this,n,i),o=e.call(this,n,i),s=(a.y+o.y)/2,l=[a,{x:a.x,y:s},{x:o.x,y:s},o];return"M"+(l=l.map(r))[0]+"C"+l[1]+" "+l[2]+" "+l[3]}return n.source=function(e){return arguments.length?(t=ge(e),n):t},n.target=function(t){return arguments.length?(e=ge(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},t.svg.diagonal.radial=function(){var e=t.svg.diagonal(),r=is,n=e.projection;return e.projection=function(t){return arguments.length?n(function(t){return function(){var e=t.apply(this,arguments),r=e[0],n=e[1]-St;return[r*Math.cos(n),r*Math.sin(n)]}}(r=t)):r},e},t.svg.symbol=function(){var t=os,e=as;function r(r,n){return(ls.get(t.call(this,r,n))||ss)(e.call(this,r,n))}return r.type=function(e){return arguments.length?(t=ge(e),r):t},r.size=function(t){return arguments.length?(e=ge(t),r):e},r};var ls=t.map({circle:ss,cross:function(t){var e=Math.sqrt(t/5)/2;return"M"+-3*e+","+-e+"H"+-e+"V"+-3*e+"H"+e+"V"+-e+"H"+3*e+"V"+e+"H"+e+"V"+3*e+"H"+-e+"V"+e+"H"+-3*e+"Z"},diamond:function(t){var e=Math.sqrt(t/(2*cs)),r=e*cs;return"M0,"+-e+"L"+r+",0 0,"+e+" "+-r+",0Z"},square:function(t){var e=Math.sqrt(t)/2;return"M"+-e+","+-e+"L"+e+","+-e+" "+e+","+e+" "+-e+","+e+"Z"},"triangle-down":function(t){var e=Math.sqrt(t/us),r=e*us/2;return"M0,"+r+"L"+e+","+-r+" "+-e+","+-r+"Z"},"triangle-up":function(t){var e=Math.sqrt(t/us),r=e*us/2;return"M0,"+-r+"L"+e+","+r+" "+-e+","+r+"Z"}});t.svg.symbolTypes=ls.keys();var us=Math.sqrt(3),cs=Math.tan(30*Ct);Y.transition=function(t){for(var e,r,n=ds||++vs,i=bs(t),a=[],o=ms||{time:Date.now(),ease:ia,delay:0,duration:250},s=-1,l=this.length;++s0;)u[--h].call(t,o);if(a>=1)return f.event&&f.event.end.call(t,t.__data__,e),--c.count?delete c[n]:delete t[r],1}f||(a=i.time,o=Me(function(t){var e=f.delay;if(o.t=e+a,e<=t)return h(t-e);o.c=h},0,a),f=c[n]={tween:new b,time:a,timer:o,delay:i.delay,duration:i.duration,ease:i.ease,index:e},i=null,++c.count)}gs.call=Y.call,gs.empty=Y.empty,gs.node=Y.node,gs.size=Y.size,t.transition=function(e,r){return e&&e.transition?ds?e.transition(r):e:t.selection().transition(e)},t.transition.prototype=gs,gs.select=function(t){var e,r,n,i=this.id,a=this.namespace,o=[];t=Z(t);for(var s=-1,l=this.length;++srect,.s>rect").attr("width",s[1]-s[0])}function m(t){t.select(".extent").attr("y",l[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",l[1]-l[0])}function g(){var f,g,v=this,y=t.select(t.event.target),x=n.of(v,arguments),b=t.select(v),_=y.datum(),w=!/^(n|s)$/.test(_)&&i,A=!/^(e|w)$/.test(_)&&a,M=y.classed("extent"),k=xt(v),T=t.mouse(v),E=t.select(o(v)).on("keydown.brush",function(){32==t.event.keyCode&&(M||(f=null,T[0]-=s[1],T[1]-=l[1],M=2),F())}).on("keyup.brush",function(){32==t.event.keyCode&&2==M&&(T[0]+=s[1],T[1]+=l[1],M=0,F())});if(t.event.changedTouches?E.on("touchmove.brush",L).on("touchend.brush",z):E.on("mousemove.brush",L).on("mouseup.brush",z),b.interrupt().selectAll("*").interrupt(),M)T[0]=s[0]-T[0],T[1]=l[0]-T[1];else if(_){var S=+/w$/.test(_),C=+/^n/.test(_);g=[s[1-S]-T[0],l[1-C]-T[1]],T[0]=s[S],T[1]=l[C]}else t.event.altKey&&(f=T.slice());function L(){var e=t.mouse(v),r=!1;g&&(e[0]+=g[0],e[1]+=g[1]),M||(t.event.altKey?(f||(f=[(s[0]+s[1])/2,(l[0]+l[1])/2]),T[0]=s[+(e[0]1?{floor:function(e){for(;s(e=t.floor(e));)e=Ds(e-1);return e},ceil:function(e){for(;s(e=t.ceil(e));)e=Ds(+e+1);return e}}:t))},i.ticks=function(t,e){var r=uo(i.domain()),n=null==t?a(r,10):"number"==typeof t?a(r,t):!t.range&&[{range:t},e];return n&&(t=n[0],e=n[1]),t.range(r[0],Ds(+r[1]+1),e<1?1:e)},i.tickFormat=function(){return n},i.copy=function(){return zs(e.copy(),r,n)},vo(i,e)}function Ds(t){return new Date(t)}Ss.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Os:Ls,Os.parse=function(t){var e=new Date(t);return isNaN(e)?null:e},Os.toString=Ls.toString,De.second=Re(function(t){return new Pe(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(t.getTime()+1e3*Math.floor(e))},function(t){return t.getSeconds()}),De.seconds=De.second.range,De.seconds.utc=De.second.utc.range,De.minute=Re(function(t){return new Pe(6e4*Math.floor(t/6e4))},function(t,e){t.setTime(t.getTime()+6e4*Math.floor(e))},function(t){return t.getMinutes()}),De.minutes=De.minute.range,De.minutes.utc=De.minute.utc.range,De.hour=Re(function(t){var e=t.getTimezoneOffset()/60;return new Pe(36e5*(Math.floor(t/36e5-e)+e))},function(t,e){t.setTime(t.getTime()+36e5*Math.floor(e))},function(t){return t.getHours()}),De.hours=De.hour.range,De.hours.utc=De.hour.utc.range,De.month=Re(function(t){return(t=De.day(t)).setDate(1),t},function(t,e){t.setMonth(t.getMonth()+e)},function(t){return t.getMonth()}),De.months=De.month.range,De.months.utc=De.month.utc.range;var Ps=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Is=[[De.second,1],[De.second,5],[De.second,15],[De.second,30],[De.minute,1],[De.minute,5],[De.minute,15],[De.minute,30],[De.hour,1],[De.hour,3],[De.hour,6],[De.hour,12],[De.day,1],[De.day,2],[De.week,1],[De.month,1],[De.month,3],[De.year,1]],Ns=Ss.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}],["%Y",Wr]]),Rs={range:function(e,r,n){return t.range(Math.ceil(e/n)*n,+r,n).map(Ds)},floor:O,ceil:O};Is.year=De.year,De.scale=function(){return zs(t.scale.linear(),Is,Ns)};var Fs=Is.map(function(t){return[t[0].utc,t[1]]}),Bs=Cs.multi([[".%L",function(t){return t.getUTCMilliseconds()}],[":%S",function(t){return t.getUTCSeconds()}],["%I:%M",function(t){return t.getUTCMinutes()}],["%I %p",function(t){return t.getUTCHours()}],["%a %d",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],["%b %d",function(t){return 1!=t.getUTCDate()}],["%B",function(t){return t.getUTCMonth()}],["%Y",Wr]]);function js(t){return JSON.parse(t.responseText)}function Vs(t){var e=i.createRange();return e.selectNode(i.body),e.createContextualFragment(t.responseText)}Fs.year=De.year.utc,De.scale.utc=function(){return zs(t.scale.linear(),Fs,Bs)},t.text=ve(function(t){return t.responseText}),t.json=function(t,e){return ye(t,"application/json",js,e)},t.html=function(t,e){return ye(t,"text/html",Vs,e)},t.xml=ve(function(t){return t.responseXML}),"object"==typeof e&&e.exports?e.exports=t:this.d3=t}()},{}],109:[function(t,e,r){!function(t){"use strict";var r,n,i,a,o=9e15,s=1e9,l="0123456789abcdef",u="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",c="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",f={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-o,maxE:o,crypto:!1},h=!0,p="[DecimalError] ",d=p+"Invalid argument: ",m=p+"Precision limit exceeded",g=p+"crypto unavailable",v=Math.floor,y=Math.pow,x=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,b=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,_=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,w=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,A=1e7,M=7,k=u.length-1,T=c.length-1,E={name:"[object Decimal]"};function S(t){var e,r,n,i=t.length-1,a="",o=t[0];if(i>0){for(a+=o,e=1;er)throw Error(d+t)}function L(t,e,r,n){var i,a,o,s;for(a=t[0];a>=10;a/=10)--e;return--e<0?(e+=M,i=0):(i=Math.ceil((e+1)/M),e%=M),a=y(10,M-e),s=t[i]%a|0,null==n?e<3?(0==e?s=s/100|0:1==e&&(s=s/10|0),o=r<4&&99999==s||r>3&&49999==s||5e4==s||0==s):o=(r<4&&s+1==a||r>3&&s+1==a/2)&&(t[i+1]/a/100|0)==y(10,e-2)-1||(s==a/2||0==s)&&0==(t[i+1]/a/100|0):e<4?(0==e?s=s/1e3|0:1==e?s=s/100|0:2==e&&(s=s/10|0),o=(n||r<4)&&9999==s||!n&&r>3&&4999==s):o=((n||r<4)&&s+1==a||!n&&r>3&&s+1==a/2)&&(t[i+1]/a/1e3|0)==y(10,e-3)-1,o}function O(t,e,r){for(var n,i,a=[0],o=0,s=t.length;or-1&&(void 0===a[n+1]&&(a[n+1]=0),a[n+1]+=a[n]/r|0,a[n]%=r)}return a.reverse()}E.absoluteValue=E.abs=function(){var t=new this.constructor(this);return t.s<0&&(t.s=1),D(t)},E.ceil=function(){return D(new this.constructor(this),this.e+1,2)},E.comparedTo=E.cmp=function(t){var e,r,n,i,a=this,o=a.d,s=(t=new a.constructor(t)).d,l=a.s,u=t.s;if(!o||!s)return l&&u?l!==u?l:o===s?0:!o^l<0?1:-1:NaN;if(!o[0]||!s[0])return o[0]?l:s[0]?-u:0;if(l!==u)return l;if(a.e!==t.e)return a.e>t.e^l<0?1:-1;for(e=0,r=(n=o.length)<(i=s.length)?n:i;es[e]^l<0?1:-1;return n===i?0:n>i^l<0?1:-1},E.cosine=E.cos=function(){var t,e,r=this,n=r.constructor;return r.d?r.d[0]?(t=n.precision,e=n.rounding,n.precision=t+Math.max(r.e,r.sd())+M,n.rounding=1,r=function(t,e){var r,n,i=e.d.length;i<32?(r=Math.ceil(i/3),n=Math.pow(4,-r).toString()):(r=16,n="2.3283064365386962890625e-10");t.precision+=r,e=Z(t,1,e.times(n),new t(1));for(var a=r;a--;){var o=e.times(e);e=o.times(o).minus(o).times(8).plus(1)}return t.precision-=r,e}(n,X(n,r)),n.precision=t,n.rounding=e,D(2==a||3==a?r.neg():r,t,e,!0)):new n(1):new n(NaN)},E.cubeRoot=E.cbrt=function(){var t,e,r,n,i,a,o,s,l,u,c=this,f=c.constructor;if(!c.isFinite()||c.isZero())return new f(c);for(h=!1,(a=c.s*Math.pow(c.s*c,1/3))&&Math.abs(a)!=1/0?n=new f(a.toString()):(r=S(c.d),(a=((t=c.e)-r.length+1)%3)&&(r+=1==a||-2==a?"0":"00"),a=Math.pow(r,1/3),t=v((t+1)/3)-(t%3==(t<0?-1:2)),(n=new f(r=a==1/0?"5e"+t:(r=a.toExponential()).slice(0,r.indexOf("e")+1)+t)).s=c.s),o=(t=f.precision)+3;;)if(u=(l=(s=n).times(s).times(s)).plus(c),n=z(u.plus(c).times(s),u.plus(l),o+2,1),S(s.d).slice(0,o)===(r=S(n.d)).slice(0,o)){if("9999"!=(r=r.slice(o-3,o+1))&&(i||"4999"!=r)){+r&&(+r.slice(1)||"5"!=r.charAt(0))||(D(n,t+1,1),e=!n.times(n).times(n).eq(c));break}if(!i&&(D(s,t+1,0),s.times(s).times(s).eq(c))){n=s;break}o+=4,i=1}return h=!0,D(n,t,f.rounding,e)},E.decimalPlaces=E.dp=function(){var t,e=this.d,r=NaN;if(e){if(r=((t=e.length-1)-v(this.e/M))*M,t=e[t])for(;t%10==0;t/=10)r--;r<0&&(r=0)}return r},E.dividedBy=E.div=function(t){return z(this,new this.constructor(t))},E.dividedToIntegerBy=E.divToInt=function(t){var e=this.constructor;return D(z(this,new e(t),0,1,1),e.precision,e.rounding)},E.equals=E.eq=function(t){return 0===this.cmp(t)},E.floor=function(){return D(new this.constructor(this),this.e+1,3)},E.greaterThan=E.gt=function(t){return this.cmp(t)>0},E.greaterThanOrEqualTo=E.gte=function(t){var e=this.cmp(t);return 1==e||0===e},E.hyperbolicCosine=E.cosh=function(){var t,e,r,n,i,a=this,o=a.constructor,s=new o(1);if(!a.isFinite())return new o(a.s?1/0:NaN);if(a.isZero())return s;r=o.precision,n=o.rounding,o.precision=r+Math.max(a.e,a.sd())+4,o.rounding=1,(i=a.d.length)<32?(t=Math.ceil(i/3),e=Math.pow(4,-t).toString()):(t=16,e="2.3283064365386962890625e-10"),a=Z(o,1,a.times(e),new o(1),!0);for(var l,u=t,c=new o(8);u--;)l=a.times(a),a=s.minus(l.times(c.minus(l.times(c))));return D(a,o.precision=r,o.rounding=n,!0)},E.hyperbolicSine=E.sinh=function(){var t,e,r,n,i=this,a=i.constructor;if(!i.isFinite()||i.isZero())return new a(i);if(e=a.precision,r=a.rounding,a.precision=e+Math.max(i.e,i.sd())+4,a.rounding=1,(n=i.d.length)<3)i=Z(a,2,i,i,!0);else{t=(t=1.4*Math.sqrt(n))>16?16:0|t,i=Z(a,2,i=i.times(Math.pow(5,-t)),i,!0);for(var o,s=new a(5),l=new a(16),u=new a(20);t--;)o=i.times(i),i=i.times(s.plus(o.times(l.times(o).plus(u))))}return a.precision=e,a.rounding=r,D(i,e,r,!0)},E.hyperbolicTangent=E.tanh=function(){var t,e,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+7,n.rounding=1,z(r.sinh(),r.cosh(),n.precision=t,n.rounding=e)):new n(r.s)},E.inverseCosine=E.acos=function(){var t,e=this,r=e.constructor,n=e.abs().cmp(1),i=r.precision,a=r.rounding;return-1!==n?0===n?e.isNeg()?R(r,i,a):new r(0):new r(NaN):e.isZero()?R(r,i+4,a).times(.5):(r.precision=i+6,r.rounding=1,e=e.asin(),t=R(r,i+4,a).times(.5),r.precision=i,r.rounding=a,t.minus(e))},E.inverseHyperbolicCosine=E.acosh=function(){var t,e,r=this,n=r.constructor;return r.lte(1)?new n(r.eq(1)?0:NaN):r.isFinite()?(t=n.precision,e=n.rounding,n.precision=t+Math.max(Math.abs(r.e),r.sd())+4,n.rounding=1,h=!1,r=r.times(r).minus(1).sqrt().plus(r),h=!0,n.precision=t,n.rounding=e,r.ln()):new n(r)},E.inverseHyperbolicSine=E.asinh=function(){var t,e,r=this,n=r.constructor;return!r.isFinite()||r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+2*Math.max(Math.abs(r.e),r.sd())+6,n.rounding=1,h=!1,r=r.times(r).plus(1).sqrt().plus(r),h=!0,n.precision=t,n.rounding=e,r.ln())},E.inverseHyperbolicTangent=E.atanh=function(){var t,e,r,n,i=this,a=i.constructor;return i.isFinite()?i.e>=0?new a(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(t=a.precision,e=a.rounding,n=i.sd(),Math.max(n,t)<2*-i.e-1?D(new a(i),t,e,!0):(a.precision=r=n-i.e,i=z(i.plus(1),new a(1).minus(i),r+t,1),a.precision=t+4,a.rounding=1,i=i.ln(),a.precision=t,a.rounding=e,i.times(.5))):new a(NaN)},E.inverseSine=E.asin=function(){var t,e,r,n,i=this,a=i.constructor;return i.isZero()?new a(i):(e=i.abs().cmp(1),r=a.precision,n=a.rounding,-1!==e?0===e?((t=R(a,r+4,n).times(.5)).s=i.s,t):new a(NaN):(a.precision=r+6,a.rounding=1,i=i.div(new a(1).minus(i.times(i)).sqrt().plus(1)).atan(),a.precision=r,a.rounding=n,i.times(2)))},E.inverseTangent=E.atan=function(){var t,e,r,n,i,a,o,s,l,u=this,c=u.constructor,f=c.precision,p=c.rounding;if(u.isFinite()){if(u.isZero())return new c(u);if(u.abs().eq(1)&&f+4<=T)return(o=R(c,f+4,p).times(.25)).s=u.s,o}else{if(!u.s)return new c(NaN);if(f+4<=T)return(o=R(c,f+4,p).times(.5)).s=u.s,o}for(c.precision=s=f+10,c.rounding=1,t=r=Math.min(28,s/M+2|0);t;--t)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(h=!1,e=Math.ceil(s/M),n=1,l=u.times(u),o=new c(u),i=u;-1!==t;)if(i=i.times(l),a=o.minus(i.div(n+=2)),i=i.times(l),void 0!==(o=a.plus(i.div(n+=2))).d[e])for(t=e;o.d[t]===a.d[t]&&t--;);return r&&(o=o.times(2<this.d.length-2},E.isNaN=function(){return!this.s},E.isNegative=E.isNeg=function(){return this.s<0},E.isPositive=E.isPos=function(){return this.s>0},E.isZero=function(){return!!this.d&&0===this.d[0]},E.lessThan=E.lt=function(t){return this.cmp(t)<0},E.lessThanOrEqualTo=E.lte=function(t){return this.cmp(t)<1},E.logarithm=E.log=function(t){var e,r,n,i,a,o,s,l,u=this.constructor,c=u.precision,f=u.rounding;if(null==t)t=new u(10),e=!0;else{if(r=(t=new u(t)).d,t.s<0||!r||!r[0]||t.eq(1))return new u(NaN);e=t.eq(10)}if(r=this.d,this.s<0||!r||!r[0]||this.eq(1))return new u(r&&!r[0]?-1/0:1!=this.s?NaN:r?0:1/0);if(e)if(r.length>1)a=!0;else{for(i=r[0];i%10==0;)i/=10;a=1!==i}if(h=!1,o=H(this,s=c+5),n=e?N(u,s+10):H(t,s),L((l=z(o,n,s,1)).d,i=c,f))do{if(o=H(this,s+=10),n=e?N(u,s+10):H(t,s),l=z(o,n,s,1),!a){+S(l.d).slice(i+1,i+15)+1==1e14&&(l=D(l,c+1,0));break}}while(L(l.d,i+=10,f));return h=!0,D(l,c,f)},E.minus=E.sub=function(t){var e,r,n,i,a,o,s,l,u,c,f,p,d=this,m=d.constructor;if(t=new m(t),!d.d||!t.d)return d.s&&t.s?d.d?t.s=-t.s:t=new m(t.d||d.s!==t.s?d:NaN):t=new m(NaN),t;if(d.s!=t.s)return t.s=-t.s,d.plus(t);if(u=d.d,p=t.d,s=m.precision,l=m.rounding,!u[0]||!p[0]){if(p[0])t.s=-t.s;else{if(!u[0])return new m(3===l?-0:0);t=new m(d)}return h?D(t,s,l):t}if(r=v(t.e/M),c=v(d.e/M),u=u.slice(),a=c-r){for((f=a<0)?(e=u,a=-a,o=p.length):(e=p,r=c,o=u.length),a>(n=Math.max(Math.ceil(s/M),o)+2)&&(a=n,e.length=1),e.reverse(),n=a;n--;)e.push(0);e.reverse()}else{for((f=(n=u.length)<(o=p.length))&&(o=n),n=0;n0;--n)u[o++]=0;for(n=p.length;n>a;){if(u[--n](o=(a=Math.ceil(s/M))>o?a+1:o+1)&&(i=o,r.length=1),r.reverse();i--;)r.push(0);r.reverse()}for((o=u.length)-(i=c.length)<0&&(i=o,r=c,c=u,u=r),e=0;i;)e=(u[--i]=u[i]+c[i]+e)/A|0,u[i]%=A;for(e&&(u.unshift(e),++n),o=u.length;0==u[--o];)u.pop();return t.d=u,t.e=I(u,n),h?D(t,s,l):t},E.precision=E.sd=function(t){var e,r=this;if(void 0!==t&&t!==!!t&&1!==t&&0!==t)throw Error(d+t);return r.d?(e=F(r.d),t&&r.e+1>e&&(e=r.e+1)):e=NaN,e},E.round=function(){var t=this,e=t.constructor;return D(new e(t),t.e+1,e.rounding)},E.sine=E.sin=function(){var t,e,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+Math.max(r.e,r.sd())+M,n.rounding=1,r=function(t,e){var r,n=e.d.length;if(n<3)return Z(t,2,e,e);r=(r=1.4*Math.sqrt(n))>16?16:0|r,e=e.times(Math.pow(5,-r)),e=Z(t,2,e,e);for(var i,a=new t(5),o=new t(16),s=new t(20);r--;)i=e.times(e),e=e.times(a.plus(i.times(o.times(i).minus(s))));return e}(n,X(n,r)),n.precision=t,n.rounding=e,D(a>2?r.neg():r,t,e,!0)):new n(NaN)},E.squareRoot=E.sqrt=function(){var t,e,r,n,i,a,o=this,s=o.d,l=o.e,u=o.s,c=o.constructor;if(1!==u||!s||!s[0])return new c(!u||u<0&&(!s||s[0])?NaN:s?o:1/0);for(h=!1,0==(u=Math.sqrt(+o))||u==1/0?(((e=S(s)).length+l)%2==0&&(e+="0"),u=Math.sqrt(e),l=v((l+1)/2)-(l<0||l%2),n=new c(e=u==1/0?"1e"+l:(e=u.toExponential()).slice(0,e.indexOf("e")+1)+l)):n=new c(u.toString()),r=(l=c.precision)+3;;)if(n=(a=n).plus(z(o,a,r+2,1)).times(.5),S(a.d).slice(0,r)===(e=S(n.d)).slice(0,r)){if("9999"!=(e=e.slice(r-3,r+1))&&(i||"4999"!=e)){+e&&(+e.slice(1)||"5"!=e.charAt(0))||(D(n,l+1,1),t=!n.times(n).eq(o));break}if(!i&&(D(a,l+1,0),a.times(a).eq(o))){n=a;break}r+=4,i=1}return h=!0,D(n,l,c.rounding,t)},E.tangent=E.tan=function(){var t,e,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(t=n.precision,e=n.rounding,n.precision=t+10,n.rounding=1,(r=r.sin()).s=1,r=z(r,new n(1).minus(r.times(r)).sqrt(),t+10,0),n.precision=t,n.rounding=e,D(2==a||4==a?r.neg():r,t,e,!0)):new n(NaN)},E.times=E.mul=function(t){var e,r,n,i,a,o,s,l,u,c=this,f=c.constructor,p=c.d,d=(t=new f(t)).d;if(t.s*=c.s,!(p&&p[0]&&d&&d[0]))return new f(!t.s||p&&!p[0]&&!d||d&&!d[0]&&!p?NaN:p&&d?0*t.s:t.s/0);for(r=v(c.e/M)+v(t.e/M),(l=p.length)<(u=d.length)&&(a=p,p=d,d=a,o=l,l=u,u=o),a=[],n=o=l+u;n--;)a.push(0);for(n=u;--n>=0;){for(e=0,i=l+n;i>n;)s=a[i]+d[n]*p[i-n-1]+e,a[i--]=s%A|0,e=s/A|0;a[i]=(a[i]+e)%A|0}for(;!a[--o];)a.pop();return e?++r:a.shift(),t.d=a,t.e=I(a,r),h?D(t,f.precision,f.rounding):t},E.toBinary=function(t,e){return $(this,2,t,e)},E.toDecimalPlaces=E.toDP=function(t,e){var r=this,n=r.constructor;return r=new n(r),void 0===t?r:(C(t,0,s),void 0===e?e=n.rounding:C(e,0,8),D(r,t+r.e+1,e))},E.toExponential=function(t,e){var r,n=this,i=n.constructor;return void 0===t?r=P(n,!0):(C(t,0,s),void 0===e?e=i.rounding:C(e,0,8),r=P(n=D(new i(n),t+1,e),!0,t+1)),n.isNeg()&&!n.isZero()?"-"+r:r},E.toFixed=function(t,e){var r,n,i=this,a=i.constructor;return void 0===t?r=P(i):(C(t,0,s),void 0===e?e=a.rounding:C(e,0,8),r=P(n=D(new a(i),t+i.e+1,e),!1,t+n.e+1)),i.isNeg()&&!i.isZero()?"-"+r:r},E.toFraction=function(t){var e,r,n,i,a,o,s,l,u,c,f,p,m=this,g=m.d,v=m.constructor;if(!g)return new v(m);if(u=r=new v(1),n=l=new v(0),o=(a=(e=new v(n)).e=F(g)-m.e-1)%M,e.d[0]=y(10,o<0?M+o:o),null==t)t=a>0?e:u;else{if(!(s=new v(t)).isInt()||s.lt(u))throw Error(d+s);t=s.gt(e)?a>0?e:u:s}for(h=!1,s=new v(S(g)),c=v.precision,v.precision=a=g.length*M*2;f=z(s,e,0,1,1),1!=(i=r.plus(f.times(n))).cmp(t);)r=n,n=i,i=u,u=l.plus(f.times(i)),l=i,i=e,e=s.minus(f.times(i)),s=i;return i=z(t.minus(r),n,0,1,1),l=l.plus(i.times(u)),r=r.plus(i.times(n)),l.s=u.s=m.s,p=z(u,n,a,1).minus(m).abs().cmp(z(l,r,a,1).minus(m).abs())<1?[u,n]:[l,r],v.precision=c,h=!0,p},E.toHexadecimal=E.toHex=function(t,e){return $(this,16,t,e)},E.toNearest=function(t,e){var r=this,n=r.constructor;if(r=new n(r),null==t){if(!r.d)return r;t=new n(1),e=n.rounding}else{if(t=new n(t),void 0!==e&&C(e,0,8),!r.d)return t.s?r:t;if(!t.d)return t.s&&(t.s=r.s),t}return t.d[0]?(h=!1,e<4&&(e=[4,5,7,8][e]),r=z(r,t,0,e,1).times(t),h=!0,D(r)):(t.s=r.s,r=t),r},E.toNumber=function(){return+this},E.toOctal=function(t,e){return $(this,8,t,e)},E.toPower=E.pow=function(t){var e,r,n,i,a,o,s=this,l=s.constructor,u=+(t=new l(t));if(!(s.d&&t.d&&s.d[0]&&t.d[0]))return new l(y(+s,u));if((s=new l(s)).eq(1))return s;if(n=l.precision,a=l.rounding,t.eq(1))return D(s,n,a);if((e=v(t.e/M))>=t.d.length-1&&(r=u<0?-u:u)<=9007199254740991)return i=j(l,s,r,n),t.s<0?new l(1).div(i):D(i,n,a);if((o=s.s)<0){if(el.maxE+1||e0?o/0:0):(h=!1,l.rounding=s.s=1,r=Math.min(12,(e+"").length),(i=q(t.times(H(s,n+r)),n)).d&&L((i=D(i,n+5,1)).d,n,a)&&(e=n+10,+S((i=D(q(t.times(H(s,e+r)),e),e+5,1)).d).slice(n+1,n+15)+1==1e14&&(i=D(i,n+1,0))),i.s=o,h=!0,l.rounding=a,D(i,n,a))},E.toPrecision=function(t,e){var r,n=this,i=n.constructor;return void 0===t?r=P(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(C(t,1,s),void 0===e?e=i.rounding:C(e,0,8),r=P(n=D(new i(n),t,e),t<=n.e||n.e<=i.toExpNeg,t)),n.isNeg()&&!n.isZero()?"-"+r:r},E.toSignificantDigits=E.toSD=function(t,e){var r=this.constructor;return void 0===t?(t=r.precision,e=r.rounding):(C(t,1,s),void 0===e?e=r.rounding:C(e,0,8)),D(new r(this),t,e)},E.toString=function(){var t=this,e=t.constructor,r=P(t,t.e<=e.toExpNeg||t.e>=e.toExpPos);return t.isNeg()&&!t.isZero()?"-"+r:r},E.truncated=E.trunc=function(){return D(new this.constructor(this),this.e+1,1)},E.valueOf=E.toJSON=function(){var t=this,e=t.constructor,r=P(t,t.e<=e.toExpNeg||t.e>=e.toExpPos);return t.isNeg()?"-"+r:r};var z=function(){function t(t,e,r){var n,i=0,a=t.length;for(t=t.slice();a--;)n=t[a]*e+i,t[a]=n%r|0,i=n/r|0;return i&&t.unshift(i),t}function e(t,e,r,n){var i,a;if(r!=n)a=r>n?1:-1;else for(i=a=0;ie[i]?1:-1;break}return a}function r(t,e,r,n){for(var i=0;r--;)t[r]-=i,i=t[r]1;)t.shift()}return function(i,a,o,s,l,u){var c,f,h,p,d,m,g,y,x,b,_,w,k,T,E,S,C,L,O,z,P=i.constructor,I=i.s==a.s?1:-1,N=i.d,R=a.d;if(!(N&&N[0]&&R&&R[0]))return new P(i.s&&a.s&&(N?!R||N[0]!=R[0]:R)?N&&0==N[0]||!R?0*I:I/0:NaN);for(u?(d=1,f=i.e-a.e):(u=A,d=M,f=v(i.e/d)-v(a.e/d)),O=R.length,C=N.length,b=(x=new P(I)).d=[],h=0;R[h]==(N[h]||0);h++);if(R[h]>(N[h]||0)&&f--,null==o?(T=o=P.precision,s=P.rounding):T=l?o+(i.e-a.e)+1:o,T<0)b.push(1),m=!0;else{if(T=T/d+2|0,h=0,1==O){for(p=0,R=R[0],T++;(h1&&(R=t(R,p,u),N=t(N,p,u),O=R.length,C=N.length),S=O,w=(_=N.slice(0,O)).length;w=u/2&&++L;do{p=0,(c=e(R,_,O,w))<0?(k=_[0],O!=w&&(k=k*u+(_[1]||0)),(p=k/L|0)>1?(p>=u&&(p=u-1),1==(c=e(g=t(R,p,u),_,y=g.length,w=_.length))&&(p--,r(g,O=10;p/=10)h++;x.e=h+f*d-1,D(x,l?o+x.e+1:o,s,m)}return x}}();function D(t,e,r,n){var i,a,o,s,l,u,c,f,p,d=t.constructor;t:if(null!=e){if(!(f=t.d))return t;for(i=1,s=f[0];s>=10;s/=10)i++;if((a=e-i)<0)a+=M,o=e,l=(c=f[p=0])/y(10,i-o-1)%10|0;else if((p=Math.ceil((a+1)/M))>=(s=f.length)){if(!n)break t;for(;s++<=p;)f.push(0);c=l=0,i=1,o=(a%=M)-M+1}else{for(c=s=f[p],i=1;s>=10;s/=10)i++;l=(o=(a%=M)-M+i)<0?0:c/y(10,i-o-1)%10|0}if(n=n||e<0||void 0!==f[p+1]||(o<0?c:c%y(10,i-o-1)),u=r<4?(l||n)&&(0==r||r==(t.s<0?3:2)):l>5||5==l&&(4==r||n||6==r&&(a>0?o>0?c/y(10,i-o):0:f[p-1])%10&1||r==(t.s<0?8:7)),e<1||!f[0])return f.length=0,u?(e-=t.e+1,f[0]=y(10,(M-e%M)%M),t.e=-e||0):f[0]=t.e=0,t;if(0==a?(f.length=p,s=1,p--):(f.length=p+1,s=y(10,M-a),f[p]=o>0?(c/y(10,i-o)%y(10,o)|0)*s:0),u)for(;;){if(0==p){for(a=1,o=f[0];o>=10;o/=10)a++;for(o=f[0]+=s,s=1;o>=10;o/=10)s++;a!=s&&(t.e++,f[0]==A&&(f[0]=1));break}if(f[p]+=s,f[p]!=A)break;f[p--]=0,s=1}for(a=f.length;0===f[--a];)f.pop()}return h&&(t.e>d.maxE?(t.d=null,t.e=NaN):t.e0?a=a.charAt(0)+"."+a.slice(1)+B(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(t.e<0?"e":"e+")+t.e):i<0?(a="0."+B(-i-1)+a,r&&(n=r-o)>0&&(a+=B(n))):i>=o?(a+=B(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+B(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=B(n))),a}function I(t,e){var r=t[0];for(e*=M;r>=10;r/=10)e++;return e}function N(t,e,r){if(e>k)throw h=!0,r&&(t.precision=r),Error(m);return D(new t(u),e,1,!0)}function R(t,e,r){if(e>T)throw Error(m);return D(new t(c),e,r,!0)}function F(t){var e=t.length-1,r=e*M+1;if(e=t[e]){for(;e%10==0;e/=10)r--;for(e=t[0];e>=10;e/=10)r++}return r}function B(t){for(var e="";t--;)e+="0";return e}function j(t,e,r,n){var i,a=new t(1),o=Math.ceil(n/M+4);for(h=!1;;){if(r%2&&J((a=a.times(e)).d,o)&&(i=!0),0===(r=v(r/2))){r=a.d.length-1,i&&0===a.d[r]&&++a.d[r];break}J((e=e.times(e)).d,o)}return h=!0,a}function V(t){return 1&t.d[t.d.length-1]}function U(t,e,r){for(var n,i=new t(e[0]),a=0;++a17)return new p(t.d?t.d[0]?t.s<0?0:1/0:1:t.s?t.s<0?0:t:NaN);for(null==e?(h=!1,l=m):l=e,s=new p(.03125);t.e>-2;)t=t.times(s),f+=5;for(l+=n=Math.log(y(2,f))/Math.LN10*2+5|0,r=a=o=new p(1),p.precision=l;;){if(a=D(a.times(t),l,1),r=r.times(++c),S((s=o.plus(z(a,r,l,1))).d).slice(0,l)===S(o.d).slice(0,l)){for(i=f;i--;)o=D(o.times(o),l,1);if(null!=e)return p.precision=m,o;if(!(u<3&&L(o.d,l-n,d,u)))return D(o,p.precision=m,d,h=!0);p.precision=l+=10,r=a=s=new p(1),c=0,u++}o=s}}function H(t,e){var r,n,i,a,o,s,l,u,c,f,p,d=1,m=t,g=m.d,v=m.constructor,y=v.rounding,x=v.precision;if(m.s<0||!g||!g[0]||!m.e&&1==g[0]&&1==g.length)return new v(g&&!g[0]?-1/0:1!=m.s?NaN:g?0:m);if(null==e?(h=!1,c=x):c=e,v.precision=c+=10,n=(r=S(g)).charAt(0),!(Math.abs(a=m.e)<15e14))return u=N(v,c+2,x).times(a+""),m=H(new v(n+"."+r.slice(1)),c-10).plus(u),v.precision=x,null==e?D(m,x,y,h=!0):m;for(;n<7&&1!=n||1==n&&r.charAt(1)>3;)n=(r=S((m=m.times(t)).d)).charAt(0),d++;for(a=m.e,n>1?(m=new v("0."+r),a++):m=new v(n+"."+r.slice(1)),f=m,l=o=m=z(m.minus(1),m.plus(1),c,1),p=D(m.times(m),c,1),i=3;;){if(o=D(o.times(p),c,1),S((u=l.plus(z(o,new v(i),c,1))).d).slice(0,c)===S(l.d).slice(0,c)){if(l=l.times(2),0!==a&&(l=l.plus(N(v,c+2,x).times(a+""))),l=z(l,new v(d),c,1),null!=e)return v.precision=x,l;if(!L(l.d,c-10,y,s))return D(l,v.precision=x,y,h=!0);v.precision=c+=10,u=o=m=z(f.minus(1),f.plus(1),c,1),p=D(m.times(m),c,1),i=s=1}l=u,i+=2}}function G(t){return String(t.s*t.s/0)}function W(t,e){var r,n,i;for((r=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(r<0&&(r=n),r+=+e.slice(n+1),e=e.substring(0,n)):r<0&&(r=e.length),n=0;48===e.charCodeAt(n);n++);for(i=e.length;48===e.charCodeAt(i-1);--i);if(e=e.slice(n,i)){if(i-=n,t.e=r=r-n-1,t.d=[],n=(r+1)%M,r<0&&(n+=M),nt.constructor.maxE?(t.d=null,t.e=NaN):t.e0?(u=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),s=(o=e.indexOf("."))>=0,i=t.constructor,s&&(o=(l=(e=e.replace(".","")).length)-o,a=j(i,new i(n),o,2*o)),o=f=(c=O(e,n,A)).length-1;0===c[o];--o)c.pop();return o<0?new i(0*t.s):(t.e=I(c,f),t.d=c,h=!1,s&&(t=z(t,a,4*l)),u&&(t=t.times(Math.abs(u)<54?Math.pow(2,u):r.pow(2,u))),h=!0,t)}function Z(t,e,r,n,i){var a,o,s,l,u=t.precision,c=Math.ceil(u/M);for(h=!1,l=r.times(r),s=new t(n);;){if(o=z(s.times(l),new t(e++*e++),u,1),s=i?n.plus(o):n.minus(o),n=z(o.times(l),new t(e++*e++),u,1),void 0!==(o=s.plus(n)).d[c]){for(a=c;o.d[a]===s.d[a]&&a--;);if(-1==a)break}a=s,s=n,n=o,o=a,0}return h=!0,o.d.length=c+1,o}function X(t,e){var r,n=e.s<0,i=R(t,t.precision,1),o=i.times(.5);if((e=e.abs()).lte(o))return a=n?4:1,e;if((r=e.divToInt(i)).isZero())a=n?3:2;else{if((e=e.minus(r.times(i))).lte(o))return a=V(r)?n?2:3:n?4:1,e;a=V(r)?n?1:4:n?3:2}return e.minus(i).abs()}function $(t,e,r,i){var a,o,u,c,f,h,p,d,m,g=t.constructor,v=void 0!==r;if(v?(C(r,1,s),void 0===i?i=g.rounding:C(i,0,8)):(r=g.precision,i=g.rounding),t.isFinite()){for(v?(a=2,16==e?r=4*r-3:8==e&&(r=3*r-2)):a=e,(u=(p=P(t)).indexOf("."))>=0&&(p=p.replace(".",""),(m=new g(1)).e=p.length-u,m.d=O(P(m),10,a),m.e=m.d.length),o=f=(d=O(p,10,a)).length;0==d[--f];)d.pop();if(d[0]){if(u<0?o--:((t=new g(t)).d=d,t.e=o,d=(t=z(t,m,r,i,0,a)).d,o=t.e,h=n),u=d[r],c=a/2,h=h||void 0!==d[r+1],h=i<4?(void 0!==u||h)&&(0===i||i===(t.s<0?3:2)):u>c||u===c&&(4===i||h||6===i&&1&d[r-1]||i===(t.s<0?8:7)),d.length=r,h)for(;++d[--r]>a-1;)d[r]=0,r||(++o,d.unshift(1));for(f=d.length;!d[f-1];--f);for(u=0,p="";u1)if(16==e||8==e){for(u=16==e?4:3,--f;f%u;f++)p+="0";for(f=(d=O(p,a,e)).length;!d[f-1];--f);for(u=1,p="1.";uf)for(o-=f;o--;)p+="0";else oe)return t.length=e,!0}function K(t){return new this(t).abs()}function Q(t){return new this(t).acos()}function tt(t){return new this(t).acosh()}function et(t,e){return new this(t).plus(e)}function rt(t){return new this(t).asin()}function nt(t){return new this(t).asinh()}function it(t){return new this(t).atan()}function at(t){return new this(t).atanh()}function ot(t,e){t=new this(t),e=new this(e);var r,n=this.precision,i=this.rounding,a=n+4;return t.s&&e.s?t.d||e.d?!e.d||t.isZero()?(r=e.s<0?R(this,n,i):new this(0)).s=t.s:!t.d||e.isZero()?(r=R(this,a,1).times(.5)).s=t.s:e.s<0?(this.precision=a,this.rounding=1,r=this.atan(z(t,e,a,1)),e=R(this,a,1),this.precision=n,this.rounding=i,r=t.s<0?r.minus(e):r.plus(e)):r=this.atan(z(t,e,a,1)):(r=R(this,a,1).times(e.s>0?.25:.75)).s=t.s:r=new this(NaN),r}function st(t){return new this(t).cbrt()}function lt(t){return D(t=new this(t),t.e+1,2)}function ut(t){if(!t||"object"!=typeof t)throw Error(p+"Object expected");var e,r,n,i=!0===t.defaults,a=["precision",1,s,"rounding",0,8,"toExpNeg",-o,0,"toExpPos",0,o,"maxE",0,o,"minE",-o,0,"modulo",0,9];for(e=0;e=a[e+1]&&n<=a[e+2]))throw Error(d+r+": "+n);this[r]=n}if(r="crypto",i&&(this[r]=f[r]),void 0!==(n=t[r])){if(!0!==n&&!1!==n&&0!==n&&1!==n)throw Error(d+r+": "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw Error(g);this[r]=!0}else this[r]=!1}return this}function ct(t){return new this(t).cos()}function ft(t){return new this(t).cosh()}function ht(t,e){return new this(t).div(e)}function pt(t){return new this(t).exp()}function dt(t){return D(t=new this(t),t.e+1,3)}function mt(){var t,e,r=new this(0);for(h=!1,t=0;t=429e7?e[a]=crypto.getRandomValues(new Uint32Array(1))[0]:l[a++]=i%1e7;else{if(!crypto.randomBytes)throw Error(g);for(e=crypto.randomBytes(n*=4);a=214e7?crypto.randomBytes(4).copy(e,a):(l.push(i%1e7),a+=4);a=n/4}else for(;a=10;i/=10)n++;n=10;r/=10)e++;return i.e=e,void(i.d=[t])}return 0*t!=0?(t||(i.s=NaN),i.e=NaN,void(i.d=null)):W(i,t.toString())}if("string"!==n)throw Error(d+t);return 45===t.charCodeAt(0)?(t=t.slice(1),i.s=-1):i.s=1,w.test(t)?W(i,t):Y(i,t)}if(a.prototype=E,a.ROUND_UP=0,a.ROUND_DOWN=1,a.ROUND_CEIL=2,a.ROUND_FLOOR=3,a.ROUND_HALF_UP=4,a.ROUND_HALF_DOWN=5,a.ROUND_HALF_EVEN=6,a.ROUND_HALF_CEIL=7,a.ROUND_HALF_FLOOR=8,a.EUCLID=9,a.config=a.set=ut,a.clone=t,a.isDecimal=gt,a.abs=K,a.acos=Q,a.acosh=tt,a.add=et,a.asin=rt,a.asinh=nt,a.atan=it,a.atanh=at,a.atan2=ot,a.cbrt=st,a.ceil=lt,a.cos=ct,a.cosh=ft,a.div=ht,a.exp=pt,a.floor=dt,a.hypot=mt,a.ln=vt,a.log=yt,a.log10=bt,a.log2=xt,a.max=_t,a.min=wt,a.mod=At,a.mul=Mt,a.pow=kt,a.random=Tt,a.round=Et,a.sign=St,a.sin=Ct,a.sinh=Lt,a.sqrt=Ot,a.sub=zt,a.tan=Dt,a.tanh=Pt,a.trunc=It,void 0===e&&(e={}),e&&!0!==e.defaults)for(i=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],r=0;r=2)return!1;t[r]=n}return!0}):_.filter(function(t){for(var e=0;e<=s;++e){var r=v[t[e]];if(r<0)return!1;t[e]=r}return!0});if(1&s)for(var c=0;c<_.length;++c){var b=_[c],h=b[0];b[0]=b[1],b[1]=h}return _}},{"incremental-convex-hull":416,uniq:1387}],112:[function(t,e,r){"use strict";e.exports=a;var n=(a.canvas=document.createElement("canvas")).getContext("2d"),i=o([32,126]);function a(t,e){Array.isArray(t)&&(t=t.join(", "));var r,a={},s=16,l=.05;e&&(2===e.length&&"number"==typeof e[0]?r=o(e):Array.isArray(e)?r=e:(e.o?r=o(e.o):e.pairs&&(r=e.pairs),e.fontSize&&(s=e.fontSize),null!=e.threshold&&(l=e.threshold))),r||(r=i),n.font=s+"px "+t;for(var u=0;us*l){var p=(h-f)/s;a[c]=1e3*p}}return a}function o(t){for(var e=[],r=t[0];r<=t[1];r++)for(var n=String.fromCharCode(r),i=t[0];i>>31},e.exports.exponent=function(t){return(e.exports.hi(t)<<1>>>21)-1023},e.exports.fraction=function(t){var r=e.exports.lo(t),n=e.exports.hi(t),i=1048575&n;return 2146435072&n&&(i+=1<<20),[r,i]},e.exports.denormalized=function(t){return!(2146435072&e.exports.hi(t))}}).call(this,t("buffer").Buffer)},{buffer:46}],114:[function(t,e,r){var n=t("abs-svg-path"),i=t("normalize-svg-path"),a={M:"moveTo",C:"bezierCurveTo"};e.exports=function(t,e){t.beginPath(),i(n(e)).forEach(function(e){var r=e[0],n=e.slice(1);t[a[r]].apply(t,n)}),t.closePath()}},{"abs-svg-path":4,"normalize-svg-path":115}],115:[function(t,e,r){var n=Math.PI,i=u(120);function a(t,e,r,n){return["C",t,e,r,n,r,n]}function o(t,e,r,n,i,a){return["C",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}function s(t,e,r,a,o,u,c,f,h,p){if(p)A=p[0],M=p[1],_=p[2],w=p[3];else{var d=l(t,e,-o);t=d.x,e=d.y;var m=(t-(f=(d=l(f,h,-o)).x))/2,g=(e-(h=d.y))/2,v=m*m/(r*r)+g*g/(a*a);v>1&&(r*=v=Math.sqrt(v),a*=v);var y=r*r,x=a*a,b=(u==c?-1:1)*Math.sqrt(Math.abs((y*x-y*g*g-x*m*m)/(y*g*g+x*m*m)));b==1/0&&(b=1);var _=b*r*g/a+(t+f)/2,w=b*-a*m/r+(e+h)/2,A=Math.asin(((e-w)/a).toFixed(9)),M=Math.asin(((h-w)/a).toFixed(9));(A=t<_?n-A:A)<0&&(A=2*n+A),(M=f<_?n-M:M)<0&&(M=2*n+M),c&&A>M&&(A-=2*n),!c&&M>A&&(M-=2*n)}if(Math.abs(M-A)>i){var k=M,T=f,E=h;M=A+i*(c&&M>A?1:-1);var S=s(f=_+r*Math.cos(M),h=w+a*Math.sin(M),r,a,o,0,c,T,E,[M,k,_,w])}var C=Math.tan((M-A)/4),L=4/3*r*C,O=4/3*a*C,z=[2*t-(t+L*Math.sin(A)),2*e-(e-O*Math.cos(A)),f+L*Math.sin(M),h-O*Math.cos(M),f,h];if(p)return z;S&&(z=z.concat(S));for(var D=0;D7&&(r.push(v.splice(0,7)),v.unshift("C"));break;case"S":var x=p,b=d;"C"!=e&&"S"!=e||(x+=x-n,b+=b-i),v=["C",x,b,v[1],v[2],v[3],v[4]];break;case"T":"Q"==e||"T"==e?(f=2*p-f,h=2*d-h):(f=p,h=d),v=o(p,d,f,h,v[1],v[2]);break;case"Q":f=v[1],h=v[2],v=o(p,d,v[1],v[2],v[3],v[4]);break;case"L":v=a(p,d,v[1],v[2]);break;case"H":v=a(p,d,v[1],d);break;case"V":v=a(p,d,p,v[1]);break;case"Z":v=a(p,d,l,c)}e=y,p=v[v.length-2],d=v[v.length-1],v.length>4?(n=v[v.length-4],i=v[v.length-3]):(n=p,i=d),r.push(v)}return r}},{}],116:[function(t,e,r){e.exports=function(t){switch(t){case"int8":return Int8Array;case"int16":return Int16Array;case"int32":return Int32Array;case"uint8":return Uint8Array;case"uint16":return Uint16Array;case"uint32":return Uint32Array;case"float32":return Float32Array;case"float64":return Float64Array;case"array":return Array;case"uint8_clamped":return Uint8ClampedArray}}},{}],117:[function(t,e,r){"use strict";e.exports=function(t,e){switch("undefined"==typeof e&&(e=0),typeof t){case"number":if(t>0)return function(t,e){var r,n;for(r=new Array(t),n=0;n80*r){n=l=t[0],s=u=t[1];for(var b=r;bl&&(l=c),p>u&&(u=p);m=0!==(m=Math.max(l-n,u-s))?1/m:0}return o(y,x,r,n,s,m),x}function i(t,e,r,n,i){var a,o;if(i===k(t,e,r,n)>0)for(a=e;a=e;a-=n)o=w(a,t[a],t[a+1],o);return o&&y(o,o.next)&&(A(o),o=o.next),o}function a(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!y(n,n.next)&&0!==v(n.prev,n,n.next))n=n.next;else{if(A(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function o(t,e,r,n,i,f,h){if(t){!h&&f&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=p(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,l,u=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,u*=2}while(o>1)}(i)}(t,n,i,f);for(var d,m,g=t;t.prev!==t.next;)if(d=t.prev,m=t.next,f?l(t,n,i,f):s(t))e.push(d.i/r),e.push(t.i/r),e.push(m.i/r),A(t),t=m.next,g=m.next;else if((t=m)===g){h?1===h?o(t=u(t,e,r),e,r,n,i,f,2):2===h&&c(t,e,r,n,i,f):o(a(t),e,r,n,i,f,1);break}}}function s(t){var e=t.prev,r=t,n=t.next;if(v(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(m(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&v(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function l(t,e,r,n){var i=t.prev,a=t,o=t.next;if(v(i,a,o)>=0)return!1;for(var s=i.xa.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,c=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,f=p(s,l,e,r,n),h=p(u,c,e,r,n),d=t.prevZ,g=t.nextZ;d&&d.z>=f&&g&&g.z<=h;){if(d!==t.prev&&d!==t.next&&m(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&v(d.prev,d,d.next)>=0)return!1;if(d=d.prevZ,g!==t.prev&&g!==t.next&&m(i.x,i.y,a.x,a.y,o.x,o.y,g.x,g.y)&&v(g.prev,g,g.next)>=0)return!1;g=g.nextZ}for(;d&&d.z>=f;){if(d!==t.prev&&d!==t.next&&m(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&v(d.prev,d,d.next)>=0)return!1;d=d.prevZ}for(;g&&g.z<=h;){if(g!==t.prev&&g!==t.next&&m(i.x,i.y,a.x,a.y,o.x,o.y,g.x,g.y)&&v(g.prev,g,g.next)>=0)return!1;g=g.nextZ}return!0}function u(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!y(i,a)&&x(i,n,n.next,a)&&b(i,a)&&b(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),A(n),A(n.next),n=t=a),n=n.next}while(n!==t);return n}function c(t,e,r,n,i,s){var l=t;do{for(var u=l.next.next;u!==l.prev;){if(l.i!==u.i&&g(l,u)){var c=_(l,u);return l=a(l,l.next),c=a(c,c.next),o(l,e,r,n,i,s),void o(c,e,r,n,i,s)}u=u.next}l=l.next}while(l!==t)}function f(t,e){return t.x-e.x}function h(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x=n.x&&n.x>=c&&i!==n.x&&m(ar.x)&&b(n,t)&&(r=n,h=l),n=n.next;return r}(t,e)){var r=_(e,t);a(r,r.next)}}function p(t,e,r,n,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function d(t){var e=t,r=t;do{e.x=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function g(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&x(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&b(t,e)&&b(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)}function v(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function y(t,e){return t.x===e.x&&t.y===e.y}function x(t,e,r,n){return!!(y(t,e)&&y(r,n)||y(t,n)&&y(r,e))||v(t,e,r)>0!=v(t,e,n)>0&&v(r,n,t)>0!=v(r,n,e)>0}function b(t,e){return v(t.prev,t,t.next)<0?v(t,e,t.next)>=0&&v(t,t.prev,e)>=0:v(t,e,t.prev)<0||v(t,t.next,e)<0}function _(t,e){var r=new M(t.i,t.x,t.y),n=new M(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function w(t,e,r,n){var i=new M(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function A(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function M(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function k(t,e,r,n){for(var i=0,a=e,o=r-n;a0&&(n+=t[i-1].length,r.holes.push(n))}return r}},{}],119:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t.length;if("number"!=typeof e){e=0;for(var i=0;i=e})}(e);for(var r,i=n(t).components.filter(function(t){return t.length>1}),a=1/0,o=0;o=55296&&y<=56319&&(w+=t[++r]),w=A?h.call(A,M,w,m):w,e?(p.value=w,d(g,m,p)):g[m]=w,++m;v=m}if(void 0===v)for(v=o(t.length),e&&(g=new e(v)),r=0;r0?1:-1}},{}],131:[function(t,e,r){"use strict";var n=t("../math/sign"),i=Math.abs,a=Math.floor;e.exports=function(t){return isNaN(t)?0:0!==(t=Number(t))&&isFinite(t)?n(t)*a(i(t)):t}},{"../math/sign":128}],132:[function(t,e,r){"use strict";var n=t("./to-integer"),i=Math.max;e.exports=function(t){return i(0,n(t))}},{"./to-integer":131}],133:[function(t,e,r){"use strict";var n=t("./valid-callable"),i=t("./valid-value"),a=Function.prototype.bind,o=Function.prototype.call,s=Object.keys,l=Object.prototype.propertyIsEnumerable;e.exports=function(t,e){return function(r,u){var c,f=arguments[2],h=arguments[3];return r=Object(i(r)),n(u),c=s(r),h&&c.sort("function"==typeof h?a.call(h,r):void 0),"function"!=typeof t&&(t=c[t]),o.call(t,c,function(t,n){return l.call(r,t)?o.call(u,f,r[t],t,r,n):e})}}},{"./valid-callable":151,"./valid-value":153}],134:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Object.assign:t("./shim")},{"./is-implemented":135,"./shim":136}],135:[function(t,e,r){"use strict";e.exports=function(){var t,e=Object.assign;return"function"==typeof e&&(e(t={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),t.foo+t.bar+t.trzy==="razdwatrzy")}},{}],136:[function(t,e,r){"use strict";var n=t("../keys"),i=t("../valid-value"),a=Math.max;e.exports=function(t,e){var r,o,s,l=a(arguments.length,2);for(t=Object(i(t)),s=function(n){try{t[n]=e[n]}catch(t){r||(r=t)}},o=1;o-1}},{}],157:[function(t,e,r){"use strict";var n=Object.prototype.toString,i=n.call("");e.exports=function(t){return"string"==typeof t||t&&"object"==typeof t&&(t instanceof String||n.call(t)===i)||!1}},{}],158:[function(t,e,r){"use strict";var n=Object.create(null),i=Math.random;e.exports=function(){var t;do{t=i().toString(36).slice(2)}while(n[t]);return t}},{}],159:[function(t,e,r){"use strict";var n,i=t("es5-ext/object/set-prototype-of"),a=t("es5-ext/string/#/contains"),o=t("d"),s=t("es6-symbol"),l=t("./"),u=Object.defineProperty;n=e.exports=function(t,e){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");l.call(this,t),e=e?a.call(e,"key+value")?"key+value":a.call(e,"key")?"key":"value":"value",u(this,"__kind__",o("",e))},i&&i(n,l),delete n.prototype.constructor,n.prototype=Object.create(l.prototype,{_resolve:o(function(t){return"value"===this.__kind__?this.__list__[t]:"key+value"===this.__kind__?[t,this.__list__[t]]:t})}),u(n.prototype,s.toStringTag,o("c","Array Iterator"))},{"./":162,d:94,"es5-ext/object/set-prototype-of":148,"es5-ext/string/#/contains":154,"es6-symbol":167}],160:[function(t,e,r){"use strict";var n=t("es5-ext/function/is-arguments"),i=t("es5-ext/object/valid-callable"),a=t("es5-ext/string/is-string"),o=t("./get"),s=Array.isArray,l=Function.prototype.call,u=Array.prototype.some;e.exports=function(t,e){var r,c,f,h,p,d,m,g,v=arguments[2];if(s(t)||n(t)?r="array":a(t)?r="string":t=o(t),i(e),f=function(){h=!0},"array"!==r)if("string"!==r)for(c=t.next();!c.done;){if(l.call(e,v,c.value,f),h)return;c=t.next()}else for(d=t.length,p=0;p=55296&&g<=56319&&(m+=t[++p]),l.call(e,v,m,f),!h);++p);else u.call(t,function(t){return l.call(e,v,t,f),h})}},{"./get":161,"es5-ext/function/is-arguments":125,"es5-ext/object/valid-callable":151,"es5-ext/string/is-string":157}],161:[function(t,e,r){"use strict";var n=t("es5-ext/function/is-arguments"),i=t("es5-ext/string/is-string"),a=t("./array"),o=t("./string"),s=t("./valid-iterable"),l=t("es6-symbol").iterator;e.exports=function(t){return"function"==typeof s(t)[l]?t[l]():n(t)?new a(t):i(t)?new o(t):new a(t)}},{"./array":159,"./string":164,"./valid-iterable":165,"es5-ext/function/is-arguments":125,"es5-ext/string/is-string":157,"es6-symbol":167}],162:[function(t,e,r){"use strict";var n,i=t("es5-ext/array/#/clear"),a=t("es5-ext/object/assign"),o=t("es5-ext/object/valid-callable"),s=t("es5-ext/object/valid-value"),l=t("d"),u=t("d/auto-bind"),c=t("es6-symbol"),f=Object.defineProperty,h=Object.defineProperties;e.exports=n=function(t,e){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");h(this,{__list__:l("w",s(t)),__context__:l("w",e),__nextIndex__:l("w",0)}),e&&(o(e.on),e.on("_add",this._onAdd),e.on("_delete",this._onDelete),e.on("_clear",this._onClear))},delete n.prototype.constructor,h(n.prototype,a({_next:l(function(){var t;if(this.__list__)return this.__redo__&&void 0!==(t=this.__redo__.shift())?t:this.__nextIndex__=this.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach(function(e,r){e>=t&&(this.__redo__[r]=++e)},this),this.__redo__.push(t)):f(this,"__redo__",l("c",[t])))}),_onDelete:l(function(t){var e;t>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(-1!==(e=this.__redo__.indexOf(t))&&this.__redo__.splice(e,1),this.__redo__.forEach(function(e,r){e>t&&(this.__redo__[r]=--e)},this)))}),_onClear:l(function(){this.__redo__&&i.call(this.__redo__),this.__nextIndex__=0})}))),f(n.prototype,c.iterator,l(function(){return this}))},{d:94,"d/auto-bind":93,"es5-ext/array/#/clear":121,"es5-ext/object/assign":134,"es5-ext/object/valid-callable":151,"es5-ext/object/valid-value":153,"es6-symbol":167}],163:[function(t,e,r){"use strict";var n=t("es5-ext/function/is-arguments"),i=t("es5-ext/object/is-value"),a=t("es5-ext/string/is-string"),o=t("es6-symbol").iterator,s=Array.isArray;e.exports=function(t){return!!i(t)&&(!!s(t)||(!!a(t)||(!!n(t)||"function"==typeof t[o])))}},{"es5-ext/function/is-arguments":125,"es5-ext/object/is-value":142,"es5-ext/string/is-string":157,"es6-symbol":167}],164:[function(t,e,r){"use strict";var n,i=t("es5-ext/object/set-prototype-of"),a=t("d"),o=t("es6-symbol"),s=t("./"),l=Object.defineProperty;n=e.exports=function(t){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");t=String(t),s.call(this,t),l(this,"__length__",a("",t.length))},i&&i(n,s),delete n.prototype.constructor,n.prototype=Object.create(s.prototype,{_next:a(function(){if(this.__list__)return this.__nextIndex__=55296&&e<=56319?r+this.__list__[this.__nextIndex__++]:r})}),l(n.prototype,o.toStringTag,a("c","String Iterator"))},{"./":162,d:94,"es5-ext/object/set-prototype-of":148,"es6-symbol":167}],165:[function(t,e,r){"use strict";var n=t("./is-iterable");e.exports=function(t){if(!n(t))throw new TypeError(t+" is not iterable");return t}},{"./is-iterable":163}],166:[function(t,e,r){(function(n,i){!function(t,n){"object"==typeof r&&"undefined"!=typeof e?e.exports=n():t.ES6Promise=n()}(this,function(){"use strict";function e(t){return"function"==typeof t}var r=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},a=0,o=void 0,s=void 0,l=function(t,e){m[a]=t,m[a+1]=e,2===(a+=2)&&(s?s(g):_())};var u="undefined"!=typeof window?window:void 0,c=u||{},f=c.MutationObserver||c.WebKitMutationObserver,h="undefined"==typeof self&&"undefined"!=typeof n&&"[object process]"==={}.toString.call(n),p="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){var t=setTimeout;return function(){return t(g,1)}}var m=new Array(1e3);function g(){for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:{},r=e.preserveFormatting,o=void 0!==r&&r,s=e.escapeMapFn,l=void 0===s?a:s,u=String(t),c="",f=l(Object.assign({},n),o?Object.assign({},i):{}),h=Object.keys(f),p=function(){var t=!1;h.forEach(function(e,r){t||u.startsWith(e)&&(c+=f[h[r]],u=u.slice(e.length,u.length),t=!0)}),t||(c+=u.slice(0,1),u=u.slice(1,u.length))};u;)p();return c}},{}],177:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n=e||0,i=r||1;return[[t[12]+t[0],t[13]+t[1],t[14]+t[2],t[15]+t[3]],[t[12]-t[0],t[13]-t[1],t[14]-t[2],t[15]-t[3]],[t[12]+t[4],t[13]+t[5],t[14]+t[6],t[15]+t[7]],[t[12]-t[4],t[13]-t[5],t[14]-t[6],t[15]-t[7]],[n*t[12]+t[8],n*t[13]+t[9],n*t[14]+t[10],n*t[15]+t[11]],[i*t[12]-t[8],i*t[13]-t[9],i*t[14]-t[10],i*t[15]-t[11]]]}},{}],178:[function(t,e,r){"use strict";e.exports=function(t){var e=typeof t;if("string"===e){var r=t;if(0===(t=+t)&&function(t){for(var e,r=t.length,n=0;n13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}(r))return!1}else if("number"!==e)return!1;return t-t<1}},{}],179:[function(t,e,r){"use strict";e.exports=function(t,e,r){switch(arguments.length){case 0:return new o([0],[0],0);case 1:if("number"==typeof t){var n=l(t);return new o(n,n,0)}return new o(t,l(t.length),0);case 2:if("number"==typeof e){var n=l(t.length);return new o(t,n,+e)}r=0;case 3:if(t.length!==e.length)throw new Error("state and velocity lengths must match");return new o(t,e,r)}};var n=t("cubic-hermite"),i=t("binary-search-bounds");function a(t,e,r){return Math.min(e,Math.max(t,r))}function o(t,e,r){this.dimension=t.length,this.bounds=[new Array(this.dimension),new Array(this.dimension)];for(var n=0;n=r-1){h=l.length-1;var d=t-e[r-1];for(p=0;p=r-1)for(var c=s.length-1,f=(e[r-1],0);f=0;--r)if(t[--e])return!1;return!0},s.jump=function(t){var e=this.lastT(),r=this.dimension;if(!(t0;--f)n.push(a(l[f-1],u[f-1],arguments[f])),i.push(0)}},s.push=function(t){var e=this.lastT(),r=this.dimension;if(!(t1e-6?1/s:0;this._time.push(t);for(var h=r;h>0;--h){var p=a(u[h-1],c[h-1],arguments[h]);n.push(p),i.push((p-n[o++])*f)}}},s.set=function(t){var e=this.dimension;if(!(t0;--l)r.push(a(o[l-1],s[l-1],arguments[l])),n.push(0)}},s.move=function(t){var e=this.lastT(),r=this.dimension;if(!(t<=e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],u=s[1],c=t-e,f=c>1e-6?1/c:0;this._time.push(t);for(var h=r;h>0;--h){var p=arguments[h];n.push(a(l[h-1],u[h-1],n[o++]+p)),i.push(p*f)}}},s.idle=function(t){var e=this.lastT();if(!(t=0;--f)n.push(a(l[f],u[f],n[o]+c*i[o])),i.push(0),o+=1}}},{"binary-search-bounds":180,"cubic-hermite":88}],180:[function(t,e,r){"use strict";function n(t,e,r,n,i,a){var o=["function ",t,"(a,l,h,",n.join(","),"){",a?"":"var i=",r?"l-1":"h+1",";while(l<=h){var m=(l+h)>>>1,x=a",i?".get(m)":"[m]"];return a?e.indexOf("c")<0?o.push(";if(x===y){return m}else if(x<=y){"):o.push(";var p=c(x,y);if(p===0){return m}else if(p<=0){"):o.push(";if(",e,"){i=m;"),r?o.push("l=m+1}else{h=m-1}"):o.push("h=m-1}else{l=m+1}"),o.push("}"),a?o.push("return -1};"):o.push("return i};"),o.join("")}function i(t,e,r,i){return new Function([n("A","x"+t+"y",e,["y"],!1,i),n("B","x"+t+"y",e,["y"],!0,i),n("P","c(x,y)"+t+"0",e,["y","c"],!1,i),n("Q","c(x,y)"+t+"0",e,["y","c"],!0,i),"function dispatchBsearch",r,"(a,y,c,l,h){if(a.shape){if(typeof(c)==='function'){return Q(a,(l===undefined)?0:l|0,(h===undefined)?a.shape[0]-1:h|0,y,c)}else{return B(a,(c===undefined)?0:c|0,(l===undefined)?a.shape[0]-1:l|0,y)}}else{if(typeof(c)==='function'){return P(a,(l===undefined)?0:l|0,(h===undefined)?a.length-1:h|0,y,c)}else{return A(a,(c===undefined)?0:c|0,(l===undefined)?a.length-1:l|0,y)}}}return dispatchBsearch",r].join(""))()}e.exports={ge:i(">=",!1,"GE"),gt:i(">",!1,"GT"),lt:i("<",!0,"LT"),le:i("<=",!0,"LE"),eq:i("-",!0,"EQ",!0)}},{}],181:[function(t,e,r){var n=t("dtype");e.exports=function(t,e,r){if(!t)throw new TypeError("must specify data as first parameter");if(r=0|+(r||0),Array.isArray(t)&&Array.isArray(t[0])){var i=t[0].length,a=t.length*i;e&&"string"!=typeof e||(e=new(n(e||"float32"))(a+r));var o=e.length-r;if(a!==o)throw new Error("source length "+a+" ("+i+"x"+t.length+") does not match destination length "+o);for(var s=0,l=r;se[0]-o[0]/2&&(h=o[0]/2,p+=o[1]);return r}},{"css-font/stringify":85}],183:[function(t,e,r){"use strict";function n(t,e){e||(e={}),("string"==typeof t||Array.isArray(t))&&(e.family=t);var r=Array.isArray(e.family)?e.family.join(", "):e.family;if(!r)throw Error("`family` must be defined");var s=e.size||e.fontSize||e.em||48,l=e.weight||e.fontWeight||"",u=(t=[e.style||e.fontStyle||"",l,s].join(" ")+"px "+r,e.origin||"top");if(n.cache[r]&&s<=n.cache[r].em)return i(n.cache[r],u);var c=e.canvas||n.canvas,f=c.getContext("2d"),h={upper:void 0!==e.upper?e.upper:"H",lower:void 0!==e.lower?e.lower:"x",descent:void 0!==e.descent?e.descent:"p",ascent:void 0!==e.ascent?e.ascent:"h",tittle:void 0!==e.tittle?e.tittle:"i",overshoot:void 0!==e.overshoot?e.overshoot:"O"},p=Math.ceil(1.5*s);c.height=p,c.width=.5*p,f.font=t;var d={top:0};f.clearRect(0,0,p,p),f.textBaseline="top",f.fillStyle="black",f.fillText("H",0,0);var m=a(f.getImageData(0,0,p,p));f.clearRect(0,0,p,p),f.textBaseline="bottom",f.fillText("H",0,p);var g=a(f.getImageData(0,0,p,p));d.lineHeight=d.bottom=p-g+m,f.clearRect(0,0,p,p),f.textBaseline="alphabetic",f.fillText("H",0,p);var v=p-a(f.getImageData(0,0,p,p))-1+m;d.baseline=d.alphabetic=v,f.clearRect(0,0,p,p),f.textBaseline="middle",f.fillText("H",0,.5*p);var y=a(f.getImageData(0,0,p,p));d.median=d.middle=p-y-1+m-.5*p,f.clearRect(0,0,p,p),f.textBaseline="hanging",f.fillText("H",0,.5*p);var x=a(f.getImageData(0,0,p,p));d.hanging=p-x-1+m-.5*p,f.clearRect(0,0,p,p),f.textBaseline="ideographic",f.fillText("H",0,p);var b=a(f.getImageData(0,0,p,p));if(d.ideographic=p-b-1+m,h.upper&&(f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.upper,0,0),d.upper=a(f.getImageData(0,0,p,p)),d.capHeight=d.baseline-d.upper),h.lower&&(f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.lower,0,0),d.lower=a(f.getImageData(0,0,p,p)),d.xHeight=d.baseline-d.lower),h.tittle&&(f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.tittle,0,0),d.tittle=a(f.getImageData(0,0,p,p))),h.ascent&&(f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.ascent,0,0),d.ascent=a(f.getImageData(0,0,p,p))),h.descent&&(f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.descent,0,0),d.descent=o(f.getImageData(0,0,p,p))),h.overshoot){f.clearRect(0,0,p,p),f.textBaseline="top",f.fillText(h.overshoot,0,0);var _=o(f.getImageData(0,0,p,p));d.overshoot=_-v}for(var w in d)d[w]/=s;return d.em=s,n.cache[r]=d,i(d,u)}function i(t,e){var r={};for(var n in"string"==typeof e&&(e=t[e]),t)"em"!==n&&(r[n]=t[n]-e);return r}function a(t){for(var e=t.height,r=t.data,n=3;n0;n-=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}e.exports=n,n.canvas=document.createElement("canvas"),n.cache={}},{}],184:[function(t,e,r){"use strict";e.exports=function(t){return new u(t||d,null)};var n=0,i=1;function a(t,e,r,n,i,a){this._color=t,this.key=e,this.value=r,this.left=n,this.right=i,this._count=a}function o(t){return new a(t._color,t.key,t.value,t.left,t.right,t._count)}function s(t,e){return new a(t,e.key,e.value,e.left,e.right,e._count)}function l(t){t._count=1+(t.left?t.left._count:0)+(t.right?t.right._count:0)}function u(t,e){this._compare=t,this.root=e}var c=u.prototype;function f(t,e){this.tree=t,this._stack=e}Object.defineProperty(c,"keys",{get:function(){var t=[];return this.forEach(function(e,r){t.push(e)}),t}}),Object.defineProperty(c,"values",{get:function(){var t=[];return this.forEach(function(e,r){t.push(r)}),t}}),Object.defineProperty(c,"length",{get:function(){return this.root?this.root._count:0}}),c.insert=function(t,e){for(var r=this._compare,o=this.root,c=[],f=[];o;){var h=r(t,o.key);c.push(o),f.push(h),o=h<=0?o.left:o.right}c.push(new a(n,t,e,null,null,1));for(var p=c.length-2;p>=0;--p){o=c[p];f[p]<=0?c[p]=new a(o._color,o.key,o.value,c[p+1],o.right,o._count+1):c[p]=new a(o._color,o.key,o.value,o.left,c[p+1],o._count+1)}for(p=c.length-1;p>1;--p){var d=c[p-1];o=c[p];if(d._color===i||o._color===i)break;var m=c[p-2];if(m.left===d)if(d.left===o){if(!(g=m.right)||g._color!==n){if(m._color=n,m.left=d.right,d._color=i,d.right=m,c[p-2]=d,c[p-1]=o,l(m),l(d),p>=3)(v=c[p-3]).left===m?v.left=d:v.right=d;break}d._color=i,m.right=s(i,g),m._color=n,p-=1}else{if(!(g=m.right)||g._color!==n){if(d.right=o.left,m._color=n,m.left=o.right,o._color=i,o.left=d,o.right=m,c[p-2]=o,c[p-1]=d,l(m),l(d),l(o),p>=3)(v=c[p-3]).left===m?v.left=o:v.right=o;break}d._color=i,m.right=s(i,g),m._color=n,p-=1}else if(d.right===o){if(!(g=m.left)||g._color!==n){if(m._color=n,m.right=d.left,d._color=i,d.left=m,c[p-2]=d,c[p-1]=o,l(m),l(d),p>=3)(v=c[p-3]).right===m?v.right=d:v.left=d;break}d._color=i,m.left=s(i,g),m._color=n,p-=1}else{var g;if(!(g=m.left)||g._color!==n){var v;if(d.left=o.right,m._color=n,m.right=o.left,o._color=i,o.right=d,o.left=m,c[p-2]=o,c[p-1]=d,l(m),l(d),l(o),p>=3)(v=c[p-3]).right===m?v.right=o:v.left=o;break}d._color=i,m.left=s(i,g),m._color=n,p-=1}}return c[0]._color=i,new u(r,c[0])},c.forEach=function(t,e,r){if(this.root)switch(arguments.length){case 1:return function t(e,r){var n;if(r.left&&(n=t(e,r.left)))return n;return(n=e(r.key,r.value))||(r.right?t(e,r.right):void 0)}(t,this.root);case 2:return function t(e,r,n,i){if(r(e,i.key)<=0){var a;if(i.left&&(a=t(e,r,n,i.left)))return a;if(a=n(i.key,i.value))return a}if(i.right)return t(e,r,n,i.right)}(e,this._compare,t,this.root);case 3:if(this._compare(e,r)>=0)return;return function t(e,r,n,i,a){var o,s=n(e,a.key),l=n(r,a.key);if(s<=0){if(a.left&&(o=t(e,r,n,i,a.left)))return o;if(l>0&&(o=i(a.key,a.value)))return o}if(l>0&&a.right)return t(e,r,n,i,a.right)}(e,r,this._compare,t,this.root)}},Object.defineProperty(c,"begin",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.left;return new f(this,t)}}),Object.defineProperty(c,"end",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.right;return new f(this,t)}}),c.at=function(t){if(t<0)return new f(this,[]);for(var e=this.root,r=[];;){if(r.push(e),e.left){if(t=e.right._count)break;e=e.right}return new f(this,[])},c.ge=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<=0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new f(this,n)},c.gt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new f(this,n)},c.lt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new f(this,n)},c.le=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>=0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new f(this,n)},c.find=function(t){for(var e=this._compare,r=this.root,n=[];r;){var i=e(t,r.key);if(n.push(r),0===i)return new f(this,n);r=i<=0?r.left:r.right}return new f(this,[])},c.remove=function(t){var e=this.find(t);return e?e.remove():this},c.get=function(t){for(var e=this._compare,r=this.root;r;){var n=e(t,r.key);if(0===n)return r.value;r=n<=0?r.left:r.right}};var h=f.prototype;function p(t,e){t.key=e.key,t.value=e.value,t.left=e.left,t.right=e.right,t._color=e._color,t._count=e._count}function d(t,e){return te?1:0}Object.defineProperty(h,"valid",{get:function(){return this._stack.length>0}}),Object.defineProperty(h,"node",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),h.clone=function(){return new f(this.tree,this._stack.slice())},h.remove=function(){var t=this._stack;if(0===t.length)return this.tree;var e=new Array(t.length),r=t[t.length-1];e[e.length-1]=new a(r._color,r.key,r.value,r.left,r.right,r._count);for(var c=t.length-2;c>=0;--c){(r=t[c]).left===t[c+1]?e[c]=new a(r._color,r.key,r.value,e[c+1],r.right,r._count):e[c]=new a(r._color,r.key,r.value,r.left,e[c+1],r._count)}if((r=e[e.length-1]).left&&r.right){var f=e.length;for(r=r.left;r.right;)e.push(r),r=r.right;var h=e[f-1];e.push(new a(r._color,h.key,h.value,r.left,r.right,r._count)),e[f-1].key=r.key,e[f-1].value=r.value;for(c=e.length-2;c>=f;--c)r=e[c],e[c]=new a(r._color,r.key,r.value,r.left,e[c+1],r._count);e[f-1].left=e[f]}if((r=e[e.length-1])._color===n){var d=e[e.length-2];d.left===r?d.left=null:d.right===r&&(d.right=null),e.pop();for(c=0;c=0;--c){if(e=t[c],0===c)return void(e._color=i);if((r=t[c-1]).left===e){if((a=r.right).right&&a.right._color===n)return u=(a=r.right=o(a)).right=o(a.right),r.right=a.left,a.left=r,a.right=u,a._color=r._color,e._color=i,r._color=i,u._color=i,l(r),l(a),c>1&&((f=t[c-2]).left===r?f.left=a:f.right=a),void(t[c-1]=a);if(a.left&&a.left._color===n)return u=(a=r.right=o(a)).left=o(a.left),r.right=u.left,a.left=u.right,u.left=r,u.right=a,u._color=r._color,r._color=i,a._color=i,e._color=i,l(r),l(a),l(u),c>1&&((f=t[c-2]).left===r?f.left=u:f.right=u),void(t[c-1]=u);if(a._color===i){if(r._color===n)return r._color=i,void(r.right=s(n,a));r.right=s(n,a);continue}a=o(a),r.right=a.left,a.left=r,a._color=r._color,r._color=n,l(r),l(a),c>1&&((f=t[c-2]).left===r?f.left=a:f.right=a),t[c-1]=a,t[c]=r,c+11&&((f=t[c-2]).right===r?f.right=a:f.left=a),void(t[c-1]=a);if(a.right&&a.right._color===n)return u=(a=r.left=o(a)).right=o(a.right),r.left=u.right,a.right=u.left,u.right=r,u.left=a,u._color=r._color,r._color=i,a._color=i,e._color=i,l(r),l(a),l(u),c>1&&((f=t[c-2]).right===r?f.right=u:f.left=u),void(t[c-1]=u);if(a._color===i){if(r._color===n)return r._color=i,void(r.left=s(n,a));r.left=s(n,a);continue}var f;a=o(a),r.left=a.right,a.right=r,a._color=r._color,r._color=n,l(r),l(a),c>1&&((f=t[c-2]).right===r?f.right=a:f.left=a),t[c-1]=a,t[c]=r,c+10)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(h,"value",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(h,"index",{get:function(){var t=0,e=this._stack;if(0===e.length){var r=this.tree.root;return r?r._count:0}e[e.length-1].left&&(t=e[e.length-1].left._count);for(var n=e.length-2;n>=0;--n)e[n+1]===e[n].right&&(++t,e[n].left&&(t+=e[n].left._count));return t},enumerable:!0}),h.next=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.right)for(e=e.right;e;)t.push(e),e=e.left;else for(t.pop();t.length>0&&t[t.length-1].right===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(h,"hasNext",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].right)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].left===t[e])return!0;return!1}}),h.update=function(t){var e=this._stack;if(0===e.length)throw new Error("Can't update empty node!");var r=new Array(e.length),n=e[e.length-1];r[r.length-1]=new a(n._color,n.key,t,n.left,n.right,n._count);for(var i=e.length-2;i>=0;--i)(n=e[i]).left===e[i+1]?r[i]=new a(n._color,n.key,n.value,r[i+1],n.right,n._count):r[i]=new a(n._color,n.key,n.value,n.left,r[i+1],n._count);return new u(this.tree._compare,r[0])},h.prev=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.left)for(e=e.left;e;)t.push(e),e=e.right;else for(t.pop();t.length>0&&t[t.length-1].left===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(h,"hasPrev",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].left)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].right===t[e])return!0;return!1}})},{}],185:[function(t,e,r){var n=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7],i=607/128,a=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];function o(t){if(t<0)return Number("0/0");for(var e=a[0],r=a.length-1;r>0;--r)e+=a[r]/(t+r);var n=t+i+.5;return.5*Math.log(2*Math.PI)+(t+.5)*Math.log(n)-n+Math.log(e)-Math.log(t)}e.exports=function t(e){if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*t(1-e));if(e>100)return Math.exp(o(e));e-=1;for(var r=n[0],i=1;i<9;i++)r+=n[i]/(e+i);var a=e+7+.5;return Math.sqrt(2*Math.PI)*Math.pow(a,e+.5)*Math.exp(-a)*r},e.exports.log=o},{}],186:[function(t,e,r){e.exports=function(t,e){if("string"!=typeof t)throw new TypeError("must specify type string");if(e=e||{},"undefined"==typeof document&&!e.canvas)return null;var r=e.canvas||document.createElement("canvas");"number"==typeof e.width&&(r.width=e.width);"number"==typeof e.height&&(r.height=e.height);var n,i=e;try{var a=[t];0===t.indexOf("webgl")&&a.push("experimental-"+t);for(var o=0;o0?(p[c]=-1,d[c]=0):(p[c]=0,d[c]=1)}}var m=[0,0,0],g={model:l,view:l,projection:l,_ortho:!1};f.isOpaque=function(){return!0},f.isTransparent=function(){return!1},f.drawTransparent=function(t){};var v=[0,0,0],y=[0,0,0],x=[0,0,0];f.draw=function(t){t=t||g;for(var e=this.gl,r=t.model||l,n=t.view||l,i=t.projection||l,a=this.bounds,s=t._ortho||!1,c=o(r,n,i,a,s),f=c.cubeEdges,h=c.axis,b=n[12],_=n[13],w=n[14],A=n[15],M=(s?2:1)*this.pixelRatio*(i[3]*b+i[7]*_+i[11]*w+i[15]*A)/e.drawingBufferHeight,k=0;k<3;++k)this.lastCubeProps.cubeEdges[k]=f[k],this.lastCubeProps.axis[k]=h[k];var T=p;for(k=0;k<3;++k)d(p[k],k,this.bounds,f,h);e=this.gl;var E,S=m;for(k=0;k<3;++k)this.backgroundEnable[k]?S[k]=h[k]:S[k]=0;this._background.draw(r,n,i,a,S,this.backgroundColor),this._lines.bind(r,n,i,this);for(k=0;k<3;++k){var C=[0,0,0];h[k]>0?C[k]=a[1][k]:C[k]=a[0][k];for(var L=0;L<2;++L){var O=(k+1+L)%3,z=(k+1+(1^L))%3;this.gridEnable[O]&&this._lines.drawGrid(O,z,this.bounds,C,this.gridColor[O],this.gridWidth[O]*this.pixelRatio)}for(L=0;L<2;++L){O=(k+1+L)%3,z=(k+1+(1^L))%3;this.zeroEnable[z]&&Math.min(a[0][z],a[1][z])<=0&&Math.max(a[0][z],a[1][z])>=0&&this._lines.drawZero(O,z,this.bounds,C,this.zeroLineColor[z],this.zeroLineWidth[z]*this.pixelRatio)}}for(k=0;k<3;++k){this.lineEnable[k]&&this._lines.drawAxisLine(k,this.bounds,T[k].primalOffset,this.lineColor[k],this.lineWidth[k]*this.pixelRatio),this.lineMirror[k]&&this._lines.drawAxisLine(k,this.bounds,T[k].mirrorOffset,this.lineColor[k],this.lineWidth[k]*this.pixelRatio);var D=u(v,T[k].primalMinor),P=u(y,T[k].mirrorMinor),I=this.lineTickLength;for(L=0;L<3;++L){var N=M/r[5*L];D[L]*=I[L]*N,P[L]*=I[L]*N}this.lineTickEnable[k]&&this._lines.drawAxisTicks(k,T[k].primalOffset,D,this.lineTickColor[k],this.lineTickWidth[k]*this.pixelRatio),this.lineTickMirror[k]&&this._lines.drawAxisTicks(k,T[k].mirrorOffset,P,this.lineTickColor[k],this.lineTickWidth[k]*this.pixelRatio)}this._lines.unbind(),this._text.bind(r,n,i,this.pixelRatio);var R,F;function B(t){(F=[0,0,0])[t]=1}function j(t,e,r){var n=(t+1)%3,i=(t+2)%3,a=e[n],o=e[i],s=r[n],l=r[i];a>0&&l>0?B(n):a>0&&l<0?B(n):a<0&&l>0?B(n):a<0&&l<0?B(n):o>0&&s>0?B(i):o>0&&s<0?B(i):o<0&&s>0?B(i):o<0&&s<0&&B(i)}for(k=0;k<3;++k){var V=T[k].primalMinor,U=T[k].mirrorMinor,q=u(x,T[k].primalOffset);for(L=0;L<3;++L)this.lineTickEnable[k]&&(q[L]+=M*V[L]*Math.max(this.lineTickLength[L],0)/r[5*L]);var H=[0,0,0];if(H[k]=1,this.tickEnable[k]){-3600===this.tickAngle[k]?(this.tickAngle[k]=0,this.tickAlign[k]="auto"):this.tickAlign[k]=-1,R=1,"auto"===(E=[this.tickAlign[k],.5,R])[0]?E[0]=0:E[0]=parseInt(""+E[0]),F=[0,0,0],j(k,V,U);for(L=0;L<3;++L)q[L]+=M*V[L]*this.tickPad[L]/r[5*L];this._text.drawTicks(k,this.tickSize[k],this.tickAngle[k],q,this.tickColor[k],H,F,E)}if(this.labelEnable[k]){R=0,F=[0,0,0],this.labels[k].length>4&&(B(k),R=1),"auto"===(E=[this.labelAlign[k],.5,R])[0]?E[0]=0:E[0]=parseInt(""+E[0]);for(L=0;L<3;++L)q[L]+=M*V[L]*this.labelPad[L]/r[5*L];q[k]+=.5*(a[0][k]+a[1][k]),this._text.drawLabel(k,this.labelSize[k],this.labelAngle[k],q,this.labelColor[k],[0,0,0],F,E)}}this._text.unbind()},f.dispose=function(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines=null,this._text=null,this._background=null,this.gl=null}},{"./lib/background.js":188,"./lib/cube.js":189,"./lib/lines.js":190,"./lib/text.js":192,"./lib/ticks.js":193}],188:[function(t,e,r){"use strict";e.exports=function(t){for(var e=[],r=[],s=0,l=0;l<3;++l)for(var u=(l+1)%3,c=(l+2)%3,f=[0,0,0],h=[0,0,0],p=-1;p<=1;p+=2){r.push(s,s+2,s+1,s+1,s+2,s+3),f[l]=p,h[l]=p;for(var d=-1;d<=1;d+=2){f[u]=d;for(var m=-1;m<=1;m+=2)f[c]=m,e.push(f[0],f[1],f[2],h[0],h[1],h[2]),s+=1}var g=u;u=c,c=g}var v=n(t,new Float32Array(e)),y=n(t,new Uint16Array(r),t.ELEMENT_ARRAY_BUFFER),x=i(t,[{buffer:v,type:t.FLOAT,size:3,offset:0,stride:24},{buffer:v,type:t.FLOAT,size:3,offset:12,stride:24}],y),b=a(t);return b.attributes.position.location=0,b.attributes.normal.location=1,new o(t,v,x,b)};var n=t("gl-buffer"),i=t("gl-vao"),a=t("./shaders").bg;function o(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n}var s=o.prototype;s.draw=function(t,e,r,n,i,a){for(var o=!1,s=0;s<3;++s)o=o||i[s];if(o){var l=this.gl;l.enable(l.POLYGON_OFFSET_FILL),l.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms={model:t,view:e,projection:r,bounds:n,enable:i,colors:a},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),this.vao.unbind(),l.disable(l.POLYGON_OFFSET_FILL)}},s.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{"./shaders":191,"gl-buffer":197,"gl-vao":371}],189:[function(t,e,r){"use strict";e.exports=function(t,e,r,a,p){i(s,e,t),i(s,r,s);for(var y=0,x=0;x<2;++x){c[2]=a[x][2];for(var b=0;b<2;++b){c[1]=a[b][1];for(var _=0;_<2;++_)c[0]=a[_][0],h(l[y],c,s),y+=1}}for(var w=-1,x=0;x<8;++x){for(var A=l[x][3],M=0;M<3;++M)u[x][M]=l[x][M]/A;p&&(u[x][2]*=-1),A<0&&(w<0?w=x:u[x][2]S&&(w|=1<S&&(w|=1<u[x][1]&&(N=x));for(var R=-1,x=0;x<3;++x){var F=N^1<u[B][0]&&(B=F)}}var j=m;j[0]=j[1]=j[2]=0,j[n.log2(R^N)]=N&R,j[n.log2(N^B)]=N&B;var V=7^B;V===w||V===I?(V=7^R,j[n.log2(B^V)]=V&B):j[n.log2(R^V)]=V&R;for(var U=g,q=w,k=0;k<3;++k)U[k]=q&1< HALF_PI) && (b <= ONE_AND_HALF_PI)) ?\n b - PI :\n b;\n}\n\nfloat look_horizontal_or_vertical(float a, float ratio) {\n // ratio controls the ratio between being horizontal to (vertical + horizontal)\n // if ratio is set to 0.5 then it is 50%, 50%.\n // when using a higher ratio e.g. 0.75 the result would\n // likely be more horizontal than vertical.\n\n float b = positive_angle(a);\n\n return\n (b < ( ratio) * HALF_PI) ? 0.0 :\n (b < (2.0 - ratio) * HALF_PI) ? -HALF_PI :\n (b < (2.0 + ratio) * HALF_PI) ? 0.0 :\n (b < (4.0 - ratio) * HALF_PI) ? HALF_PI :\n 0.0;\n}\n\nfloat roundTo(float a, float b) {\n return float(b * floor((a + 0.5 * b) / b));\n}\n\nfloat look_round_n_directions(float a, int n) {\n float b = positive_angle(a);\n float div = TWO_PI / float(n);\n float c = roundTo(b, div);\n return look_upwards(c);\n}\n\nfloat applyAlignOption(float rawAngle, float delta) {\n return\n (option > 2) ? look_round_n_directions(rawAngle + delta, option) : // option 3-n: round to n directions\n (option == 2) ? look_horizontal_or_vertical(rawAngle + delta, hv_ratio) : // horizontal or vertical\n (option == 1) ? rawAngle + delta : // use free angle, and flip to align with one direction of the axis\n (option == 0) ? look_upwards(rawAngle) : // use free angle, and stay upwards\n (option ==-1) ? 0.0 : // useful for backward compatibility, all texts remains horizontal\n rawAngle; // otherwise return back raw input angle\n}\n\nbool isAxisTitle = (axis.x == 0.0) &&\n (axis.y == 0.0) &&\n (axis.z == 0.0);\n\nvoid main() {\n //Compute world offset\n float axisDistance = position.z;\n vec3 dataPosition = axisDistance * axis + offset;\n\n float beta = angle; // i.e. user defined attributes for each tick\n\n float axisAngle;\n float clipAngle;\n float flip;\n\n if (enableAlign) {\n axisAngle = (isAxisTitle) ? HALF_PI :\n computeViewAngle(dataPosition, dataPosition + axis);\n clipAngle = computeViewAngle(dataPosition, dataPosition + alignDir);\n\n axisAngle += (sin(axisAngle) < 0.0) ? PI : 0.0;\n clipAngle += (sin(clipAngle) < 0.0) ? PI : 0.0;\n\n flip = (dot(vec2(cos(axisAngle), sin(axisAngle)),\n vec2(sin(clipAngle),-cos(clipAngle))) > 0.0) ? 1.0 : 0.0;\n\n beta += applyAlignOption(clipAngle, flip * PI);\n }\n\n //Compute plane offset\n vec2 planeCoord = position.xy * pixelScale;\n\n mat2 planeXform = scale * mat2(\n cos(beta), sin(beta),\n -sin(beta), cos(beta)\n );\n\n vec2 viewOffset = 2.0 * planeXform * planeCoord / resolution;\n\n //Compute clip position\n vec3 clipPosition = project(dataPosition);\n\n //Apply text offset in clip coordinates\n clipPosition += vec3(viewOffset, 0.0);\n\n //Done\n gl_Position = vec4(clipPosition, 1.0);\n}"]),l=n(["precision mediump float;\n#define GLSLIFY 1\nuniform vec4 color;\nvoid main() {\n gl_FragColor = color;\n}"]);r.text=function(t){return i(t,s,l,null,[{name:"position",type:"vec3"}])};var u=n(["#define GLSLIFY 1\nattribute vec3 position;\nattribute vec3 normal;\n\nuniform mat4 model, view, projection;\nuniform vec3 enable;\nuniform vec3 bounds[2];\n\nvarying vec3 colorChannel;\n\nvoid main() {\n\n vec3 signAxis = sign(bounds[1] - bounds[0]);\n\n vec3 realNormal = signAxis * normal;\n\n if(dot(realNormal, enable) > 0.0) {\n vec3 minRange = min(bounds[0], bounds[1]);\n vec3 maxRange = max(bounds[0], bounds[1]);\n vec3 nPosition = mix(minRange, maxRange, 0.5 * (position + 1.0));\n gl_Position = projection * view * model * vec4(nPosition, 1.0);\n } else {\n gl_Position = vec4(0,0,0,0);\n }\n\n colorChannel = abs(realNormal);\n}"]),c=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 colors[3];\n\nvarying vec3 colorChannel;\n\nvoid main() {\n gl_FragColor = colorChannel.x * colors[0] +\n colorChannel.y * colors[1] +\n colorChannel.z * colors[2];\n}"]);r.bg=function(t){return i(t,u,c,null,[{name:"position",type:"vec3"},{name:"normal",type:"vec3"}])}},{"gl-shader":301,glslify:412}],192:[function(t,e,r){(function(r){"use strict";e.exports=function(t,e,r,a,s,l){var c=n(t),f=i(t,[{buffer:c,size:3}]),h=o(t);h.attributes.position.location=0;var p=new u(t,h,c,f);return p.update(e,r,a,s,l),p};var n=t("gl-buffer"),i=t("gl-vao"),a=t("vectorize-text"),o=t("./shaders").text,s=window||r.global||{},l=s.__TEXT_CACHE||{};s.__TEXT_CACHE={};function u(t,e,r,n){this.gl=t,this.shader=e,this.buffer=r,this.vao=n,this.tickOffset=this.tickCount=this.labelOffset=this.labelCount=null}var c=u.prototype,f=[0,0];c.bind=function(t,e,r,n){this.vao.bind(),this.shader.bind();var i=this.shader.uniforms;i.model=t,i.view=e,i.projection=r,i.pixelScale=n,f[0]=this.gl.drawingBufferWidth,f[1]=this.gl.drawingBufferHeight,this.shader.uniforms.resolution=f},c.unbind=function(){this.vao.unbind()},c.update=function(t,e,r,n,i){var o=[];function s(t,e,r,n,i,s){var u=l[r];u||(u=l[r]={});var c=u[e];c||(c=u[e]=function(t,e){try{return a(t,e)}catch(e){return console.warn('error vectorizing text:"'+t+'" error:',e),{cells:[],positions:[]}}}(e,{triangles:!0,font:r,textAlign:"center",textBaseline:"middle",lineSpacing:i,styletags:s}));for(var f=(n||12)/12,h=c.positions,p=c.cells,d=0,m=p.length;d=0;--v){var y=h[g[v]];o.push(f*y[0],-f*y[1],t)}}for(var u=[0,0,0],c=[0,0,0],f=[0,0,0],h=[0,0,0],p={breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},d=0;d<3;++d){f[d]=o.length/3|0,s(.5*(t[0][d]+t[1][d]),e[d],r[d],12,1.25,p),h[d]=(o.length/3|0)-f[d],u[d]=o.length/3|0;for(var m=0;m=0&&(i=r.length-n-1);var a=Math.pow(10,i),o=Math.round(t*e*a),s=o+"";if(s.indexOf("e")>=0)return s;var l=o/a,u=o%a;o<0?(l=0|-Math.ceil(l),u=0|-u):(l=0|Math.floor(l),u|=0);var c=""+l;if(o<0&&(c="-"+c),i){for(var f=""+u;f.length=t[0][i];--o)a.push({x:o*e[i],text:n(e[i],o)});r.push(a)}return r},r.equal=function(t,e){for(var r=0;r<3;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;nr)throw new Error("gl-buffer: If resizing buffer, must not specify offset");return t.bufferSubData(e,a,i),r}function c(t,e){for(var r=n.malloc(t.length,e),i=t.length,a=0;a=0;--n){if(e[n]!==r)return!1;r*=t[n]}return!0}(t.shape,t.stride))0===t.offset&&t.data.length===t.shape[0]?this.length=u(this.gl,this.type,this.length,this.usage,t.data,e):this.length=u(this.gl,this.type,this.length,this.usage,t.data.subarray(t.offset,t.shape[0]),e);else{var s=n.malloc(t.size,r),l=a(s,t.shape);i.assign(l,t),this.length=u(this.gl,this.type,this.length,this.usage,e<0?s:s.subarray(0,t.size),e),n.free(s)}}else if(Array.isArray(t)){var f;f=this.type===this.gl.ELEMENT_ARRAY_BUFFER?c(t,"uint16"):c(t,"float32"),this.length=u(this.gl,this.type,this.length,this.usage,e<0?f:f.subarray(0,t.length),e),n.free(f)}else if("object"==typeof t&&"number"==typeof t.length)this.length=u(this.gl,this.type,this.length,this.usage,t,e);else{if("number"!=typeof t&&void 0!==t)throw new Error("gl-buffer: Invalid data type");if(e>=0)throw new Error("gl-buffer: Cannot specify offset when resizing buffer");(t|=0)<=0&&(t=1),this.gl.bufferData(this.type,0|t,this.usage),this.length=t}},e.exports=function(t,e,r,n){if(r=r||t.ARRAY_BUFFER,n=n||t.DYNAMIC_DRAW,r!==t.ARRAY_BUFFER&&r!==t.ELEMENT_ARRAY_BUFFER)throw new Error("gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER");if(n!==t.DYNAMIC_DRAW&&n!==t.STATIC_DRAW&&n!==t.STREAM_DRAW)throw new Error("gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW");var i=t.createBuffer(),a=new s(t,r,i,0,n);return a.update(e),a}},{ndarray:630,"ndarray-ops":624,"typedarray-pool":1385}],198:[function(t,e,r){"use strict";var n=t("gl-vec3"),i=function(t,e){for(var r=0;r=e)return r-1;return r},a=n.create(),o=n.create(),s=function(t,e,r){return tr?r:t},l=function(t,e,r,l){var u=t[0],c=t[1],f=t[2],h=r[0].length,p=r[1].length,d=r[2].length,m=i(r[0],u),g=i(r[1],c),v=i(r[2],f),y=m+1,x=g+1,b=v+1;if(l&&(m=s(m,0,h-1),y=s(y,0,h-1),g=s(g,0,p-1),x=s(x,0,p-1),v=s(v,0,d-1),b=s(b,0,d-1)),m<0||g<0||v<0||y>=h||x>=p||b>=d)return n.create();var _=(u-r[0][m])/(r[0][y]-r[0][m]),w=(c-r[1][g])/(r[1][x]-r[1][g]),A=(f-r[2][v])/(r[2][b]-r[2][v]);(_<0||_>1||isNaN(_))&&(_=0),(w<0||w>1||isNaN(w))&&(w=0),(A<0||A>1||isNaN(A))&&(A=0);var M=v*h*p,k=b*h*p,T=g*h,E=x*h,S=m,C=y,L=e[T+M+S],O=e[T+M+C],z=e[E+M+S],D=e[E+M+C],P=e[T+k+S],I=e[T+k+C],N=e[E+k+S],R=e[E+k+C],F=n.create();return n.lerp(F,L,O,_),n.lerp(a,z,D,_),n.lerp(F,F,a,w),n.lerp(a,P,I,_),n.lerp(o,N,R,_),n.lerp(a,a,o,w),n.lerp(F,F,a,A),F};e.exports=function(t,e){var r;r=t.positions?t.positions:function(t){for(var e=t[0],r=t[1],n=t[2],i=[],a=0;as&&(s=n.length(b)),x&&(y=Math.min(y,2*n.distance(m,_)/(n.length(g)+n.length(b)))),m=_,g=b,v.push(b)}var w=[u,f,p],A=[c,h,d];e&&(e[0]=w,e[1]=A),0===s&&(s=1);var M=1/s;isFinite(y)&&!isNaN(y)||(y=1),o.vectorScale=y;var k=function(t,e,r){var i=n.create();return void 0!==t&&n.set(i,t,e,r),i}(0,1,0),T=t.coneSize||.5;t.absoluteConeSize&&(T=t.absoluteConeSize*M),o.coneScale=T;x=0;for(var E=0;x=1},x.isTransparent=function(){return this.opacity<1},x.pickSlots=1,x.setPickBase=function(t){this.pickId=t},x.highlight=function(t){if(t&&this.contourEnable){for(var e=h(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,i=e.vertexWeights,a=r.length,o=p.mallocFloat32(6*a),s=0,l=0;l0){var d=this.triShader;d.bind(),d.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},x.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||v,n=t.view||v,i=t.projection||v,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:r,view:n,projection:i,clipBounds:a,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,pickId:this.pickId/255},l=this.pickShader;l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind())},x.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions[r[1]].slice(0,3);return{index:Math.floor(r[1]/48),position:n,dataCoordinate:n}},x.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose()},e.exports=function(t,e){1===arguments.length&&(t=(e=t).gl);var r=e.triShader||function(t){var e=n(t,m.vertex,m.fragment,null,m.attributes);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.vector.location=5,e}(t),s=b(t),l=o(t,c(new Uint8Array([255,255,255,255]),[1,1,4]));l.generateMipmap(),l.minFilter=t.LINEAR_MIPMAP_LINEAR,l.magFilter=t.LINEAR;var u=i(t),f=i(t),h=i(t),p=i(t),d=i(t),g=i(t),v=a(t,[{buffer:u,type:t.FLOAT,size:4},{buffer:g,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:h,type:t.FLOAT,size:4},{buffer:p,type:t.FLOAT,size:2},{buffer:d,type:t.FLOAT,size:3},{buffer:f,type:t.FLOAT,size:3}]),x=i(t),_=i(t),w=i(t),A=i(t),M=a(t,[{buffer:x,type:t.FLOAT,size:3},{buffer:A,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:_,type:t.FLOAT,size:4},{buffer:w,type:t.FLOAT,size:2}]),k=i(t),T=i(t),E=i(t),S=i(t),C=i(t),L=a(t,[{buffer:k,type:t.FLOAT,size:3},{buffer:C,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:T,type:t.FLOAT,size:4},{buffer:E,type:t.FLOAT,size:2},{buffer:S,type:t.FLOAT,size:1}]),O=i(t),z=new y(t,l,r,s,u,f,g,h,p,d,v,x,A,_,w,M,k,C,T,E,S,L,O,a(t,[{buffer:O,type:t.FLOAT,size:3}]));return z.update(e),z}},{"./shaders":200,colormap:67,"gl-buffer":197,"gl-mat4/invert":266,"gl-mat4/multiply":268,"gl-shader":301,"gl-texture2d":366,"gl-vao":371,ndarray:630,normals:633,"simplicial-complex-contour":1357,"typedarray-pool":1385}],200:[function(t,e,r){var n=t("glslify"),i=n(["precision mediump float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the cone vertex and normal at the given index.\n//\n// The returned vertex is for a cone with its top at origin and height of 1.0,\n// pointing in the direction of the vector attribute.\n//\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\n// These vertices are used to make up the triangles of the cone by the following:\n// segment + 0 top vertex\n// segment + 1 perimeter vertex a+1\n// segment + 2 perimeter vertex a\n// segment + 3 center base vertex\n// segment + 4 perimeter vertex a\n// segment + 5 perimeter vertex a+1\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\n// To go from index to segment, floor(index / 6)\n// To go from segment to angle, 2*pi * (segment/segmentCount)\n// To go from index to segment index, index - (segment*6)\n//\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\n\n const float segmentCount = 8.0;\n\n float index = rawIndex - floor(rawIndex /\n (segmentCount * 6.0)) *\n (segmentCount * 6.0);\n\n float segment = floor(0.001 + index/6.0);\n float segmentIndex = index - (segment*6.0);\n\n normal = -normalize(d);\n\n if (segmentIndex > 2.99 && segmentIndex < 3.01) {\n return mix(vec3(0.0), -d, coneOffset);\n }\n\n float nextAngle = (\n (segmentIndex > 0.99 && segmentIndex < 1.01) ||\n (segmentIndex > 4.99 && segmentIndex < 5.01)\n ) ? 1.0 : 0.0;\n float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\n\n vec3 v1 = mix(d, vec3(0.0), coneOffset);\n vec3 v2 = v1 - d;\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d)*0.25;\n vec3 y = v * sin(angle) * length(d)*0.25;\n vec3 v3 = v2 + x + y;\n if (segmentIndex < 3.0) {\n vec3 tx = u * sin(angle);\n vec3 ty = v * -cos(angle);\n vec3 tangent = tx + ty;\n normal = normalize(cross(v3 - v1, tangent));\n }\n\n if (segmentIndex == 0.0) {\n return mix(d, vec3(0.0), coneOffset);\n }\n return v3;\n}\n\nattribute vec3 vector;\nattribute vec4 color, position;\nattribute vec2 uv;\nuniform float vectorScale;\nuniform float coneScale;\n\nuniform float coneOffset;\n\nuniform mat4 model\n , view\n , projection\n , inverseModel;\nuniform vec3 eyePosition\n , lightPosition;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data\n , f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n // Scale the vector magnitude to stay constant with\n // model & view changes.\n vec3 normal;\n vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\n vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * conePosition;\n cameraCoordinate.xyz /= cameraCoordinate.w;\n f_lightDirection = lightPosition - cameraCoordinate.xyz;\n f_eyeDirection = eyePosition - cameraCoordinate.xyz;\n f_normal = normalize((vec4(normal,0.0) * inverseModel).xyz);\n\n // vec4 m_position = model * vec4(conePosition, 1.0);\n vec4 t_position = view * conePosition;\n gl_Position = projection * t_position;\n\n f_color = color;\n f_data = conePosition.xyz;\n f_position = position.xyz;\n f_uv = uv;\n}\n"]),a=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision mediump float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness,\n float fresnel) {\n\n float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n //Half angle vector\n vec3 H = normalize(lightDirection + viewDirection);\n\n //Geometric term\n float NdotH = max(dot(surfaceNormal, H), 0.0);\n float VdotH = max(dot(viewDirection, H), 0.000001);\n float LdotH = max(dot(lightDirection, H), 0.000001);\n float G1 = (2.0 * NdotH * VdotN) / VdotH;\n float G2 = (2.0 * NdotH * LdotN) / LdotH;\n float G = min(1.0, min(G1, G2));\n \n //Distribution term\n float D = beckmannDistribution(NdotH, roughness);\n\n //Fresnel term\n float F = pow(1.0 - VdotN, fresnel);\n\n //Multiply terms and done\n return G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness\n , fresnel\n , kambient\n , kdiffuse\n , kspecular\n , opacity;\nuniform sampler2D texture;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data\n , f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n vec3 N = normalize(f_normal);\n vec3 L = normalize(f_lightDirection);\n vec3 V = normalize(f_eyeDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n vec4 surfaceColor = f_color * texture2D(texture, f_uv);\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = litColor * opacity;\n}\n"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the cone vertex and normal at the given index.\n//\n// The returned vertex is for a cone with its top at origin and height of 1.0,\n// pointing in the direction of the vector attribute.\n//\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\n// These vertices are used to make up the triangles of the cone by the following:\n// segment + 0 top vertex\n// segment + 1 perimeter vertex a+1\n// segment + 2 perimeter vertex a\n// segment + 3 center base vertex\n// segment + 4 perimeter vertex a\n// segment + 5 perimeter vertex a+1\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\n// To go from index to segment, floor(index / 6)\n// To go from segment to angle, 2*pi * (segment/segmentCount)\n// To go from index to segment index, index - (segment*6)\n//\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\n\n const float segmentCount = 8.0;\n\n float index = rawIndex - floor(rawIndex /\n (segmentCount * 6.0)) *\n (segmentCount * 6.0);\n\n float segment = floor(0.001 + index/6.0);\n float segmentIndex = index - (segment*6.0);\n\n normal = -normalize(d);\n\n if (segmentIndex > 2.99 && segmentIndex < 3.01) {\n return mix(vec3(0.0), -d, coneOffset);\n }\n\n float nextAngle = (\n (segmentIndex > 0.99 && segmentIndex < 1.01) ||\n (segmentIndex > 4.99 && segmentIndex < 5.01)\n ) ? 1.0 : 0.0;\n float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\n\n vec3 v1 = mix(d, vec3(0.0), coneOffset);\n vec3 v2 = v1 - d;\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d)*0.25;\n vec3 y = v * sin(angle) * length(d)*0.25;\n vec3 v3 = v2 + x + y;\n if (segmentIndex < 3.0) {\n vec3 tx = u * sin(angle);\n vec3 ty = v * -cos(angle);\n vec3 tangent = tx + ty;\n normal = normalize(cross(v3 - v1, tangent));\n }\n\n if (segmentIndex == 0.0) {\n return mix(d, vec3(0.0), coneOffset);\n }\n return v3;\n}\n\nattribute vec3 vector;\nattribute vec4 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\n\nuniform float vectorScale;\nuniform float coneScale;\nuniform float coneOffset;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n vec3 normal;\n vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\n vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n gl_Position = projection * view * conePosition;\n f_id = id;\n f_position = position.xyz;\n}\n"]),s=n(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n gl_FragColor = vec4(pickId, f_id.xyz);\n}"]);r.meshShader={vertex:i,fragment:a,attributes:[{name:"position",type:"vec4"},{name:"normal",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"vector",type:"vec3"}]},r.pickShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec4"},{name:"id",type:"vec4"},{name:"vector",type:"vec3"}]}},{glslify:412}],201:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}},{}],202:[function(t,e,r){e.exports=function(t,e){var r=n(t[0],t[1],t[2]),o=n(e[0],e[1],e[2]);i(r,r),i(o,o);var s=a(r,o);return s>1?0:Math.acos(s)};var n=t("./fromValues"),i=t("./normalize"),a=t("./dot")},{"./dot":212,"./fromValues":218,"./normalize":229}],203:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}},{}],204:[function(t,e,r){e.exports=function(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}},{}],205:[function(t,e,r){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}},{}],206:[function(t,e,r){e.exports=function(){var t=new Float32Array(3);return t[0]=0,t[1]=0,t[2]=0,t}},{}],207:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2];return t[0]=i*l-a*s,t[1]=a*o-n*l,t[2]=n*s-i*o,t}},{}],208:[function(t,e,r){e.exports=t("./distance")},{"./distance":209}],209:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}},{}],210:[function(t,e,r){e.exports=t("./divide")},{"./divide":211}],211:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}},{}],212:[function(t,e,r){e.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}},{}],213:[function(t,e,r){e.exports=1e-6},{}],214:[function(t,e,r){e.exports=function(t,e){var r=t[0],i=t[1],a=t[2],o=e[0],s=e[1],l=e[2];return Math.abs(r-o)<=n*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(i-s)<=n*Math.max(1,Math.abs(i),Math.abs(s))&&Math.abs(a-l)<=n*Math.max(1,Math.abs(a),Math.abs(l))};var n=t("./epsilon")},{"./epsilon":213}],215:[function(t,e,r){e.exports=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}},{}],216:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}},{}],217:[function(t,e,r){e.exports=function(t,e,r,i,a,o){var s,l;e||(e=3);r||(r=0);l=i?Math.min(i*e+r,t.length):t.length;for(s=r;s0&&(a=1/Math.sqrt(a),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a);return t}},{}],230:[function(t,e,r){e.exports=function(t,e){e=e||1;var r=2*Math.random()*Math.PI,n=2*Math.random()-1,i=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*i,t[1]=Math.sin(r)*i,t[2]=n*e,t}},{}],231:[function(t,e,r){e.exports=function(t,e,r,n){var i=r[1],a=r[2],o=e[1]-i,s=e[2]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=e[0],t[1]=i+o*u-s*l,t[2]=a+o*l+s*u,t}},{}],232:[function(t,e,r){e.exports=function(t,e,r,n){var i=r[0],a=r[2],o=e[0]-i,s=e[2]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=i+s*l+o*u,t[1]=e[1],t[2]=a+s*u-o*l,t}},{}],233:[function(t,e,r){e.exports=function(t,e,r,n){var i=r[0],a=r[1],o=e[0]-i,s=e[1]-a,l=Math.sin(n),u=Math.cos(n);return t[0]=i+o*u-s*l,t[1]=a+o*l+s*u,t[2]=e[2],t}},{}],234:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t}},{}],235:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}},{}],236:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}},{}],237:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}},{}],238:[function(t,e,r){e.exports=t("./squaredDistance")},{"./squaredDistance":240}],239:[function(t,e,r){e.exports=t("./squaredLength")},{"./squaredLength":241}],240:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}},{}],241:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}},{}],242:[function(t,e,r){e.exports=t("./subtract")},{"./subtract":243}],243:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}},{}],244:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t}},{}],245:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[3]*n+r[7]*i+r[11]*a+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*i+r[8]*a+r[12])/o,t[1]=(r[1]*n+r[5]*i+r[9]*a+r[13])/o,t[2]=(r[2]*n+r[6]*i+r[10]*a+r[14])/o,t}},{}],246:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],u=r[3],c=u*n+s*a-l*i,f=u*i+l*n-o*a,h=u*a+o*i-s*n,p=-o*n-s*i-l*a;return t[0]=c*u+p*-o+f*-l-h*-s,t[1]=f*u+p*-s+h*-o-c*-l,t[2]=h*u+p*-l+c*-s-f*-o,t}},{}],247:[function(t,e,r){e.exports={0:"NONE",1:"ONE",2:"LINE_LOOP",3:"LINE_STRIP",4:"TRIANGLES",5:"TRIANGLE_STRIP",6:"TRIANGLE_FAN",256:"DEPTH_BUFFER_BIT",512:"NEVER",513:"LESS",514:"EQUAL",515:"LEQUAL",516:"GREATER",517:"NOTEQUAL",518:"GEQUAL",519:"ALWAYS",768:"SRC_COLOR",769:"ONE_MINUS_SRC_COLOR",770:"SRC_ALPHA",771:"ONE_MINUS_SRC_ALPHA",772:"DST_ALPHA",773:"ONE_MINUS_DST_ALPHA",774:"DST_COLOR",775:"ONE_MINUS_DST_COLOR",776:"SRC_ALPHA_SATURATE",1024:"STENCIL_BUFFER_BIT",1028:"FRONT",1029:"BACK",1032:"FRONT_AND_BACK",1280:"INVALID_ENUM",1281:"INVALID_VALUE",1282:"INVALID_OPERATION",1285:"OUT_OF_MEMORY",1286:"INVALID_FRAMEBUFFER_OPERATION",2304:"CW",2305:"CCW",2849:"LINE_WIDTH",2884:"CULL_FACE",2885:"CULL_FACE_MODE",2886:"FRONT_FACE",2928:"DEPTH_RANGE",2929:"DEPTH_TEST",2930:"DEPTH_WRITEMASK",2931:"DEPTH_CLEAR_VALUE",2932:"DEPTH_FUNC",2960:"STENCIL_TEST",2961:"STENCIL_CLEAR_VALUE",2962:"STENCIL_FUNC",2963:"STENCIL_VALUE_MASK",2964:"STENCIL_FAIL",2965:"STENCIL_PASS_DEPTH_FAIL",2966:"STENCIL_PASS_DEPTH_PASS",2967:"STENCIL_REF",2968:"STENCIL_WRITEMASK",2978:"VIEWPORT",3024:"DITHER",3042:"BLEND",3088:"SCISSOR_BOX",3089:"SCISSOR_TEST",3106:"COLOR_CLEAR_VALUE",3107:"COLOR_WRITEMASK",3317:"UNPACK_ALIGNMENT",3333:"PACK_ALIGNMENT",3379:"MAX_TEXTURE_SIZE",3386:"MAX_VIEWPORT_DIMS",3408:"SUBPIXEL_BITS",3410:"RED_BITS",3411:"GREEN_BITS",3412:"BLUE_BITS",3413:"ALPHA_BITS",3414:"DEPTH_BITS",3415:"STENCIL_BITS",3553:"TEXTURE_2D",4352:"DONT_CARE",4353:"FASTEST",4354:"NICEST",5120:"BYTE",5121:"UNSIGNED_BYTE",5122:"SHORT",5123:"UNSIGNED_SHORT",5124:"INT",5125:"UNSIGNED_INT",5126:"FLOAT",5386:"INVERT",5890:"TEXTURE",6401:"STENCIL_INDEX",6402:"DEPTH_COMPONENT",6406:"ALPHA",6407:"RGB",6408:"RGBA",6409:"LUMINANCE",6410:"LUMINANCE_ALPHA",7680:"KEEP",7681:"REPLACE",7682:"INCR",7683:"DECR",7936:"VENDOR",7937:"RENDERER",7938:"VERSION",9728:"NEAREST",9729:"LINEAR",9984:"NEAREST_MIPMAP_NEAREST",9985:"LINEAR_MIPMAP_NEAREST",9986:"NEAREST_MIPMAP_LINEAR",9987:"LINEAR_MIPMAP_LINEAR",10240:"TEXTURE_MAG_FILTER",10241:"TEXTURE_MIN_FILTER",10242:"TEXTURE_WRAP_S",10243:"TEXTURE_WRAP_T",10497:"REPEAT",10752:"POLYGON_OFFSET_UNITS",16384:"COLOR_BUFFER_BIT",32769:"CONSTANT_COLOR",32770:"ONE_MINUS_CONSTANT_COLOR",32771:"CONSTANT_ALPHA",32772:"ONE_MINUS_CONSTANT_ALPHA",32773:"BLEND_COLOR",32774:"FUNC_ADD",32777:"BLEND_EQUATION_RGB",32778:"FUNC_SUBTRACT",32779:"FUNC_REVERSE_SUBTRACT",32819:"UNSIGNED_SHORT_4_4_4_4",32820:"UNSIGNED_SHORT_5_5_5_1",32823:"POLYGON_OFFSET_FILL",32824:"POLYGON_OFFSET_FACTOR",32854:"RGBA4",32855:"RGB5_A1",32873:"TEXTURE_BINDING_2D",32926:"SAMPLE_ALPHA_TO_COVERAGE",32928:"SAMPLE_COVERAGE",32936:"SAMPLE_BUFFERS",32937:"SAMPLES",32938:"SAMPLE_COVERAGE_VALUE",32939:"SAMPLE_COVERAGE_INVERT",32968:"BLEND_DST_RGB",32969:"BLEND_SRC_RGB",32970:"BLEND_DST_ALPHA",32971:"BLEND_SRC_ALPHA",33071:"CLAMP_TO_EDGE",33170:"GENERATE_MIPMAP_HINT",33189:"DEPTH_COMPONENT16",33306:"DEPTH_STENCIL_ATTACHMENT",33635:"UNSIGNED_SHORT_5_6_5",33648:"MIRRORED_REPEAT",33901:"ALIASED_POINT_SIZE_RANGE",33902:"ALIASED_LINE_WIDTH_RANGE",33984:"TEXTURE0",33985:"TEXTURE1",33986:"TEXTURE2",33987:"TEXTURE3",33988:"TEXTURE4",33989:"TEXTURE5",33990:"TEXTURE6",33991:"TEXTURE7",33992:"TEXTURE8",33993:"TEXTURE9",33994:"TEXTURE10",33995:"TEXTURE11",33996:"TEXTURE12",33997:"TEXTURE13",33998:"TEXTURE14",33999:"TEXTURE15",34000:"TEXTURE16",34001:"TEXTURE17",34002:"TEXTURE18",34003:"TEXTURE19",34004:"TEXTURE20",34005:"TEXTURE21",34006:"TEXTURE22",34007:"TEXTURE23",34008:"TEXTURE24",34009:"TEXTURE25",34010:"TEXTURE26",34011:"TEXTURE27",34012:"TEXTURE28",34013:"TEXTURE29",34014:"TEXTURE30",34015:"TEXTURE31",34016:"ACTIVE_TEXTURE",34024:"MAX_RENDERBUFFER_SIZE",34041:"DEPTH_STENCIL",34055:"INCR_WRAP",34056:"DECR_WRAP",34067:"TEXTURE_CUBE_MAP",34068:"TEXTURE_BINDING_CUBE_MAP",34069:"TEXTURE_CUBE_MAP_POSITIVE_X",34070:"TEXTURE_CUBE_MAP_NEGATIVE_X",34071:"TEXTURE_CUBE_MAP_POSITIVE_Y",34072:"TEXTURE_CUBE_MAP_NEGATIVE_Y",34073:"TEXTURE_CUBE_MAP_POSITIVE_Z",34074:"TEXTURE_CUBE_MAP_NEGATIVE_Z",34076:"MAX_CUBE_MAP_TEXTURE_SIZE",34338:"VERTEX_ATTRIB_ARRAY_ENABLED",34339:"VERTEX_ATTRIB_ARRAY_SIZE",34340:"VERTEX_ATTRIB_ARRAY_STRIDE",34341:"VERTEX_ATTRIB_ARRAY_TYPE",34342:"CURRENT_VERTEX_ATTRIB",34373:"VERTEX_ATTRIB_ARRAY_POINTER",34466:"NUM_COMPRESSED_TEXTURE_FORMATS",34467:"COMPRESSED_TEXTURE_FORMATS",34660:"BUFFER_SIZE",34661:"BUFFER_USAGE",34816:"STENCIL_BACK_FUNC",34817:"STENCIL_BACK_FAIL",34818:"STENCIL_BACK_PASS_DEPTH_FAIL",34819:"STENCIL_BACK_PASS_DEPTH_PASS",34877:"BLEND_EQUATION_ALPHA",34921:"MAX_VERTEX_ATTRIBS",34922:"VERTEX_ATTRIB_ARRAY_NORMALIZED",34930:"MAX_TEXTURE_IMAGE_UNITS",34962:"ARRAY_BUFFER",34963:"ELEMENT_ARRAY_BUFFER",34964:"ARRAY_BUFFER_BINDING",34965:"ELEMENT_ARRAY_BUFFER_BINDING",34975:"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",35040:"STREAM_DRAW",35044:"STATIC_DRAW",35048:"DYNAMIC_DRAW",35632:"FRAGMENT_SHADER",35633:"VERTEX_SHADER",35660:"MAX_VERTEX_TEXTURE_IMAGE_UNITS",35661:"MAX_COMBINED_TEXTURE_IMAGE_UNITS",35663:"SHADER_TYPE",35664:"FLOAT_VEC2",35665:"FLOAT_VEC3",35666:"FLOAT_VEC4",35667:"INT_VEC2",35668:"INT_VEC3",35669:"INT_VEC4",35670:"BOOL",35671:"BOOL_VEC2",35672:"BOOL_VEC3",35673:"BOOL_VEC4",35674:"FLOAT_MAT2",35675:"FLOAT_MAT3",35676:"FLOAT_MAT4",35678:"SAMPLER_2D",35680:"SAMPLER_CUBE",35712:"DELETE_STATUS",35713:"COMPILE_STATUS",35714:"LINK_STATUS",35715:"VALIDATE_STATUS",35716:"INFO_LOG_LENGTH",35717:"ATTACHED_SHADERS",35718:"ACTIVE_UNIFORMS",35719:"ACTIVE_UNIFORM_MAX_LENGTH",35720:"SHADER_SOURCE_LENGTH",35721:"ACTIVE_ATTRIBUTES",35722:"ACTIVE_ATTRIBUTE_MAX_LENGTH",35724:"SHADING_LANGUAGE_VERSION",35725:"CURRENT_PROGRAM",36003:"STENCIL_BACK_REF",36004:"STENCIL_BACK_VALUE_MASK",36005:"STENCIL_BACK_WRITEMASK",36006:"FRAMEBUFFER_BINDING",36007:"RENDERBUFFER_BINDING",36048:"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",36049:"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",36050:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",36051:"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",36053:"FRAMEBUFFER_COMPLETE",36054:"FRAMEBUFFER_INCOMPLETE_ATTACHMENT",36055:"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",36057:"FRAMEBUFFER_INCOMPLETE_DIMENSIONS",36061:"FRAMEBUFFER_UNSUPPORTED",36064:"COLOR_ATTACHMENT0",36096:"DEPTH_ATTACHMENT",36128:"STENCIL_ATTACHMENT",36160:"FRAMEBUFFER",36161:"RENDERBUFFER",36162:"RENDERBUFFER_WIDTH",36163:"RENDERBUFFER_HEIGHT",36164:"RENDERBUFFER_INTERNAL_FORMAT",36168:"STENCIL_INDEX8",36176:"RENDERBUFFER_RED_SIZE",36177:"RENDERBUFFER_GREEN_SIZE",36178:"RENDERBUFFER_BLUE_SIZE",36179:"RENDERBUFFER_ALPHA_SIZE",36180:"RENDERBUFFER_DEPTH_SIZE",36181:"RENDERBUFFER_STENCIL_SIZE",36194:"RGB565",36336:"LOW_FLOAT",36337:"MEDIUM_FLOAT",36338:"HIGH_FLOAT",36339:"LOW_INT",36340:"MEDIUM_INT",36341:"HIGH_INT",36346:"SHADER_COMPILER",36347:"MAX_VERTEX_UNIFORM_VECTORS",36348:"MAX_VARYING_VECTORS",36349:"MAX_FRAGMENT_UNIFORM_VECTORS",37440:"UNPACK_FLIP_Y_WEBGL",37441:"UNPACK_PREMULTIPLY_ALPHA_WEBGL",37442:"CONTEXT_LOST_WEBGL",37443:"UNPACK_COLORSPACE_CONVERSION_WEBGL",37444:"BROWSER_DEFAULT_WEBGL"}},{}],248:[function(t,e,r){var n=t("./1.0/numbers");e.exports=function(t){return n[t]}},{"./1.0/numbers":247}],249:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e),o=i(e,[{buffer:r,type:e.FLOAT,size:3,offset:0,stride:40},{buffer:r,type:e.FLOAT,size:4,offset:12,stride:40},{buffer:r,type:e.FLOAT,size:3,offset:28,stride:40}]),l=a(e);l.attributes.position.location=0,l.attributes.color.location=1,l.attributes.offset.location=2;var u=new s(e,r,o,l);return u.update(t),u};var n=t("gl-buffer"),i=t("gl-vao"),a=t("./shaders/index"),o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.shader=n,this.buffer=e,this.vao=r,this.pixelRatio=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth=[1,1,1],this.capSize=[10,10,10],this.lineCount=[0,0,0],this.lineOffset=[0,0,0],this.opacity=1,this.hasAlpha=!1}var l=s.prototype;function u(t,e){for(var r=0;r<3;++r)t[0][r]=Math.min(t[0][r],e[r]),t[1][r]=Math.max(t[1][r],e[r])}l.isOpaque=function(){return!this.hasAlpha},l.isTransparent=function(){return this.hasAlpha},l.drawTransparent=l.draw=function(t){var e=this.gl,r=this.shader.uniforms;this.shader.bind();var n=r.view=t.view||o,i=r.projection=t.projection||o;r.model=t.model||o,r.clipBounds=this.clipBounds,r.opacity=this.opacity;var a=n[12],s=n[13],l=n[14],u=n[15],c=(t._ortho||!1?2:1)*this.pixelRatio*(i[3]*a+i[7]*s+i[11]*l+i[15]*u)/e.drawingBufferHeight;this.vao.bind();for(var f=0;f<3;++f)e.lineWidth(this.lineWidth[f]*this.pixelRatio),r.capSize=this.capSize[f]*c,this.lineCount[f]&&e.drawArrays(e.LINES,this.lineOffset[f],this.lineCount[f]);this.vao.unbind()};var c=function(){for(var t=new Array(3),e=0;e<3;++e){for(var r=[],n=1;n<=2;++n)for(var i=-1;i<=1;i+=2){var a=[0,0,0];a[(n+e)%3]=i,r.push(a)}t[e]=r}return t}();function f(t,e,r,n){for(var i=c[n],a=0;a0)(m=c.slice())[s]+=p[1][s],i.push(c[0],c[1],c[2],d[0],d[1],d[2],d[3],0,0,0,m[0],m[1],m[2],d[0],d[1],d[2],d[3],0,0,0),u(this.bounds,m),o+=2+f(i,m,d,s)}}this.lineCount[s]=o-this.lineOffset[s]}this.buffer.update(i)}},l.dispose=function(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()}},{"./shaders/index":250,"gl-buffer":197,"gl-vao":371}],250:[function(t,e,r){"use strict";var n=t("glslify"),i=t("gl-shader"),a=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position, offset;\nattribute vec4 color;\nuniform mat4 model, view, projection;\nuniform float capSize;\nvarying vec4 fragColor;\nvarying vec3 fragPosition;\n\nvoid main() {\n vec4 worldPosition = model * vec4(position, 1.0);\n worldPosition = (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);\n gl_Position = projection * view * worldPosition;\n fragColor = color;\n fragPosition = position;\n}"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float opacity;\nvarying vec3 fragPosition;\nvarying vec4 fragColor;\n\nvoid main() {\n if (\n outOfRange(clipBounds[0], clipBounds[1], fragPosition) ||\n fragColor.a * opacity == 0.\n ) discard;\n\n gl_FragColor = opacity * fragColor;\n}"]);e.exports=function(t){return i(t,a,o,null,[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"offset",type:"vec3"}])}},{"gl-shader":301,glslify:412}],251:[function(t,e,r){"use strict";var n=t("gl-texture2d");e.exports=function(t,e,r,n){i||(i=t.FRAMEBUFFER_UNSUPPORTED,a=t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,o=t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,s=t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var u=t.getExtension("WEBGL_draw_buffers");!l&&u&&function(t,e){var r=t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL);l=new Array(r+1);for(var n=0;n<=r;++n){for(var i=new Array(r),a=0;ac||r<0||r>c)throw new Error("gl-fbo: Parameters are too large for FBO");var f=1;if("color"in(n=n||{})){if((f=Math.max(0|n.color,0))<0)throw new Error("gl-fbo: Must specify a nonnegative number of colors");if(f>1){if(!u)throw new Error("gl-fbo: Multiple draw buffer extension not supported");if(f>t.getParameter(u.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error("gl-fbo: Context does not support "+f+" draw buffers")}}var h=t.UNSIGNED_BYTE,p=t.getExtension("OES_texture_float");if(n.float&&f>0){if(!p)throw new Error("gl-fbo: Context does not support floating point textures");h=t.FLOAT}else n.preferFloat&&f>0&&p&&(h=t.FLOAT);var m=!0;"depth"in n&&(m=!!n.depth);var g=!1;"stencil"in n&&(g=!!n.stencil);return new d(t,e,r,h,f,m,g,u)};var i,a,o,s,l=null;function u(t){return[t.getParameter(t.FRAMEBUFFER_BINDING),t.getParameter(t.RENDERBUFFER_BINDING),t.getParameter(t.TEXTURE_BINDING_2D)]}function c(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e[0]),t.bindRenderbuffer(t.RENDERBUFFER,e[1]),t.bindTexture(t.TEXTURE_2D,e[2])}function f(t){switch(t){case i:throw new Error("gl-fbo: Framebuffer unsupported");case a:throw new Error("gl-fbo: Framebuffer incomplete attachment");case o:throw new Error("gl-fbo: Framebuffer incomplete dimensions");case s:throw new Error("gl-fbo: Framebuffer incomplete missing attachment");default:throw new Error("gl-fbo: Framebuffer failed for unspecified reason")}}function h(t,e,r,i,a,o){if(!i)return null;var s=n(t,e,r,a,i);return s.magFilter=t.NEAREST,s.minFilter=t.NEAREST,s.mipSamples=1,s.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,s.handle,0),s}function p(t,e,r,n,i){var a=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,a),t.renderbufferStorage(t.RENDERBUFFER,n,e,r),t.framebufferRenderbuffer(t.FRAMEBUFFER,i,t.RENDERBUFFER,a),a}function d(t,e,r,n,i,a,o,s){this.gl=t,this._shape=[0|e,0|r],this._destroyed=!1,this._ext=s,this.color=new Array(i);for(var d=0;d1&&s.drawBuffersWEBGL(l[o]);var y=r.getExtension("WEBGL_depth_texture");y?d?t.depth=h(r,i,a,y.UNSIGNED_INT_24_8_WEBGL,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):m&&(t.depth=h(r,i,a,r.UNSIGNED_SHORT,r.DEPTH_COMPONENT,r.DEPTH_ATTACHMENT)):m&&d?t._depth_rb=p(r,i,a,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):m?t._depth_rb=p(r,i,a,r.DEPTH_COMPONENT16,r.DEPTH_ATTACHMENT):d&&(t._depth_rb=p(r,i,a,r.STENCIL_INDEX,r.STENCIL_ATTACHMENT));var x=r.checkFramebufferStatus(r.FRAMEBUFFER);if(x!==r.FRAMEBUFFER_COMPLETE){for(t._destroyed=!0,r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteFramebuffer(t.handle),t.handle=null,t.depth&&(t.depth.dispose(),t.depth=null),t._depth_rb&&(r.deleteRenderbuffer(t._depth_rb),t._depth_rb=null),v=0;vi||r<0||r>i)throw new Error("gl-fbo: Can't resize FBO, invalid dimensions");t._shape[0]=e,t._shape[1]=r;for(var a=u(n),o=0;o=0),s[8]){case"b":i=parseInt(i,10).toString(2);break;case"c":i=String.fromCharCode(parseInt(i,10));break;case"d":case"i":i=parseInt(i,10);break;case"j":i=JSON.stringify(i,null,s[6]?parseInt(s[6]):0);break;case"e":i=s[7]?parseFloat(i).toExponential(s[7]):parseFloat(i).toExponential();break;case"f":i=s[7]?parseFloat(i).toFixed(s[7]):parseFloat(i);break;case"g":i=s[7]?String(Number(i.toPrecision(s[7]))):parseFloat(i);break;case"o":i=(parseInt(i,10)>>>0).toString(8);break;case"s":i=String(i),i=s[7]?i.substring(0,s[7]):i;break;case"t":i=String(!!i),i=s[7]?i.substring(0,s[7]):i;break;case"T":i=Object.prototype.toString.call(i).slice(8,-1).toLowerCase(),i=s[7]?i.substring(0,s[7]):i;break;case"u":i=parseInt(i,10)>>>0;break;case"v":i=i.valueOf(),i=s[7]?i.substring(0,s[7]):i;break;case"x":i=(parseInt(i,10)>>>0).toString(16);break;case"X":i=(parseInt(i,10)>>>0).toString(16).toUpperCase()}t.json.test(s[8])?m+=i:(!t.number.test(s[8])||f&&!s[3]?h="":(h=f?"+":"-",i=i.toString().replace(t.sign,"")),u=s[4]?"0"===s[4]?"0":s[4].charAt(1):" ",c=s[6]-(h+i).length,l=s[6]&&c>0?u.repeat(c):"",m+=s[5]?h+i+l:"0"===u?h+l+i:l+h+i)}return m}(function(e){if(i[e])return i[e];var r,n=e,a=[],o=0;for(;n;){if(null!==(r=t.text.exec(n)))a.push(r[0]);else if(null!==(r=t.modulo.exec(n)))a.push("%");else{if(null===(r=t.placeholder.exec(n)))throw new SyntaxError("[sprintf] unexpected placeholder");if(r[2]){o|=1;var s=[],l=r[2],u=[];if(null===(u=t.key.exec(l)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(s.push(u[1]);""!==(l=l.substring(u[0].length));)if(null!==(u=t.key_access.exec(l)))s.push(u[1]);else{if(null===(u=t.index_access.exec(l)))throw new SyntaxError("[sprintf] failed to parse named argument key");s.push(u[1])}r[2]=s}else o|=2;if(3===o)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");a.push(r)}n=n.substring(r[0].length)}return i[e]=a}(r),arguments)}function n(t,r){return e.apply(null,[t].concat(r||[]))}var i=Object.create(null);"undefined"!=typeof r&&(r.sprintf=e,r.vsprintf=n),"undefined"!=typeof window&&(window.sprintf=e,window.vsprintf=n)}()},{}],254:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t.gl,n=o(r,l.vertex,l.fragment),i=o(r,l.pickVertex,l.pickFragment),a=s(r),c=s(r),f=s(r),h=s(r),p=new u(t,n,i,a,c,f,h);return p.update(e),t.addObject(p),p};var n=t("binary-search-bounds"),i=t("iota-array"),a=t("typedarray-pool"),o=t("gl-shader"),s=t("gl-buffer"),l=t("./lib/shaders");function u(t,e,r,n,i,a,o){this.plot=t,this.shader=e,this.pickShader=r,this.positionBuffer=n,this.weightBuffer=i,this.colorBuffer=a,this.idBuffer=o,this.xData=[],this.yData=[],this.shape=[0,0],this.bounds=[1/0,1/0,-1/0,-1/0],this.pickOffset=0}var c,f=u.prototype,h=[0,0,1,0,0,1,1,0,1,1,0,1];f.draw=(c=[1,0,0,0,1,0,0,0,1],function(){var t=this.plot,e=this.shader,r=this.bounds,n=this.numVertices;if(!(n<=0)){var i=t.gl,a=t.dataBox,o=r[2]-r[0],s=r[3]-r[1],l=a[2]-a[0],u=a[3]-a[1];c[0]=2*o/l,c[4]=2*s/u,c[6]=2*(r[0]-a[0])/l-1,c[7]=2*(r[1]-a[1])/u-1,e.bind();var f=e.uniforms;f.viewTransform=c,f.shape=this.shape;var h=e.attributes;this.positionBuffer.bind(),h.position.pointer(),this.weightBuffer.bind(),h.weight.pointer(i.UNSIGNED_BYTE,!1),this.colorBuffer.bind(),h.color.pointer(i.UNSIGNED_BYTE,!0),i.drawArrays(i.TRIANGLES,0,n)}}),f.drawPick=function(){var t=[1,0,0,0,1,0,0,0,1],e=[0,0,0,0];return function(r){var n=this.plot,i=this.pickShader,a=this.bounds,o=this.numVertices;if(!(o<=0)){var s=n.gl,l=n.dataBox,u=a[2]-a[0],c=a[3]-a[1],f=l[2]-l[0],h=l[3]-l[1];t[0]=2*u/f,t[4]=2*c/h,t[6]=2*(a[0]-l[0])/f-1,t[7]=2*(a[1]-l[1])/h-1;for(var p=0;p<4;++p)e[p]=r>>8*p&255;this.pickOffset=r,i.bind();var d=i.uniforms;d.viewTransform=t,d.pickOffset=e,d.shape=this.shape;var m=i.attributes;return this.positionBuffer.bind(),m.position.pointer(),this.weightBuffer.bind(),m.weight.pointer(s.UNSIGNED_BYTE,!1),this.idBuffer.bind(),m.pickId.pointer(s.UNSIGNED_BYTE,!1),s.drawArrays(s.TRIANGLES,0,o),r+this.shape[0]*this.shape[1]}}}(),f.pick=function(t,e,r){var n=this.pickOffset,i=this.shape[0]*this.shape[1];if(r=n+i)return null;var a=r-n,o=this.xData,s=this.yData;return{object:this,pointId:a,dataCoord:[o[a%this.shape[0]],s[a/this.shape[0]|0]]}},f.update=function(t){var e=(t=t||{}).shape||[0,0],r=t.x||i(e[0]),o=t.y||i(e[1]),s=t.z||new Float32Array(e[0]*e[1]);this.xData=r,this.yData=o;var l=t.colorLevels||[0],u=t.colorValues||[0,0,0,1],c=l.length,f=this.bounds,p=f[0]=r[0],d=f[1]=o[0],m=1/((f[2]=r[r.length-1])-p),g=1/((f[3]=o[o.length-1])-d),v=e[0],y=e[1];this.shape=[v,y];var x=(v-1)*(y-1)*(h.length>>>1);this.numVertices=x;for(var b=a.mallocUint8(4*x),_=a.mallocFloat32(2*x),w=a.mallocUint8(2*x),A=a.mallocUint32(x),M=0,k=0;k max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform sampler2D dashTexture;\nuniform float dashScale;\nuniform float opacity;\n\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\nvarying vec4 fragColor;\n\nvoid main() {\n if (\n outOfRange(clipBounds[0], clipBounds[1], worldPosition) ||\n fragColor.a * opacity == 0.\n ) discard;\n\n float dashWeight = texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;\n if(dashWeight < 0.5) {\n discard;\n }\n gl_FragColor = fragColor * opacity;\n}\n"]),s=n(["precision mediump float;\n#define GLSLIFY 1\n\n#define FLOAT_MAX 1.70141184e38\n#define FLOAT_MIN 1.17549435e-38\n\nlowp vec4 encode_float_1604150559(highp float v) {\n highp float av = abs(v);\n\n //Handle special cases\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n //Compute exponent and mantissa\n highp float e = floor(log2(av));\n highp float m = av * pow(2.0, -e) - 1.0;\n \n //Unpack mantissa\n c[1] = floor(128.0 * m);\n m -= c[1] / 128.0;\n c[2] = floor(32768.0 * m);\n m -= c[2] / 32768.0;\n c[3] = floor(8388608.0 * m);\n \n //Unpack exponent\n highp float ebias = e + 127.0;\n c[0] = floor(ebias / 2.0);\n ebias -= c[0] * 2.0;\n c[1] += floor(ebias) * 128.0; \n\n //Unpack sign bit\n c[0] += 128.0 * step(0.0, -v);\n\n //Scale back to range\n return c / 255.0;\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform float pickId;\nuniform vec3 clipBounds[2];\n\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\nvarying vec4 fragColor;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], worldPosition)) discard;\n\n gl_FragColor = vec4(pickId/255.0, encode_float_1604150559(pixelArcLength).xyz);\n}"]),l=[{name:"position",type:"vec3"},{name:"nextPosition",type:"vec3"},{name:"arcLength",type:"float"},{name:"lineWidth",type:"float"},{name:"color",type:"vec4"}];r.createShader=function(t){return i(t,a,o,null,l)},r.createPickShader=function(t){return i(t,a,s,null,l)}},{"gl-shader":301,glslify:412}],257:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl||t.scene&&t.scene.gl,r=c(e);r.attributes.position.location=0,r.attributes.nextPosition.location=1,r.attributes.arcLength.location=2,r.attributes.lineWidth.location=3,r.attributes.color.location=4;var o=f(e);o.attributes.position.location=0,o.attributes.nextPosition.location=1,o.attributes.arcLength.location=2,o.attributes.lineWidth.location=3,o.attributes.color.location=4;for(var s=n(e),u=i(e,[{buffer:s,size:3,offset:0,stride:48},{buffer:s,size:3,offset:12,stride:48},{buffer:s,size:1,offset:24,stride:48},{buffer:s,size:1,offset:28,stride:48},{buffer:s,size:4,offset:32,stride:48}]),h=l(new Array(1024),[256,1,4]),p=0;p<1024;++p)h.data[p]=255;var d=a(e,h);d.wrap=e.REPEAT;var m=new g(e,r,o,s,u,d);return m.update(t),m};var n=t("gl-buffer"),i=t("gl-vao"),a=t("gl-texture2d"),o=t("glsl-read-float"),s=t("binary-search-bounds"),l=t("ndarray"),u=t("./lib/shaders"),c=u.createShader,f=u.createPickShader,h=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function p(t,e){for(var r=0,n=0;n<3;++n){var i=t[n]-e[n];r+=i*i}return Math.sqrt(r)}function d(t){for(var e=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],r=0;r<3;++r)e[0][r]=Math.max(t[0][r],e[0][r]),e[1][r]=Math.min(t[1][r],e[1][r]);return e}function m(t,e,r,n){this.arcLength=t,this.position=e,this.index=r,this.dataCoordinate=n}function g(t,e,r,n,i,a){this.gl=t,this.shader=e,this.pickShader=r,this.buffer=n,this.vao=i,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points=[],this.arcLength=[],this.vertexCount=0,this.bounds=[[0,0,0],[0,0,0]],this.pickId=0,this.lineWidth=1,this.texture=a,this.dashScale=1,this.opacity=1,this.hasAlpha=!1,this.dirty=!0,this.pixelRatio=1}var v=g.prototype;v.isTransparent=function(){return this.hasAlpha},v.isOpaque=function(){return!this.hasAlpha},v.pickSlots=1,v.setPickBase=function(t){this.pickId=t},v.drawTransparent=v.draw=function(t){if(this.vertexCount){var e=this.gl,r=this.shader,n=this.vao;r.bind(),r.uniforms={model:t.model||h,view:t.view||h,projection:t.projection||h,clipBounds:d(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},v.drawPick=function(t){if(this.vertexCount){var e=this.gl,r=this.pickShader,n=this.vao;r.bind(),r.uniforms={model:t.model||h,view:t.view||h,projection:t.projection||h,pickId:this.pickId,clipBounds:d(this.clipBounds),screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},v.update=function(t){var e,r;this.dirty=!0;var n=!!t.connectGaps;"dashScale"in t&&(this.dashScale=t.dashScale),this.hasAlpha=!1,"opacity"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var i=[],a=[],o=[],u=0,c=0,f=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],h=t.position||t.positions;if(h){var d=t.color||t.colors||[0,0,0,1],m=t.lineWidth||1,g=!1;t:for(e=1;e0){for(var w=0;w<24;++w)i.push(i[i.length-12]);c+=2,g=!0}continue t}f[0][r]=Math.min(f[0][r],b[r],_[r]),f[1][r]=Math.max(f[1][r],b[r],_[r])}Array.isArray(d[0])?(v=d.length>e-1?d[e-1]:d.length>0?d[d.length-1]:[0,0,0,1],y=d.length>e?d[e]:d.length>0?d[d.length-1]:[0,0,0,1]):v=y=d,3===v.length&&(v=[v[0],v[1],v[2],1]),3===y.length&&(y=[y[0],y[1],y[2],1]),!this.hasAlpha&&v[3]<1&&(this.hasAlpha=!0),x=Array.isArray(m)?m.length>e-1?m[e-1]:m.length>0?m[m.length-1]:[0,0,0,1]:m;var A=u;if(u+=p(b,_),g){for(r=0;r<2;++r)i.push(b[0],b[1],b[2],_[0],_[1],_[2],A,x,v[0],v[1],v[2],v[3]);c+=2,g=!1}i.push(b[0],b[1],b[2],_[0],_[1],_[2],A,x,v[0],v[1],v[2],v[3],b[0],b[1],b[2],_[0],_[1],_[2],A,-x,v[0],v[1],v[2],v[3],_[0],_[1],_[2],b[0],b[1],b[2],u,-x,y[0],y[1],y[2],y[3],_[0],_[1],_[2],b[0],b[1],b[2],u,x,y[0],y[1],y[2],y[3]),c+=4}}if(this.buffer.update(i),a.push(u),o.push(h[h.length-1].slice()),this.bounds=f,this.vertexCount=c,this.points=o,this.arcLength=a,"dashes"in t){var M=t.dashes.slice();for(M.unshift(0),e=1;e1.0001)return null;g+=m[c]}if(Math.abs(g-1)>.001)return null;return[f,function(t,e){for(var r=[0,0,0],n=0;n max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness\n , fresnel\n , kambient\n , kdiffuse\n , kspecular\n , opacity;\nuniform sampler2D texture;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;\n\n vec3 N = normalize(f_normal);\n vec3 L = normalize(f_lightDirection);\n vec3 V = normalize(f_eyeDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n //float specular = max(0.0, beckmann(L, V, N, roughness)); // used in gl-surface3d\n\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n vec4 surfaceColor = f_color * texture2D(texture, f_uv);\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = litColor * opacity;\n}\n"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 uv;\n\nuniform mat4 model, view, projection;\n\nvarying vec4 f_color;\nvarying vec3 f_data;\nvarying vec2 f_uv;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n f_color = color;\n f_data = position;\n f_uv = uv;\n}"]),s=n(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform sampler2D texture;\nuniform float opacity;\n\nvarying vec4 f_color;\nvarying vec3 f_data;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;\n\n gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\n}"]),l=n(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 uv;\nattribute float pointSize;\n\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n gl_Position = projection * view * model * vec4(position, 1.0);\n }\n gl_PointSize = pointSize;\n f_color = color;\n f_uv = uv;\n}"]),u=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform sampler2D texture;\nuniform float opacity;\n\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n vec2 pointR = gl_PointCoord.xy - vec2(0.5,0.5);\n if(dot(pointR, pointR) > 0.25) {\n discard;\n }\n gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\n}"]),c=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n f_id = id;\n f_position = position;\n}"]),f=n(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n gl_FragColor = vec4(pickId, f_id.xyz);\n}"]),h=n(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute float pointSize;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n gl_Position = projection * view * model * vec4(position, 1.0);\n gl_PointSize = pointSize;\n }\n f_id = id;\n f_position = position;\n}"]),p=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n}"]),d=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform vec3 contourColor;\n\nvoid main() {\n gl_FragColor = vec4(contourColor,1);\n}\n"]);r.meshShader={vertex:i,fragment:a,attributes:[{name:"position",type:"vec3"},{name:"normal",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},r.wireShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},r.pointShader={vertex:l,fragment:u,attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"pointSize",type:"float"}]},r.pickShader={vertex:c,fragment:f,attributes:[{name:"position",type:"vec3"},{name:"id",type:"vec4"}]},r.pointPickShader={vertex:h,fragment:f,attributes:[{name:"position",type:"vec3"},{name:"pointSize",type:"float"},{name:"id",type:"vec4"}]},r.contourShader={vertex:p,fragment:d,attributes:[{name:"position",type:"vec3"}]}},{glslify:412}],279:[function(t,e,r){"use strict";var n=t("gl-shader"),i=t("gl-buffer"),a=t("gl-vao"),o=t("gl-texture2d"),s=t("normals"),l=t("gl-mat4/multiply"),u=t("gl-mat4/invert"),c=t("ndarray"),f=t("colormap"),h=t("simplicial-complex-contour"),p=t("typedarray-pool"),d=t("./lib/shaders"),m=t("./lib/closest-point"),g=d.meshShader,v=d.wireShader,y=d.pointShader,x=d.pickShader,b=d.pointPickShader,_=d.contourShader,w=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function A(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,m,g,v,y,x,b,_,A,M,k,T,E){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.lineShader=n,this.pointShader=i,this.pickShader=a,this.pointPickShader=o,this.contourShader=s,this.trianglePositions=l,this.triangleColors=c,this.triangleNormals=h,this.triangleUVs=f,this.triangleIds=u,this.triangleVAO=p,this.triangleCount=0,this.lineWidth=1,this.edgePositions=d,this.edgeColors=g,this.edgeUVs=v,this.edgeIds=m,this.edgeVAO=y,this.edgeCount=0,this.pointPositions=x,this.pointColors=_,this.pointUVs=A,this.pointSizes=M,this.pointIds=b,this.pointVAO=k,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=T,this.contourVAO=E,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this._model=w,this._view=w,this._projection=w,this._resolution=[1,1]}var M=A.prototype;function k(t){var e=n(t,y.vertex,y.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.pointSize.location=4,e}function T(t){var e=n(t,x.vertex,x.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e}function E(t){var e=n(t,b.vertex,b.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.pointSize.location=4,e}function S(t){var e=n(t,_.vertex,_.fragment);return e.attributes.position.location=0,e}M.isOpaque=function(){return this.opacity>=1},M.isTransparent=function(){return this.opacity<1},M.pickSlots=1,M.setPickBase=function(t){this.pickId=t},M.highlight=function(t){if(t&&this.contourEnable){for(var e=h(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,i=e.vertexWeights,a=r.length,o=p.mallocFloat32(6*a),s=0,l=0;l0&&((f=this.triShader).bind(),f.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind());this.edgeCount>0&&this.lineWidth>0&&((f=this.lineShader).bind(),f.uniforms=s,this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind());this.pointCount>0&&((f=this.pointShader).bind(),f.uniforms=s,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind());this.contourEnable&&this.contourCount>0&&this.contourLineWidth>0&&((f=this.contourShader).bind(),f.uniforms=s,this.contourVAO.bind(),e.drawArrays(e.LINES,0,this.contourCount),this.contourVAO.unbind())},M.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s,l={model:r,view:n,projection:i,clipBounds:a,pickId:this.pickId/255};((s=this.pickShader).bind(),s.uniforms=l,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0)&&((s=this.pointPickShader).bind(),s.uniforms=l,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind())},M.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;for(var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions,i=new Array(r.length),a=0;ai[M]&&(r.uniforms.dataAxis=u,r.uniforms.screenOffset=c,r.uniforms.color=g[t],r.uniforms.angle=v[t],a.drawArrays(a.TRIANGLES,i[M],i[k]-i[M]))),y[t]&&A&&(c[1^t]-=T*p*x[t],r.uniforms.dataAxis=f,r.uniforms.screenOffset=c,r.uniforms.color=b[t],r.uniforms.angle=_[t],a.drawArrays(a.TRIANGLES,w,A)),c[1^t]=T*s[2+(1^t)]-1,d[t+2]&&(c[1^t]+=T*p*m[t+2],Mi[M]&&(r.uniforms.dataAxis=u,r.uniforms.screenOffset=c,r.uniforms.color=g[t+2],r.uniforms.angle=v[t+2],a.drawArrays(a.TRIANGLES,i[M],i[k]-i[M]))),y[t+2]&&A&&(c[1^t]+=T*p*x[t+2],r.uniforms.dataAxis=f,r.uniforms.screenOffset=c,r.uniforms.color=b[t+2],r.uniforms.angle=_[t+2],a.drawArrays(a.TRIANGLES,w,A))}),m.drawTitle=function(){var t=[0,0],e=[0,0];return function(){var r=this.plot,n=this.shader,i=r.gl,a=r.screenBox,o=r.titleCenter,s=r.titleAngle,l=r.titleColor,u=r.pixelRatio;if(this.titleCount){for(var c=0;c<2;++c)e[c]=2*(o[c]*u-a[c])/(a[2+c]-a[c])-1;n.bind(),n.uniforms.dataAxis=t,n.uniforms.screenOffset=e,n.uniforms.angle=s,n.uniforms.color=l,i.drawArrays(i.TRIANGLES,this.titleOffset,this.titleCount)}}}(),m.bind=(h=[0,0],p=[0,0],d=[0,0],function(){var t=this.plot,e=this.shader,r=t._tickBounds,n=t.dataBox,i=t.screenBox,a=t.viewBox;e.bind();for(var o=0;o<2;++o){var s=r[o],l=r[o+2]-s,u=.5*(n[o+2]+n[o]),c=n[o+2]-n[o],f=a[o],m=a[o+2]-f,g=i[o],v=i[o+2]-g;p[o]=2*l/c*m/v,h[o]=2*(s-u)/c*m/v}d[1]=2*t.pixelRatio/(i[3]-i[1]),d[0]=d[1]*(i[3]-i[1])/(i[2]-i[0]),e.uniforms.dataScale=p,e.uniforms.dataShift=h,e.uniforms.textScale=d,this.vbo.bind(),e.attributes.textCoordinate.pointer()}),m.update=function(t){var e,r,n,i,o,s=[],l=t.ticks,u=t.bounds;for(o=0;o<2;++o){var c=[Math.floor(s.length/3)],f=[-1/0],h=l[o];for(e=0;e=0){var m=e[d]-n[d]*(e[d+2]-e[d])/(n[d+2]-n[d]);0===d?o.drawLine(m,e[1],m,e[3],p[d],h[d]):o.drawLine(e[0],m,e[2],m,p[d],h[d])}}for(d=0;d=0;--t)this.objects[t].dispose();this.objects.length=0;for(t=this.overlays.length-1;t>=0;--t)this.overlays[t].dispose();this.overlays.length=0,this.gl=null},u.addObject=function(t){this.objects.indexOf(t)<0&&(this.objects.push(t),this.setDirty())},u.removeObject=function(t){for(var e=this.objects,r=0;rMath.abs(e))u.rotate(a,0,0,-t*r*Math.PI*d.rotateSpeed/window.innerWidth);else{var o=-d.zoomSpeed*i*e/window.innerHeight*(a-u.lastT())/20;u.pan(a,0,0,f*(Math.exp(o)-1))}}},!0),d};var n=t("right-now"),i=t("3d-view"),a=t("mouse-change"),o=t("mouse-wheel"),s=t("mouse-event-offset"),l=t("has-passive-events")},{"3d-view":1,"has-passive-events":414,"mouse-change":615,"mouse-event-offset":616,"mouse-wheel":618,"right-now":1344}],287:[function(t,e,r){var n=t("glslify"),i=t("gl-shader"),a=n(["precision mediump float;\n#define GLSLIFY 1\nattribute vec2 position;\nvarying vec2 uv;\nvoid main() {\n uv = position;\n gl_Position = vec4(position, 0, 1);\n}"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform sampler2D accumBuffer;\nvarying vec2 uv;\n\nvoid main() {\n vec4 accum = texture2D(accumBuffer, 0.5 * (uv + 1.0));\n gl_FragColor = min(vec4(1,1,1,1), accum);\n}"]);e.exports=function(t){return i(t,a,o,null,[{name:"position",type:"vec2"}])}},{"gl-shader":301,glslify:412}],288:[function(t,e,r){e.exports=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t}},{}],289:[function(t,e,r){e.exports=function(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t}},{}],290:[function(t,e,r){"use strict";var n=t("./camera.js"),i=t("gl-axes3d"),a=t("gl-axes3d/properties"),o=t("gl-spikes3d"),s=t("gl-select-static"),l=t("gl-fbo"),u=t("a-big-triangle"),c=t("mouse-change"),f=t("gl-mat4/perspective"),h=t("gl-mat4/ortho"),p=t("./lib/shader"),d=t("is-mobile")({tablet:!0});function m(){this.mouse=[-1,-1],this.screen=null,this.distance=1/0,this.index=null,this.dataCoordinate=null,this.dataPosition=null,this.object=null,this.data=null}function g(t){var e=Math.round(Math.log(Math.abs(t))/Math.log(10));if(e<0){var r=Math.round(Math.pow(10,-e));return Math.ceil(t*r)/r}if(e>0){r=Math.round(Math.pow(10,e));return Math.ceil(t/r)*r}return Math.ceil(t)}function v(t){return"boolean"!=typeof t||t}e.exports={createScene:function(t){var e=!1,r=(t=t||{}).canvas;if(!r)if(r=document.createElement("canvas"),t.container){var y=t.container;y.appendChild(r)}else document.body.appendChild(r);var x=t.gl;x||(x=function(t,e){var r=null;try{(r=t.getContext("webgl",e))||(r=t.getContext("experimental-webgl",e))}catch(t){return null}return r}(r,t.glOptions||{premultipliedAlpha:!0,antialias:!0,preserveDrawingBuffer:d}));if(!x)throw new Error("webgl not supported");var b=t.bounds||[[-10,-10,-10],[10,10,10]],_=new m,w=l(x,[x.drawingBufferWidth,x.drawingBufferHeight],{preferFloat:!d}),A=p(x),M={eye:t.camera.eye||[2,0,0],center:t.camera.center||[0,0,0],up:t.camera.up||[0,1,0],zoomMin:t.camera.zoomMax||.1,zoomMax:t.camera.zoomMin||100,mode:t.camera.mode||"turntable",_ortho:t.camera.projection&&"orthographic"===t.camera.projection.type||!1},k=t.axes||{},T=i(x,k);T.enable=!k.disable;var E=t.spikes||{},S=o(x,E),C=[],L=[],O=[],z=[],D=!0,P=!0,I=new Array(16),N=new Array(16),R={view:null,projection:I,model:N,_ortho:!1},P=!0,F=[x.drawingBufferWidth,x.drawingBufferHeight],B=n(r,M),j={gl:x,contextLost:!1,pixelRatio:t.pixelRatio||1,canvas:r,selection:_,camera:B,axes:T,axesPixels:null,spikes:S,bounds:b,objects:C,shape:F,aspect:t.aspectRatio||[1,1,1],pickRadius:t.pickRadius||10,zNear:t.zNear||.01,zFar:t.zFar||1e3,fovy:t.fovy||Math.PI/4,clearColor:t.clearColor||[0,0,0,0],autoResize:v(t.autoResize),autoBounds:v(t.autoBounds),autoScale:!!t.autoScale,autoCenter:v(t.autoCenter),clipToBounds:v(t.clipToBounds),snapToData:!!t.snapToData,onselect:t.onselect||null,onrender:t.onrender||null,onclick:t.onclick||null,cameraParams:R,oncontextloss:null,mouseListener:null},V=[x.drawingBufferWidth/j.pixelRatio|0,x.drawingBufferHeight/j.pixelRatio|0];function U(){if(!e&&j.autoResize){var t=r.parentNode,n=1,i=1;t&&t!==document.body?(n=t.clientWidth,i=t.clientHeight):(n=window.innerWidth,i=window.innerHeight);var a=0|Math.ceil(n*j.pixelRatio),o=0|Math.ceil(i*j.pixelRatio);if(a!==r.width||o!==r.height){r.width=a,r.height=o;var s=r.style;s.position=s.position||"absolute",s.left="0px",s.top="0px",s.width=n+"px",s.height=i+"px",D=!0}}}j.autoResize&&U();function q(){for(var t=C.length,e=z.length,r=0;r0&&0===O[e-1];)O.pop(),z.pop().dispose()}window.addEventListener("resize",U),j.update=function(t){e||(t=t||{},D=!0,P=!0)},j.add=function(t){e||(t.axes=T,C.push(t),L.push(-1),D=!0,P=!0,q())},j.remove=function(t){if(!e){var r=C.indexOf(t);r<0||(C.splice(r,1),L.pop(),D=!0,P=!0,q())}},j.dispose=function(){if(!e&&(e=!0,window.removeEventListener("resize",U),r.removeEventListener("webglcontextlost",W),j.mouseListener.enabled=!1,!j.contextLost)){T.dispose(),S.dispose();for(var t=0;t_.distance)continue;for(var c=0;c 1.0) {\n discard;\n }\n baseColor = mix(borderColor, color, step(radius, centerFraction));\n gl_FragColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\n }\n}\n"]),r.pickVertex=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 pickId;\n\nuniform mat3 matrix;\nuniform float pointSize;\nuniform vec4 pickOffset;\n\nvarying vec4 fragId;\n\nvoid main() {\n vec3 hgPosition = matrix * vec3(position, 1);\n gl_Position = vec4(hgPosition.xy, 0, hgPosition.z);\n gl_PointSize = pointSize;\n\n vec4 id = pickId + pickOffset;\n id.y += floor(id.x / 256.0);\n id.x -= floor(id.x / 256.0) * 256.0;\n\n id.z += floor(id.y / 256.0);\n id.y -= floor(id.y / 256.0) * 256.0;\n\n id.w += floor(id.z / 256.0);\n id.z -= floor(id.z / 256.0) * 256.0;\n\n fragId = id;\n}\n"]),r.pickFragment=n(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragId;\n\nvoid main() {\n float radius = length(2.0 * gl_PointCoord.xy - 1.0);\n if(radius > 1.0) {\n discard;\n }\n gl_FragColor = fragId / 255.0;\n}\n"])},{glslify:412}],292:[function(t,e,r){"use strict";var n=t("gl-shader"),i=t("gl-buffer"),a=t("typedarray-pool"),o=t("./lib/shader");function s(t,e,r,n,i){this.plot=t,this.offsetBuffer=e,this.pickBuffer=r,this.shader=n,this.pickShader=i,this.sizeMin=.5,this.sizeMinCap=2,this.sizeMax=20,this.areaRatio=1,this.pointCount=0,this.color=[1,0,0,1],this.borderColor=[0,0,0,1],this.blend=!1,this.pickOffset=0,this.points=null}e.exports=function(t,e){var r=t.gl,a=i(r),l=i(r),u=n(r,o.pointVertex,o.pointFragment),c=n(r,o.pickVertex,o.pickFragment),f=new s(t,a,l,u,c);return f.update(e),t.addObject(f),f};var l,u,c=s.prototype;c.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.offsetBuffer.dispose(),this.pickBuffer.dispose(),this.plot.removeObject(this)},c.update=function(t){var e;function r(e,r){return e in t?t[e]:r}t=t||{},this.sizeMin=r("sizeMin",.5),this.sizeMax=r("sizeMax",20),this.color=r("color",[1,0,0,1]).slice(),this.areaRatio=r("areaRatio",1),this.borderColor=r("borderColor",[0,0,0,1]).slice(),this.blend=r("blend",!1);var n=t.positions.length>>>1,i=t.positions instanceof Float32Array,o=t.idToIndex instanceof Int32Array&&t.idToIndex.length>=n,s=t.positions,l=i?s:a.mallocFloat32(s.length),u=o?t.idToIndex:a.mallocInt32(n);if(i||l.set(s),!o)for(l.set(s),e=0;e>>1;for(r=0;r=e[0]&&a<=e[2]&&o>=e[1]&&o<=e[3]&&n++}return n}(this.points,i),c=this.plot.pickPixelRatio*Math.max(Math.min(this.sizeMinCap,this.sizeMin),Math.min(this.sizeMax,this.sizeMax/Math.pow(s,.33333)));l[0]=2/a,l[4]=2/o,l[6]=-2*i[0]/a-1,l[7]=-2*i[1]/o-1,this.offsetBuffer.bind(),r.bind(),r.attributes.position.pointer(),r.uniforms.matrix=l,r.uniforms.color=this.color,r.uniforms.borderColor=this.borderColor,r.uniforms.pointCloud=c<5,r.uniforms.pointSize=c,r.uniforms.centerFraction=Math.min(1,Math.max(0,Math.sqrt(1-this.areaRatio))),e&&(u[0]=255&t,u[1]=t>>8&255,u[2]=t>>16&255,u[3]=t>>24&255,this.pickBuffer.bind(),r.attributes.pickId.pointer(n.UNSIGNED_BYTE),r.uniforms.pickOffset=u,this.pickOffset=t);var f=n.getParameter(n.BLEND),h=n.getParameter(n.DITHER);return f&&!this.blend&&n.disable(n.BLEND),h&&n.disable(n.DITHER),n.drawArrays(n.POINTS,0,this.pointCount),f&&!this.blend&&n.enable(n.BLEND),h&&n.enable(n.DITHER),t+this.pointCount}),c.draw=c.unifiedDraw,c.drawPick=c.unifiedDraw,c.pick=function(t,e,r){var n=this.pickOffset,i=this.pointCount;if(r=n+i)return null;var a=r-n,o=this.points;return{object:this,pointId:a,dataCoord:[o[2*a],o[2*a+1]]}}},{"./lib/shader":291,"gl-buffer":197,"gl-shader":301,"typedarray-pool":1385}],293:[function(t,e,r){e.exports=function(t,e,r,n){var i,a,o,s,l,u=e[0],c=e[1],f=e[2],h=e[3],p=r[0],d=r[1],m=r[2],g=r[3];(a=u*p+c*d+f*m+h*g)<0&&(a=-a,p=-p,d=-d,m=-m,g=-g);1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-n)*i)/o,l=Math.sin(n*i)/o):(s=1-n,l=n);return t[0]=s*u+l*p,t[1]=s*c+l*d,t[2]=s*f+l*m,t[3]=s*h+l*g,t}},{}],294:[function(t,e,r){"use strict";e.exports=function(t){return t||0===t?t.toString():""}},{}],295:[function(t,e,r){"use strict";var n=t("vectorize-text");e.exports=function(t,e,r){var a=i[e];a||(a=i[e]={});if(t in a)return a[t];var o={textAlign:"center",textBaseline:"middle",lineHeight:1,font:e,lineSpacing:1.25,styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},triangles:!0},s=n(t,o);o.triangles=!1;var l,u,c=n(t,o);if(r&&1!==r){for(l=0;l max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform vec4 highlightId;\nuniform float highlightScale;\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n float scale = 1.0;\n if(distance(highlightId, id) < 0.0001) {\n scale = highlightScale;\n }\n\n vec4 worldPosition = model * vec4(position, 1);\n vec4 viewPosition = view * worldPosition;\n viewPosition = viewPosition / viewPosition.w;\n vec4 clipPosition = projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));\n\n gl_Position = clipPosition;\n interpColor = color;\n pickId = id;\n dataCoordinate = position;\n }\n}"]),o=i(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform vec2 screenSize;\nuniform vec3 clipBounds[2];\nuniform float highlightScale, pixelRatio;\nuniform vec4 highlightId;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n float scale = pixelRatio;\n if(distance(highlightId.bgr, id.bgr) < 0.001) {\n scale *= highlightScale;\n }\n\n vec4 worldPosition = model * vec4(position, 1.0);\n vec4 viewPosition = view * worldPosition;\n vec4 clipPosition = projection * viewPosition;\n clipPosition /= clipPosition.w;\n\n gl_Position = clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);\n interpColor = color;\n pickId = id;\n dataCoordinate = position;\n }\n}"]),s=i(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform float highlightScale;\nuniform vec4 highlightId;\nuniform vec3 axes[2];\nuniform mat4 model, view, projection;\nuniform vec2 screenSize;\nuniform vec3 clipBounds[2];\nuniform float scale, pixelRatio;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n float lscale = pixelRatio * scale;\n if(distance(highlightId, id) < 0.0001) {\n lscale *= highlightScale;\n }\n\n vec4 clipCenter = projection * view * model * vec4(position, 1);\n vec3 dataPosition = position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;\n vec4 clipPosition = projection * view * model * vec4(dataPosition, 1);\n\n gl_Position = clipPosition;\n interpColor = color;\n pickId = id;\n dataCoordinate = dataPosition;\n }\n}\n"]),l=i(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 fragClipBounds[2];\nuniform float opacity;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (\n outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate) ||\n interpColor.a * opacity == 0.\n ) discard;\n gl_FragColor = interpColor * opacity;\n}\n"]),u=i(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 fragClipBounds[2];\nuniform float pickGroup;\n\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate)) discard;\n\n gl_FragColor = vec4(pickGroup, pickId.bgr);\n}"]),c=[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"glyph",type:"vec2"},{name:"id",type:"vec4"}],f={vertex:a,fragment:l,attributes:c},h={vertex:o,fragment:l,attributes:c},p={vertex:s,fragment:l,attributes:c},d={vertex:a,fragment:u,attributes:c},m={vertex:o,fragment:u,attributes:c},g={vertex:s,fragment:u,attributes:c};function v(t,e){var r=n(t,e),i=r.attributes;return i.position.location=0,i.color.location=1,i.glyph.location=2,i.id.location=3,r}r.createPerspective=function(t){return v(t,f)},r.createOrtho=function(t){return v(t,h)},r.createProject=function(t){return v(t,p)},r.createPickPerspective=function(t){return v(t,d)},r.createPickOrtho=function(t){return v(t,m)},r.createPickProject=function(t){return v(t,g)}},{"gl-shader":301,glslify:412}],297:[function(t,e,r){"use strict";var n=t("is-string-blank"),i=t("gl-buffer"),a=t("gl-vao"),o=t("typedarray-pool"),s=t("gl-mat4/multiply"),l=t("./lib/shaders"),u=t("./lib/glyphs"),c=t("./lib/get-simple-string"),f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function h(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];return t[0]=e[0]*r+e[4]*n+e[8]*i+e[12]*a,t[1]=e[1]*r+e[5]*n+e[9]*i+e[13]*a,t[2]=e[2]*r+e[6]*n+e[10]*i+e[14]*a,t[3]=e[3]*r+e[7]*n+e[11]*i+e[15]*a,t}function p(t,e,r,n){return h(n,n),h(n,n),h(n,n)}function d(t,e){this.index=t,this.dataCoordinate=this.position=e}function m(t){return!0===t?1:t>1?1:t}function g(t,e,r,n,i,a,o,s,l,u,c,f){this.gl=t,this.pixelRatio=1,this.shader=e,this.orthoShader=r,this.projectShader=n,this.pointBuffer=i,this.colorBuffer=a,this.glyphBuffer=o,this.idBuffer=s,this.vao=l,this.vertexCount=0,this.lineVertexCount=0,this.opacity=1,this.hasAlpha=!1,this.lineWidth=0,this.projectScale=[2/3,2/3,2/3],this.projectOpacity=[1,1,1],this.projectHasAlpha=!1,this.pickId=0,this.pickPerspectiveShader=u,this.pickOrthoShader=c,this.pickProjectShader=f,this.points=[],this._selectResult=new d(0,[0,0,0]),this.useOrtho=!0,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject=[!0,!0,!0],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId=[1,1,1,1],this.highlightScale=2,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty=!0}e.exports=function(t){var e=t.gl,r=l.createPerspective(e),n=l.createOrtho(e),o=l.createProject(e),s=l.createPickPerspective(e),u=l.createPickOrtho(e),c=l.createPickProject(e),f=i(e),h=i(e),p=i(e),d=i(e),m=a(e,[{buffer:f,size:3,type:e.FLOAT},{buffer:h,size:4,type:e.FLOAT},{buffer:p,size:2,type:e.FLOAT},{buffer:d,size:4,type:e.UNSIGNED_BYTE,normalized:!0}]),v=new g(e,r,n,o,f,h,p,d,m,s,u,c);return v.update(t),v};var v=g.prototype;v.pickSlots=1,v.setPickBase=function(t){this.pickId=t},v.isTransparent=function(){if(this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&this.projectHasAlpha)return!0;return!1},v.isOpaque=function(){if(!this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&!this.projectHasAlpha)return!0;return!1};var y=[0,0],x=[0,0,0],b=[0,0,0],_=[0,0,0,1],w=[0,0,0,1],A=f.slice(),M=[0,0,0],k=[[0,0,0],[0,0,0]];function T(t){return t[0]=t[1]=t[2]=0,t}function E(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t}function S(t,e,r,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[r]=n,t}function C(t,e,r,n){var i,a=e.axesProject,o=e.gl,l=t.uniforms,u=r.model||f,c=r.view||f,h=r.projection||f,d=e.axesBounds,m=function(t){for(var e=k,r=0;r<2;++r)for(var n=0;n<3;++n)e[r][n]=Math.max(Math.min(t[r][n],1e8),-1e8);return e}(e.clipBounds);i=e.axes&&e.axes.lastCubeProps?e.axes.lastCubeProps.axis:[1,1,1],y[0]=2/o.drawingBufferWidth,y[1]=2/o.drawingBufferHeight,t.bind(),l.view=c,l.projection=h,l.screenSize=y,l.highlightId=e.highlightId,l.highlightScale=e.highlightScale,l.clipBounds=m,l.pickGroup=e.pickId/255,l.pixelRatio=n;for(var g=0;g<3;++g)if(a[g]){l.scale=e.projectScale[g],l.opacity=e.projectOpacity[g];for(var v=A,C=0;C<16;++C)v[C]=0;for(C=0;C<4;++C)v[5*C]=1;v[5*g]=0,i[g]<0?v[12+g]=d[0][g]:v[12+g]=d[1][g],s(v,u,v),l.model=v;var L=(g+1)%3,O=(g+2)%3,z=T(x),D=T(b);z[L]=1,D[O]=1;var P=p(0,0,0,E(_,z)),I=p(0,0,0,E(w,D));if(Math.abs(P[1])>Math.abs(I[1])){var N=P;P=I,I=N,N=z,z=D,D=N;var R=L;L=O,O=R}P[0]<0&&(z[L]=-1),I[1]>0&&(D[O]=-1);var F=0,B=0;for(C=0;C<4;++C)F+=Math.pow(u[4*L+C],2),B+=Math.pow(u[4*O+C],2);z[L]/=Math.sqrt(F),D[O]/=Math.sqrt(B),l.axes[0]=z,l.axes[1]=D,l.fragClipBounds[0]=S(M,m[0],g,-1e8),l.fragClipBounds[1]=S(M,m[1],g,1e8),e.vao.bind(),e.vao.draw(o.TRIANGLES,e.vertexCount),e.lineWidth>0&&(o.lineWidth(e.lineWidth*n),e.vao.draw(o.LINES,e.lineVertexCount,e.vertexCount)),e.vao.unbind()}}var L=[[-1e8,-1e8,-1e8],[1e8,1e8,1e8]];function O(t,e,r,n,i,a,o){var s=r.gl;if((a===r.projectHasAlpha||o)&&C(e,r,n,i),a===r.hasAlpha||o){t.bind();var l=t.uniforms;l.model=n.model||f,l.view=n.view||f,l.projection=n.projection||f,y[0]=2/s.drawingBufferWidth,y[1]=2/s.drawingBufferHeight,l.screenSize=y,l.highlightId=r.highlightId,l.highlightScale=r.highlightScale,l.fragClipBounds=L,l.clipBounds=r.axes.bounds,l.opacity=r.opacity,l.pickGroup=r.pickId/255,l.pixelRatio=i,r.vao.bind(),r.vao.draw(s.TRIANGLES,r.vertexCount),r.lineWidth>0&&(s.lineWidth(r.lineWidth*i),r.vao.draw(s.LINES,r.lineVertexCount,r.vertexCount)),r.vao.unbind()}}function z(t,e,r,i){var a;a=Array.isArray(t)?e=this.pointCount||e<0)return null;var r=this.points[e],n=this._selectResult;n.index=e;for(var i=0;i<3;++i)n.position[i]=n.dataCoordinate[i]=r[i];return n},v.highlight=function(t){if(t){var e=t.index,r=255&e,n=e>>8&255,i=e>>16&255;this.highlightId=[r/255,n/255,i/255,0]}else this.highlightId=[1,1,1,1]},v.update=function(t){if("perspective"in(t=t||{})&&(this.useOrtho=!t.perspective),"orthographic"in t&&(this.useOrtho=!!t.orthographic),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"project"in t)if(Array.isArray(t.project))this.axesProject=t.project;else{var e=!!t.project;this.axesProject=[e,e,e]}if("projectScale"in t)if(Array.isArray(t.projectScale))this.projectScale=t.projectScale.slice();else{var r=+t.projectScale;this.projectScale=[r,r,r]}if(this.projectHasAlpha=!1,"projectOpacity"in t){if(Array.isArray(t.projectOpacity))this.projectOpacity=t.projectOpacity.slice();else{r=+t.projectOpacity;this.projectOpacity=[r,r,r]}for(var n=0;n<3;++n)this.projectOpacity[n]=m(this.projectOpacity[n]),this.projectOpacity[n]<1&&(this.projectHasAlpha=!0)}this.hasAlpha=!1,"opacity"in t&&(this.opacity=m(t.opacity),this.opacity<1&&(this.hasAlpha=!0)),this.dirty=!0;var i,a,s=t.position,l=t.font||"normal",u=t.alignment||[0,0];if(2===u.length)i=u[0],a=u[1];else{i=[],a=[];for(n=0;n0){var D=0,P=x,I=[0,0,0,1],N=[0,0,0,1],R=Array.isArray(p)&&Array.isArray(p[0]),F=Array.isArray(v)&&Array.isArray(v[0]);t:for(n=0;n<_;++n){y+=1;for(w=s[n],A=0;A<3;++A){if(isNaN(w[A])||!isFinite(w[A]))continue t;f[A]=Math.max(f[A],w[A]),c[A]=Math.min(c[A],w[A])}M=(B=z(h,n,l,this.pixelRatio)).mesh,k=B.lines,T=B.bounds;var B,j=B.visible;if(j)if(Array.isArray(p)){if(3===(V=R?n0?1-T[0][0]:W<0?1+T[1][0]:1,Y*=Y>0?1-T[0][1]:Y<0?1+T[1][1]:1],X=M.cells||[],$=M.positions||[];for(A=0;A0){var v=r*c;o.drawBox(f-v,h-v,p+v,h+v,a),o.drawBox(f-v,d-v,p+v,d+v,a),o.drawBox(f-v,h-v,f+v,d+v,a),o.drawBox(p-v,h-v,p+v,d+v,a)}}}},s.update=function(t){t=t||{},this.innerFill=!!t.innerFill,this.outerFill=!!t.outerFill,this.innerColor=(t.innerColor||[0,0,0,.5]).slice(),this.outerColor=(t.outerColor||[0,0,0,.5]).slice(),this.borderColor=(t.borderColor||[0,0,0,1]).slice(),this.borderWidth=t.borderWidth||0,this.selectBox=(t.selectBox||this.selectBox).slice()},s.dispose=function(){this.boxBuffer.dispose(),this.boxShader.dispose(),this.plot.removeOverlay(this)}},{"./lib/shaders":298,"gl-buffer":197,"gl-shader":301}],300:[function(t,e,r){"use strict";e.exports=function(t,e){var r=n(t,e),a=i.mallocUint8(e[0]*e[1]*4);return new u(t,r,a)};var n=t("gl-fbo"),i=t("typedarray-pool"),a=t("ndarray"),o=t("bit-twiddle").nextPow2,s=t("cwise/lib/wrapper")({args:["array",{offset:[0,0,1],array:0},{offset:[0,0,2],array:0},{offset:[0,0,3],array:0},"scalar","scalar","index"],pre:{body:"{this_closestD2=1e8,this_closestX=-1,this_closestY=-1}",args:[],thisVars:["this_closestD2","this_closestX","this_closestY"],localVars:[]},body:{body:"{if(_inline_16_arg0_<255||_inline_16_arg1_<255||_inline_16_arg2_<255||_inline_16_arg3_<255){var _inline_16_l=_inline_16_arg4_-_inline_16_arg6_[0],_inline_16_a=_inline_16_arg5_-_inline_16_arg6_[1],_inline_16_f=_inline_16_l*_inline_16_l+_inline_16_a*_inline_16_a;_inline_16_fthis.buffer.length){i.free(this.buffer);for(var n=this.buffer=i.mallocUint8(o(r*e*4)),a=0;ar)for(t=r;te)for(t=e;t=0){for(var A=0|w.type.charAt(w.type.length-1),M=new Array(A),k=0;k=0;)T+=1;_[y]=T}var E=new Array(r.length);function S(){h.program=o.program(p,h._vref,h._fref,b,_);for(var t=0;t=0){var d=h.charCodeAt(h.length-1)-48;if(d<2||d>4)throw new n("","Invalid data type for attribute "+f+": "+h);o(t,e,p[0],i,d,a,f)}else{if(!(h.indexOf("mat")>=0))throw new n("","Unknown data type for attribute "+f+": "+h);var d=h.charCodeAt(h.length-1)-48;if(d<2||d>4)throw new n("","Invalid data type for attribute "+f+": "+h);s(t,e,p,i,d,a,f)}}}return a};var n=t("./GLError");function i(t,e,r,n,i,a){this._gl=t,this._wrapper=e,this._index=r,this._locations=n,this._dimension=i,this._constFunc=a}var a=i.prototype;function o(t,e,r,n,a,o,s){for(var l=["gl","v"],u=[],c=0;c4)throw new i("","Invalid uniform dimension type for matrix "+name+": "+r);return"gl.uniformMatrix"+a+"fv(locations["+e+"],false,obj"+t+")"}throw new i("","Unknown uniform data type for "+name+": "+r)}var a=r.charCodeAt(r.length-1)-48;if(a<2||a>4)throw new i("","Invalid data type");switch(r.charAt(0)){case"b":case"i":return"gl.uniform"+a+"iv(locations["+e+"],obj"+t+")";case"v":return"gl.uniform"+a+"fv(locations["+e+"],obj"+t+")";default:throw new i("","Unrecognized data type for vector "+name+": "+r)}}}function u(e){for(var n=["return function updateProperty(obj){"],i=function t(e,r){if("object"!=typeof r)return[[e,r]];var n=[];for(var i in r){var a=r[i],o=e;parseInt(i)+""===i?o+="["+i+"]":o+="."+i,"object"==typeof a?n.push.apply(n,t(o,a)):n.push([o,a])}return n}("",e),a=0;a4)throw new i("","Invalid data type");return"b"===t.charAt(0)?o(r,!1):o(r,0)}if(0===t.indexOf("mat")&&4===t.length){var r=t.charCodeAt(t.length-1)-48;if(r<2||r>4)throw new i("","Invalid uniform dimension type for matrix "+name+": "+t);return o(r*r,0)}throw new i("","Unknown uniform data type for "+name+": "+t)}}(r[c].type);var p}function f(t){var e;if(Array.isArray(t)){e=new Array(t.length);for(var r=0;r1){l[0]in o||(o[l[0]]=[]),o=o[l[0]];for(var u=1;u1)for(var l=0;l 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the tube vertex and normal at the given index.\n//\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\n//\n// Each tube segment is made up of a ring of vertices.\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\n// The indexes of tube segments run from 0 to 8.\n//\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\n float segmentCount = 8.0;\n\n float angle = 2.0 * 3.14159 * (index / segmentCount);\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d);\n vec3 y = v * sin(angle) * length(d);\n vec3 v3 = x + y;\n\n normal = normalize(v3);\n\n return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 color, position;\nattribute vec2 uv;\nuniform float vectorScale;\nuniform float tubeScale;\n\nuniform mat4 model\n , view\n , projection\n , inverseModel;\nuniform vec3 eyePosition\n , lightPosition;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data\n , f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n // Scale the vector magnitude to stay constant with\n // model & view changes.\n vec3 normal;\n vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\n vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * tubePosition;\n cameraCoordinate.xyz /= cameraCoordinate.w;\n f_lightDirection = lightPosition - cameraCoordinate.xyz;\n f_eyeDirection = eyePosition - cameraCoordinate.xyz;\n f_normal = normalize((vec4(normal,0.0) * inverseModel).xyz);\n\n // vec4 m_position = model * vec4(tubePosition, 1.0);\n vec4 t_position = view * tubePosition;\n gl_Position = projection * t_position;\n\n f_color = color;\n f_data = tubePosition.xyz;\n f_position = position.xyz;\n f_uv = uv;\n}\n"]),a=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision mediump float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness,\n float fresnel) {\n\n float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n //Half angle vector\n vec3 H = normalize(lightDirection + viewDirection);\n\n //Geometric term\n float NdotH = max(dot(surfaceNormal, H), 0.0);\n float VdotH = max(dot(viewDirection, H), 0.000001);\n float LdotH = max(dot(lightDirection, H), 0.000001);\n float G1 = (2.0 * NdotH * VdotN) / VdotH;\n float G2 = (2.0 * NdotH * LdotN) / LdotH;\n float G = min(1.0, min(G1, G2));\n \n //Distribution term\n float D = beckmannDistribution(NdotH, roughness);\n\n //Fresnel term\n float F = pow(1.0 - VdotN, fresnel);\n\n //Multiply terms and done\n return G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness\n , fresnel\n , kambient\n , kdiffuse\n , kspecular\n , opacity;\nuniform sampler2D texture;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data\n , f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n vec3 N = normalize(f_normal);\n vec3 L = normalize(f_lightDirection);\n vec3 V = normalize(f_eyeDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n vec4 surfaceColor = f_color * texture2D(texture, f_uv);\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = litColor * opacity;\n}\n"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the tube vertex and normal at the given index.\n//\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\n//\n// Each tube segment is made up of a ring of vertices.\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\n// The indexes of tube segments run from 0 to 8.\n//\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\n float segmentCount = 8.0;\n\n float angle = 2.0 * 3.14159 * (index / segmentCount);\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d);\n vec3 y = v * sin(angle) * length(d);\n vec3 v3 = x + y;\n\n normal = normalize(v3);\n\n return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform float tubeScale;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n vec3 normal;\n vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\n vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n gl_Position = projection * view * tubePosition;\n f_id = id;\n f_position = position.xyz;\n}\n"]),s=n(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n gl_FragColor = vec4(pickId, f_id.xyz);\n}"]);r.meshShader={vertex:i,fragment:a,attributes:[{name:"position",type:"vec4"},{name:"normal",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"vector",type:"vec4"}]},r.pickShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec4"},{name:"id",type:"vec4"},{name:"vector",type:"vec4"}]}},{glslify:412}],312:[function(t,e,r){"use strict";var n=t("gl-shader"),i=t("gl-buffer"),a=t("gl-vao"),o=t("gl-texture2d"),s=t("normals"),l=t("gl-mat4/multiply"),u=t("gl-mat4/invert"),c=t("ndarray"),f=t("colormap"),h=t("simplicial-complex-contour"),p=t("typedarray-pool"),d=t("./shaders"),m=d.meshShader,g=d.pickShader,v=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function y(t,e,r,n,i,a,o,s,l,u,c,f,h,p,d,m,g,y,x,b,_,w,A,M){this.gl=t,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.pickShader=n,this.trianglePositions=i,this.triangleVectors=a,this.triangleColors=s,this.triangleNormals=u,this.triangleUVs=l,this.triangleIds=o,this.triangleVAO=c,this.triangleCount=0,this.lineWidth=1,this.edgePositions=f,this.edgeColors=p,this.edgeUVs=d,this.edgeIds=h,this.edgeVAO=m,this.edgeCount=0,this.pointPositions=g,this.pointColors=x,this.pointUVs=b,this.pointSizes=_,this.pointIds=y,this.pointVAO=w,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=A,this.contourVAO=M,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!1,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.tubeScale=1,this._model=v,this._view=v,this._projection=v,this._resolution=[1,1],this.pixelRatio=1}var x=y.prototype;function b(t){var e=n(t,g.vertex,g.fragment,null,g.attributes);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.vector.location=5,e}x.isOpaque=function(){return this.opacity>=1},x.isTransparent=function(){return this.opacity<1},x.pickSlots=1,x.setPickBase=function(t){this.pickId=t},x.highlight=function(t){if(t&&this.contourEnable){for(var e=h(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,i=e.vertexWeights,a=r.length,o=p.mallocFloat32(6*a),s=0,l=0;l0){var d=this.triShader;d.bind(),d.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},x.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||v,n=t.view||v,i=t.projection||v,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:r,view:n,projection:i,clipBounds:a,tubeScale:this.tubeScale,pickId:this.pickId/255},l=this.pickShader;l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind())},x.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions[r[1]].slice(0,3);return{index:e,position:n,intensity:this.intensity[r[1]],velocity:this.vectors[r[1]].slice(0,3),divergence:this.vectors[r[1]][3],dataCoordinate:n}},x.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose()},e.exports=function(t,e){1===arguments.length&&(t=(e=t).gl);var r=e.triShader||function(t){var e=n(t,m.vertex,m.fragment,null,m.attributes);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.vector.location=5,e}(t),s=b(t),l=o(t,c(new Uint8Array([255,255,255,255]),[1,1,4]));l.generateMipmap(),l.minFilter=t.LINEAR_MIPMAP_LINEAR,l.magFilter=t.LINEAR;var u=i(t),f=i(t),h=i(t),p=i(t),d=i(t),g=i(t),v=a(t,[{buffer:u,type:t.FLOAT,size:4},{buffer:g,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:h,type:t.FLOAT,size:4},{buffer:p,type:t.FLOAT,size:2},{buffer:d,type:t.FLOAT,size:3},{buffer:f,type:t.FLOAT,size:4}]),x=i(t),_=i(t),w=i(t),A=i(t),M=a(t,[{buffer:x,type:t.FLOAT,size:3},{buffer:A,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:_,type:t.FLOAT,size:4},{buffer:w,type:t.FLOAT,size:2}]),k=i(t),T=i(t),E=i(t),S=i(t),C=i(t),L=a(t,[{buffer:k,type:t.FLOAT,size:3},{buffer:C,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:T,type:t.FLOAT,size:4},{buffer:E,type:t.FLOAT,size:2},{buffer:S,type:t.FLOAT,size:1}]),O=i(t),z=new y(t,l,r,s,u,f,g,h,p,d,v,x,A,_,w,M,k,C,T,E,S,L,O,a(t,[{buffer:O,type:t.FLOAT,size:3}]));return z.update(e),z}},{"./shaders":311,colormap:67,"gl-buffer":197,"gl-mat4/invert":266,"gl-mat4/multiply":268,"gl-shader":301,"gl-texture2d":366,"gl-vao":371,ndarray:630,normals:633,"simplicial-complex-contour":1357,"typedarray-pool":1385}],313:[function(t,e,r){arguments[4][201][0].apply(r,arguments)},{dup:201}],314:[function(t,e,r){arguments[4][202][0].apply(r,arguments)},{"./dot":324,"./fromValues":330,"./normalize":341,dup:202}],315:[function(t,e,r){arguments[4][203][0].apply(r,arguments)},{dup:203}],316:[function(t,e,r){arguments[4][204][0].apply(r,arguments)},{dup:204}],317:[function(t,e,r){arguments[4][205][0].apply(r,arguments)},{dup:205}],318:[function(t,e,r){arguments[4][206][0].apply(r,arguments)},{dup:206}],319:[function(t,e,r){arguments[4][207][0].apply(r,arguments)},{dup:207}],320:[function(t,e,r){arguments[4][208][0].apply(r,arguments)},{"./distance":321,dup:208}],321:[function(t,e,r){arguments[4][209][0].apply(r,arguments)},{dup:209}],322:[function(t,e,r){arguments[4][210][0].apply(r,arguments)},{"./divide":323,dup:210}],323:[function(t,e,r){arguments[4][211][0].apply(r,arguments)},{dup:211}],324:[function(t,e,r){arguments[4][212][0].apply(r,arguments)},{dup:212}],325:[function(t,e,r){arguments[4][213][0].apply(r,arguments)},{dup:213}],326:[function(t,e,r){arguments[4][214][0].apply(r,arguments)},{"./epsilon":325,dup:214}],327:[function(t,e,r){arguments[4][215][0].apply(r,arguments)},{dup:215}],328:[function(t,e,r){arguments[4][216][0].apply(r,arguments)},{dup:216}],329:[function(t,e,r){arguments[4][217][0].apply(r,arguments)},{"./create":318,dup:217}],330:[function(t,e,r){arguments[4][218][0].apply(r,arguments)},{dup:218}],331:[function(t,e,r){arguments[4][219][0].apply(r,arguments)},{"./add":313,"./angle":314,"./ceil":315,"./clone":316,"./copy":317,"./create":318,"./cross":319,"./dist":320,"./distance":321,"./div":322,"./divide":323,"./dot":324,"./epsilon":325,"./equals":326,"./exactEquals":327,"./floor":328,"./forEach":329,"./fromValues":330,"./inverse":332,"./len":333,"./length":334,"./lerp":335,"./max":336,"./min":337,"./mul":338,"./multiply":339,"./negate":340,"./normalize":341,"./random":342,"./rotateX":343,"./rotateY":344,"./rotateZ":345,"./round":346,"./scale":347,"./scaleAndAdd":348,"./set":349,"./sqrDist":350,"./sqrLen":351,"./squaredDistance":352,"./squaredLength":353,"./sub":354,"./subtract":355,"./transformMat3":356,"./transformMat4":357,"./transformQuat":358,dup:219}],332:[function(t,e,r){arguments[4][220][0].apply(r,arguments)},{dup:220}],333:[function(t,e,r){arguments[4][221][0].apply(r,arguments)},{"./length":334,dup:221}],334:[function(t,e,r){arguments[4][222][0].apply(r,arguments)},{dup:222}],335:[function(t,e,r){arguments[4][223][0].apply(r,arguments)},{dup:223}],336:[function(t,e,r){arguments[4][224][0].apply(r,arguments)},{dup:224}],337:[function(t,e,r){arguments[4][225][0].apply(r,arguments)},{dup:225}],338:[function(t,e,r){arguments[4][226][0].apply(r,arguments)},{"./multiply":339,dup:226}],339:[function(t,e,r){arguments[4][227][0].apply(r,arguments)},{dup:227}],340:[function(t,e,r){arguments[4][228][0].apply(r,arguments)},{dup:228}],341:[function(t,e,r){arguments[4][229][0].apply(r,arguments)},{dup:229}],342:[function(t,e,r){arguments[4][230][0].apply(r,arguments)},{dup:230}],343:[function(t,e,r){arguments[4][231][0].apply(r,arguments)},{dup:231}],344:[function(t,e,r){arguments[4][232][0].apply(r,arguments)},{dup:232}],345:[function(t,e,r){arguments[4][233][0].apply(r,arguments)},{dup:233}],346:[function(t,e,r){arguments[4][234][0].apply(r,arguments)},{dup:234}],347:[function(t,e,r){arguments[4][235][0].apply(r,arguments)},{dup:235}],348:[function(t,e,r){arguments[4][236][0].apply(r,arguments)},{dup:236}],349:[function(t,e,r){arguments[4][237][0].apply(r,arguments)},{dup:237}],350:[function(t,e,r){arguments[4][238][0].apply(r,arguments)},{"./squaredDistance":352,dup:238}],351:[function(t,e,r){arguments[4][239][0].apply(r,arguments)},{"./squaredLength":353,dup:239}],352:[function(t,e,r){arguments[4][240][0].apply(r,arguments)},{dup:240}],353:[function(t,e,r){arguments[4][241][0].apply(r,arguments)},{dup:241}],354:[function(t,e,r){arguments[4][242][0].apply(r,arguments)},{"./subtract":355,dup:242}],355:[function(t,e,r){arguments[4][243][0].apply(r,arguments)},{dup:243}],356:[function(t,e,r){arguments[4][244][0].apply(r,arguments)},{dup:244}],357:[function(t,e,r){arguments[4][245][0].apply(r,arguments)},{dup:245}],358:[function(t,e,r){arguments[4][246][0].apply(r,arguments)},{dup:246}],359:[function(t,e,r){"use strict";var n=t("gl-vec3"),i=t("gl-vec4"),a=function(t,e,r,a){for(var o=0,s=0;so&&(o=c)}var f=t.map(function(t){return function(t,e,r,a){var o,s,l,u=t.points,c=t.velocities,f=t.divergences;n.set(n.create(),0,1,0),n.create(),n.create();n.create();for(var h=[],p=[],d=[],m=[],g=[],v=[],y=0,x=0,b=i.create(),_=i.create(),w=0;w0)for(A=0;A<8;A++){var M=(A+1)%8;h.push(m[A],g[A],g[M],g[M],m[M],m[A]),d.push(_,b,b,b,_,_),v.push(y,x,x,x,y,y),p.push([h.length-6,h.length-5,h.length-4],[h.length-3,h.length-2,h.length-1])}var k=m;m=g,g=k,k=_,_=b,b=k,k=y,y=x,x=k}return{positions:h,cells:p,vectors:d,vertexIntensity:v}}(t,r,a,o)}),h=[],p=[],d=[],m=[];for(s=0;se)return r-1}return r},u=n.create(),c=n.create(),f=function(t,e,r){return tr?r:t},h=function(t,e,r,i){var a=t[0],o=t[1],s=t[2],h=r[0].length,p=r[1].length,d=r[2].length,m=l(r[0],a),g=l(r[1],o),v=l(r[2],s),y=m+1,x=g+1,b=v+1;if(r[0][m]===a&&(y=m),r[1][g]===o&&(x=g),r[2][v]===s&&(b=v),i&&(m=f(m,0,h-1),y=f(y,0,h-1),g=f(g,0,p-1),x=f(x,0,p-1),v=f(v,0,d-1),b=f(b,0,d-1)),m<0||g<0||v<0||y>=h||x>=p||b>=d)return n.create();var _=(a-r[0][m])/(r[0][y]-r[0][m]),w=(o-r[1][g])/(r[1][x]-r[1][g]),A=(s-r[2][v])/(r[2][b]-r[2][v]);(_<0||_>1||isNaN(_))&&(_=0),(w<0||w>1||isNaN(w))&&(w=0),(A<0||A>1||isNaN(A))&&(A=0);var M=v*h*p,k=b*h*p,T=g*h,E=x*h,S=m,C=y,L=e[T+M+S],O=e[T+M+C],z=e[E+M+S],D=e[E+M+C],P=e[T+k+S],I=e[T+k+C],N=e[E+k+S],R=e[E+k+C],F=n.create();return n.lerp(F,L,O,_),n.lerp(u,z,D,_),n.lerp(F,F,u,w),n.lerp(u,P,I,_),n.lerp(c,N,R,_),n.lerp(u,u,c,w),n.lerp(F,F,u,A),F},p=function(t){var e=1/0;t.sort(function(t,e){return t-e});for(var r=1;r=f&&r<=m&&n>=h&&n<=g&&i>=d&&i<=v},x=10*n.distance(e[0],e[1])/i,b=x*x,_=1,w=0;n.create();r.length>=2&&(_=function(t){for(var e=[],r=[],n=[],i={},a={},o={},s=0;sw&&!isNaN(P)&&isFinite(P)&&(w=P),C.push(P),c.push({points:k,velocities:T,divergences:C});for(var O=0;O<100*i&&k.lengthb&&n.scale(z,z,x/Math.sqrt(D)),n.add(z,z,M),E=t.getVelocity(z),n.squaredDistance(S,z)-b>-1e-4*b){k.push(z),S=z,T.push(E);L=t.getDivergence(z,E);(P=n.length(L))>w&&!isNaN(P)&&isFinite(P)&&(w=P),C.push(P)}M=z}}for(A=0;A max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 lowerBound, upperBound;\nuniform float contourTint;\nuniform vec4 contourColor;\nuniform sampler2D colormap;\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform float vertexColor;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n if ((kill > 0.0) ||\n (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\n\n vec3 N = normalize(surfaceNormal);\n vec3 V = normalize(eyeDirection);\n vec3 L = normalize(lightDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = max(beckmannSpecular(L, V, N, roughness), 0.);\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n //decide how to interpolate color \u2014 in vertex or in fragment\n vec4 surfaceColor =\n step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) +\n step(.5, vertexColor) * vColor;\n\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = mix(litColor, contourColor, contourTint) * opacity;\n}\n"]),s=i(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec4 uv;\nattribute float f;\n\nuniform vec3 objectOffset;\nuniform mat3 permutation;\nuniform mat4 model, view, projection;\nuniform float height, zOffset;\nuniform sampler2D colormap;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n vec3 dataCoordinate = permutation * vec3(uv.xy, height);\n worldCoordinate = objectOffset + dataCoordinate;\n vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\n\n vec4 clipPosition = projection * view * worldPosition;\n clipPosition.z += zOffset;\n\n gl_Position = clipPosition;\n value = f + objectOffset.z;\n kill = -1.0;\n planeCoordinate = uv.zw;\n\n vColor = texture2D(colormap, vec2(value, value));\n\n //Don't do lighting for contours\n surfaceNormal = vec3(1,0,0);\n eyeDirection = vec3(0,1,0);\n lightDirection = vec3(0,0,1);\n}\n"]),l=i(["precision mediump float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec2 shape;\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 surfaceNormal;\n\nvec2 splitFloat(float v) {\n float vh = 255.0 * v;\n float upper = floor(vh);\n float lower = fract(vh);\n return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);\n}\n\nvoid main() {\n if ((kill > 0.0) ||\n (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\n\n vec2 ux = splitFloat(planeCoordinate.x / shape.x);\n vec2 uy = splitFloat(planeCoordinate.y / shape.y);\n gl_FragColor = vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));\n}\n"]);r.createShader=function(t){var e=n(t,a,o,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},r.createPickShader=function(t){var e=n(t,a,l,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},r.createContourShader=function(t){var e=n(t,s,o,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e},r.createPickContourShader=function(t){var e=n(t,s,l,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e}},{"gl-shader":301,glslify:412}],361:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=y(e),n=b(e),s=x(e),l=_(e),u=i(e),c=a(e,[{buffer:u,size:4,stride:w,offset:0},{buffer:u,size:3,stride:w,offset:16},{buffer:u,size:3,stride:w,offset:28}]),f=i(e),h=a(e,[{buffer:f,size:4,stride:20,offset:0},{buffer:f,size:1,stride:20,offset:16}]),p=i(e),d=a(e,[{buffer:p,size:2,type:e.FLOAT}]),m=o(e,1,E,e.RGBA,e.UNSIGNED_BYTE);m.minFilter=e.LINEAR,m.magFilter=e.LINEAR;var g=new S(e,[0,0],[[0,0,0],[0,0,0]],r,n,u,c,m,s,l,f,h,p,d,[0,0,0]),v={levels:[[],[],[]]};for(var A in t)v[A]=t[A];return v.colormap=v.colormap||"jet",g.update(v),g};var n=t("bit-twiddle"),i=t("gl-buffer"),a=t("gl-vao"),o=t("gl-texture2d"),s=t("typedarray-pool"),l=t("colormap"),u=t("ndarray-ops"),c=t("ndarray-pack"),f=t("ndarray"),h=t("surface-nets"),p=t("gl-mat4/multiply"),d=t("gl-mat4/invert"),m=t("binary-search-bounds"),g=t("ndarray-gradient"),v=t("./lib/shaders"),y=v.createShader,x=v.createContourShader,b=v.createPickShader,_=v.createPickContourShader,w=40,A=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],M=[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],k=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];function T(t,e,r,n,i){this.position=t,this.index=e,this.uv=r,this.level=n,this.dataCoordinate=i}!function(){for(var t=0;t<3;++t){var e=k[t],r=(t+2)%3;e[(t+1)%3+0]=1,e[r+3]=1,e[t+6]=1}}();var E=256;function S(t,e,r,n,i,a,o,l,u,c,h,p,d,m,g){this.gl=t,this.shape=e,this.bounds=r,this.objectOffset=g,this.intensityBounds=[],this._shader=n,this._pickShader=i,this._coordinateBuffer=a,this._vao=o,this._colorMap=l,this._contourShader=u,this._contourPickShader=c,this._contourBuffer=h,this._contourVAO=p,this._contourOffsets=[[],[],[]],this._contourCounts=[[],[],[]],this._vertexCount=0,this._pickResult=new T([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer=d,this._dynamicVAO=m,this._dynamicOffsets=[0,0,0],this._dynamicCounts=[0,0,0],this.contourWidth=[1,1,1],this.contourLevels=[[1],[1],[1]],this.contourTint=[0,0,0],this.contourColor=[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour=!0,this.showSurface=!0,this.enableHighlight=[!0,!0,!0],this.highlightColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint=[1,1,1],this.highlightLevel=[-1,-1,-1],this.enableDynamic=[!0,!0,!0],this.dynamicLevel=[NaN,NaN,NaN],this.dynamicColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint=[1,1,1],this.dynamicWidth=[1,1,1],this.axesBounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject=[!1,!1,!1],this.contourProject=[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds=[!1,!1],this._field=[f(s.mallocFloat(1024),[0,0]),f(s.mallocFloat(1024),[0,0]),f(s.mallocFloat(1024),[0,0])],this.pickId=1,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData=!1,this.pixelRatio=1,this.opacity=1,this.lightPosition=[10,1e4,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.vertexColor=0,this.dirty=!0}var C=S.prototype;C.isTransparent=function(){return this.opacity<1},C.isOpaque=function(){if(this.opacity>=1)return!0;for(var t=0;t<3;++t)if(this._contourCounts[t].length>0||this._dynamicCounts[t]>0)return!0;return!1},C.pickSlots=1,C.setPickBase=function(t){this.pickId=t};var L=[0,0,0],O={showSurface:!1,showContour:!1,projections:[A.slice(),A.slice(),A.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]};function z(t,e){var r,n,i,a=e.axes&&e.axes.lastCubeProps.axis||L,o=e.showSurface,s=e.showContour;for(r=0;r<3;++r)for(o=o||e.surfaceProject[r],n=0;n<3;++n)s=s||e.contourProject[r][n];for(r=0;r<3;++r){var l=O.projections[r];for(n=0;n<16;++n)l[n]=0;for(n=0;n<4;++n)l[5*n]=1;l[5*r]=0,l[12+r]=e.axesBounds[+(a[r]>0)][r],p(l,t.model,l);var u=O.clipBounds[r];for(i=0;i<2;++i)for(n=0;n<3;++n)u[i][n]=t.clipBounds[i][n];u[0][r]=-1e8,u[1][r]=1e8}return O.showSurface=o,O.showContour=s,O}var D={model:A,view:A,projection:A,inverseModel:A.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,objectOffset:[0,0,0],kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},P=A.slice(),I=[1,0,0,0,1,0,0,0,1];function N(t,e){t=t||{};var r=this.gl;r.disable(r.CULL_FACE),this._colorMap.bind(0);var n=D;n.model=t.model||A,n.view=t.view||A,n.projection=t.projection||A,n.lowerBound=[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],n.upperBound=[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],n.objectOffset=this.objectOffset,n.contourColor=this.contourColor[0],n.inverseModel=d(n.inverseModel,n.model);for(var i=0;i<2;++i)for(var a=n.clipBounds[i],o=0;o<3;++o)a[o]=Math.min(Math.max(this.clipBounds[i][o],-1e8),1e8);n.kambient=this.ambientLight,n.kdiffuse=this.diffuseLight,n.kspecular=this.specularLight,n.roughness=this.roughness,n.fresnel=this.fresnel,n.opacity=this.opacity,n.height=0,n.permutation=I,n.vertexColor=this.vertexColor;var s=P;for(p(s,n.view,n.model),p(s,n.projection,s),d(s,s),i=0;i<3;++i)n.eyePosition[i]=s[12+i]/s[15];var l=s[15];for(i=0;i<3;++i)l+=this.lightPosition[i]*s[4*i+3];for(i=0;i<3;++i){var u=s[12+i];for(o=0;o<3;++o)u+=s[4*o+i]*this.lightPosition[o];n.lightPosition[i]=u/l}var c=z(n,this);if(c.showSurface&&e===this.opacity<1){for(this._shader.bind(),this._shader.uniforms=n,this._vao.bind(),this.showSurface&&this._vertexCount&&this._vao.draw(r.TRIANGLES,this._vertexCount),i=0;i<3;++i)this.surfaceProject[i]&&this.vertexCount&&(this._shader.uniforms.model=c.projections[i],this._shader.uniforms.clipBounds=c.clipBounds[i],this._vao.draw(r.TRIANGLES,this._vertexCount));this._vao.unbind()}if(c.showContour&&!e){var f=this._contourShader;n.kambient=1,n.kdiffuse=0,n.kspecular=0,n.opacity=1,f.bind(),f.uniforms=n;var h=this._contourVAO;for(h.bind(),i=0;i<3;++i)for(f.uniforms.permutation=k[i],r.lineWidth(this.contourWidth[i]*this.pixelRatio),o=0;o>4)/16)/255,i=Math.floor(n),a=n-i,o=e[1]*(t.value[1]+(15&t.value[2])/16)/255,s=Math.floor(o),l=o-s;i+=1,s+=1;var u=r.position;u[0]=u[1]=u[2]=0;for(var c=0;c<2;++c)for(var f=c?a:1-a,h=0;h<2;++h)for(var p=i+c,d=s+h,g=f*(h?l:1-l),v=0;v<3;++v)u[v]+=this._field[v].get(p,d)*g;for(var y=this._pickResult.level,x=0;x<3;++x)if(y[x]=m.le(this.contourLevels[x],u[x]),y[x]<0)this.contourLevels[x].length>0&&(y[x]=0);else if(y[x]Math.abs(_-u[x])&&(y[x]+=1)}for(r.index[0]=a<.5?i:i+1,r.index[1]=l<.5?s:s+1,r.uv[0]=n/e[0],r.uv[1]=o/e[1],v=0;v<3;++v)r.dataCoordinate[v]=this._field[v].get(r.index[0],r.index[1]);return r},C.padField=function(t,e){var r=e.shape.slice(),n=t.shape.slice();u.assign(t.lo(1,1).hi(r[0],r[1]),e),u.assign(t.lo(1).hi(r[0],1),e.hi(r[0],1)),u.assign(t.lo(1,n[1]-1).hi(r[0],1),e.lo(0,r[1]-1).hi(r[0],1)),u.assign(t.lo(0,1).hi(1,r[1]),e.hi(1)),u.assign(t.lo(n[0]-1,1).hi(1,r[1]),e.lo(r[0]-1)),t.set(0,0,e.get(0,0)),t.set(0,n[1]-1,e.get(0,r[1]-1)),t.set(n[0]-1,0,e.get(r[0]-1,0)),t.set(n[0]-1,n[1]-1,e.get(r[0]-1,r[1]-1))},C.update=function(t){t=t||{},this.objectOffset=t.objectOffset||this.objectOffset,this.dirty=!0,"contourWidth"in t&&(this.contourWidth=F(t.contourWidth,Number)),"showContour"in t&&(this.showContour=F(t.showContour,Boolean)),"showSurface"in t&&(this.showSurface=!!t.showSurface),"contourTint"in t&&(this.contourTint=F(t.contourTint,Boolean)),"contourColor"in t&&(this.contourColor=j(t.contourColor)),"contourProject"in t&&(this.contourProject=F(t.contourProject,function(t){return F(t,Boolean)})),"surfaceProject"in t&&(this.surfaceProject=t.surfaceProject),"dynamicColor"in t&&(this.dynamicColor=j(t.dynamicColor)),"dynamicTint"in t&&(this.dynamicTint=F(t.dynamicTint,Number)),"dynamicWidth"in t&&(this.dynamicWidth=F(t.dynamicWidth,Number)),"opacity"in t&&(this.opacity=t.opacity),"colorBounds"in t&&(this.colorBounds=t.colorBounds),"vertexColor"in t&&(this.vertexColor=t.vertexColor?1:0);var e=t.field||t.coords&&t.coords[2]||null,r=!1;if(e||(e=this._field[2].shape[0]||this._field[2].shape[2]?this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):this._field[2].hi(0,0)),"field"in t||"coords"in t){var i=(e.shape[0]+2)*(e.shape[1]+2);i>this._field[2].data.length&&(s.freeFloat(this._field[2].data),this._field[2].data=s.mallocFloat(n.nextPow2(i))),this._field[2]=f(this._field[2].data,[e.shape[0]+2,e.shape[1]+2]),this.padField(this._field[2],e),this.shape=e.shape.slice();for(var a=this.shape,o=0;o<2;++o)this._field[2].size>this._field[o].data.length&&(s.freeFloat(this._field[o].data),this._field[o].data=s.mallocFloat(this._field[2].size)),this._field[o]=f(this._field[o].data,[a[0]+2,a[1]+2]);if(t.coords){var p=t.coords;if(!Array.isArray(p)||3!==p.length)throw new Error("gl-surface: invalid coordinates for x/y");for(o=0;o<2;++o){var d=p[o];for(b=0;b<2;++b)if(d.shape[b]!==a[b])throw new Error("gl-surface: coords have incorrect shape");this.padField(this._field[o],d)}}else if(t.ticks){var m=t.ticks;if(!Array.isArray(m)||2!==m.length)throw new Error("gl-surface: invalid ticks");for(o=0;o<2;++o){var v=m[o];if((Array.isArray(v)||v.length)&&(v=f(v)),v.shape[0]!==a[o])throw new Error("gl-surface: invalid tick length");var y=f(v.data,a);y.stride[o]=v.stride[0],y.stride[1^o]=0,this.padField(this._field[o],y)}}else{for(o=0;o<2;++o){var x=[0,0];x[o]=1,this._field[o]=f(this._field[o].data,[a[0]+2,a[1]+2],x,0)}this._field[0].set(0,0,0);for(var b=0;b0){for(var wt=0;wt<5;++wt)rt.pop();G-=1}continue t}rt.push(ot[0],ot[1],ut[0],ut[1],ot[2]),G+=1}}at.push(G)}this._contourOffsets[nt]=it,this._contourCounts[nt]=at}var At=s.mallocFloat(rt.length);for(o=0;o halfCharStep + halfCharWidth ||\n\t\t\t\t\tfloor(uv.x) < halfCharStep - halfCharWidth) return;\n\n\t\t\t\tuv += charId * charStep;\n\t\t\t\tuv = uv / atlasSize;\n\n\t\t\t\tvec4 color = fontColor;\n\t\t\t\tvec4 mask = texture2D(atlas, uv);\n\n\t\t\t\tfloat maskY = lightness(mask);\n\t\t\t\t// float colorY = lightness(color);\n\t\t\t\tcolor.a *= maskY;\n\t\t\t\tcolor.a *= opacity;\n\n\t\t\t\t// color.a += .1;\n\n\t\t\t\t// antialiasing, see yiq color space y-channel formula\n\t\t\t\t// color.rgb += (1. - color.rgb) * (1. - mask.rgb);\n\n\t\t\t\tgl_FragColor = color;\n\t\t\t}"});return{regl:t,draw:e,atlas:{}}},A.prototype.update=function(t){var e=this;if("string"==typeof t)t={text:t};else if(!t)return;null!=(t=i(t,{position:"position positions coord coords coordinates",font:"font fontFace fontface typeface cssFont css-font family fontFamily",fontSize:"fontSize fontsize size font-size",text:"text texts chars characters value values symbols",align:"align alignment textAlign textbaseline",baseline:"baseline textBaseline textbaseline",direction:"dir direction textDirection",color:"color colour fill fill-color fillColor textColor textcolor",kerning:"kerning kern",range:"range dataBox",viewport:"vp viewport viewBox viewbox viewPort",opacity:"opacity alpha transparency visible visibility opaque",offset:"offset positionOffset padding shift indent indentation"},!0)).opacity&&(Array.isArray(t.opacity)?this.opacity=t.opacity.map(function(t){return parseFloat(t)}):this.opacity=parseFloat(t.opacity)),null!=t.viewport&&(this.viewport=f(t.viewport),A.normalViewport&&(this.viewport.y=this.canvas.height-this.viewport.y-this.viewport.height),this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null==this.viewport&&(this.viewport={x:0,y:0,width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight},this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null!=t.kerning&&(this.kerning=t.kerning),null!=t.offset&&("number"==typeof t.offset&&(t.offset=[t.offset,0]),this.positionOffset=y(t.offset)),t.direction&&(this.direction=t.direction),t.range&&(this.range=t.range,this.scale=[1/(t.range[2]-t.range[0]),1/(t.range[3]-t.range[1])],this.translate=[-t.range[0],-t.range[1]]),t.scale&&(this.scale=t.scale),t.translate&&(this.translate=t.translate),this.scale||(this.scale=[1/this.viewport.width,1/this.viewport.height]),this.translate||(this.translate=[0,0]),this.font.length||t.font||(t.font=A.baseFontSize+"px sans-serif");var r,a=!1,o=!1;if(t.font&&(Array.isArray(t.font)?t.font:[t.font]).forEach(function(t,r){if("string"==typeof t)try{t=n.parse(t)}catch(e){t=n.parse(A.baseFontSize+"px "+t)}else t=n.parse(n.stringify(t));var i=n.stringify({size:A.baseFontSize,family:t.family,stretch:_?t.stretch:void 0,variant:t.variant,weight:t.weight,style:t.style}),s=p(t.size),l=Math.round(s[0]*d(s[1]));if(l!==e.fontSize[r]&&(o=!0,e.fontSize[r]=l),!(e.font[r]&&i==e.font[r].baseString||(a=!0,e.font[r]=A.fonts[i],e.font[r]))){var u=t.family.join(", "),c=[t.style];t.style!=t.variant&&c.push(t.variant),t.variant!=t.weight&&c.push(t.weight),_&&t.weight!=t.stretch&&c.push(t.stretch),e.font[r]={baseString:i,family:u,weight:t.weight,stretch:t.stretch,style:t.style,variant:t.variant,width:{},kerning:{},metrics:v(u,{origin:"top",fontSize:A.baseFontSize,fontStyle:c.join(" ")})},A.fonts[i]=e.font[r]}}),(a||o)&&this.font.forEach(function(r,i){var a=n.stringify({size:e.fontSize[i],family:r.family,stretch:_?r.stretch:void 0,variant:r.variant,weight:r.weight,style:r.style});if(e.fontAtlas[i]=e.shader.atlas[a],!e.fontAtlas[i]){var o=r.metrics;e.shader.atlas[a]=e.fontAtlas[i]={fontString:a,step:2*Math.ceil(e.fontSize[i]*o.bottom*.5),em:e.fontSize[i],cols:0,rows:0,height:0,width:0,chars:[],ids:{},texture:e.regl.texture()}}null==t.text&&(t.text=e.text)}),"string"==typeof t.text&&t.position&&t.position.length>2){for(var s=Array(.5*t.position.length),h=0;h2){for(var w=!t.position[0].length,M=c.mallocFloat(2*this.count),k=0,T=0;k1?e.align[r]:e.align[0]:e.align;if("number"==typeof n)return n;switch(n){case"right":case"end":return-t;case"center":case"centre":case"middle":return.5*-t}return 0})),null==this.baseline&&null==t.baseline&&(t.baseline=0),null!=t.baseline&&(this.baseline=t.baseline,Array.isArray(this.baseline)||(this.baseline=[this.baseline]),this.baselineOffset=this.baseline.map(function(t,r){var n=(e.font[r]||e.font[0]).metrics,i=0;return i+=.5*n.bottom,i+="number"==typeof t?t-n.baseline:-n[t],A.normalViewport||(i*=-1),i})),null!=t.color)if(t.color||(t.color="transparent"),"string"!=typeof t.color&&isNaN(t.color)){var H;if("number"==typeof t.color[0]&&t.color.length>this.counts.length){var G=t.color.length;H=c.mallocUint8(G);for(var W=(t.color.subarray||t.color.slice).bind(t.color),Y=0;Y4||this.baselineOffset.length>1||this.align&&this.align.length>1||this.fontAtlas.length>1||this.positionOffset.length>2){var $=Math.max(.5*this.position.length||0,.25*this.color.length||0,this.baselineOffset.length||0,this.alignOffset.length||0,this.font.length||0,this.opacity.length||0,.5*this.positionOffset.length||0);this.batch=Array($);for(var J=0;J1?e.counts[J]:e.counts[0],offset:e.textOffsets.length>1?e.textOffsets[J]:e.textOffsets[0],color:e.color?e.color.length<=4?e.color:e.color.subarray(4*J,4*J+4):[0,0,0,255],opacity:Array.isArray(e.opacity)?e.opacity[J]:e.opacity,baseline:null!=e.baselineOffset[J]?e.baselineOffset[J]:e.baselineOffset[0],align:e.align?null!=e.alignOffset[J]?e.alignOffset[J]:e.alignOffset[0]:0,atlas:e.fontAtlas[J]||e.fontAtlas[0],positionOffset:e.positionOffset.length>2?e.positionOffset.subarray(2*J,2*J+2):e.positionOffset}}else this.count?this.batch=[{count:this.count,offset:0,color:this.color||[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[0]:this.opacity,baseline:this.baselineOffset[0],align:this.alignOffset?this.alignOffset[0]:0,atlas:this.fontAtlas[0],positionOffset:this.positionOffset}]:this.batch=[]},A.prototype.destroy=function(){},A.prototype.kerning=!0,A.prototype.position={constant:new Float32Array(2)},A.prototype.translate=null,A.prototype.scale=null,A.prototype.font=null,A.prototype.text="",A.prototype.positionOffset=[0,0],A.prototype.opacity=1,A.prototype.color=new Uint8Array([0,0,0,255]),A.prototype.alignOffset=[0,0],A.normalViewport=!1,A.maxAtlasSize=1024,A.atlasCanvas=document.createElement("canvas"),A.atlasContext=A.atlasCanvas.getContext("2d",{alpha:!1}),A.baseFontSize=64,A.fonts={},e.exports=A},{"bit-twiddle":33,"color-normalize":363,"css-font":82,"detect-kerning":112,"es6-weak-map":172,"flatten-vertex-data":364,"font-atlas":182,"font-measure":183,"gl-util/context":367,"is-plain-obj":426,"object-assign":634,"parse-rect":639,"parse-unit":641,"pick-by-alias":645,regl:365,"to-px":1378,"typedarray-pool":1385}],363:[function(t,e,r){"use strict";var n=t("color-rgba"),i=t("clamp"),a=t("dtype");e.exports=function(t,e){"float"!==e&&e||(e="array"),"uint"===e&&(e="uint8"),"uint_clamped"===e&&(e="uint8_clamped");var r=a(e),o=new r(4);if(t instanceof r)return Array.isArray(t)?t.slice():(o.set(t),o);var s="uint8"!==e&&"uint8_clamped"!==e;return t instanceof Uint8Array||t instanceof Uint8ClampedArray?(o[0]=t[0],o[1]=t[1],o[2]=t[2],o[3]=null!=t[3]?t[3]:255,s&&(o[0]/=255,o[1]/=255,o[2]/=255,o[3]/=255),o):(t.length&&"string"!=typeof t||((t=n(t))[0]/=255,t[1]/=255,t[2]/=255),s?(o[0]=t[0],o[1]=t[1],o[2]=t[2],o[3]=null!=t[3]?t[3]:1):(o[0]=i(Math.round(255*t[0]),0,255),o[1]=i(Math.round(255*t[1]),0,255),o[2]=i(Math.round(255*t[2]),0,255),o[3]=null==t[3]?255:i(Math.floor(255*t[3]),0,255)),o)}},{clamp:55,"color-rgba":62,dtype:116}],364:[function(t,e,r){var n=t("dtype");e.exports=function(t,e,r){if(!t)throw new TypeError("must specify data as first parameter");if(r=0|+(r||0),Array.isArray(t)&&t[0]&&"number"==typeof t[0][0]){var i,a,o,s,l=t[0].length,u=t.length*l;e&&"string"!=typeof e||(e=new(n(e||"float32"))(u+r));var c=e.length-r;if(u!==c)throw new Error("source length "+u+" ("+l+"x"+t.length+") does not match destination length "+c);for(i=0,o=r;i>>=e))<<3,(e|=r=(15<(t>>>=r))<<2)|(r=(3<(t>>>=r))<<1)|t>>>r>>1}function s(){function t(t){t:{for(var e=16;268435456>=e;e*=16)if(t<=e){t=e;break t}t=0}return 0<(e=r[o(t)>>2]).length?e.pop():new ArrayBuffer(t)}function e(t){r[o(t.byteLength)>>2].push(t)}var r=a(8,function(){return[]});return{alloc:t,free:e,allocType:function(e,r){var n=null;switch(e){case 5120:n=new Int8Array(t(r),0,r);break;case 5121:n=new Uint8Array(t(r),0,r);break;case 5122:n=new Int16Array(t(2*r),0,r);break;case 5123:n=new Uint16Array(t(2*r),0,r);break;case 5124:n=new Int32Array(t(4*r),0,r);break;case 5125:n=new Uint32Array(t(4*r),0,r);break;case 5126:n=new Float32Array(t(4*r),0,r);break;default:return null}return n.length!==r?n.subarray(0,r):n},freeType:function(t){e(t.buffer)}}}function l(t){return!!t&&"object"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&"number"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||Y(t.data))}function u(t,e,r,n,i,a){for(var o=0;o(i=s)&&(i=n.buffer.byteLength,5123===f?i>>=1:5125===f&&(i>>=2)),n.vertCount=i,i=o,0>o&&(i=4,1===(o=n.buffer.dimension)&&(i=0),2===o&&(i=1),3===o&&(i=4)),n.primType=i}function o(t){n.elementsCount--,delete s[t.id],t.buffer.destroy(),t.buffer=null}var s={},u=0,c={uint8:5121,uint16:5123};e.oes_element_index_uint&&(c.uint32=5125),i.prototype.bind=function(){this.buffer.bind()};var f=[];return{create:function(t,e){function s(t){if(t)if("number"==typeof t)u(t),f.primType=4,f.vertCount=0|t,f.type=5121;else{var e=null,r=35044,n=-1,i=-1,o=0,h=0;Array.isArray(t)||Y(t)||l(t)?e=t:("data"in t&&(e=t.data),"usage"in t&&(r=K[t.usage]),"primitive"in t&&(n=rt[t.primitive]),"count"in t&&(i=0|t.count),"type"in t&&(h=c[t.type]),"length"in t?o=0|t.length:(o=i,5123===h||5122===h?o*=2:5125!==h&&5124!==h||(o*=4))),a(f,e,r,n,i,o,h)}else u(),f.primType=4,f.vertCount=0,f.type=5121;return s}var u=r.create(null,34963,!0),f=new i(u._buffer);return n.elementsCount++,s(t),s._reglType="elements",s._elements=f,s.subdata=function(t,e){return u.subdata(t,e),s},s.destroy=function(){o(f)},s},createStream:function(t){var e=f.pop();return e||(e=new i(r.create(null,34963,!0,!1)._buffer)),a(e,t,35040,-1,-1,0,0),e},destroyStream:function(t){f.push(t)},getElements:function(t){return"function"==typeof t&&t._elements instanceof i?t._elements:null},clear:function(){Z(s).forEach(o)}}}function m(t){for(var e=G.allocType(5123,t.length),r=0;r>>31<<15,i=(a<<1>>>24)-127,a=a>>13&1023;e[r]=-24>i?n:-14>i?n+(a+1024>>-14-i):15>=i,r.height>>=i,p(r,n[i]),t.mipmask|=1<e;++e)t.images[e]=null;return t}function L(t){for(var e=t.images,r=0;re){for(var r=0;r=--this.refCount&&R(this)}}),o.profile&&(a.getTotalTextureSize=function(){var t=0;return Object.keys(vt).forEach(function(e){t+=vt[e].stats.size}),t}),{create2D:function(e,r){function n(t,e){var r=i.texInfo;O.call(r);var a=C();return"number"==typeof t?T(a,0|t,"number"==typeof e?0|e:0|t):t?(z(r,t),E(a,t)):T(a,1,1),r.genMipmaps&&(a.mipmask=(a.width<<1)-1),i.mipmask=a.mipmask,u(i,a),i.internalformat=a.internalformat,n.width=a.width,n.height=a.height,I(i),S(a,3553),D(r,3553),N(),L(a),o.profile&&(i.stats.size=A(i.internalformat,i.type,a.width,a.height,r.genMipmaps,!1)),n.format=tt[i.internalformat],n.type=et[i.type],n.mag=rt[r.magFilter],n.min=nt[r.minFilter],n.wrapS=it[r.wrapS],n.wrapT=it[r.wrapT],n}var i=new P(3553);return vt[i.id]=i,a.textureCount++,n(e,r),n.subimage=function(t,e,r,a){e|=0,r|=0,a|=0;var o=v();return u(o,i),o.width=0,o.height=0,p(o,t),o.width=o.width||(i.width>>a)-e,o.height=o.height||(i.height>>a)-r,I(i),d(o,3553,e,r,a),N(),M(o),n},n.resize=function(e,r){var a=0|e,s=0|r||a;if(a===i.width&&s===i.height)return n;n.width=i.width=a,n.height=i.height=s,I(i);for(var l,u=i.channels,c=i.type,f=0;i.mipmask>>f;++f){var h=a>>f,p=s>>f;if(!h||!p)break;l=G.zero.allocType(c,h*p*u),t.texImage2D(3553,f,i.format,h,p,0,i.format,i.type,l),l&&G.zero.freeType(l)}return N(),o.profile&&(i.stats.size=A(i.internalformat,i.type,a,s,!1,!1)),n},n._reglType="texture2d",n._texture=i,o.profile&&(n.stats=i.stats),n.destroy=function(){i.decRef()},n},createCube:function(e,r,n,i,s,l){function f(t,e,r,n,i,a){var s,l=h.texInfo;for(O.call(l),s=0;6>s;++s)m[s]=C();if("number"!=typeof t&&t){if("object"==typeof t)if(e)E(m[0],t),E(m[1],e),E(m[2],r),E(m[3],n),E(m[4],i),E(m[5],a);else if(z(l,t),c(h,t),"faces"in t)for(t=t.faces,s=0;6>s;++s)u(m[s],h),E(m[s],t[s]);else for(s=0;6>s;++s)E(m[s],t)}else for(t=0|t||1,s=0;6>s;++s)T(m[s],t,t);for(u(h,m[0]),h.mipmask=l.genMipmaps?(m[0].width<<1)-1:m[0].mipmask,h.internalformat=m[0].internalformat,f.width=m[0].width,f.height=m[0].height,I(h),s=0;6>s;++s)S(m[s],34069+s);for(D(l,34067),N(),o.profile&&(h.stats.size=A(h.internalformat,h.type,f.width,f.height,l.genMipmaps,!0)),f.format=tt[h.internalformat],f.type=et[h.type],f.mag=rt[l.magFilter],f.min=nt[l.minFilter],f.wrapS=it[l.wrapS],f.wrapT=it[l.wrapT],s=0;6>s;++s)L(m[s]);return f}var h=new P(34067);vt[h.id]=h,a.cubeCount++;var m=Array(6);return f(e,r,n,i,s,l),f.subimage=function(t,e,r,n,i){r|=0,n|=0,i|=0;var a=v();return u(a,h),a.width=0,a.height=0,p(a,e),a.width=a.width||(h.width>>i)-r,a.height=a.height||(h.height>>i)-n,I(h),d(a,34069+t,r,n,i),N(),M(a),f},f.resize=function(e){if((e|=0)!==h.width){f.width=h.width=e,f.height=h.height=e,I(h);for(var r=0;6>r;++r)for(var n=0;h.mipmask>>n;++n)t.texImage2D(34069+r,n,h.format,e>>n,e>>n,0,h.format,h.type,null);return N(),o.profile&&(h.stats.size=A(h.internalformat,h.type,f.width,f.height,!1,!0)),f}},f._reglType="textureCube",f._texture=h,o.profile&&(f.stats=h.stats),f.destroy=function(){h.decRef()},f},clear:function(){for(var e=0;er;++r)if(0!=(e.mipmask&1<>r,e.height>>r,0,e.internalformat,e.type,null);else for(var n=0;6>n;++n)t.texImage2D(34069+n,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);D(e.texInfo,e.target)})}}}function k(t,e,r,n,i,a){function o(t,e,r){this.target=t,this.texture=e,this.renderbuffer=r;var n=t=0;e?(t=e.width,n=e.height):r&&(t=r.width,n=r.height),this.width=t,this.height=n}function s(t){t&&(t.texture&&t.texture._texture.decRef(),t.renderbuffer&&t.renderbuffer._renderbuffer.decRef())}function l(t,e,r){t&&(t.texture?t.texture._texture.refCount+=1:t.renderbuffer._renderbuffer.refCount+=1)}function u(e,r){r&&(r.texture?t.framebufferTexture2D(36160,e,r.target,r.texture._texture.texture,0):t.framebufferRenderbuffer(36160,e,36161,r.renderbuffer._renderbuffer.renderbuffer))}function c(t){var e=3553,r=null,n=null,i=t;return"object"==typeof t&&(i=t.data,"target"in t&&(e=0|t.target)),"texture2d"===(t=i._reglType)?r=i:"textureCube"===t?r=i:"renderbuffer"===t&&(n=i,e=36161),new o(e,r,n)}function f(t,e,r,a,s){return r?((t=n.create2D({width:t,height:e,format:a,type:s}))._texture.refCount=0,new o(3553,t,null)):((t=i.create({width:t,height:e,format:a}))._renderbuffer.refCount=0,new o(36161,null,t))}function h(t){return t&&(t.texture||t.renderbuffer)}function p(t,e,r){t&&(t.texture?t.texture.resize(e,r):t.renderbuffer&&t.renderbuffer.resize(e,r))}function d(){this.id=A++,M[this.id]=this,this.framebuffer=t.createFramebuffer(),this.height=this.width=0,this.colorAttachments=[],this.depthStencilAttachment=this.stencilAttachment=this.depthAttachment=null}function m(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function g(e){t.deleteFramebuffer(e.framebuffer),e.framebuffer=null,a.framebufferCount--,delete M[e.id]}function v(e){var n;t.bindFramebuffer(36160,e.framebuffer);var i=e.colorAttachments;for(n=0;ni;++i){for(u=0;ut;++t)r[t].resize(n);return e.width=e.height=n,e},_reglType:"framebufferCube",destroy:function(){r.forEach(function(t){t.destroy()})}})},clear:function(){Z(M).forEach(g)},restore:function(){Z(M).forEach(function(e){e.framebuffer=t.createFramebuffer(),v(e)})}})}function T(){this.w=this.z=this.y=this.x=this.state=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=5126,this.divisor=this.stride=this.offset=0}function E(t,e,r,n){function i(t,e,r,n){this.name=t,this.id=e,this.location=r,this.info=n}function a(t,e){for(var r=0;rt&&(t=e.stats.uniformsCount)}),t},r.getMaxAttributesCount=function(){var t=0;return h.forEach(function(e){e.stats.attributesCount>t&&(t=e.stats.attributesCount)}),t}),{clear:function(){var e=t.deleteShader.bind(t);Z(u).forEach(e),u={},Z(c).forEach(e),c={},h.forEach(function(e){t.deleteProgram(e.program)}),h.length=0,f={},r.shaderCount=0},program:function(t,e,n){var i=f[e];i||(i=f[e]={});var a=i[t];return a||(a=new s(e,t),r.shaderCount++,l(a),i[t]=a,h.push(a)),a},restore:function(){u={},c={};for(var t=0;t"+e+"?"+i+".constant["+e+"]:0;"}).join(""),"}}else{","if(",o,"(",i,".buffer)){",c,"=",s,".createStream(",34962,",",i,".buffer);","}else{",c,"=",s,".getBuffer(",i,".buffer);","}",f,'="type" in ',i,"?",a.glTypes,"[",i,".type]:",c,".dtype;",l.normalized,"=!!",i,".normalized;"),n("size"),n("offset"),n("stride"),n("divisor"),r("}}"),r.exit("if(",l.isStream,"){",s,".destroyStream(",c,");","}"),l})}),o}function k(t,e,r,n,i){var o=_(t),s=function(t,e,r){function n(t){if(t in i){var r=i[t];t=!0;var n,o,s=0|r.x,l=0|r.y;return"width"in r?n=0|r.width:t=!1,"height"in r?o=0|r.height:t=!1,new P(!t&&e&&e.thisDep,!t&&e&&e.contextDep,!t&&e&&e.propDep,function(t,e){var i=t.shared.context,a=n;"width"in r||(a=e.def(i,".","framebufferWidth","-",s));var u=o;return"height"in r||(u=e.def(i,".","framebufferHeight","-",l)),[s,l,a,u]})}if(t in a){var u=a[t];return t=R(u,function(t,e){var r=t.invoke(e,u),n=t.shared.context,i=e.def(r,".x|0"),a=e.def(r,".y|0");return[i,a,e.def('"width" in ',r,"?",r,".width|0:","(",n,".","framebufferWidth","-",i,")"),r=e.def('"height" in ',r,"?",r,".height|0:","(",n,".","framebufferHeight","-",a,")")]}),e&&(t.thisDep=t.thisDep||e.thisDep,t.contextDep=t.contextDep||e.contextDep,t.propDep=t.propDep||e.propDep),t}return e?new P(e.thisDep,e.contextDep,e.propDep,function(t,e){var r=t.shared.context;return[0,0,e.def(r,".","framebufferWidth"),e.def(r,".","framebufferHeight")]}):null}var i=t.static,a=t.dynamic;if(t=n("viewport")){var o=t;t=new P(t.thisDep,t.contextDep,t.propDep,function(t,e){var r=o.append(t,e),n=t.shared.context;return e.set(n,".viewportWidth",r[2]),e.set(n,".viewportHeight",r[3]),r})}return{viewport:t,scissor_box:n("scissor.box")}}(t,o),l=A(t),u=function(t,e){var r=t.static,n=t.dynamic,i={};return nt.forEach(function(t){function e(e,a){if(t in r){var s=e(r[t]);i[o]=N(function(){return s})}else if(t in n){var l=n[t];i[o]=R(l,function(t,e){return a(t,e,t.invoke(e,l))})}}var o=v(t);switch(t){case"cull.enable":case"blend.enable":case"dither":case"stencil.enable":case"depth.enable":case"scissor.enable":case"polygonOffset.enable":case"sample.alpha":case"sample.enable":case"depth.mask":return e(function(t){return t},function(t,e,r){return r});case"depth.func":return e(function(t){return At[t]},function(t,e,r){return e.def(t.constants.compareFuncs,"[",r,"]")});case"depth.range":return e(function(t){return t},function(t,e,r){return[e.def("+",r,"[0]"),e=e.def("+",r,"[1]")]});case"blend.func":return e(function(t){return[wt["srcRGB"in t?t.srcRGB:t.src],wt["dstRGB"in t?t.dstRGB:t.dst],wt["srcAlpha"in t?t.srcAlpha:t.src],wt["dstAlpha"in t?t.dstAlpha:t.dst]]},function(t,e,r){function n(t,n){return e.def('"',t,n,'" in ',r,"?",r,".",t,n,":",r,".",t)}t=t.constants.blendFuncs;var i=n("src","RGB"),a=n("dst","RGB"),o=(i=e.def(t,"[",i,"]"),e.def(t,"[",n("src","Alpha"),"]"));return[i,a=e.def(t,"[",a,"]"),o,t=e.def(t,"[",n("dst","Alpha"),"]")]});case"blend.equation":return e(function(t){return"string"==typeof t?[$[t],$[t]]:"object"==typeof t?[$[t.rgb],$[t.alpha]]:void 0},function(t,e,r){var n=t.constants.blendEquations,i=e.def(),a=e.def();return(t=t.cond("typeof ",r,'==="string"')).then(i,"=",a,"=",n,"[",r,"];"),t.else(i,"=",n,"[",r,".rgb];",a,"=",n,"[",r,".alpha];"),e(t),[i,a]});case"blend.color":return e(function(t){return a(4,function(e){return+t[e]})},function(t,e,r){return a(4,function(t){return e.def("+",r,"[",t,"]")})});case"stencil.mask":return e(function(t){return 0|t},function(t,e,r){return e.def(r,"|0")});case"stencil.func":return e(function(t){return[At[t.cmp||"keep"],t.ref||0,"mask"in t?t.mask:-1]},function(t,e,r){return[t=e.def('"cmp" in ',r,"?",t.constants.compareFuncs,"[",r,".cmp]",":",7680),e.def(r,".ref|0"),e=e.def('"mask" in ',r,"?",r,".mask|0:-1")]});case"stencil.opFront":case"stencil.opBack":return e(function(e){return["stencil.opBack"===t?1029:1028,Mt[e.fail||"keep"],Mt[e.zfail||"keep"],Mt[e.zpass||"keep"]]},function(e,r,n){function i(t){return r.def('"',t,'" in ',n,"?",a,"[",n,".",t,"]:",7680)}var a=e.constants.stencilOps;return["stencil.opBack"===t?1029:1028,i("fail"),i("zfail"),i("zpass")]});case"polygonOffset.offset":return e(function(t){return[0|t.factor,0|t.units]},function(t,e,r){return[e.def(r,".factor|0"),e=e.def(r,".units|0")]});case"cull.face":return e(function(t){var e=0;return"front"===t?e=1028:"back"===t&&(e=1029),e},function(t,e,r){return e.def(r,'==="front"?',1028,":",1029)});case"lineWidth":return e(function(t){return t},function(t,e,r){return r});case"frontFace":return e(function(t){return kt[t]},function(t,e,r){return e.def(r+'==="cw"?2304:2305')});case"colorMask":return e(function(t){return t.map(function(t){return!!t})},function(t,e,r){return a(4,function(t){return"!!"+r+"["+t+"]"})});case"sample.coverage":return e(function(t){return["value"in t?t.value:1,!!t.invert]},function(t,e,r){return[e.def('"value" in ',r,"?+",r,".value:1"),e=e.def("!!",r,".invert")]})}}),i}(t),c=w(t),f=s.viewport;return f&&(u.viewport=f),(s=s[f=v("scissor.box")])&&(u[f]=s),(o={framebuffer:o,draw:l,shader:c,state:u,dirty:s=0>1)",s],");")}function e(){r(l,".drawArraysInstancedANGLE(",[d,m,g,s],");")}p?y?t():(r("if(",p,"){"),t(),r("}else{"),e(),r("}")):e()}function o(){function t(){r(c+".drawElements("+[d,g,v,m+"<<(("+v+"-5121)>>1)"]+");")}function e(){r(c+".drawArrays("+[d,m,g]+");")}p?y?t():(r("if(",p,"){"),t(),r("}else{"),e(),r("}")):e()}var s,l,u=t.shared,c=u.gl,f=u.draw,h=n.draw,p=function(){var i=h.elements,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a)):i=a.def(f,".","elements"),i&&a("if("+i+")"+c+".bindBuffer(34963,"+i+".buffer.buffer);"),i}(),d=i("primitive"),m=i("offset"),g=function(){var i=h.count,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a)):i=a.def(f,".","count"),i}();if("number"==typeof g){if(0===g)return}else r("if(",g,"){"),r.exit("}");K&&(s=i("instances"),l=t.instancing);var v=p+".type",y=h.elements&&I(h.elements);K&&("number"!=typeof s||0<=s)?"string"==typeof s?(r("if(",s,">0){"),a(),r("}else if(",s,"<0){"),o(),r("}")):a():o()}function q(t,e,r,n,i){return i=(e=b()).proc("body",i),K&&(e.instancing=i.def(e.shared.extensions,".angle_instanced_arrays")),t(e,i,r,n),e.compile().body}function H(t,e,r,n){L(t,e),B(t,e,r,n.attributes,function(){return!0}),j(t,e,r,n.uniforms,function(){return!0}),V(t,e,e,r)}function G(t,e,r,n){function i(){return!0}t.batchId="a1",L(t,e),B(t,e,r,n.attributes,i),j(t,e,r,n.uniforms,i),V(t,e,e,r)}function W(t,e,r,n){function i(t){return t.contextDep&&o||t.propDep}function a(t){return!i(t)}L(t,e);var o=r.contextDep,s=e.def(),l=e.def();t.shared.props=l,t.batchId=s;var u=t.scope(),c=t.scope();e(u.entry,"for(",s,"=0;",s,"<","a1",";++",s,"){",l,"=","a0","[",s,"];",c,"}",u.exit),r.needsContext&&T(t,c,r.context),r.needsFramebuffer&&E(t,c,r.framebuffer),C(t,c,r.state,i),r.profile&&i(r.profile)&&F(t,c,r,!1,!0),n?(B(t,u,r,n.attributes,a),B(t,c,r,n.attributes,i),j(t,u,r,n.uniforms,a),j(t,c,r,n.uniforms,i),V(t,u,c,r)):(e=t.global.def("{}"),n=r.shader.progVar.append(t,c),l=c.def(n,".id"),u=c.def(e,"[",l,"]"),c(t.shared.gl,".useProgram(",n,".program);","if(!",u,"){",u,"=",e,"[",l,"]=",t.link(function(e){return q(G,t,r,e,2)}),"(",n,");}",u,".call(this,a0[",s,"],",s,");"))}function Y(t,r){function n(e){var n=r.shader[e];n&&i.set(a.shader,"."+e,n.append(t,i))}var i=t.proc("scope",3);t.batchId="a2";var a=t.shared,o=a.current;T(t,i,r.context),r.framebuffer&&r.framebuffer.append(t,i),D(Object.keys(r.state)).forEach(function(e){var n=r.state[e].append(t,i);g(n)?n.forEach(function(r,n){i.set(t.next[e],"["+n+"]",r)}):i.set(a.next,"."+e,n)}),F(t,i,r,!0,!0),["elements","offset","count","instances","primitive"].forEach(function(e){var n=r.draw[e];n&&i.set(a.draw,"."+e,""+n.append(t,i))}),Object.keys(r.uniforms).forEach(function(n){i.set(a.uniforms,"["+e.id(n)+"]",r.uniforms[n].append(t,i))}),Object.keys(r.attributes).forEach(function(e){var n=r.attributes[e].append(t,i),a=t.scopeAttrib(e);Object.keys(new X).forEach(function(t){i.set(a,"."+t,n[t])})}),n("vert"),n("frag"),0=--this.refCount&&o(this)},i.profile&&(n.getTotalRenderbufferSize=function(){var t=0;return Object.keys(c).forEach(function(e){t+=c[e].stats.size}),t}),{create:function(e,r){function o(e,r){var n=0,a=0,c=32854;if("object"==typeof e&&e?("shape"in e?(n=0|(a=e.shape)[0],a=0|a[1]):("radius"in e&&(n=a=0|e.radius),"width"in e&&(n=0|e.width),"height"in e&&(a=0|e.height)),"format"in e&&(c=s[e.format])):"number"==typeof e?(n=0|e,a="number"==typeof r?0|r:n):e||(n=a=1),n!==u.width||a!==u.height||c!==u.format)return o.width=u.width=n,o.height=u.height=a,u.format=c,t.bindRenderbuffer(36161,u.renderbuffer),t.renderbufferStorage(36161,c,n,a),i.profile&&(u.stats.size=gt[u.format]*u.width*u.height),o.format=l[u.format],o}var u=new a(t.createRenderbuffer());return c[u.id]=u,n.renderbufferCount++,o(e,r),o.resize=function(e,r){var n=0|e,a=0|r||n;return n===u.width&&a===u.height?o:(o.width=u.width=n,o.height=u.height=a,t.bindRenderbuffer(36161,u.renderbuffer),t.renderbufferStorage(36161,u.format,n,a),i.profile&&(u.stats.size=gt[u.format]*u.width*u.height),o)},o._reglType="renderbuffer",o._renderbuffer=u,i.profile&&(o.stats=u.stats),o.destroy=function(){u.decRef()},o},clear:function(){Z(c).forEach(o)},restore:function(){Z(c).forEach(function(e){e.renderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,e.renderbuffer),t.renderbufferStorage(36161,e.format,e.width,e.height)}),t.bindRenderbuffer(36161,null)}}},yt=[];yt[6408]=4,yt[6407]=3;var xt=[];xt[5121]=1,xt[5126]=4,xt[36193]=2;var bt=["x","y","z","w"],_t="blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset".split(" "),wt={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},At={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},Mt={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},kt={cw:2304,ccw:2305},Tt=new P(!1,!1,!1,function(){});return function(t){function e(){if(0===X.length)w&&w.update(),Q=null;else{Q=q.next(e),f();for(var t=X.length-1;0<=t;--t){var r=X[t];r&&r(O,null,0)}g.flush(),w&&w.update()}}function r(){!Q&&0=X.length&&n()}}}}function c(){var t=Y.viewport,e=Y.scissor_box;t[0]=t[1]=e[0]=e[1]=0,O.viewportWidth=O.framebufferWidth=O.drawingBufferWidth=t[2]=e[2]=g.drawingBufferWidth,O.viewportHeight=O.framebufferHeight=O.drawingBufferHeight=t[3]=e[3]=g.drawingBufferHeight}function f(){O.tick+=1,O.time=m(),c(),G.procs.poll()}function h(){c(),G.procs.refresh(),w&&w.update()}function m(){return(H()-A)/1e3}if(!(t=i(t)))return null;var g=t.gl,v=g.getContextAttributes();g.isContextLost();var y=function(t,e){function r(e){var r;e=e.toLowerCase();try{r=n[e]=t.getExtension(e)}catch(t){}return!!r}for(var n={},i=0;ie;++e)tt(j({framebuffer:t.framebuffer.faces[e]},t),l);else tt(t,l);else l(0,t)},prop:U.define.bind(null,1),context:U.define.bind(null,2),this:U.define.bind(null,3),draw:s({}),buffer:function(t){return D.create(t,34962,!1,!1)},elements:function(t){return P.create(t,!1)},texture:N.create2D,cube:N.createCube,renderbuffer:R.create,framebuffer:V.create,framebufferCube:V.createCube,attributes:v,frame:u,on:function(t,e){var r;switch(t){case"frame":return u(e);case"lost":r=$;break;case"restore":r=J;break;case"destroy":r=K}return r.push(e),{cancel:function(){for(var t=0;ts||o[1]<0||o[1]>s)throw new Error("gl-texture2d: Invalid texture size");var l=d(o,e.stride.slice()),u=0;"float32"===r?u=t.FLOAT:"float64"===r?(u=t.FLOAT,l=!1,r="float32"):"uint8"===r?u=t.UNSIGNED_BYTE:(u=t.UNSIGNED_BYTE,l=!1,r="uint8");var f,p,g=0;if(2===o.length)g=t.LUMINANCE,o=[o[0],o[1],1],e=n(e.data,o,[e.stride[0],e.stride[1],1],e.offset);else{if(3!==o.length)throw new Error("gl-texture2d: Invalid shape for texture");if(1===o[2])g=t.ALPHA;else if(2===o[2])g=t.LUMINANCE_ALPHA;else if(3===o[2])g=t.RGB;else{if(4!==o[2])throw new Error("gl-texture2d: Invalid shape for pixel coords");g=t.RGBA}}u!==t.FLOAT||t.getExtension("OES_texture_float")||(u=t.UNSIGNED_BYTE,l=!1);var v=e.size;if(l)f=0===e.offset&&e.data.length===v?e.data:e.data.subarray(e.offset,e.offset+v);else{var y=[o[2],o[2]*o[0],1];p=a.malloc(v,r);var x=n(p,o,y,0);"float32"!==r&&"float64"!==r||u!==t.UNSIGNED_BYTE?i.assign(x,e):c(x,e),f=p.subarray(0,v)}var b=m(t);t.texImage2D(t.TEXTURE_2D,0,g,o[0],o[1],0,g,u,f),l||a.free(p);return new h(t,b,o[0],o[1],g,u)}(t,e)}throw new Error("gl-texture2d: Invalid arguments for texture2d constructor")};var o=null,s=null,l=null;function u(t){return"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement||"undefined"!=typeof ImageData&&t instanceof ImageData}var c=function(t,e){i.muls(t,e,255)};function f(t,e,r){var n=t.gl,i=n.getParameter(n.MAX_TEXTURE_SIZE);if(e<0||e>i||r<0||r>i)throw new Error("gl-texture2d: Invalid texture size");return t._shape=[e,r],t.bind(),n.texImage2D(n.TEXTURE_2D,0,t.format,e,r,0,t.format,t.type,null),t._mipLevels=[0],t}function h(t,e,r,n,i,a){this.gl=t,this.handle=e,this.format=i,this.type=a,this._shape=[r,n],this._mipLevels=[0],this._magFilter=t.NEAREST,this._minFilter=t.NEAREST,this._wrapS=t.CLAMP_TO_EDGE,this._wrapT=t.CLAMP_TO_EDGE,this._anisoSamples=1;var o=this,s=[this._wrapS,this._wrapT];Object.defineProperties(s,[{get:function(){return o._wrapS},set:function(t){return o.wrapS=t}},{get:function(){return o._wrapT},set:function(t){return o.wrapT=t}}]),this._wrapVector=s;var l=[this._shape[0],this._shape[1]];Object.defineProperties(l,[{get:function(){return o._shape[0]},set:function(t){return o.width=t}},{get:function(){return o._shape[1]},set:function(t){return o.height=t}}]),this._shapeVector=l}var p=h.prototype;function d(t,e){return 3===t.length?1===e[2]&&e[1]===t[0]*t[2]&&e[0]===t[2]:1===e[0]&&e[1]===t[0]}function m(t){var e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}function g(t,e,r,n,i){var a=t.getParameter(t.MAX_TEXTURE_SIZE);if(e<0||e>a||r<0||r>a)throw new Error("gl-texture2d: Invalid texture shape");if(i===t.FLOAT&&!t.getExtension("OES_texture_float"))throw new Error("gl-texture2d: Floating point textures not supported on this platform");var o=m(t);return t.texImage2D(t.TEXTURE_2D,0,n,e,r,0,n,i,null),new h(t,o,e,r,n,i)}Object.defineProperties(p,{minFilter:{get:function(){return this._minFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension("OES_texture_float_linear")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error("gl-texture2d: Unknown filter mode "+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t),this._minFilter=t}},magFilter:{get:function(){return this._magFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension("OES_texture_float_linear")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error("gl-texture2d: Unknown filter mode "+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t),this._magFilter=t}},mipSamples:{get:function(){return this._anisoSamples},set:function(t){var e=this._anisoSamples;if(this._anisoSamples=0|Math.max(t,1),e!==this._anisoSamples){var r=this.gl.getExtension("EXT_texture_filter_anisotropic");r&&this.gl.texParameterf(this.gl.TEXTURE_2D,r.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,t),this._wrapS=t}},wrapT:{get:function(){return this._wrapT},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,t),this._wrapT=t}},wrap:{get:function(){return this._wrapVector},set:function(t){if(Array.isArray(t)||(t=[t,t]),2!==t.length)throw new Error("gl-texture2d: Must specify wrap mode for rows and columns");for(var e=0;e<2;++e)if(l.indexOf(t[e])<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);this._wrapS=t[0],this._wrapT=t[1];var r=this.gl;return this.bind(),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,this._wrapS),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,this._wrapT),t}},shape:{get:function(){return this._shapeVector},set:function(t){if(Array.isArray(t)){if(2!==t.length)throw new Error("gl-texture2d: Invalid texture shape")}else t=[0|t,0|t];return f(this,0|t[0],0|t[1]),[0|t[0],0|t[1]]}},width:{get:function(){return this._shape[0]},set:function(t){return f(this,t|=0,this._shape[1]),t}},height:{get:function(){return this._shape[1]},set:function(t){return t|=0,f(this,this._shape[0],t),t}}}),p.bind=function(t){var e=this.gl;return void 0!==t&&e.activeTexture(e.TEXTURE0+(0|t)),e.bindTexture(e.TEXTURE_2D,this.handle),void 0!==t?0|t:e.getParameter(e.ACTIVE_TEXTURE)-e.TEXTURE0},p.dispose=function(){this.gl.deleteTexture(this.handle)},p.generateMipmap=function(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var t=Math.min(this._shape[0],this._shape[1]),e=0;t>0;++e,t>>>=1)this._mipLevels.indexOf(e)<0&&this._mipLevels.push(e)},p.setPixels=function(t,e,r,o){var s=this.gl;this.bind(),Array.isArray(e)?(o=r,r=0|e[1],e=0|e[0]):(e=e||0,r=r||0),o=o||0;var l=u(t)?t:t.raw;if(l){this._mipLevels.indexOf(o)<0?(s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,this.type,l),this._mipLevels.push(o)):s.texSubImage2D(s.TEXTURE_2D,o,e,r,this.format,this.type,l)}else{if(!(t.shape&&t.stride&&t.data))throw new Error("gl-texture2d: Unsupported data type");if(t.shape.length<2||e+t.shape[1]>this._shape[1]>>>o||r+t.shape[0]>this._shape[0]>>>o||e<0||r<0)throw new Error("gl-texture2d: Texture dimensions are out of bounds");!function(t,e,r,o,s,l,u,f){var h=f.dtype,p=f.shape.slice();if(p.length<2||p.length>3)throw new Error("gl-texture2d: Invalid ndarray, must be 2d or 3d");var m=0,g=0,v=d(p,f.stride.slice());"float32"===h?m=t.FLOAT:"float64"===h?(m=t.FLOAT,v=!1,h="float32"):"uint8"===h?m=t.UNSIGNED_BYTE:(m=t.UNSIGNED_BYTE,v=!1,h="uint8");if(2===p.length)g=t.LUMINANCE,p=[p[0],p[1],1],f=n(f.data,p,[f.stride[0],f.stride[1],1],f.offset);else{if(3!==p.length)throw new Error("gl-texture2d: Invalid shape for texture");if(1===p[2])g=t.ALPHA;else if(2===p[2])g=t.LUMINANCE_ALPHA;else if(3===p[2])g=t.RGB;else{if(4!==p[2])throw new Error("gl-texture2d: Invalid shape for pixel coords");g=t.RGBA}p[2]}g!==t.LUMINANCE&&g!==t.ALPHA||s!==t.LUMINANCE&&s!==t.ALPHA||(g=s);if(g!==s)throw new Error("gl-texture2d: Incompatible texture format for setPixels");var y=f.size,x=u.indexOf(o)<0;x&&u.push(o);if(m===l&&v)0===f.offset&&f.data.length===y?x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,f.data):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,f.data):x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,f.data.subarray(f.offset,f.offset+y)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,f.data.subarray(f.offset,f.offset+y));else{var b;b=l===t.FLOAT?a.mallocFloat32(y):a.mallocUint8(y);var _=n(b,p,[p[2],p[2]*p[0],1]);m===t.FLOAT&&l===t.UNSIGNED_BYTE?c(_,f):i.assign(_,f),x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,b.subarray(0,y)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,b.subarray(0,y)),l===t.FLOAT?a.freeFloat32(b):a.freeUint8(b)}}(s,e,r,o,this.format,this.type,this._mipLevels,t)}}},{ndarray:630,"ndarray-ops":624,"typedarray-pool":1385}],367:[function(t,e,r){"use strict";var n=t("pick-by-alias");function i(t){if(t.container)if(t.container==document.body)document.body.style.width||(t.canvas.width=t.width||t.pixelRatio*window.innerWidth),document.body.style.height||(t.canvas.height=t.height||t.pixelRatio*window.innerHeight);else{var e=t.container.getBoundingClientRect();t.canvas.width=t.width||e.right-e.left,t.canvas.height=t.height||e.bottom-e.top}}function a(t){return"function"==typeof t.getContext&&"width"in t&&"height"in t}e.exports=function(t){var e;if(t?"string"==typeof t&&(t={container:t}):t={},a(t)?t={container:t}:t="string"==typeof(e=t).nodeName&&"function"==typeof e.appendChild&&"function"==typeof e.getBoundingClientRect?{container:t}:function(t){return"function"==typeof t.drawArrays||"function"==typeof t.drawElements}(t)?{gl:t}:n(t,{container:"container target element el canvas holder parent parentNode wrapper use ref root node",gl:"gl context webgl glContext",attrs:"attributes attrs contextAttributes",pixelRatio:"pixelRatio pxRatio px ratio pxratio pixelratio"},!0),t.pixelRatio||(t.pixelRatio=window.pixelRatio||1),t.gl)return t.gl;if(t.canvas&&(t.container=t.canvas.parentNode),t.container){if("string"==typeof t.container){var r=document.querySelector(t.container);if(!r)throw Error("Element "+t.container+" is not found");t.container=r}a(t.container)?(t.canvas=t.container,t.container=t.canvas.parentNode):t.canvas||(t.canvas=document.createElement("canvas"),t.container.appendChild(t.canvas),i(t))}else t.canvas||(t.container=document.body||document.documentElement,t.canvas=document.createElement("canvas"),t.canvas.style.position="absolute",t.canvas.style.top=0,t.canvas.style.left=0,t.container.appendChild(t.canvas),i(t));if(!t.gl)try{t.gl=t.canvas.getContext("webgl",t.attrs)}catch(e){try{t.gl=t.canvas.getContext("experimental-webgl",t.attrs)}catch(e){t.gl=t.canvas.getContext("webgl-experimental",t.attrs)}}return t.gl}},{"pick-by-alias":645}],368:[function(t,e,r){"use strict";e.exports=function(t,e,r){e?e.bind():t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);var n=0|t.getParameter(t.MAX_VERTEX_ATTRIBS);if(r){if(r.length>n)throw new Error("gl-vao: Too many vertex attributes");for(var i=0;i0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=n*o,t[2]=i*o,t[3]=a*o);return t}},{}],394:[function(t,e,r){var n=t("./normalize"),i=t("./scale");e.exports=function(t,e){return e=e||1,t[0]=Math.random(),t[1]=Math.random(),t[2]=Math.random(),t[3]=Math.random(),n(t,t),i(t,t,e),t}},{"./normalize":393,"./scale":395}],395:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}},{}],396:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}},{}],397:[function(t,e,r){e.exports=function(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}},{}],398:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return r*r+n*n+i*i+a*a}},{}],399:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i}},{}],400:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}},{}],401:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}},{}],402:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],u=r[3],c=u*n+s*a-l*i,f=u*i+l*n-o*a,h=u*a+o*i-s*n,p=-o*n-s*i-l*a;return t[0]=c*u+p*-o+f*-l-h*-s,t[1]=f*u+p*-s+h*-o-c*-l,t[2]=h*u+p*-l+c*-s-f*-o,t[3]=e[3],t}},{}],403:[function(t,e,r){e.exports=function(t,e,r,a){return n[0]=a,n[1]=r,n[2]=e,n[3]=t,i[0]};var n=new Uint8Array(4),i=new Float32Array(n.buffer)},{}],404:[function(t,e,r){var n=t("glsl-tokenizer"),i=t("atob-lite");e.exports=function(t){for(var e=Array.isArray(t)?t:n(t),r=0;r0)continue;r=t.slice(0,1).join("")}return R(r),O+=r.length,(E=E.slice(r.length)).length}}function H(){return/[^a-fA-F0-9]/.test(e)?(R(E.join("")),T=l,M):(E.push(e),r=e,M+1)}function G(){return"."===e?(E.push(e),T=m,r=e,M+1):/[eE]/.test(e)?(E.push(e),T=m,r=e,M+1):"x"===e&&1===E.length&&"0"===E[0]?(T=_,E.push(e),r=e,M+1):/[^\d]/.test(e)?(R(E.join("")),T=l,M):(E.push(e),r=e,M+1)}function W(){return"f"===e&&(E.push(e),r=e,M+=1),/[eE]/.test(e)?(E.push(e),r=e,M+1):"-"===e&&/[eE]/.test(r)?(E.push(e),r=e,M+1):/[^\d]/.test(e)?(R(E.join("")),T=l,M):(E.push(e),r=e,M+1)}function Y(){if(/[^\d\w_]/.test(e)){var t=E.join("");return T=N.indexOf(t)>-1?y:I.indexOf(t)>-1?v:g,R(E.join("")),T=l,M}return E.push(e),r=e,M+1}};var n=t("./lib/literals"),i=t("./lib/operators"),a=t("./lib/builtins"),o=t("./lib/literals-300es"),s=t("./lib/builtins-300es"),l=999,u=9999,c=0,f=1,h=2,p=3,d=4,m=5,g=6,v=7,y=8,x=9,b=10,_=11,w=["block-comment","line-comment","preprocessor","operator","integer","float","ident","builtin","keyword","whitespace","eof","integer"]},{"./lib/builtins":407,"./lib/builtins-300es":406,"./lib/literals":409,"./lib/literals-300es":408,"./lib/operators":410}],406:[function(t,e,r){var n=t("./builtins");n=n.slice().filter(function(t){return!/^(gl\_|texture)/.test(t)}),e.exports=n.concat(["gl_VertexID","gl_InstanceID","gl_Position","gl_PointSize","gl_FragCoord","gl_FrontFacing","gl_FragDepth","gl_PointCoord","gl_MaxVertexAttribs","gl_MaxVertexUniformVectors","gl_MaxVertexOutputVectors","gl_MaxFragmentInputVectors","gl_MaxVertexTextureImageUnits","gl_MaxCombinedTextureImageUnits","gl_MaxTextureImageUnits","gl_MaxFragmentUniformVectors","gl_MaxDrawBuffers","gl_MinProgramTexelOffset","gl_MaxProgramTexelOffset","gl_DepthRangeParameters","gl_DepthRange","trunc","round","roundEven","isnan","isinf","floatBitsToInt","floatBitsToUint","intBitsToFloat","uintBitsToFloat","packSnorm2x16","unpackSnorm2x16","packUnorm2x16","unpackUnorm2x16","packHalf2x16","unpackHalf2x16","outerProduct","transpose","determinant","inverse","texture","textureSize","textureProj","textureLod","textureOffset","texelFetch","texelFetchOffset","textureProjOffset","textureLodOffset","textureProjLod","textureProjLodOffset","textureGrad","textureGradOffset","textureProjGrad","textureProjGradOffset"])},{"./builtins":407}],407:[function(t,e,r){e.exports=["abs","acos","all","any","asin","atan","ceil","clamp","cos","cross","dFdx","dFdy","degrees","distance","dot","equal","exp","exp2","faceforward","floor","fract","gl_BackColor","gl_BackLightModelProduct","gl_BackLightProduct","gl_BackMaterial","gl_BackSecondaryColor","gl_ClipPlane","gl_ClipVertex","gl_Color","gl_DepthRange","gl_DepthRangeParameters","gl_EyePlaneQ","gl_EyePlaneR","gl_EyePlaneS","gl_EyePlaneT","gl_Fog","gl_FogCoord","gl_FogFragCoord","gl_FogParameters","gl_FragColor","gl_FragCoord","gl_FragData","gl_FragDepth","gl_FragDepthEXT","gl_FrontColor","gl_FrontFacing","gl_FrontLightModelProduct","gl_FrontLightProduct","gl_FrontMaterial","gl_FrontSecondaryColor","gl_LightModel","gl_LightModelParameters","gl_LightModelProducts","gl_LightProducts","gl_LightSource","gl_LightSourceParameters","gl_MaterialParameters","gl_MaxClipPlanes","gl_MaxCombinedTextureImageUnits","gl_MaxDrawBuffers","gl_MaxFragmentUniformComponents","gl_MaxLights","gl_MaxTextureCoords","gl_MaxTextureImageUnits","gl_MaxTextureUnits","gl_MaxVaryingFloats","gl_MaxVertexAttribs","gl_MaxVertexTextureImageUnits","gl_MaxVertexUniformComponents","gl_ModelViewMatrix","gl_ModelViewMatrixInverse","gl_ModelViewMatrixInverseTranspose","gl_ModelViewMatrixTranspose","gl_ModelViewProjectionMatrix","gl_ModelViewProjectionMatrixInverse","gl_ModelViewProjectionMatrixInverseTranspose","gl_ModelViewProjectionMatrixTranspose","gl_MultiTexCoord0","gl_MultiTexCoord1","gl_MultiTexCoord2","gl_MultiTexCoord3","gl_MultiTexCoord4","gl_MultiTexCoord5","gl_MultiTexCoord6","gl_MultiTexCoord7","gl_Normal","gl_NormalMatrix","gl_NormalScale","gl_ObjectPlaneQ","gl_ObjectPlaneR","gl_ObjectPlaneS","gl_ObjectPlaneT","gl_Point","gl_PointCoord","gl_PointParameters","gl_PointSize","gl_Position","gl_ProjectionMatrix","gl_ProjectionMatrixInverse","gl_ProjectionMatrixInverseTranspose","gl_ProjectionMatrixTranspose","gl_SecondaryColor","gl_TexCoord","gl_TextureEnvColor","gl_TextureMatrix","gl_TextureMatrixInverse","gl_TextureMatrixInverseTranspose","gl_TextureMatrixTranspose","gl_Vertex","greaterThan","greaterThanEqual","inversesqrt","length","lessThan","lessThanEqual","log","log2","matrixCompMult","max","min","mix","mod","normalize","not","notEqual","pow","radians","reflect","refract","sign","sin","smoothstep","sqrt","step","tan","texture2D","texture2DLod","texture2DProj","texture2DProjLod","textureCube","textureCubeLod","texture2DLodEXT","texture2DProjLodEXT","textureCubeLodEXT","texture2DGradEXT","texture2DProjGradEXT","textureCubeGradEXT"]},{}],408:[function(t,e,r){var n=t("./literals");e.exports=n.slice().concat(["layout","centroid","smooth","case","mat2x2","mat2x3","mat2x4","mat3x2","mat3x3","mat3x4","mat4x2","mat4x3","mat4x4","uint","uvec2","uvec3","uvec4","samplerCubeShadow","sampler2DArray","sampler2DArrayShadow","isampler2D","isampler3D","isamplerCube","isampler2DArray","usampler2D","usampler3D","usamplerCube","usampler2DArray","coherent","restrict","readonly","writeonly","resource","atomic_uint","noperspective","patch","sample","subroutine","common","partition","active","filter","image1D","image2D","image3D","imageCube","iimage1D","iimage2D","iimage3D","iimageCube","uimage1D","uimage2D","uimage3D","uimageCube","image1DArray","image2DArray","iimage1DArray","iimage2DArray","uimage1DArray","uimage2DArray","image1DShadow","image2DShadow","image1DArrayShadow","image2DArrayShadow","imageBuffer","iimageBuffer","uimageBuffer","sampler1DArray","sampler1DArrayShadow","isampler1D","isampler1DArray","usampler1D","usampler1DArray","isampler2DRect","usampler2DRect","samplerBuffer","isamplerBuffer","usamplerBuffer","sampler2DMS","isampler2DMS","usampler2DMS","sampler2DMSArray","isampler2DMSArray","usampler2DMSArray"])},{"./literals":409}],409:[function(t,e,r){e.exports=["precision","highp","mediump","lowp","attribute","const","uniform","varying","break","continue","do","for","while","if","else","in","out","inout","float","int","void","bool","true","false","discard","return","mat2","mat3","mat4","vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","sampler1D","sampler2D","sampler3D","samplerCube","sampler1DShadow","sampler2DShadow","struct","asm","class","union","enum","typedef","template","this","packed","goto","switch","default","inline","noinline","volatile","public","static","extern","external","interface","long","short","double","half","fixed","unsigned","input","output","hvec2","hvec3","hvec4","dvec2","dvec3","dvec4","fvec2","fvec3","fvec4","sampler2DRect","sampler3DRect","sampler2DRectShadow","sizeof","cast","namespace","using"]},{}],410:[function(t,e,r){e.exports=["<<=",">>=","++","--","<<",">>","<=",">=","==","!=","&&","||","+=","-=","*=","/=","%=","&=","^^","^=","|=","(",")","[","]",".","!","~","*","/","%","+","-","<",">","&","^","|","?",":","=",",",";","{","}"]},{}],411:[function(t,e,r){var n=t("./index");e.exports=function(t,e){var r=n(e),i=[];return i=(i=i.concat(r(t))).concat(r(null))}},{"./index":405}],412:[function(t,e,r){e.exports=function(t){"string"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},r.write=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*m}},{}],416:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t.length;if(0===r)throw new Error("Must have at least d+1 points");var i=t[0].length;if(r<=i)throw new Error("Must input at least d+1 points");var o=t.slice(0,i+1),s=n.apply(void 0,o);if(0===s)throw new Error("Input not in general position");for(var l=new Array(i+1),c=0;c<=i;++c)l[c]=c;s<0&&(l[0]=1,l[1]=0);for(var f=new a(l,new Array(i+1),!1),h=f.adjacent,p=new Array(i+2),c=0;c<=i;++c){for(var d=l.slice(),m=0;m<=i;++m)m===c&&(d[m]=-1);var g=d[0];d[0]=d[1],d[1]=g;var v=new a(d,new Array(i+1),!0);h[c]=v,p[c]=v}p[i+1]=f;for(var c=0;c<=i;++c)for(var d=h[c].vertices,y=h[c].adjacent,m=0;m<=i;++m){var x=d[m];if(x<0)y[m]=f;else for(var b=0;b<=i;++b)h[b].vertices.indexOf(x)<0&&(y[m]=h[b])}for(var _=new u(i,o,p),w=!!e,c=i+1;c0&&e.push(","),e.push("tuple[",r,"]");e.push(")}return orient");var i=new Function("test",e.join("")),a=n[t+1];return a||(a=n),i(a)}(t)),this.orient=a}var c=u.prototype;c.handleBoundaryDegeneracy=function(t,e){var r=this.dimension,n=this.vertices.length-1,i=this.tuple,a=this.vertices,o=[t];for(t.lastVisited=-n;o.length>0;){(t=o.pop()).vertices;for(var s=t.adjacent,l=0;l<=r;++l){var u=s[l];if(u.boundary&&!(u.lastVisited<=-n)){for(var c=u.vertices,f=0;f<=r;++f){var h=c[f];i[f]=h<0?e:a[h]}var p=this.orient();if(p>0)return u;u.lastVisited=-n,0===p&&o.push(u)}}}return null},c.walk=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,a=this.tuple,o=e?this.interior.length*Math.random()|0:this.interior.length-1,s=this.interior[o];t:for(;!s.boundary;){for(var l=s.vertices,u=s.adjacent,c=0;c<=n;++c)a[c]=i[l[c]];s.lastVisited=r;for(c=0;c<=n;++c){var f=u[c];if(!(f.lastVisited>=r)){var h=a[c];a[c]=t;var p=this.orient();if(a[c]=h,p<0){s=f;continue t}f.boundary?f.lastVisited=-r:f.lastVisited=r}}return}return s},c.addPeaks=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,l=this.tuple,u=this.interior,c=this.simplices,f=[e];e.lastVisited=r,e.vertices[e.vertices.indexOf(-1)]=r,e.boundary=!1,u.push(e);for(var h=[];f.length>0;){var p=(e=f.pop()).vertices,d=e.adjacent,m=p.indexOf(r);if(!(m<0))for(var g=0;g<=n;++g)if(g!==m){var v=d[g];if(v.boundary&&!(v.lastVisited>=r)){var y=v.vertices;if(v.lastVisited!==-r){for(var x=0,b=0;b<=n;++b)y[b]<0?(x=b,l[b]=t):l[b]=i[y[b]];if(this.orient()>0){y[x]=r,v.boundary=!1,u.push(v),f.push(v),v.lastVisited=r;continue}v.lastVisited=-r}var _=v.adjacent,w=p.slice(),A=d.slice(),M=new a(w,A,!0);c.push(M);var k=_.indexOf(e);if(!(k<0)){_[k]=M,A[m]=v,w[g]=-1,A[g]=e,d[g]=M,M.flip();for(b=0;b<=n;++b){var T=w[b];if(!(T<0||T===r)){for(var E=new Array(n-1),S=0,C=0;C<=n;++C){var L=w[C];L<0||C===b||(E[S++]=L)}h.push(new o(E,M,b))}}}}}}h.sort(s);for(g=0;g+1=0?o[l++]=s[c]:u=1&c;if(u===(1&t)){var f=o[0];o[0]=o[1],o[1]=f}e.push(o)}}return e}},{"robust-orientation":1350,"simplicial-complex":1359}],417:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),i=0,a=1;function o(t,e,r,n,i){this.mid=t,this.left=e,this.right=r,this.leftPoints=n,this.rightPoints=i,this.count=(e?e.count:0)+(r?r.count:0)+n.length}e.exports=function(t){if(!t||0===t.length)return new x(null);return new x(y(t))};var s=o.prototype;function l(t,e){t.mid=e.mid,t.left=e.left,t.right=e.right,t.leftPoints=e.leftPoints,t.rightPoints=e.rightPoints,t.count=e.count}function u(t,e){var r=y(e);t.mid=r.mid,t.left=r.left,t.right=r.right,t.leftPoints=r.leftPoints,t.rightPoints=r.rightPoints,t.count=r.count}function c(t,e){var r=t.intervals([]);r.push(e),u(t,r)}function f(t,e){var r=t.intervals([]),n=r.indexOf(e);return n<0?i:(r.splice(n,1),u(t,r),a)}function h(t,e,r){for(var n=0;n=0&&t[n][1]>=e;--n){var i=r(t[n]);if(i)return i}}function d(t,e){for(var r=0;r>1],i=[],a=[],s=[];for(r=0;r3*(e+1)?c(this,t):this.left.insert(t):this.left=y([t]);else if(t[0]>this.mid)this.right?4*(this.right.count+1)>3*(e+1)?c(this,t):this.right.insert(t):this.right=y([t]);else{var r=n.ge(this.leftPoints,t,g),i=n.ge(this.rightPoints,t,v);this.leftPoints.splice(r,0,t),this.rightPoints.splice(i,0,t)}},s.remove=function(t){var e=this.count-this.leftPoints;if(t[1]3*(e-1)?f(this,t):2===(u=this.left.remove(t))?(this.left=null,this.count-=1,a):(u===a&&(this.count-=1),u):i;if(t[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(e-1)?f(this,t):2===(u=this.right.remove(t))?(this.right=null,this.count-=1,a):(u===a&&(this.count-=1),u):i;if(1===this.count)return this.leftPoints[0]===t?2:i;if(1===this.leftPoints.length&&this.leftPoints[0]===t){if(this.left&&this.right){for(var r=this,o=this.left;o.right;)r=o,o=o.right;if(r===this)o.right=this.right;else{var s=this.left,u=this.right;r.count-=o.count,r.right=o.left,o.left=s,o.right=u}l(this,o),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?l(this,this.left):l(this,this.right);return a}for(s=n.ge(this.leftPoints,t,g);sthis.mid){var r;if(this.right)if(r=this.right.queryPoint(t,e))return r;return p(this.rightPoints,t,e)}return d(this.leftPoints,e)},s.queryInterval=function(t,e,r){var n;if(tthis.mid&&this.right&&(n=this.right.queryInterval(t,e,r)))return n;return ethis.mid?p(this.rightPoints,t,r):d(this.leftPoints,r)};var b=x.prototype;b.insert=function(t){this.root?this.root.insert(t):this.root=new o(t[0],null,null,[t],[t])},b.remove=function(t){if(this.root){var e=this.root.remove(t);return 2===e&&(this.root=null),e!==i}return!1},b.queryPoint=function(t,e){if(this.root)return this.root.queryPoint(t,e)},b.queryInterval=function(t,e,r){if(t<=e&&this.root)return this.root.queryInterval(t,e,r)},Object.defineProperty(b,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(b,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}})},{"binary-search-bounds":418}],418:[function(t,e,r){arguments[4][180][0].apply(r,arguments)},{dup:180}],419:[function(t,e,r){"use strict";e.exports=function(t,e){e=e||new Array(t.length);for(var r=0;r13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},{}],428:[function(t,e,r){"use strict";e.exports=function(t){return"string"==typeof t&&(t=t.trim(),!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)&&/[\dz]$/i.test(t)&&t.length>4))}},{}],429:[function(t,e,r){e.exports=function(t,e,r){return t*(1-r)+e*r}},{}],430:[function(t,e,r){(function(t){!function(t,n){"object"==typeof r&&"undefined"!=typeof e?e.exports=n():t.mapboxgl=n()}(this,function(){"use strict";var e,r,n;function i(t,i){if(e)if(r){var a="var sharedChunk = {}; ("+e+")(sharedChunk); ("+r+")(sharedChunk);",o={};e(o),(n=i(o)).workerUrl=window.URL.createObjectURL(new Blob([a],{type:"text/javascript"}))}else r=i;else e=i}return i(0,function(e){var r="undefined"!=typeof window?window:"undefined"!=typeof t?t:"undefined"!=typeof self?self:{};function n(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function i(t,e){return t(e={exports:{}},e.exports),e.exports}var a=o;function o(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}o.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},o.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},o.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},o.prototype.solveCurveX=function(t,e){var r,n,i,a,o;for(void 0===e&&(e=1e-6),i=t,o=0;o<8;o++){if(a=this.sampleCurveX(i)-t,Math.abs(a)(n=1))return n;for(;ra?r=i:n=i,i=.5*(n-r)+r}return i},o.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var s=function(t,e,r){this.column=t,this.row=e,this.zoom=r};s.prototype.clone=function(){return new s(this.column,this.row,this.zoom)},s.prototype.zoomTo=function(t){return this.clone()._zoomTo(t)},s.prototype.sub=function(t){return this.clone()._sub(t)},s.prototype._zoomTo=function(t){var e=Math.pow(2,t-this.zoom);return this.column*=e,this.row*=e,this.zoom=t,this},s.prototype._sub=function(t){return t=t.zoomTo(this.zoom),this.column-=t.column,this.row-=t.row,this};var l=u;function u(t,e){this.x=t,this.y=e}function c(t,e,r,n){var i=new a(t,e,r,n);return function(t){return i.solve(t)}}u.prototype={clone:function(){return new u(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=e*this.x-r*this.y,i=r*this.x+e*this.y;return this.x=n,this.y=i,this},_rotateAround:function(t,e){var r=Math.cos(t),n=Math.sin(t),i=e.x+r*(this.x-e.x)-n*(this.y-e.y),a=e.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x=i,this.y=a,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},u.convert=function(t){return t instanceof u?t:Array.isArray(t)?new u(t[0],t[1]):t};var f=c(.25,.1,.25,1);function h(t,e,r){return Math.min(r,Math.max(e,t))}function p(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n(e.y-t.y)*(r.x-t.x)}function A(t){for(var e=0,r=0,n=t.length,i=n-1,a=void 0,o=void 0;r=200&&r.status<300&&r.response?e(null,{data:n,cacheControl:r.getResponseHeader("Cache-Control"),expires:r.getResponseHeader("Expires")}):e(new k(r.statusText,r.status,t.url))},r.send(),r};function S(t,e,r){r[t]=r[t]||[],r[t].push(e)}function C(t,e,r){if(r&&r[t]){var n=r[t].indexOf(e);-1!==n&&r[t].splice(n,1)}}var L=function(t,e){void 0===e&&(e={}),p(this,e),this.type=t},O=function(t){function e(e,r){void 0===r&&(r={}),t.call(this,"error",p({error:e},r))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(L),z=function(){};z.prototype.on=function(t,e){return this._listeners=this._listeners||{},S(t,e,this._listeners),this},z.prototype.off=function(t,e){return C(t,e,this._listeners),C(t,e,this._oneTimeListeners),this},z.prototype.once=function(t,e){return this._oneTimeListeners=this._oneTimeListeners||{},S(t,e,this._oneTimeListeners),this},z.prototype.fire=function(t){"string"==typeof t&&(t=new L(t,arguments[1]||{}));var e=t.type;if(this.listens(e)){t.target=this;for(var r=0,n=this._listeners&&this._listeners[e]?this._listeners[e].slice():[];r0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},z.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var D={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.0511,180,85.0511]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.0511,180,85.0511]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.0511,180,85.0511]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},buffer:{type:"number",default:128,maximum:512,minimum:0},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},lineMetrics:{type:"boolean",default:!1}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible"}},layout_fill:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible"}},layout_circle:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible"}},layout_line:{"line-cap":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{butt:{},round:{},square:{}},default:"butt"},"line-join":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:{bevel:{},round:{},miter:{}},default:"miter"},"line-miter-limit":{type:"number",default:2,function:"interpolated","zoom-function":!0,requires:[{"line-join":"miter"}]},"line-round-limit":{type:"number",default:1.05,function:"interpolated","zoom-function":!0,requires:[{"line-join":"round"}]},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible"}},layout_symbol:{"symbol-placement":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{point:{},line:{}},default:"point"},"symbol-spacing":{type:"number",default:250,minimum:1,function:"interpolated","zoom-function":!0,units:"pixels",requires:[{"symbol-placement":"line"}]},"symbol-avoid-edges":{type:"boolean",function:"piecewise-constant","zoom-function":!0,default:!1},"icon-allow-overlap":{type:"boolean",function:"piecewise-constant","zoom-function":!0,default:!1,requires:["icon-image"]},"icon-ignore-placement":{type:"boolean",function:"piecewise-constant","zoom-function":!0,default:!1,requires:["icon-image"]},"icon-optional":{type:"boolean",function:"piecewise-constant","zoom-function":!0,default:!1,requires:["icon-image","text-field"]},"icon-rotation-alignment":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"]},"icon-size":{type:"number",default:1,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,units:"factor of the original icon size",requires:["icon-image"]},"icon-text-fit":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"]},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",function:"interpolated","zoom-function":!0,requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}]},"icon-image":{type:"string",function:"piecewise-constant","zoom-function":!0,"property-function":!0,tokens:!0},"icon-rotate":{type:"number",default:0,period:360,function:"interpolated","zoom-function":!0,"property-function":!0,units:"degrees",requires:["icon-image"]},"icon-padding":{type:"number",default:2,minimum:0,function:"interpolated","zoom-function":!0,units:"pixels",requires:["icon-image"]},"icon-keep-upright":{type:"boolean",function:"piecewise-constant","zoom-function":!0,default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":"line"}]},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,"property-function":!0,requires:["icon-image"]},"icon-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"]},"icon-pitch-alignment":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"]},"text-pitch-alignment":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"]},"text-rotation-alignment":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"]},"text-field":{type:"string",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:"",tokens:!0},"text-font":{type:"array",value:"string",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"]},"text-size":{type:"number",default:16,minimum:0,units:"pixels",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field"]},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field"]},"text-line-height":{type:"number",default:1.2,units:"ems",function:"interpolated","zoom-function":!0,requires:["text-field"]},"text-letter-spacing":{type:"number",default:0,units:"ems",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field"]},"text-justify":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:{left:{},center:{},right:{}},default:"center",requires:["text-field"]},"text-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field"]},"text-max-angle":{type:"number",default:45,units:"degrees",function:"interpolated","zoom-function":!0,requires:["text-field",{"symbol-placement":"line"}]},"text-rotate":{type:"number",default:0,period:360,units:"degrees",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field"]},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",function:"interpolated","zoom-function":!0,requires:["text-field"]},"text-keep-upright":{type:"boolean",function:"piecewise-constant","zoom-function":!0,default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":"line"}]},"text-transform":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"]},"text-offset":{type:"array",value:"number",units:"ems",function:"interpolated","zoom-function":!0,"property-function":!0,length:2,default:[0,0],requires:["text-field"]},"text-allow-overlap":{type:"boolean",function:"piecewise-constant","zoom-function":!0,default:!1,requires:["text-field"]},"text-ignore-placement":{type:"boolean",function:"piecewise-constant","zoom-function":!0,default:!1,requires:["text-field"]},"text-optional":{type:"boolean",function:"piecewise-constant","zoom-function":!0,default:!1,requires:["text-field","icon-image"]},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible"}},filter:{type:"array",value:"*"},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function_stop:{type:"array",minimum:0,maximum:22,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Zoom"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Heatmap"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},transition:!1,"zoom-function":!0,"property-function":!1,function:"piecewise-constant"},position:{type:"array",default:[1.15,210,30],length:3,value:"number",transition:!0,function:"interpolated","zoom-function":!0,"property-function":!1},color:{type:"color",default:"#ffffff",function:"interpolated","zoom-function":!0,"property-function":!1,transition:!0},intensity:{type:"number",default:.5,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,"property-function":!1,transition:!0}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background"],paint_fill:{"fill-antialias":{type:"boolean",function:"piecewise-constant","zoom-function":!0,default:!0},"fill-opacity":{type:"number",function:"interpolated","zoom-function":!0,"property-function":!0,default:1,minimum:0,maximum:1,transition:!0},"fill-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:[{"!":"fill-pattern"}]},"fill-outline-color":{type:"color",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}]},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,transition:!0,units:"pixels"},"fill-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{}},default:"map",requires:["fill-translate"]},"fill-pattern":{type:"string",function:"piecewise-constant","zoom-function":!0,transition:!0}},paint_line:{"line-opacity":{type:"number",function:"interpolated","zoom-function":!0,"property-function":!0,default:1,minimum:0,maximum:1,transition:!0},"line-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:[{"!":"line-pattern"}]},"line-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,transition:!0,units:"pixels"},"line-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{}},default:"map",requires:["line-translate"]},"line-width":{type:"number",default:1,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"line-gap-width":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"line-offset":{type:"number",default:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"line-blur":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"line-dasharray":{type:"array",value:"number",function:"piecewise-constant","zoom-function":!0,minimum:0,transition:!0,units:"line widths",requires:[{"!":"line-pattern"}]},"line-pattern":{type:"string",function:"piecewise-constant","zoom-function":!0,transition:!0},"line-gradient":{type:"color",function:"interpolated","zoom-function":!1,"property-function":!1,transition:!1,requires:[{"!":"line-dasharray"},{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}]}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"circle-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0},"circle-blur":{type:"number",default:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,transition:!0,units:"pixels"},"circle-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{}},default:"map",requires:["circle-translate"]},"circle-pitch-scale":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{}},default:"map"},"circle-pitch-alignment":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{}},default:"viewport"},"circle-stroke-width":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"circle-stroke-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"heatmap-weight":{type:"number",default:1,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!1},"heatmap-intensity":{type:"number",default:1,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!1,transition:!0},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],function:"interpolated","zoom-function":!1,"property-function":!1,transition:!1},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,"property-function":!1,transition:!0}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["icon-image"]},"icon-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["icon-image"]},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["icon-image"]},"icon-halo-width":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels",requires:["icon-image"]},"icon-halo-blur":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels",requires:["icon-image"]},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,transition:!0,units:"pixels",requires:["icon-image"]},"icon-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"]},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["text-field"]},"text-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["text-field"]},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["text-field"]},"text-halo-width":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels",requires:["text-field"]},"text-halo-blur":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels",requires:["text-field"]},"text-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,transition:!0,units:"pixels",requires:["text-field"]},"text-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"]}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,transition:!0},"raster-hue-rotate":{type:"number",default:0,period:360,function:"interpolated","zoom-function":!0,transition:!0,units:"degrees"},"raster-brightness-min":{type:"number",function:"interpolated","zoom-function":!0,default:0,minimum:0,maximum:1,transition:!0},"raster-brightness-max":{type:"number",function:"interpolated","zoom-function":!0,default:1,minimum:0,maximum:1,transition:!0},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,function:"interpolated","zoom-function":!0,transition:!0},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,function:"interpolated","zoom-function":!0,transition:!0},"raster-fade-duration":{type:"number",default:300,minimum:0,function:"interpolated","zoom-function":!0,transition:!1,units:"milliseconds"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,function:"interpolated","zoom-function":!0,transition:!1},"hillshade-illumination-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{}},default:"viewport"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,transition:!0},"hillshade-shadow-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,transition:!0},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",function:"interpolated","zoom-function":!0,transition:!0},"hillshade-accent-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,transition:!0}},paint_background:{"background-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,transition:!0,requires:[{"!":"background-pattern"}]},"background-pattern":{type:"string",function:"piecewise-constant","zoom-function":!0,transition:!0},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,transition:!0}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible"}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",function:"interpolated","zoom-function":!0,"property-function":!1,default:1,minimum:0,maximum:1,transition:!0},"fill-extrusion-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:[{"!":"fill-extrusion-pattern"}]},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,transition:!0,units:"pixels"},"fill-extrusion-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"]},"fill-extrusion-pattern":{type:"string",function:"piecewise-constant","zoom-function":!0,transition:!0},"fill-extrusion-height":{type:"number",function:"interpolated","zoom-function":!0,"property-function":!0,default:0,minimum:0,units:"meters",transition:!0},"fill-extrusion-base":{type:"number",function:"interpolated","zoom-function":!0,"property-function":!0,default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"]}}},P=function(t,e,r,n){this.message=(t?t+": ":"")+r,n&&(this.identifier=n),null!=e&&e.__line__&&(this.line=e.__line__)};function I(t){var e=t.key,r=t.value;return r?[new P(e,r,"constants have been deprecated as of v8")]:[]}function N(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n":"value"===t.itemType.kind?"array":"array<"+e+">"}return t.kind}var J=[V,U,q,H,G,W,X(Y)];function K(t,e){if("error"===e.kind)return null;if("array"===t.kind){if("array"===e.kind&&!K(t.itemType,e.itemType)&&("number"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if("value"===t.kind)for(var r=0,n=J;r255?255:t}function i(t){return t<0?0:t>1?1:t}function a(t){return"%"===t[t.length-1]?n(parseFloat(t)/100*255):n(parseInt(t))}function o(t){return"%"===t[t.length-1]?i(parseFloat(t)/100):i(parseFloat(t))}function s(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,i=t.replace(/ /g,"").toLowerCase();if(i in r)return r[i].slice();if("#"===i[0])return 4===i.length?(e=parseInt(i.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===i.length&&(e=parseInt(i.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var l=i.indexOf("("),u=i.indexOf(")");if(-1!==l&&u+1===i.length){var c=i.substr(0,l),f=i.substr(l+1,u-(l+1)).split(","),h=1;switch(c){case"rgba":if(4!==f.length)return null;h=o(f.pop());case"rgb":return 3!==f.length?null:[a(f[0]),a(f[1]),a(f[2]),h];case"hsla":if(4!==f.length)return null;h=o(f.pop());case"hsl":if(3!==f.length)return null;var p=(parseFloat(f[0])%360+360)%360/360,d=o(f[1]),m=o(f[2]),g=m<=.5?m*(d+1):m+d-m*d,v=2*m-g;return[n(255*s(v,g,p+1/3)),n(255*s(v,g,p)),n(255*s(v,g,p-1/3)),h];default:return null}}return null}}catch(t){}}).parseCSSColor,tt=function(t,e,r,n){void 0===n&&(n=1),this.r=t,this.g=e,this.b=r,this.a=n};tt.parse=function(t){if(t){if(t instanceof tt)return t;if("string"==typeof t){var e=Q(t);if(e)return new tt(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},tt.prototype.toString=function(){var t=this.toArray(),e=t[0],r=t[1],n=t[2],i=t[3];return"rgba("+Math.round(e)+","+Math.round(r)+","+Math.round(n)+","+i+")"},tt.prototype.toArray=function(){var t=this.r,e=this.g,r=this.b,n=this.a;return 0===n?[0,0,0,0]:[255*t/n,255*e/n,255*r/n,n]},tt.black=new tt(0,0,0,1),tt.white=new tt(1,1,1,1),tt.transparent=new tt(0,0,0,0);var et=function(t,e,r){this.sensitivity=t?e?"variant":"case":e?"accent":"base",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})};et.prototype.compare=function(t,e){return this.collator.compare(t,e)},et.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var rt=function(t,e,r){this.type=Z,this.locale=r,this.caseSensitive=t,this.diacriticSensitive=e};function nt(t,e,r,n){return"number"==typeof t&&t>=0&&t<=255&&"number"==typeof e&&e>=0&&e<=255&&"number"==typeof r&&r>=0&&r<=255?void 0===n||"number"==typeof n&&n>=0&&n<=1?null:"Invalid rgba value ["+[t,e,r,n].join(", ")+"]: 'a' must be between 0 and 1.":"Invalid rgba value ["+("number"==typeof n?[t,e,r,n]:[t,e,r]).join(", ")+"]: 'r', 'g', and 'b' must be between 0 and 255."}function it(t){if(null===t)return V;if("string"==typeof t)return q;if("boolean"==typeof t)return H;if("number"==typeof t)return U;if(t instanceof tt)return G;if(t instanceof et)return Z;if(Array.isArray(t)){for(var e,r=t.length,n=0,i=t;n4)return e.error("Expected 1, 2, or 3 arguments, but found "+(t.length-1)+" instead.");var r,n;if(t.length>2){var i=t[1];if("string"!=typeof i||!(i in ut))return e.error('The item type argument of "array" must be one of string, number, boolean',1);r=ut[i]}else r=Y;if(t.length>3){if("number"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2]))return e.error('The length argument to "array" must be a positive integer literal',2);n=t[2]}var a=X(r,n),o=e.parse(t[t.length-1],t.length-1,Y);return o?new ct(a,o):null},ct.prototype.evaluate=function(t){var e=this.input.evaluate(t);if(K(this.type,it(e)))throw new ot("Expected value to be of type "+$(this.type)+", but found "+$(it(e))+" instead.");return e},ct.prototype.eachChild=function(t){t(this.input)},ct.prototype.possibleOutputs=function(){return this.input.possibleOutputs()},ct.prototype.serialize=function(){var t=["array"],e=this.type.itemType;if("string"===e.kind||"number"===e.kind||"boolean"===e.kind){t.push(e.kind);var r=this.type.N;"number"==typeof r&&t.push(r)}return t.push(this.input.serialize()),t};var ft={"to-number":U,"to-color":G},ht=function(t,e){this.type=t,this.args=e};ht.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");for(var r=t[0],n=ft[r],i=[],a=1;a4?"Invalid rbga value "+JSON.stringify(e)+": expected an array containing either three or four numeric values.":nt(e[0],e[1],e[2],e[3])))return new tt(e[0]/255,e[1]/255,e[2]/255,e[3]);throw new ot(r||"Could not parse color from value '"+("string"==typeof e?e:JSON.stringify(e))+"'")}for(var o=null,s=0,l=this.args;s=0)return!1;var r=!0;return t.eachChild(function(t){r&&!vt(t,e)&&(r=!1)}),r}mt.prototype.evaluate=function(t){return this._evaluate(t,this.args)},mt.prototype.eachChild=function(t){this.args.forEach(t)},mt.prototype.possibleOutputs=function(){return[void 0]},mt.prototype.serialize=function(){return[this.name].concat(this.args.map(function(t){return t.serialize()}))},mt.parse=function(t,e){var r=t[0],n=mt.definitions[r];if(!n)return e.error('Unknown expression "'+r+'". If you wanted a literal array, use ["literal", [...]].',0);for(var i=Array.isArray(n)?n[0]:n.type,a=Array.isArray(n)?[[n[1],n[2]]]:n.overloads,o=a.filter(function(e){var r=e[0];return!Array.isArray(r)||r.length===t.length-1}),s=[],l=1;lr&&ee))throw new ot("Input is not a number.");a=o-1}}return Math.max(o-1,0)}xt.prototype.parse=function(t,e,r,n,i){return void 0===i&&(i={}),e?this.concat(e,r,n)._parse(t,i):this._parse(t,i)},xt.prototype._parse=function(t,e){if(null!==t&&"string"!=typeof t&&"boolean"!=typeof t&&"number"!=typeof t||(t=["literal",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');var r=t[0];if("string"!=typeof r)return this.error("Expression name must be a string, but found "+typeof r+' instead. If you wanted a literal array, use ["literal", [...]].',0),null;var n=this.registry[r];if(n){var i=n.parse(t,this);if(!i)return null;if(this.expectedType){var a=this.expectedType,o=i.type;if("string"!==a.kind&&"number"!==a.kind&&"boolean"!==a.kind&&"object"!==a.kind||"value"!==o.kind)if("array"===a.kind&&"value"===o.kind)e.omitTypeAnnotations||(i=new ct(a,i));else if("color"!==a.kind||"value"!==o.kind&&"string"!==o.kind){if(this.checkSubtype(this.expectedType,i.type))return null}else e.omitTypeAnnotations||(i=new ht(a,[i]));else e.omitTypeAnnotations||(i=new lt(a,[i]))}if(!(i instanceof at)&&function t(e){if(e instanceof yt)return t(e.boundExpression);if(e instanceof mt&&"error"===e.name)return!1;if(e instanceof rt)return!1;var r=e instanceof ht||e instanceof lt||e instanceof ct,n=!0;return e.eachChild(function(e){n=r?n&&t(e):n&&e instanceof at}),!!n&&(gt(e)&&vt(e,["zoom","heatmap-density","line-progress","is-supported-script"]))}(i)){var s=new dt;try{i=new at(i.type,i.evaluate(s))}catch(t){return this.error(t.message),null}}return i}return this.error('Unknown expression "'+r+'". If you wanted a literal array, use ["literal", [...]].',0)}return void 0===t?this.error("'undefined' value invalid. Use null instead."):"object"==typeof t?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error("Expected an array, but found "+typeof t+" instead.")},xt.prototype.concat=function(t,e,r){var n="number"==typeof t?this.path.concat(t):this.path,i=r?this.scope.concat(r):this.scope;return new xt(this.registry,n,e||null,i,this.errors)},xt.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var n=""+this.key+e.map(function(t){return"["+t+"]"}).join("");this.errors.push(new B(n,t))},xt.prototype.checkSubtype=function(t,e){var r=K(t,e);return r&&this.error(r),r};var _t=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var n=0,i=r;n=s)return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',u);var f=e.parse(l,c,a);if(!f)return null;a=a||f.type,i.push([s,f])}return new _t(a,r,i)},_t.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;return n>=e[i-1]?r[i-1].evaluate(t):r[bt(e,n)].evaluate(t)},_t.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var At=Object.freeze({number:wt,color:function(t,e,r){return new tt(wt(t.r,e.r,r),wt(t.g,e.g,r),wt(t.b,e.b,r),wt(t.a,e.a,r))},array:function(t,e,r){return t.map(function(t,n){return wt(t,e[n],r)})}}),Mt=function(t,e,r,n){this.type=t,this.interpolation=e,this.input=r,this.labels=[],this.outputs=[];for(var i=0,a=n;i1}))return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);r={name:"cubic-bezier",controlPoints:o}}if(t.length-1<4)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");if(!(n=e.parse(n,2,U)))return null;var s=[],l=null;e.expectedType&&"value"!==e.expectedType.kind&&(l=e.expectedType);for(var u=0;u=c)return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',h);var d=e.parse(f,p,l);if(!d)return null;l=l||d.type,s.push([c,d])}return"number"===l.kind||"color"===l.kind||"array"===l.kind&&"number"===l.itemType.kind&&"number"==typeof l.N?new Mt(l,r,n,s):e.error("Type "+$(l)+" is not interpolatable.")},Mt.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;if(n>=e[i-1])return r[i-1].evaluate(t);var a=bt(e,n),o=e[a],s=e[a+1],l=Mt.interpolationFactor(this.interpolation,n,o,s),u=r[a].evaluate(t),c=r[a+1].evaluate(t);return At[this.type.kind.toLowerCase()](u,c,l)},Mt.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e=r.length)throw new ot("Array index out of bounds: "+e+" > "+(r.length-1)+".");if(e!==Math.floor(e))throw new ot("Array index must be an integer, but found "+e+" instead.");return r[e]},St.prototype.eachChild=function(t){t(this.index),t(this.input)},St.prototype.possibleOutputs=function(){return[void 0]},St.prototype.serialize=function(){return["at",this.index.serialize(),this.input.serialize()]};var Ct=function(t,e,r,n,i,a){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=i,this.otherwise=a};Ct.parse=function(t,e){if(t.length<5)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if(t.length%2!=1)return e.error("Expected an even number of arguments.");var r,n;e.expectedType&&"value"!==e.expectedType.kind&&(n=e.expectedType);for(var i={},a=[],o=2;oNumber.MAX_SAFE_INTEGER)return u.error("Branch labels must be integers no larger than "+Number.MAX_SAFE_INTEGER+".");if("number"==typeof h&&Math.floor(h)!==h)return u.error("Numeric branch labels must be integer values.");if(r){if(u.checkSubtype(r,it(h)))return null}else r=it(h);if(void 0!==i[String(h)])return u.error("Branch labels must be unique.");i[String(h)]=a.length}var p=e.parse(l,o,n);if(!p)return null;n=n||p.type,a.push(p)}var d=e.parse(t[1],1,r);if(!d)return null;var m=e.parse(t[t.length-1],t.length-1,n);return m?new Ct(r,n,d,i,a,m):null},Ct.prototype.evaluate=function(t){var e=this.input.evaluate(t);return(this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},Ct.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},Ct.prototype.possibleOutputs=function(){return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()})).concat(this.otherwise.possibleOutputs());var t},Ct.prototype.serialize=function(){for(var t=this,e=["match",this.input.serialize()],r=[],n={},i=0,a=Object.keys(this.cases).sort();in.evaluate(t)}function Ut(t,e){var r=e[0],n=e[1];return r.evaluate(t)<=n.evaluate(t)}function qt(t,e){var r=e[0],n=e[1];return r.evaluate(t)>=n.evaluate(t)}function Ht(t){return{type:t}}function Gt(t){return{result:"success",value:t}}function Wt(t){return{result:"error",value:t}}mt.register(Nt,{error:[{kind:"error"},[q],function(t,e){var r=e[0];throw new ot(r.evaluate(t))}],typeof:[q,[Y],function(t,e){return $(it(e[0].evaluate(t)))}],"to-string":[q,[Y],function(t,e){var r=e[0],n=typeof(r=r.evaluate(t));return null===r?"":"string"===n||"number"===n||"boolean"===n?String(r):r instanceof tt?r.toString():JSON.stringify(r)}],"to-boolean":[H,[Y],function(t,e){var r=e[0];return Boolean(r.evaluate(t))}],"to-rgba":[X(U,4),[G],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[G,[U,U,U],Rt],rgba:[G,[U,U,U,U],Rt],has:{type:H,overloads:[[[q],function(t,e){return Ft(e[0].evaluate(t),t.properties())}],[[q,W],function(t,e){var r=e[0],n=e[1];return Ft(r.evaluate(t),n.evaluate(t))}]]},get:{type:Y,overloads:[[[q],function(t,e){return Bt(e[0].evaluate(t),t.properties())}],[[q,W],function(t,e){var r=e[0],n=e[1];return Bt(r.evaluate(t),n.evaluate(t))}]]},properties:[W,[],function(t){return t.properties()}],"geometry-type":[q,[],function(t){return t.geometryType()}],id:[Y,[],function(t){return t.id()}],zoom:[U,[],function(t){return t.globals.zoom}],"heatmap-density":[U,[],function(t){return t.globals.heatmapDensity||0}],"line-progress":[U,[],function(t){return t.globals.lineProgress||0}],"+":[U,Ht(U),function(t,e){for(var r=0,n=0,i=e;n":[H,[q,Y],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>a}],"filter-id->":[H,[Y],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>i}],"filter-<=":[H,[q,Y],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<=a}],"filter-id-<=":[H,[Y],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<=i}],"filter->=":[H,[q,Y],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>=a}],"filter-id->=":[H,[Y],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>=i}],"filter-has":[H,[Y],function(t,e){return e[0].value in t.properties()}],"filter-has-id":[H,[],function(t){return null!==t.id()}],"filter-type-in":[H,[X(q)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],"filter-id-in":[H,[X(Y)],function(t,e){return e[0].value.indexOf(t.id())>=0}],"filter-in-small":[H,[q,X(Y)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],"filter-in-large":[H,[q,X(Y)],function(t,e){var r=e[0],n=e[1];return function(t,e,r,n){for(;r<=n;){var i=r+n>>1;if(e[i]===t)return!0;e[i]>t?n=i-1:r=i+1}return!1}(t.properties()[r.value],n.value,0,n.value.length-1)}],">":{type:H,overloads:[[[U,U],Vt],[[q,q],Vt],[[q,q,Z],function(t,e){var r=e[0],n=e[1];return e[2].evaluate(t).compare(r.evaluate(t),n.evaluate(t))>0}]]},"<":{type:H,overloads:[[[U,U],jt],[[q,q],jt],[[q,q,Z],function(t,e){var r=e[0],n=e[1];return e[2].evaluate(t).compare(r.evaluate(t),n.evaluate(t))<0}]]},">=":{type:H,overloads:[[[U,U],qt],[[q,q],qt],[[q,q,Z],function(t,e){var r=e[0],n=e[1];return e[2].evaluate(t).compare(r.evaluate(t),n.evaluate(t))>=0}]]},"<=":{type:H,overloads:[[[U,U],Ut],[[q,q],Ut],[[q,q,Z],function(t,e){var r=e[0],n=e[1];return e[2].evaluate(t).compare(r.evaluate(t),n.evaluate(t))<=0}]]},all:{type:H,overloads:[[[H,H],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)&&n.evaluate(t)}],[Ht(H),function(t,e){for(var r=0,n=e;rQt?Math.pow(t,1/3):t/Kt+$t}function ne(t){return t>Jt?t*t*t:Kt*(t-$t)}function ie(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function ae(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function oe(t){var e=ae(t.r),r=ae(t.g),n=ae(t.b),i=re((.4124564*e+.3575761*r+.1804375*n)/Yt),a=re((.2126729*e+.7151522*r+.072175*n)/Zt);return{l:116*a-16,a:500*(i-a),b:200*(a-re((.0193339*e+.119192*r+.9503041*n)/Xt)),alpha:t.a}}function se(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=Zt*ne(e),r=Yt*ne(r),n=Xt*ne(n),new tt(ie(3.2404542*r-1.5371385*e-.4985314*n),ie(-.969266*r+1.8760108*e+.041556*n),ie(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}var le={forward:oe,reverse:se,interpolate:function(t,e,r){return{l:wt(t.l,e.l,r),a:wt(t.a,e.a,r),b:wt(t.b,e.b,r),alpha:wt(t.alpha,e.alpha,r)}}},ue={forward:function(t){var e=oe(t),r=e.l,n=e.a,i=e.b,a=Math.atan2(i,n)*ee;return{h:a<0?a+360:a,c:Math.sqrt(n*n+i*i),l:r,alpha:t.a}},reverse:function(t){var e=t.h*te,r=t.c;return se({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return{h:function(t,e,r){var n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}(t.h,e.h,r),c:wt(t.c,e.c,r),l:wt(t.l,e.l,r),alpha:wt(t.alpha,e.alpha,r)}}},ce=Object.freeze({lab:le,hcl:ue});function fe(t){return t instanceof Number?"number":t instanceof String?"string":t instanceof Boolean?"boolean":Array.isArray(t)?"array":null===t?"null":typeof t}function he(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function pe(t){return t}function de(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function me(t,e,r,n,i){return de(typeof r===i?n[r]:void 0,t.default,e.default)}function ge(t,e,r){if("number"!==fe(r))return de(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var i=xe(t.stops,r);return t.stops[i][1]}function ve(t,e,r){var n=void 0!==t.base?t.base:1;if("number"!==fe(r))return de(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];var a=xe(t.stops,r),o=function(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}(r,n,t.stops[a][0],t.stops[a+1][0]),s=t.stops[a][1],l=t.stops[a+1][1],u=At[e.type]||pe;if(t.colorSpace&&"rgb"!==t.colorSpace){var c=ce[t.colorSpace];u=function(t,e){return c.reverse(c.interpolate(c.forward(t),c.forward(e),o))}}return"function"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),n=l.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==n)return u(r,n,o)}}:u(s,l,o)}function ye(t,e,r){return"color"===e.type?r=tt.parse(r):fe(r)===e.type||"enum"===e.type&&e.values[r]||(r=void 0),de(r,t.default,e.default)}function xe(t,e){for(var r,n,i=0,a=t.length-1,o=0;i<=a;){if(r=t[o=Math.floor((i+a)/2)][0],n=t[o+1][0],e===r||e>r&&ee&&(a=o-1)}return Math.max(o-1,0)}var be=function(t,e){var r;this.expression=t,this._warningHistory={},this._defaultValue="color"===(r=e).type&&he(r.default)?new tt(0,0,0,0):"color"===r.type?tt.parse(r.default)||null:void 0===r.default?null:r.default,"enum"===e.type&&(this._enumValues=e.values)};function _e(t){return Array.isArray(t)&&t.length>0&&"string"==typeof t[0]&&t[0]in Nt}function we(t,e){var r=new xt(Nt,[],function(t){var e={color:G,string:q,number:U,enum:q,boolean:H};return"array"===t.type?X(e[t.value]||Y,t.length):e[t.type]||null}(e)),n=r.parse(t);return n?Gt(new be(n,e)):Wt(r.errors)}be.prototype.evaluateWithoutErrorHandling=function(t,e){return this._evaluator||(this._evaluator=new dt),this._evaluator.globals=t,this._evaluator.feature=e,this.expression.evaluate(this._evaluator)},be.prototype.evaluate=function(t,e){this._evaluator||(this._evaluator=new dt),this._evaluator.globals=t,this._evaluator.feature=e;try{var r=this.expression.evaluate(this._evaluator);if(null==r)return this._defaultValue;if(this._enumValues&&!(r in this._enumValues))throw new ot("Expected value to be one of "+Object.keys(this._enumValues).map(function(t){return JSON.stringify(t)}).join(", ")+", but found "+JSON.stringify(r)+" instead.");return r}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,"undefined"!=typeof console&&console.warn(t.message)),this._defaultValue}};var Ae=function(t,e){this.kind=t,this._styleExpression=e};Ae.prototype.evaluateWithoutErrorHandling=function(t,e){return this._styleExpression.evaluateWithoutErrorHandling(t,e)},Ae.prototype.evaluate=function(t,e){return this._styleExpression.evaluate(t,e)};var Me=function(t,e,r){this.kind=t,this.zoomStops=r.labels,this._styleExpression=e,r instanceof Mt&&(this._interpolationType=r.interpolation)};function ke(t,e){if("error"===(t=we(t,e)).result)return t;var r=t.value.expression,n=gt(r);if(!n&&!e["property-function"])return Wt([new B("","property expressions not supported")]);var i=vt(r,["zoom"]);if(!i&&!1===e["zoom-function"])return Wt([new B("","zoom expressions not supported")]);var a=function t(e){var r=null;if(e instanceof Et)r=t(e.result);else if(e instanceof Tt)for(var n=0,i=e.args;nn.maximum?[new P(e,r,r+" is greater than the maximum value "+n.maximum)]:[]}function Oe(t){var e,r,n,i=t.valueSpec,a=R(t.value.type),o={},s="categorical"!==a&&void 0===t.value.property,l=!s,u="array"===fe(t.value.stops)&&"array"===fe(t.value.stops[0])&&"object"===fe(t.value.stops[0][0]),c=Se({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if("identity"===a)return[new P(t.key,t.value,'identity function may not have a "stops" property')];var e=[],r=t.value;return e=e.concat(Ce({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:f})),"array"===fe(r)&&0===r.length&&e.push(new P(t.key,r,"array must have at least one stop")),e},default:function(t){return Ke({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return"identity"===a&&s&&c.push(new P(t.key,t.value,'missing required property "property"')),"identity"===a||t.value.stops||c.push(new P(t.key,t.value,'missing required property "stops"')),"exponential"===a&&"piecewise-constant"===t.valueSpec.function&&c.push(new P(t.key,t.value,"exponential functions not supported")),t.styleSpec.$version>=8&&(l&&!t.valueSpec["property-function"]?c.push(new P(t.key,t.value,"property functions not supported")):s&&!t.valueSpec["zoom-function"]&&"heatmap-color"!==t.objectKey&&"line-gradient"!==t.objectKey&&c.push(new P(t.key,t.value,"zoom functions not supported"))),"categorical"!==a&&!u||void 0!==t.value.property||c.push(new P(t.key,t.value,'"property" property is required')),c;function f(t){var e=[],a=t.value,s=t.key;if("array"!==fe(a))return[new P(s,a,"array expected, "+fe(a)+" found")];if(2!==a.length)return[new P(s,a,"array length 2 expected, length "+a.length+" found")];if(u){if("object"!==fe(a[0]))return[new P(s,a,"object expected, "+fe(a[0])+" found")];if(void 0===a[0].zoom)return[new P(s,a,"object stop key must have zoom")];if(void 0===a[0].value)return[new P(s,a,"object stop key must have value")];if(n&&n>R(a[0].zoom))return[new P(s,a[0].zoom,"stop zoom values must appear in ascending order")];R(a[0].zoom)!==n&&(n=R(a[0].zoom),r=void 0,o={}),e=e.concat(Se({key:s+"[0]",value:a[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:Le,value:h}}))}else e=e.concat(h({key:s+"[0]",value:a[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},a));return e.concat(Ke({key:s+"[1]",value:a[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function h(t,n){var s=fe(t.value),l=R(t.value),u=null!==t.value?t.value:n;if(e){if(s!==e)return[new P(t.key,u,s+" stop domain type must match previous stop domain type "+e)]}else e=s;if("number"!==s&&"string"!==s&&"boolean"!==s)return[new P(t.key,u,"stop domain value must be a number, string, or boolean")];if("number"!==s&&"categorical"!==a){var c="number expected, "+s+" found";return i["property-function"]&&void 0===a&&(c+='\nIf you intended to use a categorical function, specify `"type": "categorical"`.'),[new P(t.key,u,c)]}return"categorical"!==a||"number"!==s||isFinite(l)&&Math.floor(l)===l?"categorical"!==a&&"number"===s&&void 0!==r&&l=2&&"$id"!==t[1]&&"$type"!==t[1];case"in":case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3===t.length&&(Array.isArray(t[1])||Array.isArray(t[2]));case"any":case"all":for(var e=0,r=t.slice(1);ee?1:0}function Fe(t){if(!t)return!0;var e,r=t[0];return t.length<=1?"any"!==r:"=="===r?Be(t[1],t[2],"=="):"!="===r?Ue(Be(t[1],t[2],"==")):"<"===r||">"===r||"<="===r||">="===r?Be(t[1],t[2],r):"any"===r?(e=t.slice(1),["any"].concat(e.map(Fe))):"all"===r?["all"].concat(t.slice(1).map(Fe)):"none"===r?["all"].concat(t.slice(1).map(Fe).map(Ue)):"in"===r?je(t[1],t.slice(2)):"!in"===r?Ue(je(t[1],t.slice(2))):"has"===r?Ve(t[1]):"!has"!==r||Ue(Ve(t[1]))}function Be(t,e,r){switch(t){case"$type":return["filter-type-"+r,e];case"$id":return["filter-id-"+r,e];default:return["filter-"+r,t,e]}}function je(t,e){if(0===e.length)return!1;switch(t){case"$type":return["filter-type-in",["literal",e]];case"$id":return["filter-id-in",["literal",e]];default:return e.length>200&&!e.some(function(t){return typeof t!=typeof e[0]})?["filter-in-large",t,["literal",e.sort(Re)]]:["filter-in-small",t,["literal",e]]}}function Ve(t){switch(t){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",t]}}function Ue(t){return["!",t]}function qe(t){return Pe(F(t.value))?ze(N({},t,{expressionContext:"filter",valueSpec:{value:"boolean"}})):function t(e){var r=e.value,n=e.key;if("array"!==fe(r))return[new P(n,r,"array expected, "+fe(r)+" found")];var i,a=e.styleSpec,o=[];if(r.length<1)return[new P(n,r,"filter array must have at least 1 element")];switch(o=o.concat(De({key:n+"[0]",value:r[0],valueSpec:a.filter_operator,style:e.style,styleSpec:e.styleSpec})),R(r[0])){case"<":case"<=":case">":case">=":r.length>=2&&"$type"===R(r[1])&&o.push(new P(n,r,'"$type" cannot be use with operator "'+r[0]+'"'));case"==":case"!=":3!==r.length&&o.push(new P(n,r,'filter array for operator "'+r[0]+'" must have 3 elements'));case"in":case"!in":r.length>=2&&"string"!==(i=fe(r[1]))&&o.push(new P(n+"[1]",r[1],"string expected, "+i+" found"));for(var s=2;s=u[h+0]&&n>=u[h+1]?(o[f]=!0,a.push(l[f])):o[f]=!1}}},cr.prototype._forEachCell=function(t,e,r,n,i,a,o){for(var s=this._convertToCellCoord(t),l=this._convertToCellCoord(e),u=this._convertToCellCoord(r),c=this._convertToCellCoord(n),f=s;f<=u;f++)for(var h=l;h<=c;h++){var p=this.d*h+f;if(i.call(this,t,e,r,n,p,a,o))return}},cr.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},cr.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=ur+this.cells.length+1+1,r=0,n=0;n=0)){var f=t[c];u[c]=hr[l].shallow.indexOf(c)>=0?f:mr(f,e)}t instanceof Error&&(u.message=t.message)}return{name:l,properties:u}}throw new Error("can't serialize object of type "+typeof t)}function gr(t){if(null==t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||t instanceof ArrayBuffer||ArrayBuffer.isView(t)||t instanceof fr)return t;if(Array.isArray(t))return t.map(function(t){return gr(t)});if("object"==typeof t){var e=t,r=e.name,n=e.properties;if(!r)throw new Error("can't deserialize object of anonymous class");var i=hr[r].klass;if(!i)throw new Error("can't deserialize unregistered class "+r);if(i.deserialize)return i.deserialize(n._serialized);for(var a=Object.create(i.prototype),o=0,s=Object.keys(n);o=0?n[l]:gr(n[l])}return a}throw new Error("can't deserialize object of type "+typeof t)}var vr=function(){this.first=!0};vr.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},"Arabic Supplement":function(t){return t>=1872&&t<=1919},"Arabic Extended-A":function(t){return t>=2208&&t<=2303},"Hangul Jamo":function(t){return t>=4352&&t<=4607},"Unified Canadian Aboriginal Syllabics":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},"Unified Canadian Aboriginal Syllabics Extended":function(t){return t>=6320&&t<=6399},"General Punctuation":function(t){return t>=8192&&t<=8303},"Letterlike Symbols":function(t){return t>=8448&&t<=8527},"Number Forms":function(t){return t>=8528&&t<=8591},"Miscellaneous Technical":function(t){return t>=8960&&t<=9215},"Control Pictures":function(t){return t>=9216&&t<=9279},"Optical Character Recognition":function(t){return t>=9280&&t<=9311},"Enclosed Alphanumerics":function(t){return t>=9312&&t<=9471},"Geometric Shapes":function(t){return t>=9632&&t<=9727},"Miscellaneous Symbols":function(t){return t>=9728&&t<=9983},"Miscellaneous Symbols and Arrows":function(t){return t>=11008&&t<=11263},"CJK Radicals Supplement":function(t){return t>=11904&&t<=12031},"Kangxi Radicals":function(t){return t>=12032&&t<=12255},"Ideographic Description Characters":function(t){return t>=12272&&t<=12287},"CJK Symbols and Punctuation":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},"Hangul Compatibility Jamo":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},"Bopomofo Extended":function(t){return t>=12704&&t<=12735},"CJK Strokes":function(t){return t>=12736&&t<=12783},"Katakana Phonetic Extensions":function(t){return t>=12784&&t<=12799},"Enclosed CJK Letters and Months":function(t){return t>=12800&&t<=13055},"CJK Compatibility":function(t){return t>=13056&&t<=13311},"CJK Unified Ideographs Extension A":function(t){return t>=13312&&t<=19903},"Yijing Hexagram Symbols":function(t){return t>=19904&&t<=19967},"CJK Unified Ideographs":function(t){return t>=19968&&t<=40959},"Yi Syllables":function(t){return t>=40960&&t<=42127},"Yi Radicals":function(t){return t>=42128&&t<=42191},"Hangul Jamo Extended-A":function(t){return t>=43360&&t<=43391},"Hangul Syllables":function(t){return t>=44032&&t<=55215},"Hangul Jamo Extended-B":function(t){return t>=55216&&t<=55295},"Private Use Area":function(t){return t>=57344&&t<=63743},"CJK Compatibility Ideographs":function(t){return t>=63744&&t<=64255},"Arabic Presentation Forms-A":function(t){return t>=64336&&t<=65023},"Vertical Forms":function(t){return t>=65040&&t<=65055},"CJK Compatibility Forms":function(t){return t>=65072&&t<=65103},"Small Form Variants":function(t){return t>=65104&&t<=65135},"Arabic Presentation Forms-B":function(t){return t>=65136&&t<=65279},"Halfwidth and Fullwidth Forms":function(t){return t>=65280&&t<=65519}};function xr(t){for(var e=0,r=t;e=65097&&t<=65103)||yr["CJK Compatibility Ideographs"](t)||yr["CJK Compatibility"](t)||yr["CJK Radicals Supplement"](t)||yr["CJK Strokes"](t)||!(!yr["CJK Symbols and Punctuation"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||yr["CJK Unified Ideographs Extension A"](t)||yr["CJK Unified Ideographs"](t)||yr["Enclosed CJK Letters and Months"](t)||yr["Hangul Compatibility Jamo"](t)||yr["Hangul Jamo Extended-A"](t)||yr["Hangul Jamo Extended-B"](t)||yr["Hangul Jamo"](t)||yr["Hangul Syllables"](t)||yr.Hiragana(t)||yr["Ideographic Description Characters"](t)||yr.Kanbun(t)||yr["Kangxi Radicals"](t)||yr["Katakana Phonetic Extensions"](t)||yr.Katakana(t)&&12540!==t||!(!yr["Halfwidth and Fullwidth Forms"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!yr["Small Form Variants"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||yr["Unified Canadian Aboriginal Syllabics"](t)||yr["Unified Canadian Aboriginal Syllabics Extended"](t)||yr["Vertical Forms"](t)||yr["Yijing Hexagram Symbols"](t)||yr["Yi Syllables"](t)||yr["Yi Radicals"](t)))}function wr(t){return!(_r(t)||function(t){return!!(yr["Latin-1 Supplement"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||yr["General Punctuation"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||yr["Letterlike Symbols"](t)||yr["Number Forms"](t)||yr["Miscellaneous Technical"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||yr["Control Pictures"](t)&&9251!==t||yr["Optical Character Recognition"](t)||yr["Enclosed Alphanumerics"](t)||yr["Geometric Shapes"](t)||yr["Miscellaneous Symbols"](t)&&!(t>=9754&&t<=9759)||yr["Miscellaneous Symbols and Arrows"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||yr["CJK Symbols and Punctuation"](t)||yr.Katakana(t)||yr["Private Use Area"](t)||yr["CJK Compatibility Forms"](t)||yr["Small Form Variants"](t)||yr["Halfwidth and Fullwidth Forms"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function Ar(t,e){return!(!e&&(t>=1424&&t<=2303||yr["Arabic Presentation Forms-A"](t)||yr["Arabic Presentation Forms-B"](t))||t>=2304&&t<=3583||t>=3840&&t<=4255||yr.Khmer(t))}var Mr,kr=!1,Tr=null,Er=!1,Sr=new z,Cr={applyArabicShaping:null,processBidirectionalText:null,isLoaded:function(){return Er||null!=Cr.applyArabicShaping}},Lr=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new vr,this.transition={})};Lr.prototype.isSupportedScript=function(t){return function(t,e){for(var r=0,n=t;rthis.end)return this.prior=null,r;if(this.value.isDataDriven())return this.prior=null,r;if(e=1)return 1;var e=i*i,r=e*i;return 4*(i<.5?r:3*(i-e)+r-.75)}())}return r};var Ir=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)};Ir.prototype.possiblyEvaluate=function(t){for(var e=new Fr(this._properties),r=0,n=Object.keys(this._values);rn.zoomHistory.lastIntegerZoom?{from:t,to:e,fromScale:2,toScale:1,t:a+(1-a)*o}:{from:r,to:e,fromScale:.5,toScale:1,t:1-(1-o)*a}},Vr.prototype.interpolate=function(t){return t};var Ur=function(t){this.specification=t};Ur.prototype.possiblyEvaluate=function(t,e){return!!t.expression.evaluate(e)},Ur.prototype.interpolate=function(){return!1};var qr=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},t){var r=t[e],n=this.defaultPropertyValues[e]=new Or(r,void 0),i=this.defaultTransitionablePropertyValues[e]=new zr(r);this.defaultTransitioningPropertyValues[e]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=n.possiblyEvaluate({})}};pr("DataDrivenProperty",jr),pr("DataConstantProperty",Br),pr("CrossFadedProperty",Vr),pr("ColorRampProperty",Ur);var Hr=function(t){function e(e,r){for(var n in t.call(this),this.id=e.id,this.metadata=e.metadata,this.type=e.type,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,this.visibility="visible","background"!==e.type&&(this.source=e.source,this.sourceLayer=e["source-layer"],this.filter=e.filter),this._featureFilter=function(){return!0},r.layout&&(this._unevaluatedLayout=new Nr(r.layout)),this._transitionablePaint=new Dr(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayoutProperty=function(t){return"visibility"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){if(null!=e){var n="layers."+this.id+".layout."+t;if(this._validate(or,n,t,e,r))return}"visibility"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility="none"===e?e:"visible"},e.prototype.getPaintProperty=function(t){return g(t,"-transition")?this._transitionablePaint.getTransition(t.slice(0,-"-transition".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(null!=e){var n="layers."+this.id+".paint."+t;if(this._validate(ar,n,t,e,r))return}g(t,"-transition")?this._transitionablePaint.setTransition(t.slice(0,-"-transition".length),e||void 0):this._transitionablePaint.setValue(t,e)},e.prototype.isHidden=function(t){return!!(this.minzoom&&t=this.maxzoom)||"none"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t){this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t)),this.paint=this._transitioningPaint.possiblyEvaluate(t)},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,"source-layer":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return"none"===this.visibility&&(t.layout=t.layout||{},t.layout.visibility="none"),y(t,function(t,e){return!(void 0===t||"layout"===e&&!Object.keys(t).length||"paint"===e&&!Object.keys(t).length)})},e.prototype._validate=function(t,e,r,n,i){return(!i||!1!==i.validate)&&sr(this,t.call(nr,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:D,style:{glyphs:!0,sprite:!0}}))},e.prototype.hasOffscreenPass=function(){return!1},e.prototype.resize=function(){},e}(z),Gr={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Wr=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8},Yr=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0)};function Zr(t,e){void 0===e&&(e=1);var r=0,n=0;return{members:t.map(function(t){var i,a=(i=t.type,Gr[i].BYTES_PER_ELEMENT),o=r=Xr(r,Math.max(e,a)),s=t.components||1;return n=Math.max(n,a),r+=a*s,{name:t.name,type:t.type,components:s,offset:o}}),size:Xr(r,Math.max(n,e)),alignment:e}}function Xr(t,e){return Math.ceil(t/e)*e}Yr.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},Yr.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},Yr.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},Yr.prototype.clear=function(){this.length=0},Yr.prototype.resize=function(t){this.reserve(t),this.length=t},Yr.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},Yr.prototype._refreshViews=function(){throw new Error("_refreshViews() must be implemented by each concrete StructArray layout")};var $r=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;this.resize(r+1);var n=2*r;return this.int16[n+0]=t,this.int16[n+1]=e,r},e}(Yr);$r.prototype.bytesPerElement=4,pr("StructArrayLayout2i4",$r);var Jr=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;this.resize(i+1);var a=4*i;return this.int16[a+0]=t,this.int16[a+1]=e,this.int16[a+2]=r,this.int16[a+3]=n,i},e}(Yr);Jr.prototype.bytesPerElement=8,pr("StructArrayLayout4i8",Jr);var Kr=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;this.resize(o+1);var s=6*o;return this.int16[s+0]=t,this.int16[s+1]=e,this.int16[s+2]=r,this.int16[s+3]=n,this.int16[s+4]=i,this.int16[s+5]=a,o},e}(Yr);Kr.prototype.bytesPerElement=12,pr("StructArrayLayout2i4i12",Kr);var Qr=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s){var l=this.length;this.resize(l+1);var u=6*l,c=12*l;return this.int16[u+0]=t,this.int16[u+1]=e,this.int16[u+2]=r,this.int16[u+3]=n,this.uint8[c+8]=i,this.uint8[c+9]=a,this.uint8[c+10]=o,this.uint8[c+11]=s,l},e}(Yr);Qr.prototype.bytesPerElement=12,pr("StructArrayLayout4i4ub12",Qr);var tn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s){var l=this.length;this.resize(l+1);var u=8*l;return this.int16[u+0]=t,this.int16[u+1]=e,this.int16[u+2]=r,this.int16[u+3]=n,this.uint16[u+4]=i,this.uint16[u+5]=a,this.uint16[u+6]=o,this.uint16[u+7]=s,l},e}(Yr);tn.prototype.bytesPerElement=16,pr("StructArrayLayout4i4ui16",tn);var en=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;this.resize(n+1);var i=3*n;return this.float32[i+0]=t,this.float32[i+1]=e,this.float32[i+2]=r,n},e}(Yr);en.prototype.bytesPerElement=12,pr("StructArrayLayout3f12",en);var rn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;this.resize(e+1);var r=1*e;return this.uint32[r+0]=t,e},e}(Yr);rn.prototype.bytesPerElement=4,pr("StructArrayLayout1ul4",rn);var nn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c){var f=this.length;this.resize(f+1);var h=12*f,p=6*f;return this.int16[h+0]=t,this.int16[h+1]=e,this.int16[h+2]=r,this.int16[h+3]=n,this.int16[h+4]=i,this.int16[h+5]=a,this.uint32[p+3]=o,this.uint16[h+8]=s,this.uint16[h+9]=l,this.int16[h+10]=u,this.int16[h+11]=c,f},e}(Yr);nn.prototype.bytesPerElement=24,pr("StructArrayLayout6i1ul2ui2i24",nn);var an=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;this.resize(o+1);var s=6*o;return this.int16[s+0]=t,this.int16[s+1]=e,this.int16[s+2]=r,this.int16[s+3]=n,this.int16[s+4]=i,this.int16[s+5]=a,o},e}(Yr);an.prototype.bytesPerElement=12,pr("StructArrayLayout2i2i2i12",an);var on=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;this.resize(r+1);var n=4*r;return this.uint8[n+0]=t,this.uint8[n+1]=e,r},e}(Yr);on.prototype.bytesPerElement=4,pr("StructArrayLayout2ub4",on);var sn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,u,c,f,h,p){var d=this.length;this.resize(d+1);var m=20*d,g=10*d,v=40*d;return this.int16[m+0]=t,this.int16[m+1]=e,this.uint16[m+2]=r,this.uint16[m+3]=n,this.uint32[g+2]=i,this.uint32[g+3]=a,this.uint32[g+4]=o,this.uint16[m+10]=s,this.uint16[m+11]=l,this.uint16[m+12]=u,this.float32[g+7]=c,this.float32[g+8]=f,this.uint8[v+36]=h,this.uint8[v+37]=p,d},e}(Yr);sn.prototype.bytesPerElement=40,pr("StructArrayLayout2i2ui3ul3ui2f2ub40",sn);var ln=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;this.resize(e+1);var r=1*e;return this.float32[r+0]=t,e},e}(Yr);ln.prototype.bytesPerElement=4,pr("StructArrayLayout1f4",ln);var un=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;this.resize(n+1);var i=3*n;return this.int16[i+0]=t,this.int16[i+1]=e,this.int16[i+2]=r,n},e}(Yr);un.prototype.bytesPerElement=6,pr("StructArrayLayout3i6",un);var cn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;this.resize(n+1);var i=2*n,a=4*n;return this.uint32[i+0]=t,this.uint16[a+2]=e,this.uint16[a+3]=r,n},e}(Yr);cn.prototype.bytesPerElement=8,pr("StructArrayLayout1ul2ui8",cn);var fn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;this.resize(n+1);var i=3*n;return this.uint16[i+0]=t,this.uint16[i+1]=e,this.uint16[i+2]=r,n},e}(Yr);fn.prototype.bytesPerElement=6,pr("StructArrayLayout3ui6",fn);var hn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;this.resize(r+1);var n=2*r;return this.uint16[n+0]=t,this.uint16[n+1]=e,r},e}(Yr);hn.prototype.bytesPerElement=4,pr("StructArrayLayout2ui4",hn);var pn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;this.resize(r+1);var n=2*r;return this.float32[n+0]=t,this.float32[n+1]=e,r},e}(Yr);pn.prototype.bytesPerElement=8,pr("StructArrayLayout2f8",pn);var dn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;this.resize(i+1);var a=4*i;return this.float32[a+0]=t,this.float32[a+1]=e,this.float32[a+2]=r,this.float32[a+3]=n,i},e}(Yr);dn.prototype.bytesPerElement=16,pr("StructArrayLayout4f16",dn);var mn=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},radius:{configurable:!0},signedDistanceFromAnchor:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorPointY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.x1.set=function(t){this._structArray.int16[this._pos2+2]=t},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.y1.set=function(t){this._structArray.int16[this._pos2+3]=t},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.x2.set=function(t){this._structArray.int16[this._pos2+4]=t},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.y2.set=function(t){this._structArray.int16[this._pos2+5]=t},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},r.radius.get=function(){return this._structArray.int16[this._pos2+10]},r.radius.set=function(t){this._structArray.int16[this._pos2+10]=t},r.signedDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+11]},r.signedDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+11]=t},r.anchorPoint.get=function(){return new l(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(Wr);mn.prototype.size=24;var gn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new mn(this,t)},e}(nn);pr("CollisionBoxArray",gn);var vn=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},hidden:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.glyphStartIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.numGlyphs.set=function(t){this._structArray.uint16[this._pos2+3]=t},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.vertexStartIndex.set=function(t){this._structArray.uint32[this._pos4+2]=t},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineStartIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.lineLength.set=function(t){this._structArray.uint32[this._pos4+4]=t},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.segment.set=function(t){this._structArray.uint16[this._pos2+10]=t},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.lowerSize.set=function(t){this._structArray.uint16[this._pos2+11]=t},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.upperSize.set=function(t){this._structArray.uint16[this._pos2+12]=t},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetX.set=function(t){this._structArray.float32[this._pos4+7]=t},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.lineOffsetY.set=function(t){this._structArray.float32[this._pos4+8]=t},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.writingMode.set=function(t){this._structArray.uint8[this._pos1+36]=t},r.hidden.get=function(){return this._structArray.uint8[this._pos1+37]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+37]=t},Object.defineProperties(e.prototype,r),e}(Wr);vn.prototype.size=40;var yn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new vn(this,t)},e}(sn);pr("PlacedSymbolArray",yn);var xn=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={offsetX:{configurable:!0}};return r.offsetX.get=function(){return this._structArray.float32[this._pos4+0]},r.offsetX.set=function(t){this._structArray.float32[this._pos4+0]=t},Object.defineProperties(e.prototype,r),e}(Wr);xn.prototype.size=4;var bn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e.prototype.get=function(t){return new xn(this,t)},e}(ln);pr("GlyphOffsetArray",bn);var _n=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={x:{configurable:!0},y:{configurable:!0},tileUnitDistanceFromAnchor:{configurable:!0}};return r.x.get=function(){return this._structArray.int16[this._pos2+0]},r.x.set=function(t){this._structArray.int16[this._pos2+0]=t},r.y.get=function(){return this._structArray.int16[this._pos2+1]},r.y.set=function(t){this._structArray.int16[this._pos2+1]=t},r.tileUnitDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+2]},r.tileUnitDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+2]=t},Object.defineProperties(e.prototype,r),e}(Wr);_n.prototype.size=6;var wn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e.prototype.get=function(t){return new _n(this,t)},e}(un);pr("SymbolLineVertexArray",wn);var An=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+0]=t},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+3]=t},Object.defineProperties(e.prototype,r),e}(Wr);An.prototype.size=8;var Mn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new An(this,t)},e}(cn);pr("FeatureIndexArray",Mn);var kn=Zr([{name:"a_pos",components:2,type:"Int16"}],4).members,Tn=function(t){void 0===t&&(t=[]),this.segments=t};Tn.prototype.prepareSegment=function(t,e,r){var n=this.segments[this.segments.length-1];return t>Tn.MAX_VERTEX_ARRAY_LENGTH&&_("Max vertices per segment is "+Tn.MAX_VERTEX_ARRAY_LENGTH+": bucket requested "+t),(!n||n.vertexLength+t>Tn.MAX_VERTEX_ARRAY_LENGTH)&&(n={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},this.segments.push(n)),n},Tn.prototype.get=function(){return this.segments},Tn.prototype.destroy=function(){for(var t=0,e=this.segments;tNn.max||o.yNn.max)&&_("Geometry exceeds allowed extent, reduce your vector tile buffer size")}return r}function Fn(t,e,r,n,i){t.emplaceBack(2*e+(n+1)/2,2*r+(i+1)/2)}var Bn=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.layoutVertexArray=new $r,this.indexArray=new fn,this.segments=new Tn,this.programConfigurations=new Dn(kn,t.layers,t.zoom)};function jn(t,e,r){for(var n=0;n=3)for(var s=0;s1){if(Hn(t,e))return!0;for(var n=0;n1?t.distSqr(r):t.distSqr(r.sub(e)._mult(i)._add(e))}function Zn(t,e){for(var r,n,i,a=!1,o=0;oe.y!=i.y>e.y&&e.x<(i.x-n.x)*(e.y-n.y)/(i.y-n.y)+n.x&&(a=!a);return a}function Xn(t,e){for(var r=!1,n=0,i=t.length-1;ne.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x&&(r=!r)}return r}function $n(t,e,r){var n=e.paint.get(t).value;return"constant"===n.kind?n.value:r.programConfigurations.get(e.id).binders[t].statistics.max}function Jn(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function Kn(t,e,r,n,i){if(!e[0]&&!e[1])return t;var a=l.convert(e);"viewport"===r&&a._rotate(-n);for(var o=[],s=0;s=In||l<0||l>=In)){var u=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),c=u.vertexLength;Fn(this.layoutVertexArray,s,l,-1,-1),Fn(this.layoutVertexArray,s,l,1,-1),Fn(this.layoutVertexArray,s,l,1,1),Fn(this.layoutVertexArray,s,l,-1,1),this.indexArray.emplaceBack(c,c+1,c+2),this.indexArray.emplaceBack(c,c+3,c+2),u.vertexLength+=4,u.primitiveLength+=2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t)},pr("CircleBucket",Bn,{omit:["layers"]});var Qn={paint:new qr({"circle-radius":new jr(D.paint_circle["circle-radius"]),"circle-color":new jr(D.paint_circle["circle-color"]),"circle-blur":new jr(D.paint_circle["circle-blur"]),"circle-opacity":new jr(D.paint_circle["circle-opacity"]),"circle-translate":new Br(D.paint_circle["circle-translate"]),"circle-translate-anchor":new Br(D.paint_circle["circle-translate-anchor"]),"circle-pitch-scale":new Br(D.paint_circle["circle-pitch-scale"]),"circle-pitch-alignment":new Br(D.paint_circle["circle-pitch-alignment"]),"circle-stroke-width":new jr(D.paint_circle["circle-stroke-width"]),"circle-stroke-color":new jr(D.paint_circle["circle-stroke-color"]),"circle-stroke-opacity":new jr(D.paint_circle["circle-stroke-opacity"])})},ti=i(function(t,e){var r;t.exports=((r=new Float32Array(3))[0]=0,r[1]=0,r[2]=0,function(){var t=new Float32Array(4);t[0]=0,t[1]=0,t[2]=0,t[3]=0}(),{vec3:{transformMat3:function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t}},vec4:{transformMat4:function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}},mat2:{create:function(){var t=new Float32Array(4);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},rotate:function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l+a*s,t[1]=i*l+o*s,t[2]=n*-s+a*l,t[3]=i*-s+o*l,t},scale:function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=r[0],l=r[1];return t[0]=n*s,t[1]=i*s,t[2]=a*l,t[3]=o*l,t}},mat3:{create:function(){var t=new Float32Array(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},fromRotation:function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=-r,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}},mat4:{create:function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},identity:function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},translate:function(t,e,r){var n,i,a,o,s,l,u,c,f,h,p,d,m=r[0],g=r[1],v=r[2];return e===t?(t[12]=e[0]*m+e[4]*g+e[8]*v+e[12],t[13]=e[1]*m+e[5]*g+e[9]*v+e[13],t[14]=e[2]*m+e[6]*g+e[10]*v+e[14],t[15]=e[3]*m+e[7]*g+e[11]*v+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=f,t[9]=h,t[10]=p,t[11]=d,t[12]=n*m+s*g+f*v+e[12],t[13]=i*m+l*g+h*v+e[13],t[14]=a*m+u*g+p*v+e[14],t[15]=o*m+c*g+d*v+e[15]),t},scale:function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},multiply:function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],f=e[8],h=e[9],p=e[10],d=e[11],m=e[12],g=e[13],v=e[14],y=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*f+w*m,t[1]=x*i+b*l+_*h+w*g,t[2]=x*a+b*u+_*p+w*v,t[3]=x*o+b*c+_*d+w*y,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*f+w*m,t[5]=x*i+b*l+_*h+w*g,t[6]=x*a+b*u+_*p+w*v,t[7]=x*o+b*c+_*d+w*y,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*f+w*m,t[9]=x*i+b*l+_*h+w*g,t[10]=x*a+b*u+_*p+w*v,t[11]=x*o+b*c+_*d+w*y,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*f+w*m,t[13]=x*i+b*l+_*h+w*g,t[14]=x*a+b*u+_*p+w*v,t[15]=x*o+b*c+_*d+w*y,t},perspective:function(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t},rotateX:function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],f=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+f*n,t[7]=l*i+h*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=f*i-s*n,t[11]=h*i-l*n,t},rotateZ:function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],f=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+f*n,t[3]=l*i+h*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=f*i-s*n,t[7]=h*i-l*n,t},invert:function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],f=e[9],h=e[10],p=e[11],d=e[12],m=e[13],g=e[14],v=e[15],y=r*s-n*o,x=r*l-i*o,b=r*u-a*o,_=n*l-i*s,w=n*u-a*s,A=i*u-a*l,M=c*m-f*d,k=c*g-h*d,T=c*v-p*d,E=f*g-h*m,S=f*v-p*m,C=h*v-p*g,L=y*C-x*S+b*E+_*T-w*k+A*M;return L?(L=1/L,t[0]=(s*C-l*S+u*E)*L,t[1]=(i*S-n*C-a*E)*L,t[2]=(m*A-g*w+v*_)*L,t[3]=(h*w-f*A-p*_)*L,t[4]=(l*T-o*C-u*k)*L,t[5]=(r*C-i*T+a*k)*L,t[6]=(g*b-d*A-v*x)*L,t[7]=(c*A-h*b+p*x)*L,t[8]=(o*S-s*T+u*M)*L,t[9]=(n*T-r*S-a*M)*L,t[10]=(d*w-m*b+v*y)*L,t[11]=(f*b-c*w-p*y)*L,t[12]=(s*k-o*E-l*M)*L,t[13]=(r*E-n*k+i*M)*L,t[14]=(m*x-d*_-g*y)*L,t[15]=(c*_-f*x+h*y)*L,t):null},ortho:function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t}}})}),ei=(ti.vec3,ti.vec4),ri=(ti.mat2,ti.mat3,ti.mat4),ni=function(t){function e(e){t.call(this,e,Qn)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Bn(t)},e.prototype.queryRadius=function(t){var e=t;return $n("circle-radius",this,e)+$n("circle-stroke-width",this,e)+Jn(this.paint.get("circle-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o){for(var s=Kn(t,this.paint.get("circle-translate"),this.paint.get("circle-translate-anchor"),i.angle,a),l=this.paint.get("circle-radius").evaluate(e)+this.paint.get("circle-stroke-width").evaluate(e),u="map"===this.paint.get("circle-pitch-alignment"),c=u?s:function(t,e,r){return s.map(function(t){return t.map(function(t){return ii(t,e,r)})})}(0,o,i),f=u?l*a:l,h=0,p=r;ht.width||i.height>t.height||r.x>t.width-i.width||r.y>t.height-i.height)throw new RangeError("out of range source coordinates for image copy");if(i.width>e.width||i.height>e.height||n.x>e.width-i.width||n.y>e.height-i.height)throw new RangeError("out of range destination coordinates for image copy");for(var o=t.data,s=e.data,l=0;l80*r){n=a=t[0],i=o=t[1];for(var d=r;da&&(a=s),l>o&&(o=l);u=0!==(u=Math.max(a-n,o-i))?1/u:0}return wi(h,p,r,n,i,u),p}function bi(t,e,r,n,i){var a,o;if(i===Vi(t,e,r,n)>0)for(a=e;a=e;a-=n)o=Fi(a,t[a],t[a+1],o);return o&&Pi(o,o.next)&&(Bi(o),o=o.next),o}function _i(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!Pi(n,n.next)&&0!==Di(n.prev,n,n.next))n=n.next;else{if(Bi(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function wi(t,e,r,n,i,a,o){if(t){!o&&a&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=Ci(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,l,u=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,u*=2}while(o>1)}(i)}(t,n,i,a);for(var s,l,u=t;t.prev!==t.next;)if(s=t.prev,l=t.next,a?Mi(t,n,i,a):Ai(t))e.push(s.i/r),e.push(t.i/r),e.push(l.i/r),Bi(t),t=l.next,u=l.next;else if((t=l)===u){o?1===o?wi(t=ki(t,e,r),e,r,n,i,a,2):2===o&&Ti(t,e,r,n,i,a):wi(_i(t),e,r,n,i,a,1);break}}}function Ai(t){var e=t.prev,r=t,n=t.next;if(Di(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(Oi(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&Di(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function Mi(t,e,r,n){var i=t.prev,a=t,o=t.next;if(Di(i,a,o)>=0)return!1;for(var s=i.xa.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,c=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,f=Ci(s,l,e,r,n),h=Ci(u,c,e,r,n),p=t.prevZ,d=t.nextZ;p&&p.z>=f&&d&&d.z<=h;){if(p!==t.prev&&p!==t.next&&Oi(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&Di(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,d!==t.prev&&d!==t.next&&Oi(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&Di(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;p&&p.z>=f;){if(p!==t.prev&&p!==t.next&&Oi(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&Di(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;d&&d.z<=h;){if(d!==t.prev&&d!==t.next&&Oi(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&Di(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function ki(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!Pi(i,a)&&Ii(i,n,n.next,a)&&Ni(i,a)&&Ni(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),Bi(n),Bi(n.next),n=t=a),n=n.next}while(n!==t);return n}function Ti(t,e,r,n,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&zi(o,s)){var l=Ri(o,s);return o=_i(o,o.next),l=_i(l,l.next),wi(o,e,r,n,i,a),void wi(l,e,r,n,i,a)}s=s.next}o=o.next}while(o!==t)}function Ei(t,e){return t.x-e.x}function Si(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x=n.x&&n.x>=c&&i!==n.x&&Oi(ar.x)&&Ni(n,t)&&(r=n,h=l),n=n.next;return r}(t,e)){var r=Ri(e,t);_i(r,r.next)}}function Ci(t,e,r,n,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Li(t){var e=t,r=t;do{e.x=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function zi(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&Ii(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&Ni(t,e)&&Ni(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)}function Di(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function Pi(t,e){return t.x===e.x&&t.y===e.y}function Ii(t,e,r,n){return!!(Pi(t,e)&&Pi(r,n)||Pi(t,n)&&Pi(r,e))||Di(t,e,r)>0!=Di(t,e,n)>0&&Di(r,n,t)>0!=Di(r,n,e)>0}function Ni(t,e){return Di(t.prev,t,t.next)<0?Di(t,e,t.next)>=0&&Di(t,t.prev,e)>=0:Di(t,e,t.prev)<0||Di(t,t.next,e)<0}function Ri(t,e){var r=new ji(t.i,t.x,t.y),n=new ji(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function Fi(t,e,r,n){var i=new ji(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function Bi(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function ji(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Vi(t,e,r,n){for(var i=0,a=e,o=r-n;a0&&(n+=t[i-1].length,r.holes.push(n))}return r},vi.default=yi;var Ui=Hi,qi=Hi;function Hi(t,e,r,n,i){!function t(e,r,n,i,a){for(;i>n;){if(i-n>600){var o=i-n+1,s=r-n+1,l=Math.log(o),u=.5*Math.exp(2*l/3),c=.5*Math.sqrt(l*u*(o-u)/o)*(s-o/2<0?-1:1);t(e,r,Math.max(n,Math.floor(r-s*u/o+c)),Math.min(i,Math.floor(r+(o-s)*u/o+c)),a)}var f=e[r],h=n,p=i;for(Gi(e,n,r),a(e[i],f)>0&&Gi(e,n,i);h0;)p--}0===a(e[n],f)?Gi(e,n,p):Gi(e,++p,i),p<=r&&(n=p+1),r<=p&&(i=p-1)}}(t,e,r||0,n||t.length-1,i||Wi)}function Gi(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function Wi(t,e){return te?1:0}function Yi(t,e){var r=t.length;if(r<=1)return[t];for(var n,i,a=[],o=0;o1)for(var l=0;lIn)||t.y===e.y&&(t.y<0||t.y>In)}function na(t){return t.every(function(t){return t.x<0})||t.every(function(t){return t.x>In})||t.every(function(t){return t.y<0})||t.every(function(t){return t.y>In})}ea.prototype.populate=function(t,e){for(var r=0,n=t;r=1){var m=f[p-1];if(!ra(d,m)){l.vertexLength+4>Tn.MAX_VERTEX_ARRAY_LENGTH&&(l=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var g=d.sub(m)._perp()._unit(),v=m.dist(d);h+v>32768&&(h=0),ta(this.layoutVertexArray,d.x,d.y,g.x,g.y,0,0,h),ta(this.layoutVertexArray,d.x,d.y,g.x,g.y,0,1,h),h+=v,ta(this.layoutVertexArray,m.x,m.y,g.x,g.y,0,0,h),ta(this.layoutVertexArray,m.x,m.y,g.x,g.y,0,1,h);var y=l.vertexLength;this.indexArray.emplaceBack(y,y+1,y+2),this.indexArray.emplaceBack(y+1,y+2,y+3),l.vertexLength+=4,l.primitiveLength+=2}}}}l.vertexLength+a>Tn.MAX_VERTEX_ARRAY_LENGTH&&(l=this.segments.prepareSegment(a,this.layoutVertexArray,this.indexArray));for(var x=[],b=[],_=l.vertexLength,w=0,A=i;w>3}if(i--,1===n||2===n)a+=t.readSVarint(),o+=t.readSVarint(),1===n&&(e&&s.push(e),e=[]),e.push(new l(a,o));else{if(7!==n)throw new Error("unknown command "+n);e&&e.push(e[0].clone())}}return e&&s.push(e),s},la.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,i=0,a=0,o=1/0,s=-1/0,l=1/0,u=-1/0;t.pos>3}if(n--,1===r||2===r)(i+=t.readSVarint())s&&(s=i),(a+=t.readSVarint())u&&(u=a);else if(7!==r)throw new Error("unknown command "+r)}return[o,l,s,u]},la.prototype.toGeoJSON=function(t,e,r){var n,i,a=this.extent*Math.pow(2,r),o=this.extent*t,s=this.extent*e,l=this.loadGeometry(),u=la.types[this.type];function c(t){for(var e=0;e>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null}return e}(r))}function da(t,e,r){if(3===t){var n=new fa(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n)}}ha.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new sa(this._pbf,e,this.extent,this._keys,this._values)};var ma={VectorTile:function(t,e){this.layers=t.readFields(da,{},e)},VectorTileFeature:sa,VectorTileLayer:fa},ga=ma.VectorTileFeature.types,va=63,ya=Math.cos(Math.PI/180*37.5),xa=.5,ba=Math.pow(2,14)/xa;function _a(t,e,r,n,i,a,o){t.emplaceBack(e.x,e.y,n?1:0,i?1:-1,Math.round(va*r.x)+128,Math.round(va*r.y)+128,1+(0===a?0:a<0?-1:1)|(o*xa&63)<<2,o*xa>>6)}var wa=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.layoutVertexArray=new Qr,this.indexArray=new fn,this.programConfigurations=new Dn(oa,t.layers,t.zoom),this.segments=new Tn};function Aa(t,e){return(t/e.tileTotal*(e.end-e.start)+e.start)*(ba-1)}wa.prototype.populate=function(t,e){for(var r=0,n=t;r=2&&t[l-1].equals(t[l-2]);)l--;for(var u=0;uu){var S=p.dist(x);if(S>2*c){var C=p.sub(p.sub(x)._mult(c/S)._round());this.distance+=C.dist(x),this.addCurrentVertex(C,this.distance,_.mult(1),0,0,!1,h,o),x=C}}var L=x&&b,O=L?r:b?g:v;if(L&&"round"===O&&(Ti&&(O="bevel"),"bevel"===O&&(T>2&&(O="flipbevel"),T100)M=w.clone().mult(-1);else{var z=_.x*w.y-_.y*w.x>0?-1:1,D=T*_.add(w).mag()/_.sub(w).mag();M._perp()._mult(D*z)}this.addCurrentVertex(p,this.distance,M,0,0,!1,h,o),this.addCurrentVertex(p,this.distance,M.mult(-1),0,0,!1,h,o)}else if("bevel"===O||"fakeround"===O){var P=_.x*w.y-_.y*w.x>0,I=-Math.sqrt(T*T-1);if(P?(m=0,d=I):(d=0,m=I),y||this.addCurrentVertex(p,this.distance,_,d,m,!1,h,o),"fakeround"===O){for(var N=Math.floor(8*(.5-(k-.5))),R=void 0,F=0;F=0;B--)R=_.mult((B+1)/(N+1))._add(w)._unit(),this.addPieSliceVertex(p,this.distance,R,P,h,o)}b&&this.addCurrentVertex(p,this.distance,w,-d,-m,!1,h,o)}else"butt"===O?(y||this.addCurrentVertex(p,this.distance,_,0,0,!1,h,o),b&&this.addCurrentVertex(p,this.distance,w,0,0,!1,h,o)):"square"===O?(y||(this.addCurrentVertex(p,this.distance,_,1,1,!1,h,o),this.e1=this.e2=-1),b&&this.addCurrentVertex(p,this.distance,w,-1,-1,!1,h,o)):"round"===O&&(y||(this.addCurrentVertex(p,this.distance,_,0,0,!1,h,o),this.addCurrentVertex(p,this.distance,_,1,1,!0,h,o),this.e1=this.e2=-1),b&&(this.addCurrentVertex(p,this.distance,w,-1,-1,!0,h,o),this.addCurrentVertex(p,this.distance,w,0,0,!1,h,o)));if(E&&A2*c){var V=p.add(b.sub(p)._mult(c/j)._round());this.distance+=V.dist(p),this.addCurrentVertex(V,this.distance,w.mult(1),0,0,!1,h,o),p=V}}y=!1}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e)}},wa.prototype.addCurrentVertex=function(t,e,r,n,i,a,o,s){var l,u=this.layoutVertexArray,c=this.indexArray;s&&(e=Aa(e,s)),l=r.clone(),n&&l._sub(r.perp()._mult(n)),_a(u,t,l,a,!1,n,e),this.e3=o.vertexLength++,this.e1>=0&&this.e2>=0&&(c.emplaceBack(this.e1,this.e2,this.e3),o.primitiveLength++),this.e1=this.e2,this.e2=this.e3,l=r.mult(-1),i&&l._sub(r.perp()._mult(i)),_a(u,t,l,a,!0,-i,e),this.e3=o.vertexLength++,this.e1>=0&&this.e2>=0&&(c.emplaceBack(this.e1,this.e2,this.e3),o.primitiveLength++),this.e1=this.e2,this.e2=this.e3,e>ba/2&&!s&&(this.distance=0,this.addCurrentVertex(t,this.distance,r,n,i,a,o))},wa.prototype.addPieSliceVertex=function(t,e,r,n,i,a){r=r.mult(n?-1:1);var o=this.layoutVertexArray,s=this.indexArray;a&&(e=Aa(e,a)),_a(o,t,r,!1,n,0,e),this.e3=i.vertexLength++,this.e1>=0&&this.e2>=0&&(s.emplaceBack(this.e1,this.e2,this.e3),i.primitiveLength++),n?this.e2=this.e3:this.e1=this.e3},pr("LineBucket",wa,{omit:["layers"]});var Ma=new qr({"line-cap":new Br(D.layout_line["line-cap"]),"line-join":new jr(D.layout_line["line-join"]),"line-miter-limit":new Br(D.layout_line["line-miter-limit"]),"line-round-limit":new Br(D.layout_line["line-round-limit"])}),ka={paint:new qr({"line-opacity":new jr(D.paint_line["line-opacity"]),"line-color":new jr(D.paint_line["line-color"]),"line-translate":new Br(D.paint_line["line-translate"]),"line-translate-anchor":new Br(D.paint_line["line-translate-anchor"]),"line-width":new jr(D.paint_line["line-width"]),"line-gap-width":new jr(D.paint_line["line-gap-width"]),"line-offset":new jr(D.paint_line["line-offset"]),"line-blur":new jr(D.paint_line["line-blur"]),"line-dasharray":new Vr(D.paint_line["line-dasharray"]),"line-pattern":new Vr(D.paint_line["line-pattern"]),"line-gradient":new Ur(D.paint_line["line-gradient"])}),layout:Ma},Ta=new(function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new Lr(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,n){return r=p({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n)},e}(jr))(ka.paint.properties["line-width"].specification);Ta.useIntegerZoom=!0;var Ea=function(t){function e(e){t.call(this,e,ka)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setPaintProperty=function(e,r,n){t.prototype.setPaintProperty.call(this,e,r,n),"line-gradient"===e&&this._updateGradient()},e.prototype._updateGradient=function(){var t=this._transitionablePaint._values["line-gradient"].value.expression;this.gradient=hi(t,"lineProgress"),this.gradientTexture=null},e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e),this.paint._values["line-floorwidth"]=Ta.possiblyEvaluate(this._transitioningPaint._values["line-width"].value,e)},e.prototype.createBucket=function(t){return new wa(t)},e.prototype.queryRadius=function(t){var e=t,r=Sa($n("line-width",this,e),$n("line-gap-width",this,e)),n=$n("line-offset",this,e);return r/2+Math.abs(n)+Jn(this.paint.get("line-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a){var o=Kn(t,this.paint.get("line-translate"),this.paint.get("line-translate-anchor"),i.angle,a),s=a/2*Sa(this.paint.get("line-width").evaluate(e),this.paint.get("line-gap-width").evaluate(e)),u=this.paint.get("line-offset").evaluate(e);return u&&(r=function(t,e){for(var r=[],n=new l(0,0),i=0;i0?e+2*t:t}var Ca=Zr([{name:"a_pos_offset",components:4,type:"Int16"},{name:"a_data",components:4,type:"Uint16"}]),La=Zr([{name:"a_projected_pos",components:3,type:"Float32"}],4),Oa=(Zr([{name:"a_fade_opacity",components:1,type:"Uint32"}],4),Zr([{name:"a_placed",components:2,type:"Uint8"}],4)),za=(Zr([{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Int16",name:"x1"},{type:"Int16",name:"y1"},{type:"Int16",name:"x2"},{type:"Int16",name:"y2"},{type:"Uint32",name:"featureIndex"},{type:"Uint16",name:"sourceLayerIndex"},{type:"Uint16",name:"bucketIndex"},{type:"Int16",name:"radius"},{type:"Int16",name:"signedDistanceFromAnchor"}]),Zr([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4)),Da=Zr([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4);function Pa(t,e,r){var n=e.layout.get("text-transform").evaluate(r);return"uppercase"===n?t=t.toLocaleUpperCase():"lowercase"===n&&(t=t.toLocaleLowerCase()),Cr.applyArabicShaping&&(t=Cr.applyArabicShaping(t)),t}Zr([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Uint16",name:"glyphStartIndex"},{type:"Uint16",name:"numGlyphs"},{type:"Uint32",name:"vertexStartIndex"},{type:"Uint32",name:"lineStartIndex"},{type:"Uint32",name:"lineLength"},{type:"Uint16",name:"segment"},{type:"Uint16",name:"lowerSize"},{type:"Uint16",name:"upperSize"},{type:"Float32",name:"lineOffsetX"},{type:"Float32",name:"lineOffsetY"},{type:"Uint8",name:"writingMode"},{type:"Uint8",name:"hidden"}]),Zr([{type:"Float32",name:"offsetX"}]),Zr([{type:"Int16",name:"x"},{type:"Int16",name:"y"},{type:"Int16",name:"tileUnitDistanceFromAnchor"}]);var Ia={"!":"\ufe15","#":"\uff03",$:"\uff04","%":"\uff05","&":"\uff06","(":"\ufe35",")":"\ufe36","*":"\uff0a","+":"\uff0b",",":"\ufe10","-":"\ufe32",".":"\u30fb","/":"\uff0f",":":"\ufe13",";":"\ufe14","<":"\ufe3f","=":"\uff1d",">":"\ufe40","?":"\ufe16","@":"\uff20","[":"\ufe47","\\":"\uff3c","]":"\ufe48","^":"\uff3e",_:"\ufe33","`":"\uff40","{":"\ufe37","|":"\u2015","}":"\ufe38","~":"\uff5e","\xa2":"\uffe0","\xa3":"\uffe1","\xa5":"\uffe5","\xa6":"\uffe4","\xac":"\uffe2","\xaf":"\uffe3","\u2013":"\ufe32","\u2014":"\ufe31","\u2018":"\ufe43","\u2019":"\ufe44","\u201c":"\ufe41","\u201d":"\ufe42","\u2026":"\ufe19","\u2027":"\u30fb","\u20a9":"\uffe6","\u3001":"\ufe11","\u3002":"\ufe12","\u3008":"\ufe3f","\u3009":"\ufe40","\u300a":"\ufe3d","\u300b":"\ufe3e","\u300c":"\ufe41","\u300d":"\ufe42","\u300e":"\ufe43","\u300f":"\ufe44","\u3010":"\ufe3b","\u3011":"\ufe3c","\u3014":"\ufe39","\u3015":"\ufe3a","\u3016":"\ufe17","\u3017":"\ufe18","\uff01":"\ufe15","\uff08":"\ufe35","\uff09":"\ufe36","\uff0c":"\ufe10","\uff0d":"\ufe32","\uff0e":"\u30fb","\uff1a":"\ufe13","\uff1b":"\ufe14","\uff1c":"\ufe3f","\uff1e":"\ufe40","\uff1f":"\ufe16","\uff3b":"\ufe47","\uff3d":"\ufe48","\uff3f":"\ufe33","\uff5b":"\ufe37","\uff5c":"\u2015","\uff5d":"\ufe38","\uff5f":"\ufe35","\uff60":"\ufe36","\uff61":"\ufe12","\uff62":"\ufe41","\uff63":"\ufe42"},Na=function(t){function e(e,r,n,i){t.call(this,e,r),this.angle=n,void 0!==i&&(this.segment=i)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.clone=function(){return new e(this.x,this.y,this.angle,this.segment)},e}(l);function Ra(t,e){var r=e.expression;if("constant"===r.kind)return{functionType:"constant",layoutSize:r.evaluate(new Lr(t+1))};if("source"===r.kind)return{functionType:"source"};for(var n=r.zoomStops,i=0;i0)&&("constant"!==i.value.kind||i.value.value.length>0),l="constant"!==o.value.kind||o.value.value&&o.value.value.length>0;if(this.features=[],s||l){for(var u=e.iconDependencies,c=e.glyphDependencies,f=new Lr(this.zoom),h=0,p=t;h=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s>0&&(i+=e[s-1].dist(e[s]));for(var l=0;l0;this.addCollisionDebugVertices(s,l,u,c,f?this.collisionCircle:this.collisionBox,o.anchorPoint,r,f)}}}},Ha.prototype.deserializeCollisionBoxes=function(t,e,r,n,i){for(var a={},o=e;o0},Ha.prototype.hasIconData=function(){return this.icon.segments.get().length>0},Ha.prototype.hasCollisionBoxData=function(){return this.collisionBox.segments.get().length>0},Ha.prototype.hasCollisionCircleData=function(){return this.collisionCircle.segments.get().length>0},Ha.prototype.sortFeatures=function(t){var e=this;if(this.sortFeaturesByY&&this.sortedAngle!==t&&(this.sortedAngle=t,!(this.text.segments.get().length>1||this.icon.segments.get().length>1))){for(var r=[],n=0;ni.maxh||t>i.maxw||r<=i.maxh&&t<=i.maxw&&(o=i.maxw*i.maxh-t*r)a.free)){if(r===a.h)return this.allocShelf(s,t,r,n);r>a.h||rc)&&(f=2*Math.max(t,c)),(ll)&&(u=2*Math.max(r,l)),this.resize(f,u),this.packOne(t,r,n)):null},t.prototype.allocFreebin=function(t,e,r,n){var i=this.freebins.splice(t,1)[0];return i.id=n,i.w=e,i.h=r,i.refcount=0,this.bins[n]=i,this.ref(i),i},t.prototype.allocShelf=function(t,e,r,n){var i=this.shelves[t].alloc(e,r,n);return this.bins[n]=i,this.ref(i),i},t.prototype.shrink=function(){if(this.shelves.length>0){for(var t=0,e=0,r=0;rthis.free||e>this.h)return null;var n=this.x;return this.x+=t,this.free-=t,new function(t,e,r,n,i,a,o){this.id=t,this.x=e,this.y=r,this.w=n,this.h=i,this.maxw=a||n,this.maxh=o||i,this.refcount=0}(r,n,this.y,t,e,t,this.h)},e.prototype.resize=function(t){return this.free+=t-this.w,this.w=t,!0},t}()}),Qa=function(t,e){var r=e.pixelRatio;this.paddedRect=t,this.pixelRatio=r},to={tl:{configurable:!0},br:{configurable:!0},displaySize:{configurable:!0}};to.tl.get=function(){return[this.paddedRect.x+1,this.paddedRect.y+1]},to.br.get=function(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]},to.displaySize.get=function(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]},Object.defineProperties(Qa.prototype,to);var eo=function(t){var e=new ci({width:0,height:0}),r={},n=new Ka(0,0,{autoResize:!0});for(var i in t){var a=t[i],o=n.packOne(a.data.width+2,a.data.height+2);e.resize({width:n.w,height:n.h}),ci.copy(a.data,e,{x:0,y:0},{x:o.x+1,y:o.y+1},a.data),r[i]=new Qa(o,a)}n.shrink(),e.resize({width:n.w,height:n.h}),this.image=e,this.positions=r};pr("ImagePosition",Qa),pr("ImageAtlas",eo);var ro=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<>1,c=-7,f=r?i-1:0,h=r?-1:1,p=t[e+f];for(f+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+t[e+f],f+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+f],f+=h,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},no=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(o++,l/=2),o+f>=c?(s=0,o=c):o+f>=1?(s=(e*l-1)*Math.pow(2,i),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<0;t[r+p]=255&o,p+=d,o/=256,u-=8);t[r+p-d]|=128*m},io=ao;function ao(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}function oo(t){return t.type===ao.Bytes?t.readVarint()+t.pos:t.pos+1}function so(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function lo(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.ceil(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i]}function uo(t,e){for(var r=0;r>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function _o(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}ao.Varint=0,ao.Fixed64=1,ao.Bytes=2,ao.Fixed32=5,ao.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos>3,a=this.pos;this.type=7&n,t(i,e,this),this.pos===a&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=xo(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=_o(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=xo(this.buf,this.pos)+4294967296*xo(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=xo(this.buf,this.pos)+4294967296*_o(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=ro(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=ro(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,i,a=r.buf;if(n=(112&(i=a[r.pos++]))>>4,i<128)return so(t,n,e);if(n|=(127&(i=a[r.pos++]))<<3,i<128)return so(t,n,e);if(n|=(127&(i=a[r.pos++]))<<10,i<128)return so(t,n,e);if(n|=(127&(i=a[r.pos++]))<<17,i<128)return so(t,n,e);if(n|=(127&(i=a[r.pos++]))<<24,i<128)return so(t,n,e);if(n|=(1&(i=a[r.pos++]))<<31,i<128)return so(t,n,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=function(t,e,r){for(var n="",i=e;i239?4:l>223?3:l>191?2:1;if(i+c>r)break;1===c?l<128&&(u=l):2===c?128==(192&(a=t[i+1]))&&(u=(31&l)<<6|63&a)<=127&&(u=null):3===c?(a=t[i+1],o=t[i+2],128==(192&a)&&128==(192&o)&&((u=(15&l)<<12|(63&a)<<6|63&o)<=2047||u>=55296&&u<=57343)&&(u=null)):4===c&&(a=t[i+1],o=t[i+2],s=t[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&((u=(15&l)<<18|(63&a)<<12|(63&o)<<6|63&s)<=65535||u>=1114112)&&(u=null)),null===u?(u=65533,c=1):u>65535&&(u-=65536,n+=String.fromCharCode(u>>>10&1023|55296),u=56320|1023&u),n+=String.fromCharCode(u),i+=c}return n}(this.buf,this.pos,t);return this.pos=t,e},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){var r=oo(this);for(t=t||[];this.pos127;);else if(e===ao.Bytes)this.pos=this.readVarint()+this.pos;else if(e===ao.Fixed32)this.pos+=4;else{if(e!==ao.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e268435455||t<0?function(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}(r,0,e),function(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,i,a=0;a55295&&n<57344){if(!i){n>56319||a+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128)}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&lo(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),no(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),no(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r=128&&lo(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,ao.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){this.writeMessage(t,uo,e)},writePackedSVarint:function(t,e){this.writeMessage(t,co,e)},writePackedBoolean:function(t,e){this.writeMessage(t,po,e)},writePackedFloat:function(t,e){this.writeMessage(t,fo,e)},writePackedDouble:function(t,e){this.writeMessage(t,ho,e)},writePackedFixed32:function(t,e){this.writeMessage(t,mo,e)},writePackedSFixed32:function(t,e){this.writeMessage(t,go,e)},writePackedFixed64:function(t,e){this.writeMessage(t,vo,e)},writePackedSFixed64:function(t,e){this.writeMessage(t,yo,e)},writeBytesField:function(t,e){this.writeTag(t,ao.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,ao.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,ao.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,ao.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,ao.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,ao.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,ao.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,ao.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,ao.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,ao.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var wo=3;function Ao(t,e,r){1===t&&r.readMessage(Mo,e)}function Mo(t,e,r){if(3===t){var n=r.readMessage(ko,{}),i=n.id,a=n.bitmap,o=n.width,s=n.height,l=n.left,u=n.top,c=n.advance;e.push({id:i,bitmap:new ui({width:o+2*wo,height:s+2*wo},a),metrics:{width:o,height:s,left:l,top:u,advance:c}})}}function ko(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint())}var To=wo,Eo=function(t,e,r){this.target=t,this.parent=e,this.mapId=r,this.callbacks={},this.callbackID=0,m(["receive"],this),this.target.addEventListener("message",this.receive,!1)};Eo.prototype.send=function(t,e,r,n){var i=r?this.mapId+":"+this.callbackID++:null;r&&(this.callbacks[i]=r);var a=[];this.target.postMessage({targetMapId:n,sourceMapId:this.mapId,type:t,id:String(i),data:mr(e,a)},a)},Eo.prototype.receive=function(t){var e,r=this,n=t.data,i=n.id;if(!n.targetMapId||this.mapId===n.targetMapId){var a=function(t,e){var n=[];r.target.postMessage({sourceMapId:r.mapId,type:"",id:String(i),error:t?mr(t):null,data:mr(e,n)},n)};if(""===n.type)e=this.callbacks[n.id],delete this.callbacks[n.id],e&&n.error?e(gr(n.error)):e&&e(null,gr(n.data));else if(void 0!==n.id&&this.parent[n.type])this.parent[n.type](n.sourceMapId,gr(n.data),a);else if(void 0!==n.id&&this.parent.getWorkerSource){var o=n.type.split(".");this.parent.getWorkerSource(n.sourceMapId,o[0],o[1])[o[2]](gr(n.data),a)}else this.parent[n.type](gr(n.data))}},Eo.prototype.remove=function(){this.target.removeEventListener("message",this.receive,!1)};var So=n(i(function(t,e){!function(t){function e(t,e,n){var i=r(256*t,256*(e=Math.pow(2,n)-e-1),n),a=r(256*(t+1),256*(e+1),n);return i[0]+","+i[1]+","+a[0]+","+a[1]}function r(t,e,r){var n=2*Math.PI*6378137/256/Math.pow(2,r);return[t*n-2*Math.PI*6378137/2,e*n-2*Math.PI*6378137/2]}t.getURL=function(t,r,n,i,a,o){return o=o||{},t+"?"+["bbox="+e(n,i,a),"format="+(o.format||"image/png"),"service="+(o.service||"WMS"),"version="+(o.version||"1.1.1"),"request="+(o.request||"GetMap"),"srs="+(o.srs||"EPSG:3857"),"width="+(o.width||256),"height="+(o.height||256),"layers="+r].join("&")},t.getTileBBox=e,t.getMercCoords=r,Object.defineProperty(t,"__esModule",{value:!0})}(e)})),Co=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=zo(0,t,e,r)};Co.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Co.prototype.url=function(t,e){var r=So.getTileBBox(this.x,this.y,this.z),n=function(t,e,r){for(var n,i="",a=t;a>0;a--)i+=(e&(n=1<this.canonical.z?new Oo(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new Oo(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},Oo.prototype.isChildOf=function(t){var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ>e&&t.canonical.y===this.canonical.y>>e},Oo.prototype.children=function(t){if(this.overscaledZ>=t)return[new Oo(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,n=2*this.canonical.y;return[new Oo(e,this.wrap,e,r,n),new Oo(e,this.wrap,e,r+1,n),new Oo(e,this.wrap,e,r,n+1),new Oo(e,this.wrap,e,r+1,n+1)]},Oo.prototype.isLessThan=function(t){return this.wrapt.wrap)&&(this.overscaledZt.overscaledZ)&&(this.canonical.xt.canonical.x)&&this.canonical.y=this.dim+this.border||e<-this.border||e>=this.dim+this.border)throw new RangeError("out of range source coordinates for DEM data");return(e+this.border)*this.stride+(t+this.border)},pr("Level",Do);var Po=function(t,e,r){this.uid=t,this.scale=e||1,this.level=r||new Do(256,512),this.loaded=!!r};Po.prototype.loadFromImage=function(t,e){if(t.height!==t.width)throw new RangeError("DEM tiles must be square");if(e&&"mapbox"!==e&&"terrarium"!==e)return _('"'+e+'" is not a valid encoding type. Valid types include "mapbox" and "terrarium".');var r=this.level=new Do(t.width,t.width/2),n=t.data;this._unpackData(r,n,e||"mapbox");for(var i=0;i=0&&l[3]>=0&&this.grid.insert(a,l[0],l[1],l[2],l[3])}},Fo.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new ma.VectorTile(new io(this.rawTileData)).layers,this.sourceLayerCoder=new Io(this.vtLayers?Object.keys(this.vtLayers).sort():["_geojsonTileLayer"])),this.vtLayers},Fo.prototype.query=function(t,e){var r=this;this.loadVTLayers();for(var n=t.params||{},i=In/t.tileSize/t.scale,a=Ne(n.filter),o=t.queryGeometry,s=t.queryPadding*i,l=1/0,u=1/0,c=-1/0,f=-1/0,h=0;h=0)return!0;return!1}(a,l)){var u=this.sourceLayerCoder.decode(r),c=this.vtLayers[u].feature(n);if(i(new Lr(this.tileID.overscaledZ),c))for(var f=0;f=200&&r.status<300&&r.response){var n;try{n=JSON.parse(r.response)}catch(t){return e(t)}e(null,n)}else 401===r.status&&t.url.match(/mapbox.com/)?e(new k(r.statusText+": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens",r.status,t.url)):e(new k(r.statusText,r.status,t.url))},r.send(),r},e.getImage=function(t,e){return E(t,function(t,r){if(t)e(t);else if(r){var n=new self.Image,i=self.URL||self.webkitURL;n.onload=function(){e(null,n),i.revokeObjectURL(n.src)};var a=new self.Blob([new Uint8Array(r.data)],{type:"image/png"});n.cacheControl=r.cacheControl,n.expires=r.expires,n.src=r.data.byteLength?i.createObjectURL(a):"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}})},e.ResourceType=M,e.RGBAImage=ci,e.default$2=Ka,e.ImagePosition=Qa,e.getArrayBuffer=E,e.default$3=function(t){return new io(t).readFields(Ao,[])},e.default$4=yr,e.asyncAll=function(t,e,r){if(!t.length)return r(null,[]);var n=t.length,i=new Array(t.length),a=null;t.forEach(function(t,o){e(t,function(t,e){t&&(a=t),i[o]=e,0==--n&&r(a,i)})})},e.AlphaImage=ui,e.default$5=D,e.endsWith=g,e.extend=p,e.sphericalToCartesian=function(t){var e=t[0],r=t[1],n=t[2];return r+=90,r*=Math.PI/180,n*=Math.PI/180,{x:e*Math.cos(r)*Math.sin(n),y:e*Math.sin(r)*Math.sin(n),z:e*Math.cos(n)}},e.Evented=z,e.validateStyle=nr,e.validateLight=ir,e.emitValidationErrors=sr,e.default$6=tt,e.number=wt,e.Properties=qr,e.Transitionable=Dr,e.Transitioning=Ir,e.PossiblyEvaluated=Fr,e.DataConstantProperty=Br,e.warnOnce=_,e.uniqueId=function(){return d++},e.default$7=Eo,e.pick=function(t,e){for(var r={},n=0;n@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,function(t,r,n,i){var a=n||i;return e[r]=!a||a.toLowerCase(),""}),e["max-age"]){var r=parseInt(e["max-age"],10);isNaN(r)?delete e["max-age"]:e["max-age"]=r}return e},e.default$11=Fo,e.default$12=No,e.default$13=Ne,e.default$14=Ha,e.CollisionBoxArray=gn,e.default$15=Tn,e.TriangleIndexArray=fn,e.default$16=Lr,e.default$17=s,e.keysDifference=function(t,e){var r=[];for(var n in t)n in e||r.push(n);return r},e.default$18=["type","source","source-layer","minzoom","maxzoom","filter","layout"],e.mat4=ri,e.vec4=ei,e.getSizeData=Ra,e.evaluateSizeForFeature=function(t,e,r){var n=e;return"source"===t.functionType?r.lowerSize/10:"composite"===t.functionType?wt(r.lowerSize/10,r.upperSize/10,n.uSizeT):n.uSize},e.evaluateSizeForZoom=function(t,e,r){if("constant"===t.functionType)return{uSizeT:0,uSize:t.layoutSize};if("source"===t.functionType)return{uSizeT:0,uSize:0};if("camera"===t.functionType){var n=t.propertyValue,i=t.zoomRange,a=t.sizeRange,o=h(Ee(n,r.specification).interpolationFactor(e,i.min,i.max),0,1);return{uSizeT:0,uSize:a.min+o*(a.max-a.min)}}var s=t.propertyValue,l=t.zoomRange;return{uSizeT:h(Ee(s,r.specification).interpolationFactor(e,l.min,l.max),0,1),uSize:0}},e.addDynamicAttributes=Va,e.default$19=Wa,e.WritingMode=jo,e.multiPolygonIntersectsBufferedPoint=jn,e.multiPolygonIntersectsMultiPolygon=Vn,e.multiPolygonIntersectsBufferedMultiLine=Un,e.polygonIntersectsPolygon=function(t,e){for(var r=0;r-r/2;){if(--o<0)return!1;s-=t[o].dist(a),a=t[o]}s+=t[o].dist(t[o+1]),o++;for(var l=[],u=0;sn;)u-=l.shift().angleDelta;if(u>i)return!1;o++,s+=f.dist(h)}return!0}function a(e,r,n,a,o,s,l,u,c){var f=a?.6*s*l:0,h=Math.max(a?a.right-a.left:0,o?o.right-o.left:0),p=0===e[0].x||e[0].x===c||0===e[0].y||e[0].y===c;return r-h*l=0&&M=0&&k=0&&g+h<=p){var T=new t.default$25(M,k,w,y);T._round(),o&&!i(r,T,l,o,s)||v.push(T)}}m+=_}return c||v.length||u||(v=e(r,m/2,a,o,s,l,u,!0,f)),v}(e,p?r/2*u%r:(h/2+2*s)*l*u%r,r,f,n,h*l,p,!1,c)}n.prototype.replace=function(t){this._layerConfigs={},this._layers={},this.update(t,[])},n.prototype.update=function(e,n){for(var i=this,a=0,o=e;a0&&(m=Math.max(10*s,m),this._addLineCollisionCircles(t,e,r,r.segment,g,m,n,i,a,c))}else t.emplaceBack(r.x,r.y,p,f,d,h,n,i,a,0,0);this.boxEndIndex=t.length};s.prototype._addLineCollisionCircles=function(t,e,r,n,i,a,o,s,l,u){var c=a/2,f=Math.floor(i/c),h=1+.4*Math.log(u)/Math.LN2,p=Math.floor(f*h/2),d=-a/2,m=r,g=n+1,v=d,y=-i/2,x=y-i/4;do{if(--g<0){if(v>y)return;g=0;break}v-=e[g].dist(m),m=e[g]}while(v>x);for(var b=e[g].dist(e[g+1]),_=-p;_i&&(A+=w-i),!(A=e.length)return;b=e[g].dist(e[g+1])}var M=A-v,k=e[g],T=e[g+1].sub(k)._unit()._mult(M)._add(k)._round(),E=Math.abs(A-d)0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)}function f(t,e){return te?1:0}function h(e,r,n){void 0===r&&(r=1),void 0===n&&(n=!1);for(var i=1/0,a=1/0,o=-1/0,s=-1/0,u=e[0],c=0;co)&&(o=f.x),(!c||f.y>s)&&(s=f.y)}var h=o-i,m=s-a,g=Math.min(h,m),v=g/2,y=new l(null,p);if(0===g)return new t.default$1(i,a);for(var x=i;x_.d||!_.d)&&(_=A,n&&console.log("found best %d after %d probes",Math.round(1e4*A.d)/1e4,w)),A.max-_.d<=r||(v=A.h/2,y.push(new d(A.p.x-v,A.p.y-v,v,e)),y.push(new d(A.p.x+v,A.p.y-v,v,e)),y.push(new d(A.p.x-v,A.p.y+v,v,e)),y.push(new d(A.p.x+v,A.p.y+v,v,e)),w+=4)}return n&&(console.log("num probes: "+w),console.log("best distance: "+_.d)),_.p}function p(t,e){return e.max-t.max}function d(e,r,n,i){this.p=new t.default$1(e,r),this.h=n,this.d=function(e,r){for(var n=!1,i=1/0,a=0;ae.y!=f.y>e.y&&e.x<(f.x-c.x)*(e.y-c.y)/(f.y-c.y)+c.x&&(n=!n),i=Math.min(i,t.distToSegmentSquared(e,c,f))}return(n?1:-1)*Math.sqrt(i)}(this.p,i),this.max=this.d+this.h*Math.SQRT2}function m(e,r,n,i,a,o){e.createArrays(),e.symbolInstances=[];var s=512*e.overscaling;e.tilePixelRatio=t.default$8/s,e.compareText={},e.iconsNeedLinear=!1;var l=e.layers[0].layout,u=e.layers[0]._unevaluatedLayout._values,c={};if("composite"===e.textSizeData.functionType){var f=e.textSizeData.zoomRange,h=f.min,p=f.max;c.compositeTextSizes=[u["text-size"].possiblyEvaluate(new t.default$16(h)),u["text-size"].possiblyEvaluate(new t.default$16(p))]}if("composite"===e.iconSizeData.functionType){var d=e.iconSizeData.zoomRange,m=d.min,v=d.max;c.compositeIconSizes=[u["icon-size"].possiblyEvaluate(new t.default$16(m)),u["icon-size"].possiblyEvaluate(new t.default$16(v))]}c.layoutTextSize=u["text-size"].possiblyEvaluate(new t.default$16(e.zoom+1)),c.layoutIconSize=u["icon-size"].possiblyEvaluate(new t.default$16(e.zoom+1)),c.textMaxSize=u["text-size"].possiblyEvaluate(new t.default$16(18));for(var y=24*l.get("text-line-height"),x="map"===l.get("text-rotation-alignment")&&"line"===l.get("symbol-placement"),b=l.get("text-keep-upright"),_=0,w=e.features;_=t.default$8||c.y<0||c.y>=t.default$8||e.symbolInstances.push(function(e,r,n,i,a,l,u,c,f,h,p,d,m,g,y,x,b,_,w,A,M){var k,T,E=e.addToLineVertexArray(r,n),S=0,C=0,L=0,O=i.horizontal?i.horizontal.text:"",z=[];i.horizontal&&(k=new s(u,n,r,c,f,h,i.horizontal,p,d,m,e.overscaling),C+=v(e,r,i.horizontal,l,m,w,g,E,i.vertical?t.WritingMode.horizontal:t.WritingMode.horizontalOnly,z,A,M),i.vertical&&(L+=v(e,r,i.vertical,l,m,w,g,E,t.WritingMode.vertical,z,A,M)));var D=k?k.boxStartIndex:e.collisionBoxArray.length,P=k?k.boxEndIndex:e.collisionBoxArray.length;if(a){var I=function(e,r,n,i,a,o){var s,l,u,c,f=r.image,h=n.layout,p=r.top-1/f.pixelRatio,d=r.left-1/f.pixelRatio,m=r.bottom+1/f.pixelRatio,g=r.right+1/f.pixelRatio;if("none"!==h.get("icon-text-fit")&&a){var v=g-d,y=m-p,x=h.get("text-size").evaluate(o)/24,b=a.left*x,_=a.right*x,w=a.top*x,A=_-b,M=a.bottom*x-w,k=h.get("icon-text-fit-padding")[0],T=h.get("icon-text-fit-padding")[1],E=h.get("icon-text-fit-padding")[2],S=h.get("icon-text-fit-padding")[3],C="width"===h.get("icon-text-fit")?.5*(M-y):0,L="height"===h.get("icon-text-fit")?.5*(A-v):0,O="width"===h.get("icon-text-fit")||"both"===h.get("icon-text-fit")?A:v,z="height"===h.get("icon-text-fit")||"both"===h.get("icon-text-fit")?M:y;s=new t.default$1(b+L-S,w+C-k),l=new t.default$1(b+L+T+O,w+C-k),u=new t.default$1(b+L+T+O,w+C+E+z),c=new t.default$1(b+L-S,w+C+E+z)}else s=new t.default$1(d,p),l=new t.default$1(g,p),u=new t.default$1(g,m),c=new t.default$1(d,m);var D=n.layout.get("icon-rotate").evaluate(o)*Math.PI/180;if(D){var P=Math.sin(D),I=Math.cos(D),N=[I,-P,P,I];s._matMult(N),l._matMult(N),c._matMult(N),u._matMult(N)}return[{tl:s,tr:l,bl:c,br:u,tex:f.paddedRect,writingMode:void 0,glyphOffset:[0,0]}]}(0,a,l,0,i.horizontal,w);T=new s(u,n,r,c,f,h,a,y,x,!1,e.overscaling),S=4*I.length;var N=e.iconSizeData,R=null;"source"===N.functionType?R=[10*l.layout.get("icon-size").evaluate(w)]:"composite"===N.functionType&&(R=[10*M.compositeIconSizes[0].evaluate(w),10*M.compositeIconSizes[1].evaluate(w)]),e.addSymbols(e.icon,I,R,_,b,w,!1,r,E.lineStartIndex,E.lineLength)}var F=T?T.boxStartIndex:e.collisionBoxArray.length,B=T?T.boxEndIndex:e.collisionBoxArray.length;return e.glyphOffsetArray.length>=t.default$14.MAX_GLYPHS&&t.warnOnce("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"),{key:O,textBoxStartIndex:D,textBoxEndIndex:P,iconBoxStartIndex:F,iconBoxEndIndex:B,textOffset:g,iconOffset:_,anchor:r,line:n,featureIndex:c,feature:w,numGlyphVertices:C,numVerticalGlyphVertices:L,numIconVertices:S,textOpacityState:new o,iconOpacityState:new o,isDuplicate:!1,placedTextSymbolIndices:z,crossTileID:0}}(e,c,a,n,i,e.layers[0],e.collisionBoxArray,r.index,r.sourceLayerIndex,e.index,b,M,E,m,w,k,S,g,r,l,u))};if("line"===d.get("symbol-placement"))for(var O=0,z=function(e,r,n,i,a){for(var o=[],s=0;s=i&&h.x>=i||(f.x>=i?f=new t.default$1(i,f.y+(h.y-f.y)*((i-f.x)/(h.x-f.x)))._round():h.x>=i&&(h=new t.default$1(i,f.y+(h.y-f.y)*((i-f.x)/(h.x-f.x)))._round()),f.y>=a&&h.y>=a||(f.y>=a?f=new t.default$1(f.x+(h.x-f.x)*((a-f.y)/(h.y-f.y)),a)._round():h.y>=a&&(h=new t.default$1(f.x+(h.x-f.x)*((a-f.y)/(h.y-f.y)),a)._round()),u&&f.equals(u[u.length-1])||(u=[f],o.push(u)),u.push(h)))))}return o}(r.geometry,0,0,t.default$8,t.default$8);O=0;o--)if(n.dist(a[o])0&&(this.data[0]=this.data[this.length],this._down(0)),this.data.pop(),t}},peek:function(){return this.data[0]},_up:function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,a=e[i];if(r(n,a)>=0)break;e[t]=a,t=i}e[t]=n},_down:function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t=0)break;e[t]=s,t=a}e[t]=i}},l.default=u;var x=function(e){var r=new t.AlphaImage({width:0,height:0}),n={},i=new t.default$2(0,0,{autoResize:!0});for(var a in e){var o=e[a],s=n[a]={};for(var l in o){var u=o[+l];if(u&&0!==u.bitmap.width&&0!==u.bitmap.height){var c=i.packOne(u.bitmap.width+2,u.bitmap.height+2);r.resize({width:i.w,height:i.h}),t.AlphaImage.copy(u.bitmap,r,{x:0,y:0},{x:c.x+1,y:c.y+1},u.bitmap),s[l]={rect:c,metrics:u.metrics}}}}i.shrink(),r.resize({width:i.w,height:i.h}),this.image=r,this.positions=n};t.register("GlyphAtlas",x);var b=function(e){this.tileID=new t.OverscaledTileID(e.tileID.overscaledZ,e.tileID.wrap,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),this.uid=e.uid,this.zoom=e.zoom,this.pixelRatio=e.pixelRatio,this.tileSize=e.tileSize,this.source=e.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=e.showCollisionBoxes,this.collectResourceTiming=!!e.collectResourceTiming};function _(e,r){for(var n=new t.default$16(r),i=0,a=e;i=T.maxzoom||"none"!==T.visibility&&(_(k,a.zoom),(f[T.id]=T.createBucket({index:s.bucketLayerIDs.length,layers:k,zoom:a.zoom,pixelRatio:a.pixelRatio,overscaling:a.overscaling,collisionBoxArray:a.collisionBoxArray,sourceLayerIndex:v})).populate(y,h),s.bucketLayerIDs.push(k.map(function(t){return t.id})))}}}var E=t.mapObject(h.glyphDependencies,function(t){return Object.keys(t).map(Number)});Object.keys(E).length?n.send("getGlyphs",{uid:this.uid,stacks:E},function(t,e){l||(l=t,u=e,C.call(a))}):u={};var S=Object.keys(h.iconDependencies);function C(){if(l)return i(l);if(u&&c){var e=new x(u),r=new t.default$28(c);for(var n in f){var a=f[n];a instanceof t.default$14&&(_(a.layers,this.zoom),m(a,u,e.positions,c,r.positions,this.showCollisionBoxes))}this.status="done",i(null,{buckets:t.values(f).filter(function(t){return!t.isEmpty()}),featureIndex:s,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,iconAtlasImage:r.image})}}S.length?n.send("getImages",{icons:S},function(t,e){l||(l=t,c=e,C.call(a))}):c={},C.call(this)};var w=function(t){return!(!performance||!performance.getEntriesByName)&&performance.getEntriesByName(t)};function A(e,r){var n=t.getArrayBuffer(e.request,function(e,n){e?r(e):n&&r(null,{vectorTile:new t.default$29.VectorTile(new t.default$30(n.data)),rawData:n.data,cacheControl:n.cacheControl,expires:n.expires})});return function(){n.abort(),r()}}var M=function(t,e,r){this.actor=t,this.layerIndex=e,this.loadVectorData=r||A,this.loading={},this.loaded={}};M.prototype.loadTile=function(e,r){var n=this,i=e.uid;this.loading||(this.loading={});var a=this.loading[i]=new b(e);a.abort=this.loadVectorData(e,function(o,s){if(delete n.loading[i],o||!s)return r(o);var l=s.rawData,u={};s.expires&&(u.expires=s.expires),s.cacheControl&&(u.cacheControl=s.cacheControl);var c={};if(e.request&&e.request.collectResourceTiming){var f=w(e.request.url);f&&(c.resourceTiming=JSON.parse(JSON.stringify(f)))}a.vectorTile=s.vectorTile,a.parse(s.vectorTile,n.layerIndex,n.actor,function(e,n){if(e||!n)return r(e);r(null,t.extend({rawTileData:l.slice(0)},n,u,c))}),n.loaded=n.loaded||{},n.loaded[i]=a})},M.prototype.reloadTile=function(t,e){var r=this.loaded,n=t.uid,i=this;if(r&&r[n]){var a=r[n];a.showCollisionBoxes=t.showCollisionBoxes;var o=function(t,r){var n=a.reloadCallback;n&&(delete a.reloadCallback,a.parse(a.vectorTile,i.layerIndex,i.actor,n)),e(t,r)};"parsing"===a.status?a.reloadCallback=o:"done"===a.status&&a.parse(a.vectorTile,this.layerIndex,this.actor,o)}},M.prototype.abortTile=function(t,e){var r=this.loading,n=t.uid;r&&r[n]&&r[n].abort&&(r[n].abort(),delete r[n]),e()},M.prototype.removeTile=function(t,e){var r=this.loaded,n=t.uid;r&&r[n]&&delete r[n],e()};var k=function(){this.loading={},this.loaded={}};k.prototype.loadTile=function(e,r){var n=e.uid,i=e.encoding,a=new t.default$31(n);this.loading[n]=a,a.loadFromImage(e.rawImageData,i),delete this.loading[n],this.loaded=this.loaded||{},this.loaded[n]=a,r(null,a)},k.prototype.removeTile=function(t){var e=this.loaded,r=t.uid;e&&e[r]&&delete e[r]};var T={RADIUS:6378137,FLATTENING:1/298.257223563,POLAR_RADIUS:6356752.3142};function E(t){var e=0;if(t&&t.length>0){e+=Math.abs(S(t[0]));for(var r=1;r2){for(o=0;o=0}(t)===e?t:t.reverse()}var P=t.default$29.VectorTileFeature.prototype.toGeoJSON,I=function(e){this._feature=e,this.extent=t.default$8,this.type=e.type,this.properties=e.tags,"id"in e&&!isNaN(e.id)&&(this.id=parseInt(e.id,10))};I.prototype.loadGeometry=function(){if(1===this._feature.type){for(var e=[],r=0,n=this._feature.geometry;r>31}function $(t,e){for(var r=t.loadGeometry(),n=t.type,i=0,a=0,o=r.length,s=0;si;){if(a-i>600){var s=a-i+1,l=n-i+1,u=Math.log(s),c=.5*Math.exp(2*u/3),f=.5*Math.sqrt(u*c*(s-c)/s)*(l-s/2<0?-1:1);t(e,r,n,Math.max(i,Math.floor(n-l*c/s+f)),Math.min(a,Math.floor(n+(s-l)*c/s+f)),o)}var h=r[2*n+o],p=i,d=a;for(Q(e,r,i,n),r[2*a+o]>h&&Q(e,r,i,a);ph;)d--}r[2*i+o]===h?Q(e,r,i,d):Q(e,r,++d,a),d<=n&&(i=d+1),n<=d&&(a=d-1)}}(e,r,s,i,a,o%2),t(e,r,n,i,s-1,o+1),t(e,r,n,s+1,a,o+1)}};function Q(t,e,r,n){tt(t,r,n),tt(e,2*r,2*n),tt(e,2*r+1,2*n+1)}function tt(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function et(t,e,r,n){var i=t-r,a=e-n;return i*i+a*a}var rt=function(t,e,r,n,i){return new nt(t,e,r,n,i)};function nt(t,e,r,n,i){e=e||it,r=r||at,i=i||Array,this.nodeSize=n||64,this.points=t,this.ids=new i(t.length),this.coords=new i(2*t.length);for(var a=0;a=r&&s<=i&&l>=n&&l<=a&&c.push(t[d]);else{var m=Math.floor((p+h)/2);s=e[2*m],l=e[2*m+1],s>=r&&s<=i&&l>=n&&l<=a&&c.push(t[m]);var g=(f+1)%2;(0===f?r<=s:n<=l)&&(u.push(p),u.push(m-1),u.push(g)),(0===f?i>=s:a>=l)&&(u.push(m+1),u.push(h),u.push(g))}}return c}(this.ids,this.coords,t,e,r,n,this.nodeSize)},within:function(t,e,r){return function(t,e,r,n,i,a){for(var o=[0,t.length-1,0],s=[],l=i*i;o.length;){var u=o.pop(),c=o.pop(),f=o.pop();if(c-f<=a)for(var h=f;h<=c;h++)et(e[2*h],e[2*h+1],r,n)<=l&&s.push(t[h]);else{var p=Math.floor((f+c)/2),d=e[2*p],m=e[2*p+1];et(d,m,r,n)<=l&&s.push(t[p]);var g=(u+1)%2;(0===u?r-i<=d:n-i<=m)&&(o.push(f),o.push(p-1),o.push(g)),(0===u?r+i>=d:n+i>=m)&&(o.push(p+1),o.push(c),o.push(g))}}return s}(this.ids,this.coords,t,e,r,this.nodeSize)}};function ot(t){this.options=pt(Object.create(this.options),t),this.trees=new Array(this.options.maxZoom+1)}function st(t,e,r,n,i){return{x:t,y:e,zoom:1/0,id:n,properties:i,parentId:-1,numPoints:r}}function lt(t,e){var r=t.geometry.coordinates;return{x:ft(r[0]),y:ht(r[1]),zoom:1/0,id:e,parentId:-1}}function ut(t){return{type:"Feature",properties:ct(t),geometry:{type:"Point",coordinates:[(n=t.x,360*(n-.5)),(e=t.y,r=(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var e,r,n}function ct(t){var e=t.numPoints,r=e>=1e4?Math.round(e/1e3)+"k":e>=1e3?Math.round(e/100)/10+"k":e;return pt(pt({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:r})}function ft(t){return t/360+.5}function ht(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function pt(t,e){for(var r in e)t[r]=e[r];return t}function dt(t){return t.x}function mt(t){return t.y}function gt(t,e,r,n,i,a){var o=i-r,s=a-n;if(0!==o||0!==s){var l=((t-r)*o+(e-n)*s)/(o*o+s*s);l>1?(r=i,n=a):l>0&&(r+=o*l,n+=s*l)}return(o=t-r)*o+(s=e-n)*s}function vt(t,e,r,n){var i={id:t||null,type:e,geometry:r,tags:n,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e=t.geometry,r=t.type;if("Point"===r||"MultiPoint"===r||"LineString"===r)yt(t,e);else if("Polygon"===r||"MultiLineString"===r)for(var n=0;n0&&(o+=n?(i*u-l*a)/2:Math.sqrt(Math.pow(l-i,2)+Math.pow(u-a,2))),i=l,a=u}var c=e.length-3;e[2]=1,function t(e,r,n,i){for(var a,o=i,s=e[r],l=e[r+1],u=e[n],c=e[n+1],f=r+3;fo&&(a=f,o=h)}o>i&&(a-r>3&&t(e,r,a,i),e[a+2]=o,n-a>3&&t(e,a,n,i))}(e,0,c,r),e[c+2]=1,e.size=Math.abs(o),e.start=0,e.end=e.size}function wt(t,e,r,n){for(var i=0;i1?1:r}function kt(t,e,r,n,i,a,o,s){if(n/=e,a>=(r/=e)&&o<=n)return t;if(a>n||o=r&&d<=n)l.push(c);else if(!(p>n||d=r&&o<=n&&(e.push(t[a]),e.push(t[a+1]),e.push(t[a+2]))}}function Et(t,e,r,n,i,a,o){for(var s,l,u=St(t),c=0===i?Ot:zt,f=t.start,h=0;h=r&&(l=c(u,p,d,g,v,r),o&&(u.start=f+s*l)):y>n?x<=n&&(l=c(u,p,d,g,v,n),o&&(u.start=f+s*l)):Lt(u,p,d,m),x=r&&(l=c(u,p,d,g,v,r),b=!0),x>n&&y<=n&&(l=c(u,p,d,g,v,n),b=!0),!a&&b&&(o&&(u.end=f+s*l),e.push(u),u=St(t)),o&&(f+=s)}var _=t.length-3;p=t[_],d=t[_+1],m=t[_+2],(y=0===i?p:d)>=r&&y<=n&&Lt(u,p,d,m),_=u.length-3,a&&_>=3&&(u[_]!==u[0]||u[_+1]!==u[1])&&Lt(u,u[0],u[1],u[2]),u.length&&e.push(u)}function St(t){var e=[];return e.size=t.size,e.start=t.start,e.end=t.end,e}function Ct(t,e,r,n,i,a){for(var o=0;oo.maxX&&(o.maxX=c),f>o.maxY&&(o.maxY=f)}return o}function Ft(t,e,r,n){var i=e.geometry,a=e.type,o=[];if("Point"===a||"MultiPoint"===a)for(var s=0;s0&&e.size<(i?o:n))r.numPoints+=e.length/3;else{for(var s=[],l=0;lo)&&(r.numSimplified++,s.push(e[l]),s.push(e[l+1])),r.numPoints++;i&&function(t,e){for(var r=0,n=0,i=t.length,a=i-2;n0===e)for(n=0,i=t.length;n24)throw new Error("maxZoom should be in the 0-24 range");var n=function(t,e){var r=[];if("FeatureCollection"===t.type)for(var n=0;n=this.options.minZoom;i--){var a=+Date.now();this.trees[i+1]=rt(n,dt,mt,this.options.nodeSize,Float32Array),n=this._cluster(n,i),e&&console.log("z%d: %d clusters in %dms",i,n.length,+Date.now()-a)}return this.trees[this.options.minZoom]=rt(n,dt,mt,this.options.nodeSize,Float32Array),e&&console.timeEnd("total time"),this},getClusters:function(t,e){for(var r=this.trees[this._limitZoom(e)],n=r.range(ft(t[0]),ht(t[3]),ft(t[2]),ht(t[1])),i=[],a=0;a1&&console.time("creation"),h=this.tiles[f]=Rt(t,e,r,n,l),this.tileCoords.push({z:e,x:r,y:n}),u)){u>1&&(console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)",e,r,n,h.numFeatures,h.numPoints,h.numSimplified),console.timeEnd("creation"));var p="z"+e;this.stats[p]=(this.stats[p]||0)+1,this.total++}if(h.source=t,i){if(e===l.maxZoom||e===i)continue;var d=1<1&&console.time("clipping");var m,g,v,y,x,b,_=.5*l.buffer/l.extent,w=.5-_,A=.5+_,M=1+_;m=g=v=y=null,x=kt(t,c,r-_,r+A,0,h.minX,h.maxX,l),b=kt(t,c,r+w,r+M,0,h.minX,h.maxX,l),t=null,x&&(m=kt(x,c,n-_,n+A,1,h.minY,h.maxY,l),g=kt(x,c,n+w,n+M,1,h.minY,h.maxY,l),x=null),b&&(v=kt(b,c,n-_,n+A,1,h.minY,h.maxY,l),y=kt(b,c,n+w,n+M,1,h.minY,h.maxY,l),b=null),u>1&&console.timeEnd("clipping"),s.push(m||[],e+1,2*r,2*n),s.push(g||[],e+1,2*r,2*n+1),s.push(v||[],e+1,2*r+1,2*n),s.push(y||[],e+1,2*r+1,2*n+1)}}},jt.prototype.getTile=function(t,e,r){var n=this.options,i=n.extent,a=n.debug;if(t<0||t>24)return null;var o=1<1&&console.log("drilling down to z%d-%d-%d",t,e,r);for(var l,u=t,c=e,f=r;!l&&u>0;)u--,c=Math.floor(c/2),f=Math.floor(f/2),l=this.tiles[Vt(u,c,f)];return l&&l.source?(a>1&&console.log("found parent tile z%d-%d-%d",u,c,f),a>1&&console.time("drilling down"),this.splitTile(l.source,u,c,f,t,e,r),a>1&&console.timeEnd("drilling down"),this.tiles[s]?It(this.tiles[s],i):null):null};var qt=function(e){function r(t,r,n){e.call(this,t,r,Ut),n&&(this.loadGeoJSON=n)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadData=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=e,this._pendingLoadDataParams=t,this._state&&"Idle"!==this._state?this._state="NeedsLoadData":(this._state="Coalescing",this._loadData())},r.prototype._loadData=function(){var t=this;if(this._pendingCallback&&this._pendingLoadDataParams){var e=this._pendingCallback,r=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams,this.loadGeoJSON(r,function(n,i){if(n||!i)return e(n);if("object"!=typeof i)return e(new Error("Input data is not a valid GeoJSON object."));!function t(e,r){switch(e&&e.type||null){case"FeatureCollection":return e.features=e.features.map(O(t,r)),e;case"Feature":return e.geometry=t(e.geometry,r),e;case"Polygon":case"MultiPolygon":return function(t,e){return"Polygon"===t.type?t.coordinates=z(t.coordinates,e):"MultiPolygon"===t.type&&(t.coordinates=t.coordinates.map(O(z,e))),t}(e,r);default:return e}}(i,!0);try{t._geoJSONIndex=r.cluster?function(t){return new ot(t)}(r.superclusterOptions).load(i.features):new jt(i,r.geojsonVtOptions)}catch(n){return e(n)}t.loaded={};var a={};if(r.request&&r.request.collectResourceTiming){var o=w(r.request.url);o&&(a.resourceTiming={},a.resourceTiming[r.source]=JSON.parse(JSON.stringify(o)))}e(null,a)})}},r.prototype.coalesce=function(){"Coalescing"===this._state?this._state="Idle":"NeedsLoadData"===this._state&&(this._state="Coalescing",this._loadData())},r.prototype.reloadTile=function(t,r){var n=this.loaded,i=t.uid;return n&&n[i]?e.prototype.reloadTile.call(this,t,r):this.loadTile(t,r)},r.prototype.loadGeoJSON=function(e,r){if(e.request)t.getJSON(e.request,r);else{if("string"!=typeof e.data)return r(new Error("Input data is not a valid GeoJSON object."));try{return r(null,JSON.parse(e.data))}catch(t){return r(new Error("Input data is not a valid GeoJSON object."))}}},r.prototype.removeSource=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),e()},r}(M),Ht=function(e){var r=this;this.self=e,this.actor=new t.default$7(e,this),this.layerIndexes={},this.workerSourceTypes={vector:M,geojson:qt},this.workerSources={},this.demWorkerSources={},this.self.registerWorkerSource=function(t,e){if(r.workerSourceTypes[t])throw new Error('Worker source with name "'+t+'" already registered.');r.workerSourceTypes[t]=e},this.self.registerRTLTextPlugin=function(e){if(t.plugin.isLoaded())throw new Error("RTL text plugin already registered.");t.plugin.applyArabicShaping=e.applyArabicShaping,t.plugin.processBidirectionalText=e.processBidirectionalText}};return Ht.prototype.setLayers=function(t,e,r){this.getLayerIndex(t).replace(e),r()},Ht.prototype.updateLayers=function(t,e,r){this.getLayerIndex(t).update(e.layers,e.removedIds),r()},Ht.prototype.loadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).loadTile(e,r)},Ht.prototype.loadDEMTile=function(t,e,r){this.getDEMWorkerSource(t,e.source).loadTile(e,r)},Ht.prototype.reloadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).reloadTile(e,r)},Ht.prototype.abortTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).abortTile(e,r)},Ht.prototype.removeTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).removeTile(e,r)},Ht.prototype.removeDEMTile=function(t,e){this.getDEMWorkerSource(t,e.source).removeTile(e)},Ht.prototype.removeSource=function(t,e,r){if(this.workerSources[t]&&this.workerSources[t][e.type]&&this.workerSources[t][e.type][e.source]){var n=this.workerSources[t][e.type][e.source];delete this.workerSources[t][e.type][e.source],void 0!==n.removeSource?n.removeSource(e,r):r()}},Ht.prototype.loadWorkerSource=function(t,e,r){try{this.self.importScripts(e.url),r()}catch(t){r(t.toString())}},Ht.prototype.loadRTLTextPlugin=function(e,r,n){try{t.plugin.isLoaded()||(this.self.importScripts(r),n(t.plugin.isLoaded()?null:new Error("RTL Text Plugin failed to import scripts from "+r)))}catch(t){n(t.toString())}},Ht.prototype.getLayerIndex=function(t){var e=this.layerIndexes[t];return e||(e=this.layerIndexes[t]=new n),e},Ht.prototype.getWorkerSource=function(t,e,r){var n=this;if(this.workerSources[t]||(this.workerSources[t]={}),this.workerSources[t][e]||(this.workerSources[t][e]={}),!this.workerSources[t][e][r]){var i={send:function(e,r,i){n.actor.send(e,r,i,t)}};this.workerSources[t][e][r]=new this.workerSourceTypes[e](i,this.getLayerIndex(t))}return this.workerSources[t][e][r]},Ht.prototype.getDEMWorkerSource=function(t,e){return this.demWorkerSources[t]||(this.demWorkerSources[t]={}),this.demWorkerSources[t][e]||(this.demWorkerSources[t][e]=new k),this.demWorkerSources[t][e]},"undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof self&&self instanceof WorkerGlobalScope&&new Ht(self),Ht}),i(0,function(t){var e=t.createCommonjsModule(function(t){function e(t){return!!("undefined"!=typeof window&&"undefined"!=typeof document&&Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray&&Function.prototype&&Function.prototype.bind&&Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions&&"JSON"in window&&"parse"in JSON&&"stringify"in JSON&&function(){if(!("Worker"in window&&"Blob"in window&&"URL"in window))return!1;var t,e,r=new Blob([""],{type:"text/javascript"}),n=URL.createObjectURL(r);try{e=new Worker(n),t=!0}catch(e){t=!1}return e&&e.terminate(),URL.revokeObjectURL(n),t}()&&"Uint8ClampedArray"in window&&function(t){return void 0===r[t]&&(r[t]=function(t){var r=document.createElement("canvas"),n=Object.create(e.webGLContextAttributes);return n.failIfMajorPerformanceCaveat=t,r.probablySupportsContext?r.probablySupportsContext("webgl",n)||r.probablySupportsContext("experimental-webgl",n):r.supportsContext?r.supportsContext("webgl",n)||r.supportsContext("experimental-webgl",n):r.getContext("webgl",n)||r.getContext("experimental-webgl",n)}(t)),r[t]}(t&&t.failIfMajorPerformanceCaveat))}t.exports?t.exports=e:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=e);var r={};e.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0}}),r=t.default.performance&&t.default.performance.now?t.default.performance.now.bind(t.default.performance):Date.now.bind(Date),n=t.default.requestAnimationFrame||t.default.mozRequestAnimationFrame||t.default.webkitRequestAnimationFrame||t.default.msRequestAnimationFrame,i=t.default.cancelAnimationFrame||t.default.mozCancelAnimationFrame||t.default.webkitCancelAnimationFrame||t.default.msCancelAnimationFrame,a={now:r,frame:function(t){return n(t)},cancelFrame:function(t){return i(t)},getImageData:function(e){var r=t.default.document.createElement("canvas"),n=r.getContext("2d");if(!n)throw new Error("failed to create canvas 2d context");return r.width=e.width,r.height=e.height,n.drawImage(e,0,0,e.width,e.height),n.getImageData(0,0,e.width,e.height)},hardwareConcurrency:t.default.navigator.hardwareConcurrency||4,get devicePixelRatio(){return t.default.devicePixelRatio},supportsWebp:!1};if(t.default.document){var o=t.default.document.createElement("img");o.onload=function(){a.supportsWebp=!0},o.src="data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA="}var s={create:function(e,r,n){var i=t.default.document.createElement(e);return r&&(i.className=r),n&&n.appendChild(i),i},createNS:function(e,r){return t.default.document.createElementNS(e,r)}},l=t.default.document?t.default.document.documentElement.style:null;function u(t){if(!l)return null;for(var e=0;e=0?0:e.button},s.remove=function(t){t.parentNode&&t.parentNode.removeChild(t)};var g={API_URL:"https://api.mapbox.com",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null},v="See https://www.mapbox.com/api-documentation/#access-tokens";function y(t,e){var r=k(g.API_URL);if(t.protocol=r.protocol,t.authority=r.authority,"/"!==r.path&&(t.path=""+r.path+t.path),!g.REQUIRE_ACCESS_TOKEN)return T(t);if(!(e=e||g.ACCESS_TOKEN))throw new Error("An API access token is required to use Mapbox GL. "+v);if("s"===e[0])throw new Error("Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). "+v);return t.params.push("access_token="+e),T(t)}function x(t){return 0===t.indexOf("mapbox:")}var b=function(t,e){if(!x(t))return t;var r=k(t);return r.path="/v4/"+r.authority+".json",r.params.push("secure"),y(r,e)},_=function(t,e,r,n){var i=k(t);return x(t)?(i.path="/styles/v1"+i.path+"/sprite"+e+r,y(i,n)):(i.path+=""+e+r,T(i))},w=/(\.(png|jpg)\d*)(?=$)/,A=function(t,e,r){if(!e||!x(e))return t;var n=k(t),i=a.devicePixelRatio>=2||512===r?"@2x":"",o=a.supportsWebp?".webp":"$1";return n.path=n.path.replace(w,""+i+o),function(t){for(var e=0;e=0?1.2:1))}function N(t,e,r,n,i,a,o){for(var s=0;s65535)e(new Error("glyphs > 65535 not supported"));else{var l=a.requests[s];l||(l=a.requests[s]=[],F.loadGlyphRange(r,s,n.url,n.requestTransform,function(t,e){if(e)for(var r in e)a.glyphs[+r]=e[+r];for(var n=0,i=l;nthis.height)return t.warnOnce("LineAtlas out of space"),null;for(var a=0,o=0;o90||this.lat<-90)throw new Error("Invalid LngLat latitude value: must be between -90 and 90")};G.prototype.wrap=function(){return new G(t.wrap(this.lng,-180,180),this.lat)},G.prototype.toArray=function(){return[this.lng,this.lat]},G.prototype.toString=function(){return"LngLat("+this.lng+", "+this.lat+")"},G.prototype.toBounds=function(t){var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new W(new G(this.lng-r,this.lat-e),new G(this.lng+r,this.lat+e))},G.convert=function(t){if(t instanceof G)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new G(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&"object"==typeof t&&null!==t)return new G(Number(t.lng),Number(t.lat));throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, or an array of [, ]")};var W=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};W.prototype.setNorthEast=function(t){return this._ne=t instanceof G?new G(t.lng,t.lat):G.convert(t),this},W.prototype.setSouthWest=function(t){return this._sw=t instanceof G?new G(t.lng,t.lat):G.convert(t),this},W.prototype.extend=function(t){var e,r,n=this._sw,i=this._ne;if(t instanceof G)e=t,r=t;else{if(!(t instanceof W))return Array.isArray(t)?t.every(Array.isArray)?this.extend(W.convert(t)):this.extend(G.convert(t)):this;if(e=t._sw,r=t._ne,!e||!r)return this}return n||i?(n.lng=Math.min(e.lng,n.lng),n.lat=Math.min(e.lat,n.lat),i.lng=Math.max(r.lng,i.lng),i.lat=Math.max(r.lat,i.lat)):(this._sw=new G(e.lng,e.lat),this._ne=new G(r.lng,r.lat)),this},W.prototype.getCenter=function(){return new G((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},W.prototype.getSouthWest=function(){return this._sw},W.prototype.getNorthEast=function(){return this._ne},W.prototype.getNorthWest=function(){return new G(this.getWest(),this.getNorth())},W.prototype.getSouthEast=function(){return new G(this.getEast(),this.getSouth())},W.prototype.getWest=function(){return this._sw.lng},W.prototype.getSouth=function(){return this._sw.lat},W.prototype.getEast=function(){return this._ne.lng},W.prototype.getNorth=function(){return this._ne.lat},W.prototype.toArray=function(){return[this._sw.toArray(),this._ne.toArray()]},W.prototype.toString=function(){return"LngLatBounds("+this._sw.toString()+", "+this._ne.toString()+")"},W.prototype.isEmpty=function(){return!(this._sw&&this._ne)},W.convert=function(t){return!t||t instanceof W?t:new W(t)};var Y=function(t,e,r){this.bounds=W.convert(this.validateBounds(t)),this.minzoom=e||0,this.maxzoom=r||24};Y.prototype.validateBounds=function(t){return Array.isArray(t)&&4===t.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},Y.prototype.contains=function(t){var e=Math.floor(this.lngX(this.bounds.getWest(),t.z)),r=Math.floor(this.latY(this.bounds.getNorth(),t.z)),n=Math.ceil(this.lngX(this.bounds.getEast(),t.z)),i=Math.ceil(this.latY(this.bounds.getSouth(),t.z));return t.x>=e&&t.x=r&&t.y0&&(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y-1).key]={backfilled:!1}),r.y+10&&(n.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event("data",n))}})},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setData=function(e){var r=this;return this._data=e,this.fire(new t.Event("dataloading",{dataType:"source"})),this._updateWorkerData(function(e){if(e)return r.fire(new t.ErrorEvent(e));var n={dataType:"source",sourceDataType:"content"};r._collectResourceTiming&&r._resourceTiming&&r._resourceTiming.length>0&&(n.resourceTiming=r._resourceTiming,r._resourceTiming=[]),r.fire(new t.Event("data",n))}),this},r.prototype._updateWorkerData=function(e){var r,n,i=this,a=t.extend({},this.workerOptions),o=this._data;"string"==typeof o?(a.request=this.map._transformRequest((r=o,(n=t.default.document.createElement("a")).href=r,n.href),t.ResourceType.Source),a.request.collectResourceTiming=this._collectResourceTiming):a.data=JSON.stringify(o),this.workerID=this.dispatcher.send(this.type+"."+a.source+".loadData",a,function(t,r){i._removed||r&&r.abandoned||(i._loaded=!0,r&&r.resourceTiming&&r.resourceTiming[i.id]&&(i._resourceTiming=r.resourceTiming[i.id].slice(0)),i.dispatcher.send(i.type+"."+a.source+".coalesce",null,null,i.workerID),e(t))},this.workerID)},r.prototype.loadTile=function(t,e){var r=this,n=void 0===t.workerID?"loadTile":"reloadTile",i={type:this.type,uid:t.uid,tileID:t.tileID,zoom:t.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:a.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};t.workerID=this.dispatcher.send(n,i,function(i,a){return t.unloadVectorData(),t.aborted?e(null):i?e(i):(t.loadVectorData(a,r.map.painter,"reloadTile"===n),e(null))},this.workerID)},r.prototype.abortTile=function(t){t.aborted=!0},r.prototype.unloadTile=function(t){t.unloadVectorData(),this.dispatcher.send("removeTile",{uid:t.uid,type:this.type,source:this.id},null,t.workerID)},r.prototype.onRemove=function(){this._removed=!0,this.dispatcher.send("removeSource",{type:this.type,source:this.id},null,this.workerID)},r.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},r.prototype.hasTransition=function(){return!1},r}(t.Evented),K=t.createLayout([{name:"a_pos",type:"Int16",components:2},{name:"a_texture_pos",type:"Int16",components:2}]),Q=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null};Q.prototype.bind=function(t,e,r,n,i,a,o,s){this.context=t;for(var l=this.boundPaintVertexBuffers.length!==n.length,u=0;!l&&u>s.z,u=new t.default$1(s.x*l,s.y*l),c=new t.default$1(u.x+l,u.y+l),f=this.segments.prepareSegment(4,n,i);n.emplaceBack(u.x,u.y,u.x,u.y),n.emplaceBack(c.x,u.y,c.x,u.y),n.emplaceBack(u.x,c.y,u.x,c.y),n.emplaceBack(c.x,c.y,c.x,c.y);var h=f.vertexLength;i.emplaceBack(h,h+1,h+2),i.emplaceBack(h+1,h+2,h+3),f.vertexLength+=4,f.primitiveLength+=2}this.maskedBoundsBuffer=r.createVertexBuffer(n,K.members),this.maskedIndexBuffer=r.createIndexBuffer(i)}},st.prototype.hasData=function(){return"loaded"===this.state||"reloading"===this.state||"expired"===this.state},st.prototype.setExpiryData=function(e){var r=this.expirationTime;if(e.cacheControl){var n=t.parseCacheControl(e.cacheControl);n["max-age"]&&(this.expirationTime=Date.now()+1e3*n["max-age"])}else e.expires&&(this.expirationTime=new Date(e.expires).getTime());if(this.expirationTime){var i=Date.now(),a=!1;if(this.expirationTime>i)a=!1;else if(r)if(this.expirationTimethis.max){var o=this._getAndRemoveByKey(this.order[0]);o&&this.onRemove(o)}return this},lt.prototype.has=function(t){return t.wrapped().key in this.data},lt.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},lt.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},lt.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},lt.prototype.remove=function(t,e){if(!this.has(t))return this;var r=t.wrapped().key,n=void 0===e?0:this.data[r].indexOf(e),i=this.data[r][n];return this.data[r].splice(n,1),i.timeout&&clearTimeout(i.timeout),0===this.data[r].length&&delete this.data[r],this.onRemove(i.value),this.order.splice(this.order.indexOf(r),1),this},lt.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this};var ut=function(t,e,r){this.context=t;var n=t.gl;this.buffer=n.createBuffer(),this.dynamicDraw=Boolean(r),this.unbindVAO(),t.bindElementBuffer.set(this.buffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?n.DYNAMIC_DRAW:n.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};ut.prototype.unbindVAO=function(){this.context.extVertexArrayObject&&this.context.bindVertexArrayOES.set(null)},ut.prototype.bind=function(){this.context.bindElementBuffer.set(this.buffer)},ut.prototype.updateData=function(t){var e=this.context.gl;this.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer)},ut.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var ct={Int8:"BYTE",Uint8:"UNSIGNED_BYTE",Int16:"SHORT",Uint16:"UNSIGNED_SHORT",Int32:"INT",Uint32:"UNSIGNED_INT",Float32:"FLOAT"},ft=function(t,e,r,n){this.length=e.length,this.attributes=r,this.itemSize=e.bytesPerElement,this.dynamicDraw=n,this.context=t;var i=t.gl;this.buffer=i.createBuffer(),t.bindVertexBuffer.set(this.buffer),i.bufferData(i.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?i.DYNAMIC_DRAW:i.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};ft.prototype.bind=function(){this.context.bindVertexBuffer.set(this.buffer)},ft.prototype.updateData=function(t){var e=this.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer)},ft.prototype.enableAttributes=function(t,e){for(var r=0;r1||(Math.abs(r)>1&&(1===Math.abs(r+i)?r+=i:1===Math.abs(r-i)&&(r-=i)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,r,n),t.neighboringTiles&&t.neighboringTiles[a]&&(t.neighboringTiles[a].backfilled=!0)))}},r.prototype.getTile=function(t){return this.getTileByID(t.key)},r.prototype.getTileByID=function(t){return this._tiles[t]},r.prototype.getZoom=function(t){return t.zoom+t.scaleZoom(t.tileSize/this._source.tileSize)},r.prototype._findLoadedChildren=function(t,e,r){var n=!1;for(var i in this._tiles){var a=this._tiles[i];if(!(r[i]||!a.hasData()||a.tileID.overscaledZ<=t.overscaledZ||a.tileID.overscaledZ>e)){var o=Math.pow(2,a.tileID.canonical.z-t.canonical.z);if(Math.floor(a.tileID.canonical.x/o)===t.canonical.x&&Math.floor(a.tileID.canonical.y/o)===t.canonical.y)for(r[i]=a.tileID,n=!0;a&&a.tileID.overscaledZ-1>t.overscaledZ;){var s=a.tileID.scaledTo(a.tileID.overscaledZ-1);if(!s)break;(a=this._tiles[s.key])&&a.hasData()&&(delete r[i],r[s.key]=s)}}}return n},r.prototype.findLoadedParent=function(t,e,r){for(var n=t.overscaledZ-1;n>=e;n--){var i=t.scaledTo(n);if(!i)return;var a=String(i.key),o=this._tiles[a];if(o&&o.hasData())return r[a]=i,o;if(this._cache.has(i))return r[a]=i,this._cache.get(i)}},r.prototype.updateCacheSize=function(t){var e=(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),r=Math.floor(5*e),n="number"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,r):r;this._cache.setMaxSize(n)},r.prototype.handleWrapJump=function(t){var e=(t-(void 0===this._prevLng?t:this._prevLng))/360,r=Math.round(e);if(this._prevLng=t,r){var n={};for(var i in this._tiles){var a=this._tiles[i];a.tileID=a.tileID.unwrapTo(a.tileID.wrap+r),n[a.tileID.key]=a}for(var o in this._tiles=n,this._timers)clearTimeout(this._timers[o]),delete this._timers[o];for(var s in this._tiles){var l=this._tiles[s];this._setTileReloadTimer(s,l)}}},r.prototype.update=function(e){var n=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var i;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?i=e.getVisibleUnwrappedCoordinates(this._source.tileID).map(function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)}):(i=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(i=i.filter(function(t){return n._source.hasTile(t)}))):i=[];var o,s=(this._source.roundZoom?Math.round:Math.floor)(this.getZoom(e)),l=Math.max(s-r.maxOverzooming,this._source.minzoom),u=Math.max(s+r.maxUnderzooming,this._source.minzoom),c=this._updateRetainedTiles(i,s),f={};if(Xt(this._source.type))for(var h=Object.keys(c),p=0;p=a.now())){n._findLoadedChildren(m,u,c)&&(c[d]=m);var v=n.findLoadedParent(m,l,f);v&&n._addTile(v.tileID)}}for(o in f)c[o]||(n._coveredTiles[o]=!0);for(o in f)c[o]=f[o];for(var y=t.keysDifference(this._tiles,c),x=0;xthis._source.maxzoom){var h=l.children(this._source.maxzoom)[0],p=this.getTile(h);p&&p.hasData()?n[h.key]=h:f=!1}else{this._findLoadedChildren(l,o,n);for(var d=l.children(this._source.maxzoom),m=0;m=a;--g){var v=l.scaledTo(g);if(i[v.key])break;if(i[v.key]=!0,!(u=this.getTile(v))&&c&&(u=this._addTile(v)),u&&(n[v.key]=v,c=u.wasRequested(),u.hasData()))break}}}return n},r.prototype._addTile=function(e){var r=this._tiles[e.key];if(r)return r;(r=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,r),r.tileID=e);var n=Boolean(r);return n||(r=new st(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(r,this._tileLoaded.bind(this,r,e.key,r.state))),r?(r.uses++,this._tiles[e.key]=r,n||this._source.fire(new t.Event("dataloading",{tile:r,coord:r.tileID,dataType:"source"})),r):null},r.prototype._setTileReloadTimer=function(t,e){var r=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var n=e.getExpiryTimeout();n&&(this._timers[t]=setTimeout(function(){r._reloadTile(t,"expired"),delete r._timers[t]},n))},r.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))))},r.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset()},r.prototype.tilesIn=function(e,r){for(var n=[],i=this.getIds(),a=1/0,o=1/0,s=-1/0,l=-1/0,u=e[0].zoom,c=0;c=0&&v[1].y+g>=0){for(var y=[],x=0;x=a.now())return!0}return!1},r}(t.Evented);function Zt(e,r){var n=r.zoomTo(e.canonical.z);return new t.default$1((n.column-(e.canonical.x+e.wrap*Math.pow(2,e.canonical.z)))*t.default$8,(n.row-e.canonical.y)*t.default$8)}function Xt(t){return"raster"===t||"image"===t||"video"===t}function $t(){return new t.default.Worker(Sn.workerUrl)}Yt.maxOverzooming=10,Yt.maxUnderzooming=3;var Jt,Kt=function(){this.active={}};function Qt(e,r){var n={};for(var i in e)"ref"!==i&&(n[i]=e[i]);return t.default$18.forEach(function(t){t in r&&(n[t]=r[t])}),n}function te(t){t=t.slice();for(var e=Object.create(null),r=0;rthis.width||n<0||e>this.height)return!i&&[];var a=[];if(t<=0&&e<=0&&this.width<=r&&this.height<=n){if(i)return!0;for(var o=0;o0:a},ue.prototype._queryCircle=function(t,e,r,n){var i=t-r,a=t+r,o=e-r,s=e+r;if(a<0||i>this.width||s<0||o>this.height)return!n&&[];var l=[],u={hitTest:n,circle:{x:t,y:e,radius:r},seenUids:{box:{},circle:{}}};return this._forEachCell(i,o,a,s,this._queryCellCircle,l,u),n?l.length>0:l},ue.prototype.query=function(t,e,r,n){return this._query(t,e,r,n,!1)},ue.prototype.hitTest=function(t,e,r,n){return this._query(t,e,r,n,!0)},ue.prototype.hitTestCircle=function(t,e,r){return this._queryCircle(t,e,r,!0)},ue.prototype._queryCell=function(t,e,r,n,i,a,o){var s=o.seenUids,l=this.boxCells[i];if(null!==l)for(var u=this.bboxes,c=0,f=l;c=u[p+0]&&n>=u[p+1]){if(o.hitTest)return a.push(!0),!0;a.push({key:this.boxKeys[h],x1:u[p],y1:u[p+1],x2:u[p+2],y2:u[p+3]})}}}var d=this.circleCells[i];if(null!==d)for(var m=this.circles,g=0,v=d;go*o+s*s},ue.prototype._circleAndRectCollide=function(t,e,r,n,i,a,o){var s=(a-n)/2,l=Math.abs(t-(n+s));if(l>s+r)return!1;var u=(o-i)/2,c=Math.abs(e-(i+u));if(c>u+r)return!1;if(l<=s||c<=u)return!0;var f=l-s,h=c-u;return f*f+h*h<=r*r};var ce=t.default$19.layout;function fe(e,r,n,i,a){var o=t.mat4.identity(new Float32Array(16));return r?(t.mat4.identity(o),t.mat4.scale(o,o,[1/a,1/a,1]),n||t.mat4.rotateZ(o,o,i.angle)):(t.mat4.scale(o,o,[i.width/2,-i.height/2,1]),t.mat4.translate(o,o,[1,-1,0]),t.mat4.multiply(o,o,e)),o}function he(e,r,n,i,a){var o=t.mat4.identity(new Float32Array(16));return r?(t.mat4.multiply(o,o,e),t.mat4.scale(o,o,[a,a,1]),n||t.mat4.rotateZ(o,o,-i.angle)):(t.mat4.scale(o,o,[1,-1,1]),t.mat4.translate(o,o,[-1,-1,0]),t.mat4.scale(o,o,[2/i.width,2/i.height,1])),o}function pe(e,r){var n=[e.x,e.y,0,1];Ae(n,n,r);var i=n[3];return{point:new t.default$1(n[0]/i,n[1]/i),signedDistanceFromCamera:i}}function de(t,e){var r=t[0]/t[3],n=t[1]/t[3];return r>=-e[0]&&r<=e[0]&&n>=-e[1]&&n<=e[1]}function me(e,r,n,i,a,o,s,l){var u=i?e.textSizeData:e.iconSizeData,c=t.evaluateSizeForZoom(u,n.transform.zoom,ce.properties[i?"text-size":"icon-size"]),f=[256/n.width*2+1,256/n.height*2+1],h=i?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;h.clear();for(var p=e.lineVertexArray,d=i?e.text.placedSymbolArray:e.icon.placedSymbolArray,m=n.transform.width/n.transform.height,g=!1,v=0;vMath.abs(n.x-r.x)*i?{useVertical:!0}:(e===t.WritingMode.vertical?r.yn.x)?{needsFlipping:!0}:null}function ye(e,r,n,i,a,o,s,l,u,c,f,h,p,d){var m,g=r/24,v=e.lineOffsetX*r,y=e.lineOffsetY*r;if(e.numGlyphs>1){var x=e.glyphStartIndex+e.numGlyphs,b=e.lineStartIndex,_=e.lineStartIndex+e.lineLength,w=ge(g,l,v,y,n,f,h,e,u,o,p,!1);if(!w)return{notEnoughRoom:!0};var A=pe(w.first.point,s).point,M=pe(w.last.point,s).point;if(i&&!n){var k=ve(e.writingMode,A,M,d);if(k)return k}m=[w.first];for(var T=e.glyphStartIndex+1;T0?L.point:xe(h,C,E,1,a),z=ve(e.writingMode,E,O,d);if(z)return z}var D=be(g*l.getoffsetX(e.glyphStartIndex),v,y,n,f,h,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,u,o,p,!1);if(!D)return{notEnoughRoom:!0};m=[D]}for(var P=0,I=m;P0?1:-1,g=0;i&&(m*=-1,g=Math.PI),m<0&&(g+=Math.PI);for(var v=m>0?l+s:l+s+1,y=v,x=a,b=a,_=0,w=0,A=Math.abs(d);_+w<=A;){if((v+=m)=u)return null;if(b=x,void 0===(x=h[v])){var M=new t.default$1(c.getx(v),c.gety(v)),k=pe(M,f);if(k.signedDistanceFromCamera>0)x=h[v]=k.point;else{var T=v-m;x=xe(0===_?o:new t.default$1(c.getx(T),c.gety(T)),M,b,A-_+1,f)}}_+=w,w=b.dist(x)}var E=(A-_)/w,S=x.sub(b),C=S.mult(E)._add(b);return C._add(S._unit()._perp()._mult(n*m)),{point:C,angle:g+Math.atan2(x.y-b.y,x.x-b.x),tileDistance:p?{prevTileDistance:v-m===y?0:c.gettileUnitDistanceFromAnchor(v-m),lastSegmentViewportDistance:A-_}:null}}var _e=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function we(t,e){for(var r=0;rT)ke(e,E,!1);else{var z=this.projectPoint(c,S,C),D=L*A;if(d.length>0){var P=z.x-d[d.length-4],I=z.y-d[d.length-3];if(D*D*2>P*P+I*I&&E+8-k&&N=this.screenRightBoundary||n<100||e>this.screenBottomBoundary};var Ee=t.default$19.layout,Se=function(t,e,r,n){this.opacity=t?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):n&&r?1:0,this.placed=r};Se.prototype.isHidden=function(){return 0===this.opacity&&!this.placed};var Ce=function(t,e,r,n,i){this.text=new Se(t?t.text:null,e,r,i),this.icon=new Se(t?t.icon:null,e,n,i)};Ce.prototype.isHidden=function(){return this.text.isHidden()&&this.icon.isHidden()};var Le=function(t,e,r){this.text=t,this.icon=e,this.skipFade=r},Oe=function(t,e){this.transform=t.clone(),this.collisionIndex=new Me(this.transform),this.placements={},this.opacities={},this.stale=!1,this.fadeDuration=e,this.retainedQueryData={}};function ze(t,e,r){t.emplaceBack(e?1:0,r?1:0),t.emplaceBack(e?1:0,r?1:0),t.emplaceBack(e?1:0,r?1:0),t.emplaceBack(e?1:0,r?1:0)}Oe.prototype.placeLayerTile=function(e,r,n,i){var a=r.getBucket(e),o=r.latestFeatureIndex;if(a&&o&&e.id===a.layerIds[0]){var s=r.collisionBoxArray,l=a.layers[0].layout,u=Math.pow(2,this.transform.zoom-r.tileID.overscaledZ),c=r.tileSize/t.default$8,f=this.transform.calculatePosMatrix(r.tileID.toUnwrapped()),h=fe(f,"map"===l.get("text-pitch-alignment"),"map"===l.get("text-rotation-alignment"),this.transform,Te(r,1,this.transform.zoom)),p=fe(f,"map"===l.get("icon-pitch-alignment"),"map"===l.get("icon-rotation-alignment"),this.transform,Te(r,1,this.transform.zoom));this.retainedQueryData[a.bucketInstanceId]=new function(t,e,r,n,i){this.bucketInstanceId=t,this.featureIndex=e,this.sourceLayerIndex=r,this.bucketIndex=n,this.tileID=i}(a.bucketInstanceId,o,a.sourceLayerIndex,a.index,r.tileID),this.placeLayerBucket(a,f,h,p,u,c,n,i,s)}},Oe.prototype.placeLayerBucket=function(e,r,n,i,a,o,s,l,u){for(var c=e.layers[0].layout,f=t.evaluateSizeForZoom(e.textSizeData,this.transform.zoom,Ee.properties["text-size"]),h=!e.hasTextData()||c.get("text-optional"),p=!e.hasIconData()||c.get("icon-optional"),d=0,m=e.symbolInstances;d0,x=x&&b.offscreen);var k=g.collisionArrays.textCircles;if(k){var T=e.text.placedSymbolArray.get(g.placedTextSymbolIndices[0]),E=t.evaluateSizeForFeature(e.textSizeData,f,T);_=this.collisionIndex.placeCollisionCircles(k,c.get("text-allow-overlap"),a,o,g.key,T,e.lineVertexArray,e.glyphOffsetArray,E,r,n,s,"map"===c.get("text-pitch-alignment")),v=c.get("text-allow-overlap")||_.circles.length>0,x=x&&_.offscreen}g.collisionArrays.iconFeatureIndex&&(M=g.collisionArrays.iconFeatureIndex),g.collisionArrays.iconBox&&(y=(w=this.collisionIndex.placeCollisionBox(g.collisionArrays.iconBox,c.get("icon-allow-overlap"),o,r)).box.length>0,x=x&&w.offscreen),h||p?p?h||(y=y&&v):v=y&&v:y=v=y&&v,v&&b&&this.collisionIndex.insertCollisionBox(b.box,c.get("text-ignore-placement"),e.bucketInstanceId,A),y&&w&&this.collisionIndex.insertCollisionBox(w.box,c.get("icon-ignore-placement"),e.bucketInstanceId,M),v&&_&&this.collisionIndex.insertCollisionCircles(_.circles,c.get("text-ignore-placement"),e.bucketInstanceId,A),this.placements[g.crossTileID]=new Le(v,y,x||e.justReloaded),l[g.crossTileID]=!0}}e.justReloaded=!1},Oe.prototype.commit=function(t,e){this.commitTime=e;var r=!1,n=t&&0!==this.fadeDuration?(this.commitTime-t.commitTime)/this.fadeDuration:1,i=t?t.opacities:{};for(var a in this.placements){var o=this.placements[a],s=i[a];s?(this.opacities[a]=new Ce(s,n,o.text,o.icon),r=r||o.text!==s.text.placed||o.icon!==s.icon.placed):(this.opacities[a]=new Ce(null,n,o.text,o.icon,o.skipFade),r=r||o.text||o.icon)}for(var l in i){var u=i[l];if(!this.opacities[l]){var c=new Ce(u,n,!1,!1);c.isHidden()||(this.opacities[l]=c,r=r||u.text.placed||u.icon.placed)}}r?this.lastPlacementChangeTime=e:"number"!=typeof this.lastPlacementChangeTime&&(this.lastPlacementChangeTime=t?t.lastPlacementChangeTime:e)},Oe.prototype.updateLayerOpacities=function(t,e){for(var r={},n=0,i=e;n0||s.numVerticalGlyphVertices>0,f=s.numIconVertices>0;if(c){for(var h=je(u.text),p=(s.numGlyphVertices+s.numVerticalGlyphVertices)/4,d=0;dt},Oe.prototype.setStale=function(){this.stale=!0};var De=Math.pow(2,25),Pe=Math.pow(2,24),Ie=Math.pow(2,17),Ne=Math.pow(2,16),Re=Math.pow(2,9),Fe=Math.pow(2,8),Be=Math.pow(2,1);function je(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,r=Math.floor(127*t.opacity);return r*De+e*Pe+r*Ie+e*Ne+r*Re+e*Fe+r*Be+e}var Ve=function(){this._currentTileIndex=0,this._seenCrossTileIDs={}};Ve.prototype.continuePlacement=function(t,e,r,n,i){for(;this._currentTileIndex2};this._currentPlacementIndex>=0;){var s=e[t[n._currentPlacementIndex]],l=n.placement.collisionIndex.transform.zoom;if("symbol"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(n._inProgressLayer||(n._inProgressLayer=new Ve),n._inProgressLayer.continuePlacement(r[s.source],n.placement,n._showCollisionBoxes,s,o))return;delete n._inProgressLayer}n._currentPlacementIndex--}this._done=!0},Ue.prototype.commit=function(t,e){return this.placement.commit(t,e),this.placement};var qe=512/t.default$8/2,He=function(t,e,r){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=r;for(var n=0,i=e;nt.overscaledZ)for(var l in s){var u=s[l];u.tileID.isChildOf(t)&&u.findMatches(e.symbolInstances,t,a)}else{var c=s[t.scaledTo(Number(o)).key];c&&c.findMatches(e.symbolInstances,t,a)}}for(var f=0,h=e.symbolInstances;f1?"@2x":"";function u(){if(s)n(s);else if(i&&o){var e=a.getImageData(o),r={};for(var l in i){var u=i[l],c=u.width,f=u.height,h=u.x,p=u.y,d=u.sdf,m=u.pixelRatio,g=new t.RGBAImage({width:c,height:f});t.RGBAImage.copy(e,g,{x:h,y:p},{x:0,y:0},{width:c,height:f}),r[l]={data:g,pixelRatio:m,sdf:d}}n(null,r)}}t.getJSON(r(_(e,l,".json"),t.ResourceType.SpriteJSON),function(t,e){s||(s=t,i=e,u())}),t.getImage(r(_(e,l,".png"),t.ResourceType.SpriteImage),function(t,e){s||(s=t,o=e,u())})}(e.sprite,this.map._transformRequest,function(e,r){if(e)n.fire(new t.ErrorEvent(e));else if(r)for(var i in r)n.imageManager.addImage(i,r[i]);n.imageManager.setLoaded(!0),n.fire(new t.Event("data",{dataType:"style"}))}):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var o=te(this.stylesheet.layers);this._order=o.map(function(t){return t.id}),this._layers={};for(var s=0,l=o;s0)throw new Error("Unimplemented: "+i.map(function(t){return t.command}).join(", ")+".");return n.forEach(function(t){"setTransition"!==t.command&&r[t.command].apply(r,t.args)}),this.stylesheet=e,!0},r.prototype.addImage=function(e,r){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error("An image with this name already exists.")));this.imageManager.addImage(e,r),this.fire(new t.Event("data",{dataType:"style"}))},r.prototype.getImage=function(t){return this.imageManager.getImage(t)},r.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error("No image with this name exists.")));this.imageManager.removeImage(e),this.fire(new t.Event("data",{dataType:"style"}))},r.prototype.addSource=function(e,r,n){var i=this;if(this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error("There is already a source with this ID");if(!r.type)throw new Error("The type property must be defined, but the only the following properties were given: "+Object.keys(r).join(", ")+".");if(!(["vector","raster","geojson","video","image"].indexOf(r.type)>=0&&this._validate(t.validateStyle.source,"sources."+e,r,null,n))){this.map&&this.map._collectResourceTiming&&(r.collectResourceTiming=!0);var a=this.sourceCaches[e]=new Yt(e,r,this.dispatcher);a.style=this,a.setEventedParent(this,function(){return{isSourceLoaded:i.loaded(),source:a.serialize(),sourceId:e}}),a.onAdd(this.map),this._changed=!0}},r.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error("There is no source with this ID");for(var r in this._layers)if(this._layers[r].source===e)return this.fire(new t.ErrorEvent(new Error('Source "'+e+'" cannot be removed while layer "'+r+'" is using it.')));var n=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],n.fire(new t.Event("data",{sourceDataType:"metadata",dataType:"source",sourceId:e})),n.setEventedParent(null),n.clearTiles(),n.onRemove&&n.onRemove(this.map),this._changed=!0},r.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0},r.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},r.prototype.addLayer=function(e,r,n){this._checkLoaded();var i=e.id;if(this.getLayer(i))this.fire(new t.ErrorEvent(new Error('Layer with id "'+i+'" already exists on this map')));else if("object"==typeof e.source&&(this.addSource(i,e.source),e=t.clone(e),e=t.extend(e,{source:i})),!this._validate(t.validateStyle.layer,"layers."+i,e,{arrayIndex:-1},n)){var a=t.default$22(e);this._validateLayer(a),a.setEventedParent(this,{layer:{id:i}});var o=r?this._order.indexOf(r):this._order.length;if(r&&-1===o)this.fire(new t.ErrorEvent(new Error('Layer with id "'+r+'" does not exist on this map.')));else{if(this._order.splice(o,0,i),this._layerOrderChanged=!0,this._layers[i]=a,this._removedLayers[i]&&a.source){var s=this._removedLayers[i];delete this._removedLayers[i],s.type!==a.type?this._updatedSources[a.source]="clear":(this._updatedSources[a.source]="reload",this.sourceCaches[a.source].pause())}this._updateLayer(a)}}},r.prototype.moveLayer=function(e,r){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==r){var n=this._order.indexOf(e);this._order.splice(n,1);var i=r?this._order.indexOf(r):this._order.length;r&&-1===i?this.fire(new t.ErrorEvent(new Error('Layer with id "'+r+'" does not exist on this map.'))):(this._order.splice(i,0,e),this._layerOrderChanged=!0)}}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be moved.")))},r.prototype.removeLayer=function(e){this._checkLoaded();var r=this._layers[e];if(r){r.setEventedParent(null);var n=this._order.indexOf(e);this._order.splice(n,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=r,delete this._layers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e]}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be removed.")))},r.prototype.getLayer=function(t){return this._layers[t]},r.prototype.setLayerZoomRange=function(e,r,n){this._checkLoaded();var i=this.getLayer(e);i?i.minzoom===r&&i.maxzoom===n||(null!=r&&(i.minzoom=r),null!=n&&(i.maxzoom=n),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot have zoom extent.")))},r.prototype.setFilter=function(e,r){this._checkLoaded();var n=this.getLayer(e);if(n){if(!t.default$10(n.filter,r))return null==r?(n.filter=void 0,void this._updateLayer(n)):void(this._validate(t.validateStyle.filter,"layers."+n.id+".filter",r)||(n.filter=t.clone(r),this._updateLayer(n)))}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be filtered.")))},r.prototype.getFilter=function(e){return t.clone(this.getLayer(e).filter)},r.prototype.setLayoutProperty=function(e,r,n){this._checkLoaded();var i=this.getLayer(e);i?t.default$10(i.getLayoutProperty(r),n)||(i.setLayoutProperty(r,n),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},r.prototype.getLayoutProperty=function(t,e){return this.getLayer(t).getLayoutProperty(e)},r.prototype.setPaintProperty=function(e,r,n){this._checkLoaded();var i=this.getLayer(e);if(i){if(!t.default$10(i.getPaintProperty(r),n)){var a=i._transitionablePaint._values[r].value.isDataDriven();i.setPaintProperty(r,n),(i._transitionablePaint._values[r].value.isDataDriven()||a)&&this._updateLayer(i),this._changed=!0,this._updatedPaintProps[e]=!0}}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},r.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},r.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},r.prototype.serialize=function(){var e=this;return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,function(t){return t.serialize()}),layers:this._order.map(function(t){return e._layers[t].serialize()})},function(t){return void 0!==t})},r.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&(this._updatedSources[t.source]="reload",this.sourceCaches[t.source].pause()),this._changed=!0},r.prototype._flattenRenderedFeatures=function(t){for(var e=[],r=this._order.length-1;r>=0;r--)for(var n=this._order[r],i=0,a=t;i 0.5) {\n gl_FragColor = vec4(0.0, 0.0, 1.0, 0.5) * alpha;\n }\n\n if (v_notUsed > 0.5) {\n // This box not used, fade it out\n gl_FragColor *= .1;\n }\n}",vertexSource:"attribute vec2 a_pos;\nattribute vec2 a_anchor_pos;\nattribute vec2 a_extrude;\nattribute vec2 a_placed;\n\nuniform mat4 u_matrix;\nuniform vec2 u_extrude_scale;\nuniform float u_camera_to_center_distance;\n\nvarying float v_placed;\nvarying float v_notUsed;\n\nvoid main() {\n vec4 projectedPoint = u_matrix * vec4(a_anchor_pos, 0, 1);\n highp float camera_to_anchor_distance = projectedPoint.w;\n highp float collision_perspective_ratio = clamp(\n 0.5 + 0.5 * (u_camera_to_center_distance / camera_to_anchor_distance),\n 0.0, // Prevents oversized near-field boxes in pitched/overzoomed tiles\n 4.0);\n\n gl_Position = u_matrix * vec4(a_pos, 0.0, 1.0);\n gl_Position.xy += a_extrude * u_extrude_scale * gl_Position.w * collision_perspective_ratio;\n\n v_placed = a_placed.x;\n v_notUsed = a_placed.y;\n}\n"},collisionCircle:{fragmentSource:"uniform float u_overscale_factor;\n\nvarying float v_placed;\nvarying float v_notUsed;\nvarying float v_radius;\nvarying vec2 v_extrude;\nvarying vec2 v_extrude_scale;\n\nvoid main() {\n float alpha = 0.5;\n\n // Red = collision, hide label\n vec4 color = vec4(1.0, 0.0, 0.0, 1.0) * alpha;\n\n // Blue = no collision, label is showing\n if (v_placed > 0.5) {\n color = vec4(0.0, 0.0, 1.0, 0.5) * alpha;\n }\n\n if (v_notUsed > 0.5) {\n // This box not used, fade it out\n color *= .2;\n }\n\n float extrude_scale_length = length(v_extrude_scale);\n float extrude_length = length(v_extrude) * extrude_scale_length;\n float stroke_width = 15.0 * extrude_scale_length / u_overscale_factor;\n float radius = v_radius * extrude_scale_length;\n\n float distance_to_edge = abs(extrude_length - radius);\n float opacity_t = smoothstep(-stroke_width, 0.0, -distance_to_edge);\n\n gl_FragColor = opacity_t * color;\n}\n",vertexSource:"attribute vec2 a_pos;\nattribute vec2 a_anchor_pos;\nattribute vec2 a_extrude;\nattribute vec2 a_placed;\n\nuniform mat4 u_matrix;\nuniform vec2 u_extrude_scale;\nuniform float u_camera_to_center_distance;\n\nvarying float v_placed;\nvarying float v_notUsed;\nvarying float v_radius;\n\nvarying vec2 v_extrude;\nvarying vec2 v_extrude_scale;\n\nvoid main() {\n vec4 projectedPoint = u_matrix * vec4(a_anchor_pos, 0, 1);\n highp float camera_to_anchor_distance = projectedPoint.w;\n highp float collision_perspective_ratio = clamp(\n 0.5 + 0.5 * (u_camera_to_center_distance / camera_to_anchor_distance),\n 0.0, // Prevents oversized near-field circles in pitched/overzoomed tiles\n 4.0);\n\n gl_Position = u_matrix * vec4(a_pos, 0.0, 1.0);\n\n highp float padding_factor = 1.2; // Pad the vertices slightly to make room for anti-alias blur\n gl_Position.xy += a_extrude * u_extrude_scale * padding_factor * gl_Position.w * collision_perspective_ratio;\n\n v_placed = a_placed.x;\n v_notUsed = a_placed.y;\n v_radius = abs(a_extrude.y); // We don't pitch the circles, so both units of the extrusion vector are equal in magnitude to the radius\n\n v_extrude = a_extrude * padding_factor;\n v_extrude_scale = u_extrude_scale * u_camera_to_center_distance * collision_perspective_ratio;\n}\n"},debug:{fragmentSource:"uniform highp vec4 u_color;\n\nvoid main() {\n gl_FragColor = u_color;\n}\n",vertexSource:"attribute vec2 a_pos;\n\nuniform mat4 u_matrix;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n}\n"},fill:{fragmentSource:"#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 color\n #pragma mapbox: initialize lowp float opacity\n\n gl_FragColor = color * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"attribute vec2 a_pos;\n\nuniform mat4 u_matrix;\n\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 color\n #pragma mapbox: initialize lowp float opacity\n\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n}\n"},fillOutline:{fragmentSource:"#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\n\nvarying vec2 v_pos;\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 outline_color\n #pragma mapbox: initialize lowp float opacity\n\n float dist = length(v_pos - gl_FragCoord.xy);\n float alpha = 1.0 - smoothstep(0.0, 1.0, dist);\n gl_FragColor = outline_color * (alpha * opacity);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"attribute vec2 a_pos;\n\nuniform mat4 u_matrix;\nuniform vec2 u_world;\n\nvarying vec2 v_pos;\n\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 outline_color\n #pragma mapbox: initialize lowp float opacity\n\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n v_pos = (gl_Position.xy / gl_Position.w + 1.0) / 2.0 * u_world;\n}\n"},fillOutlinePattern:{fragmentSource:"uniform vec2 u_pattern_tl_a;\nuniform vec2 u_pattern_br_a;\nuniform vec2 u_pattern_tl_b;\nuniform vec2 u_pattern_br_b;\nuniform vec2 u_texsize;\nuniform float u_mix;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec2 v_pos;\n\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n\n vec2 imagecoord = mod(v_pos_a, 1.0);\n vec2 pos = mix(u_pattern_tl_a / u_texsize, u_pattern_br_a / u_texsize, imagecoord);\n vec4 color1 = texture2D(u_image, pos);\n\n vec2 imagecoord_b = mod(v_pos_b, 1.0);\n vec2 pos2 = mix(u_pattern_tl_b / u_texsize, u_pattern_br_b / u_texsize, imagecoord_b);\n vec4 color2 = texture2D(u_image, pos2);\n\n // find distance to outline for alpha interpolation\n\n float dist = length(v_pos - gl_FragCoord.xy);\n float alpha = 1.0 - smoothstep(0.0, 1.0, dist);\n\n\n gl_FragColor = mix(color1, color2, u_mix) * alpha * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"uniform mat4 u_matrix;\nuniform vec2 u_world;\nuniform vec2 u_pattern_size_a;\nuniform vec2 u_pattern_size_b;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform float u_scale_a;\nuniform float u_scale_b;\nuniform float u_tile_units_to_pixels;\n\nattribute vec2 a_pos;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec2 v_pos;\n\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n\n v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, u_scale_a * u_pattern_size_a, u_tile_units_to_pixels, a_pos);\n v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, u_scale_b * u_pattern_size_b, u_tile_units_to_pixels, a_pos);\n\n v_pos = (gl_Position.xy / gl_Position.w + 1.0) / 2.0 * u_world;\n}\n"},fillPattern:{fragmentSource:"uniform vec2 u_pattern_tl_a;\nuniform vec2 u_pattern_br_a;\nuniform vec2 u_pattern_tl_b;\nuniform vec2 u_pattern_br_b;\nuniform vec2 u_texsize;\nuniform float u_mix;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\n\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n\n vec2 imagecoord = mod(v_pos_a, 1.0);\n vec2 pos = mix(u_pattern_tl_a / u_texsize, u_pattern_br_a / u_texsize, imagecoord);\n vec4 color1 = texture2D(u_image, pos);\n\n vec2 imagecoord_b = mod(v_pos_b, 1.0);\n vec2 pos2 = mix(u_pattern_tl_b / u_texsize, u_pattern_br_b / u_texsize, imagecoord_b);\n vec4 color2 = texture2D(u_image, pos2);\n\n gl_FragColor = mix(color1, color2, u_mix) * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"uniform mat4 u_matrix;\nuniform vec2 u_pattern_size_a;\nuniform vec2 u_pattern_size_b;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform float u_scale_a;\nuniform float u_scale_b;\nuniform float u_tile_units_to_pixels;\n\nattribute vec2 a_pos;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\n\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n\n v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, u_scale_a * u_pattern_size_a, u_tile_units_to_pixels, a_pos);\n v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, u_scale_b * u_pattern_size_b, u_tile_units_to_pixels, a_pos);\n}\n"},fillExtrusion:{fragmentSource:"varying vec4 v_color;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define highp vec4 color\n\nvoid main() {\n #pragma mapbox: initialize lowp float base\n #pragma mapbox: initialize lowp float height\n #pragma mapbox: initialize highp vec4 color\n\n gl_FragColor = v_color;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"uniform mat4 u_matrix;\nuniform vec3 u_lightcolor;\nuniform lowp vec3 u_lightpos;\nuniform lowp float u_lightintensity;\n\nattribute vec2 a_pos;\nattribute vec4 a_normal_ed;\n\nvarying vec4 v_color;\n\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n\n#pragma mapbox: define highp vec4 color\n\nvoid main() {\n #pragma mapbox: initialize lowp float base\n #pragma mapbox: initialize lowp float height\n #pragma mapbox: initialize highp vec4 color\n\n vec3 normal = a_normal_ed.xyz;\n\n base = max(0.0, base);\n height = max(0.0, height);\n\n float t = mod(normal.x, 2.0);\n\n gl_Position = u_matrix * vec4(a_pos, t > 0.0 ? height : base, 1);\n\n // Relative luminance (how dark/bright is the surface color?)\n float colorvalue = color.r * 0.2126 + color.g * 0.7152 + color.b * 0.0722;\n\n v_color = vec4(0.0, 0.0, 0.0, 1.0);\n\n // Add slight ambient lighting so no extrusions are totally black\n vec4 ambientlight = vec4(0.03, 0.03, 0.03, 1.0);\n color += ambientlight;\n\n // Calculate cos(theta), where theta is the angle between surface normal and diffuse light ray\n float directional = clamp(dot(normal / 16384.0, u_lightpos), 0.0, 1.0);\n\n // Adjust directional so that\n // the range of values for highlight/shading is narrower\n // with lower light intensity\n // and with lighter/brighter surface colors\n directional = mix((1.0 - u_lightintensity), max((1.0 - colorvalue + u_lightintensity), 1.0), directional);\n\n // Add gradient along z axis of side surfaces\n if (normal.y != 0.0) {\n directional *= clamp((t + base) * pow(height / 150.0, 0.5), mix(0.7, 0.98, 1.0 - u_lightintensity), 1.0);\n }\n\n // Assign final color based on surface + ambient light color, diffuse light directional, and light color\n // with lower bounds adjusted to hue of light\n // so that shading is tinted with the complementary (opposite) color to the light color\n v_color.r += clamp(color.r * directional * u_lightcolor.r, mix(0.0, 0.3, 1.0 - u_lightcolor.r), 1.0);\n v_color.g += clamp(color.g * directional * u_lightcolor.g, mix(0.0, 0.3, 1.0 - u_lightcolor.g), 1.0);\n v_color.b += clamp(color.b * directional * u_lightcolor.b, mix(0.0, 0.3, 1.0 - u_lightcolor.b), 1.0);\n}\n"},fillExtrusionPattern:{fragmentSource:"uniform vec2 u_pattern_tl_a;\nuniform vec2 u_pattern_br_a;\nuniform vec2 u_pattern_tl_b;\nuniform vec2 u_pattern_br_b;\nuniform vec2 u_texsize;\nuniform float u_mix;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec4 v_lighting;\n\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n\nvoid main() {\n #pragma mapbox: initialize lowp float base\n #pragma mapbox: initialize lowp float height\n\n vec2 imagecoord = mod(v_pos_a, 1.0);\n vec2 pos = mix(u_pattern_tl_a / u_texsize, u_pattern_br_a / u_texsize, imagecoord);\n vec4 color1 = texture2D(u_image, pos);\n\n vec2 imagecoord_b = mod(v_pos_b, 1.0);\n vec2 pos2 = mix(u_pattern_tl_b / u_texsize, u_pattern_br_b / u_texsize, imagecoord_b);\n vec4 color2 = texture2D(u_image, pos2);\n\n vec4 mixedColor = mix(color1, color2, u_mix);\n\n gl_FragColor = mixedColor * v_lighting;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"uniform mat4 u_matrix;\nuniform vec2 u_pattern_size_a;\nuniform vec2 u_pattern_size_b;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform float u_scale_a;\nuniform float u_scale_b;\nuniform float u_tile_units_to_pixels;\nuniform float u_height_factor;\n\nuniform vec3 u_lightcolor;\nuniform lowp vec3 u_lightpos;\nuniform lowp float u_lightintensity;\n\nattribute vec2 a_pos;\nattribute vec4 a_normal_ed;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec4 v_lighting;\nvarying float v_directional;\n\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n\nvoid main() {\n #pragma mapbox: initialize lowp float base\n #pragma mapbox: initialize lowp float height\n\n vec3 normal = a_normal_ed.xyz;\n float edgedistance = a_normal_ed.w;\n\n base = max(0.0, base);\n height = max(0.0, height);\n\n float t = mod(normal.x, 2.0);\n float z = t > 0.0 ? height : base;\n\n gl_Position = u_matrix * vec4(a_pos, z, 1);\n\n vec2 pos = normal.x == 1.0 && normal.y == 0.0 && normal.z == 16384.0\n ? a_pos // extrusion top\n : vec2(edgedistance, z * u_height_factor); // extrusion side\n\n v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, u_scale_a * u_pattern_size_a, u_tile_units_to_pixels, pos);\n v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, u_scale_b * u_pattern_size_b, u_tile_units_to_pixels, pos);\n\n v_lighting = vec4(0.0, 0.0, 0.0, 1.0);\n float directional = clamp(dot(normal / 16383.0, u_lightpos), 0.0, 1.0);\n directional = mix((1.0 - u_lightintensity), max((0.5 + u_lightintensity), 1.0), directional);\n\n if (normal.y != 0.0) {\n directional *= clamp((t + base) * pow(height / 150.0, 0.5), mix(0.7, 0.98, 1.0 - u_lightintensity), 1.0);\n }\n\n v_lighting.rgb += clamp(directional * u_lightcolor, mix(vec3(0.0), vec3(0.3), 1.0 - u_lightcolor), vec3(1.0));\n}\n"},extrusionTexture:{fragmentSource:"uniform sampler2D u_image;\nuniform float u_opacity;\nvarying vec2 v_pos;\n\nvoid main() {\n gl_FragColor = texture2D(u_image, v_pos) * u_opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(0.0);\n#endif\n}\n",vertexSource:"uniform mat4 u_matrix;\nuniform vec2 u_world;\nattribute vec2 a_pos;\nvarying vec2 v_pos;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos * u_world, 0, 1);\n\n v_pos.x = a_pos.x;\n v_pos.y = 1.0 - a_pos.y;\n}\n"},hillshadePrepare:{fragmentSource:"#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D u_image;\nvarying vec2 v_pos;\nuniform vec2 u_dimension;\nuniform float u_zoom;\nuniform float u_maxzoom;\n\nfloat getElevation(vec2 coord, float bias) {\n // Convert encoded elevation value to meters\n vec4 data = texture2D(u_image, coord) * 255.0;\n return (data.r + data.g * 256.0 + data.b * 256.0 * 256.0) / 4.0;\n}\n\nvoid main() {\n vec2 epsilon = 1.0 / u_dimension;\n\n // queried pixels:\n // +-----------+\n // | | | |\n // | a | b | c |\n // | | | |\n // +-----------+\n // | | | |\n // | d | e | f |\n // | | | |\n // +-----------+\n // | | | |\n // | g | h | i |\n // | | | |\n // +-----------+\n\n float a = getElevation(v_pos + vec2(-epsilon.x, -epsilon.y), 0.0);\n float b = getElevation(v_pos + vec2(0, -epsilon.y), 0.0);\n float c = getElevation(v_pos + vec2(epsilon.x, -epsilon.y), 0.0);\n float d = getElevation(v_pos + vec2(-epsilon.x, 0), 0.0);\n float e = getElevation(v_pos, 0.0);\n float f = getElevation(v_pos + vec2(epsilon.x, 0), 0.0);\n float g = getElevation(v_pos + vec2(-epsilon.x, epsilon.y), 0.0);\n float h = getElevation(v_pos + vec2(0, epsilon.y), 0.0);\n float i = getElevation(v_pos + vec2(epsilon.x, epsilon.y), 0.0);\n\n // here we divide the x and y slopes by 8 * pixel size\n // where pixel size (aka meters/pixel) is:\n // circumference of the world / (pixels per tile * number of tiles)\n // which is equivalent to: 8 * 40075016.6855785 / (512 * pow(2, u_zoom))\n // which can be reduced to: pow(2, 19.25619978527 - u_zoom)\n // we want to vertically exaggerate the hillshading though, because otherwise\n // it is barely noticeable at low zooms. to do this, we multiply this by some\n // scale factor pow(2, (u_zoom - u_maxzoom) * a) where a is an arbitrary value\n // Here we use a=0.3 which works out to the expression below. see \n // nickidlugash's awesome breakdown for more info\n // https://github.com/mapbox/mapbox-gl-js/pull/5286#discussion_r148419556\n float exaggeration = u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;\n\n vec2 deriv = vec2(\n (c + f + f + i) - (a + d + d + g),\n (g + h + h + i) - (a + b + b + c)\n ) / pow(2.0, (u_zoom - u_maxzoom) * exaggeration + 19.2562 - u_zoom);\n\n gl_FragColor = clamp(vec4(\n deriv.x / 2.0 + 0.5,\n deriv.y / 2.0 + 0.5,\n 1.0,\n 1.0), 0.0, 1.0);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"uniform mat4 u_matrix;\n\nattribute vec2 a_pos;\nattribute vec2 a_texture_pos;\n\nvarying vec2 v_pos;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n v_pos = (a_texture_pos / 8192.0) / 2.0 + 0.25;\n}\n"},hillshade:{fragmentSource:"uniform sampler2D u_image;\nvarying vec2 v_pos;\n\nuniform vec2 u_latrange;\nuniform vec2 u_light;\nuniform vec4 u_shadow;\nuniform vec4 u_highlight;\nuniform vec4 u_accent;\n\n#define PI 3.141592653589793\n\nvoid main() {\n vec4 pixel = texture2D(u_image, v_pos);\n\n vec2 deriv = ((pixel.rg * 2.0) - 1.0);\n\n // We divide the slope by a scale factor based on the cosin of the pixel's approximate latitude\n // to account for mercator projection distortion. see #4807 for details\n float scaleFactor = cos(radians((u_latrange[0] - u_latrange[1]) * (1.0 - v_pos.y) + u_latrange[1]));\n // We also multiply the slope by an arbitrary z-factor of 1.25\n float slope = atan(1.25 * length(deriv) / scaleFactor);\n float aspect = deriv.x != 0.0 ? atan(deriv.y, -deriv.x) : PI / 2.0 * (deriv.y > 0.0 ? 1.0 : -1.0);\n\n float intensity = u_light.x;\n // We add PI to make this property match the global light object, which adds PI/2 to the light's azimuthal\n // position property to account for 0deg corresponding to north/the top of the viewport in the style spec\n // and the original shader was written to accept (-illuminationDirection - 90) as the azimuthal.\n float azimuth = u_light.y + PI;\n\n // We scale the slope exponentially based on intensity, using a calculation similar to\n // the exponential interpolation function in the style spec:\n // https://github.com/mapbox/mapbox-gl-js/blob/master/src/style-spec/expression/definitions/interpolate.js#L217-L228\n // so that higher intensity values create more opaque hillshading.\n float base = 1.875 - intensity * 1.75;\n float maxValue = 0.5 * PI;\n float scaledSlope = intensity != 0.5 ? ((pow(base, slope) - 1.0) / (pow(base, maxValue) - 1.0)) * maxValue : slope;\n\n // The accent color is calculated with the cosine of the slope while the shade color is calculated with the sine\n // so that the accent color's rate of change eases in while the shade color's eases out.\n float accent = cos(scaledSlope);\n // We multiply both the accent and shade color by a clamped intensity value\n // so that intensities >= 0.5 do not additionally affect the color values\n // while intensity values < 0.5 make the overall color more transparent.\n vec4 accent_color = (1.0 - accent) * u_accent * clamp(intensity * 2.0, 0.0, 1.0);\n float shade = abs(mod((aspect + azimuth) / PI + 0.5, 2.0) - 1.0);\n vec4 shade_color = mix(u_shadow, u_highlight, shade) * sin(scaledSlope) * clamp(intensity * 2.0, 0.0, 1.0);\n gl_FragColor = accent_color * (1.0 - shade_color.a) + shade_color;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"uniform mat4 u_matrix;\n\nattribute vec2 a_pos;\nattribute vec2 a_texture_pos;\n\nvarying vec2 v_pos;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n v_pos = a_texture_pos / 8192.0;\n}\n"},line:{fragmentSource:"#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n\nvarying vec2 v_width2;\nvarying vec2 v_normal;\nvarying float v_gamma_scale;\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 color\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n\n // Calculate the distance of the pixel from the line in pixels.\n float dist = length(v_normal) * v_width2.s;\n\n // Calculate the antialiasing fade factor. This is either when fading in\n // the line in case of an offset line (v_width2.t) or when fading out\n // (v_width2.s)\n float blur2 = (blur + 1.0 / DEVICE_PIXEL_RATIO) * v_gamma_scale;\n float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0);\n\n gl_FragColor = color * (alpha * opacity);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"\n\n// the distance over which the line edge fades out.\n// Retina devices need a smaller distance to avoid aliasing.\n#define ANTIALIASING 1.0 / DEVICE_PIXEL_RATIO / 2.0\n\n// floor(127 / 2) == 63.0\n// the maximum allowed miter limit is 2.0 at the moment. the extrude normal is\n// stored in a byte (-128..127). we scale regular normals up to length 63, but\n// there are also \"special\" normals that have a bigger length (of up to 126 in\n// this case).\n// #define scale 63.0\n#define scale 0.015873016\n\nattribute vec4 a_pos_normal;\nattribute vec4 a_data;\n\nuniform mat4 u_matrix;\nuniform mediump float u_ratio;\nuniform vec2 u_gl_units_to_pixels;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying float v_gamma_scale;\nvarying highp float v_linesofar;\n\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 color\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump float gapwidth\n #pragma mapbox: initialize lowp float offset\n #pragma mapbox: initialize mediump float width\n\n vec2 a_extrude = a_data.xy - 128.0;\n float a_direction = mod(a_data.z, 4.0) - 1.0;\n\n v_linesofar = (floor(a_data.z / 4.0) + a_data.w * 64.0) * 2.0;\n\n vec2 pos = a_pos_normal.xy;\n\n // x is 1 if it's a round cap, 0 otherwise\n // y is 1 if the normal points up, and -1 if it points down\n mediump vec2 normal = a_pos_normal.zw;\n v_normal = normal;\n\n // these transformations used to be applied in the JS and native code bases.\n // moved them into the shader for clarity and simplicity.\n gapwidth = gapwidth / 2.0;\n float halfwidth = width / 2.0;\n offset = -1.0 * offset;\n\n float inset = gapwidth + (gapwidth > 0.0 ? ANTIALIASING : 0.0);\n float outset = gapwidth + halfwidth * (gapwidth > 0.0 ? 2.0 : 1.0) + ANTIALIASING;\n\n // Scale the extrusion vector down to a normal and then up by the line width\n // of this vertex.\n mediump vec2 dist = outset * a_extrude * scale;\n\n // Calculate the offset when drawing a line that is to the side of the actual line.\n // We do this by creating a vector that points towards the extrude, but rotate\n // it when we're drawing round end points (a_direction = -1 or 1) since their\n // extrude vector points in another direction.\n mediump float u = 0.5 * a_direction;\n mediump float t = 1.0 - abs(u);\n mediump vec2 offset2 = offset * a_extrude * scale * normal.y * mat2(t, -u, u, t);\n\n vec4 projected_extrude = u_matrix * vec4(dist / u_ratio, 0.0, 0.0);\n gl_Position = u_matrix * vec4(pos + offset2 / u_ratio, 0.0, 1.0) + projected_extrude;\n\n // calculate how much the perspective view squishes or stretches the extrude\n float extrude_length_without_perspective = length(dist);\n float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_gl_units_to_pixels);\n v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective;\n\n v_width2 = vec2(outset, inset);\n}\n"},lineGradient:{fragmentSource:"\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n\nuniform sampler2D u_image;\n\nvarying vec2 v_width2;\nvarying vec2 v_normal;\nvarying float v_gamma_scale;\nvarying highp float v_lineprogress;\n\nvoid main() {\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n\n // Calculate the distance of the pixel from the line in pixels.\n float dist = length(v_normal) * v_width2.s;\n\n // Calculate the antialiasing fade factor. This is either when fading in\n // the line in case of an offset line (v_width2.t) or when fading out\n // (v_width2.s)\n float blur2 = (blur + 1.0 / DEVICE_PIXEL_RATIO) * v_gamma_scale;\n float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0);\n\n // For gradient lines, v_lineprogress is the ratio along the entire line,\n // scaled to [0, 2^15), and the gradient ramp is stored in a texture.\n vec4 color = texture2D(u_image, vec2(v_lineprogress, 0.5));\n\n gl_FragColor = color * (alpha * opacity);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"\n// the attribute conveying progress along a line is scaled to [0, 2^15)\n#define MAX_LINE_DISTANCE 32767.0\n\n// the distance over which the line edge fades out.\n// Retina devices need a smaller distance to avoid aliasing.\n#define ANTIALIASING 1.0 / DEVICE_PIXEL_RATIO / 2.0\n\n// floor(127 / 2) == 63.0\n// the maximum allowed miter limit is 2.0 at the moment. the extrude normal is\n// stored in a byte (-128..127). we scale regular normals up to length 63, but\n// there are also \"special\" normals that have a bigger length (of up to 126 in\n// this case).\n// #define scale 63.0\n#define scale 0.015873016\n\nattribute vec4 a_pos_normal;\nattribute vec4 a_data;\n\nuniform mat4 u_matrix;\nuniform mediump float u_ratio;\nuniform vec2 u_gl_units_to_pixels;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying float v_gamma_scale;\nvarying highp float v_lineprogress;\n\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\n\nvoid main() {\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump float gapwidth\n #pragma mapbox: initialize lowp float offset\n #pragma mapbox: initialize mediump float width\n\n vec2 a_extrude = a_data.xy - 128.0;\n float a_direction = mod(a_data.z, 4.0) - 1.0;\n\n v_lineprogress = (floor(a_data.z / 4.0) + a_data.w * 64.0) * 2.0 / MAX_LINE_DISTANCE;\n\n vec2 pos = a_pos_normal.xy;\n\n // x is 1 if it's a round cap, 0 otherwise\n // y is 1 if the normal points up, and -1 if it points down\n mediump vec2 normal = a_pos_normal.zw;\n v_normal = normal;\n\n // these transformations used to be applied in the JS and native code bases.\n // moved them into the shader for clarity and simplicity.\n gapwidth = gapwidth / 2.0;\n float halfwidth = width / 2.0;\n offset = -1.0 * offset;\n\n float inset = gapwidth + (gapwidth > 0.0 ? ANTIALIASING : 0.0);\n float outset = gapwidth + halfwidth * (gapwidth > 0.0 ? 2.0 : 1.0) + ANTIALIASING;\n\n // Scale the extrusion vector down to a normal and then up by the line width\n // of this vertex.\n mediump vec2 dist = outset * a_extrude * scale;\n\n // Calculate the offset when drawing a line that is to the side of the actual line.\n // We do this by creating a vector that points towards the extrude, but rotate\n // it when we're drawing round end points (a_direction = -1 or 1) since their\n // extrude vector points in another direction.\n mediump float u = 0.5 * a_direction;\n mediump float t = 1.0 - abs(u);\n mediump vec2 offset2 = offset * a_extrude * scale * normal.y * mat2(t, -u, u, t);\n\n vec4 projected_extrude = u_matrix * vec4(dist / u_ratio, 0.0, 0.0);\n gl_Position = u_matrix * vec4(pos + offset2 / u_ratio, 0.0, 1.0) + projected_extrude;\n\n // calculate how much the perspective view squishes or stretches the extrude\n float extrude_length_without_perspective = length(dist);\n float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_gl_units_to_pixels);\n v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective;\n\n v_width2 = vec2(outset, inset);\n}\n"},linePattern:{fragmentSource:"uniform vec2 u_pattern_size_a;\nuniform vec2 u_pattern_size_b;\nuniform vec2 u_pattern_tl_a;\nuniform vec2 u_pattern_br_a;\nuniform vec2 u_pattern_tl_b;\nuniform vec2 u_pattern_br_b;\nuniform vec2 u_texsize;\nuniform float u_fade;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying float v_linesofar;\nvarying float v_gamma_scale;\n\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n\n // Calculate the distance of the pixel from the line in pixels.\n float dist = length(v_normal) * v_width2.s;\n\n // Calculate the antialiasing fade factor. This is either when fading in\n // the line in case of an offset line (v_width2.t) or when fading out\n // (v_width2.s)\n float blur2 = (blur + 1.0 / DEVICE_PIXEL_RATIO) * v_gamma_scale;\n float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0);\n\n float x_a = mod(v_linesofar / u_pattern_size_a.x, 1.0);\n float x_b = mod(v_linesofar / u_pattern_size_b.x, 1.0);\n\n // v_normal.y is 0 at the midpoint of the line, -1 at the lower edge, 1 at the upper edge\n // we clamp the line width outset to be between 0 and half the pattern height plus padding (2.0)\n // to ensure we don't sample outside the designated symbol on the sprite sheet.\n // 0.5 is added to shift the component to be bounded between 0 and 1 for interpolation of\n // the texture coordinate\n float y_a = 0.5 + (v_normal.y * clamp(v_width2.s, 0.0, (u_pattern_size_a.y + 2.0) / 2.0) / u_pattern_size_a.y);\n float y_b = 0.5 + (v_normal.y * clamp(v_width2.s, 0.0, (u_pattern_size_b.y + 2.0) / 2.0) / u_pattern_size_b.y);\n vec2 pos_a = mix(u_pattern_tl_a / u_texsize, u_pattern_br_a / u_texsize, vec2(x_a, y_a));\n vec2 pos_b = mix(u_pattern_tl_b / u_texsize, u_pattern_br_b / u_texsize, vec2(x_b, y_b));\n\n vec4 color = mix(texture2D(u_image, pos_a), texture2D(u_image, pos_b), u_fade);\n\n gl_FragColor = color * alpha * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"// floor(127 / 2) == 63.0\n// the maximum allowed miter limit is 2.0 at the moment. the extrude normal is\n// stored in a byte (-128..127). we scale regular normals up to length 63, but\n// there are also \"special\" normals that have a bigger length (of up to 126 in\n// this case).\n// #define scale 63.0\n#define scale 0.015873016\n\n// We scale the distance before adding it to the buffers so that we can store\n// long distances for long segments. Use this value to unscale the distance.\n#define LINE_DISTANCE_SCALE 2.0\n\n// the distance over which the line edge fades out.\n// Retina devices need a smaller distance to avoid aliasing.\n#define ANTIALIASING 1.0 / DEVICE_PIXEL_RATIO / 2.0\n\nattribute vec4 a_pos_normal;\nattribute vec4 a_data;\n\nuniform mat4 u_matrix;\nuniform mediump float u_ratio;\nuniform vec2 u_gl_units_to_pixels;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying float v_linesofar;\nvarying float v_gamma_scale;\n\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define mediump float width\n\nvoid main() {\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize lowp float offset\n #pragma mapbox: initialize mediump float gapwidth\n #pragma mapbox: initialize mediump float width\n\n vec2 a_extrude = a_data.xy - 128.0;\n float a_direction = mod(a_data.z, 4.0) - 1.0;\n float a_linesofar = (floor(a_data.z / 4.0) + a_data.w * 64.0) * LINE_DISTANCE_SCALE;\n\n vec2 pos = a_pos_normal.xy;\n\n // x is 1 if it's a round cap, 0 otherwise\n // y is 1 if the normal points up, and -1 if it points down\n mediump vec2 normal = a_pos_normal.zw;\n v_normal = normal;\n\n // these transformations used to be applied in the JS and native code bases.\n // moved them into the shader for clarity and simplicity.\n gapwidth = gapwidth / 2.0;\n float halfwidth = width / 2.0;\n offset = -1.0 * offset;\n\n float inset = gapwidth + (gapwidth > 0.0 ? ANTIALIASING : 0.0);\n float outset = gapwidth + halfwidth * (gapwidth > 0.0 ? 2.0 : 1.0) + ANTIALIASING;\n\n // Scale the extrusion vector down to a normal and then up by the line width\n // of this vertex.\n mediump vec2 dist = outset * a_extrude * scale;\n\n // Calculate the offset when drawing a line that is to the side of the actual line.\n // We do this by creating a vector that points towards the extrude, but rotate\n // it when we're drawing round end points (a_direction = -1 or 1) since their\n // extrude vector points in another direction.\n mediump float u = 0.5 * a_direction;\n mediump float t = 1.0 - abs(u);\n mediump vec2 offset2 = offset * a_extrude * scale * normal.y * mat2(t, -u, u, t);\n\n vec4 projected_extrude = u_matrix * vec4(dist / u_ratio, 0.0, 0.0);\n gl_Position = u_matrix * vec4(pos + offset2 / u_ratio, 0.0, 1.0) + projected_extrude;\n\n // calculate how much the perspective view squishes or stretches the extrude\n float extrude_length_without_perspective = length(dist);\n float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_gl_units_to_pixels);\n v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective;\n\n v_linesofar = a_linesofar;\n v_width2 = vec2(outset, inset);\n}\n"},lineSDF:{fragmentSource:"\nuniform sampler2D u_image;\nuniform float u_sdfgamma;\nuniform float u_mix;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying vec2 v_tex_a;\nvarying vec2 v_tex_b;\nvarying float v_gamma_scale;\n\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 color\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump float width\n #pragma mapbox: initialize lowp float floorwidth\n\n // Calculate the distance of the pixel from the line in pixels.\n float dist = length(v_normal) * v_width2.s;\n\n // Calculate the antialiasing fade factor. This is either when fading in\n // the line in case of an offset line (v_width2.t) or when fading out\n // (v_width2.s)\n float blur2 = (blur + 1.0 / DEVICE_PIXEL_RATIO) * v_gamma_scale;\n float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0);\n\n float sdfdist_a = texture2D(u_image, v_tex_a).a;\n float sdfdist_b = texture2D(u_image, v_tex_b).a;\n float sdfdist = mix(sdfdist_a, sdfdist_b, u_mix);\n alpha *= smoothstep(0.5 - u_sdfgamma / floorwidth, 0.5 + u_sdfgamma / floorwidth, sdfdist);\n\n gl_FragColor = color * (alpha * opacity);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"// floor(127 / 2) == 63.0\n// the maximum allowed miter limit is 2.0 at the moment. the extrude normal is\n// stored in a byte (-128..127). we scale regular normals up to length 63, but\n// there are also \"special\" normals that have a bigger length (of up to 126 in\n// this case).\n// #define scale 63.0\n#define scale 0.015873016\n\n// We scale the distance before adding it to the buffers so that we can store\n// long distances for long segments. Use this value to unscale the distance.\n#define LINE_DISTANCE_SCALE 2.0\n\n// the distance over which the line edge fades out.\n// Retina devices need a smaller distance to avoid aliasing.\n#define ANTIALIASING 1.0 / DEVICE_PIXEL_RATIO / 2.0\n\nattribute vec4 a_pos_normal;\nattribute vec4 a_data;\n\nuniform mat4 u_matrix;\nuniform mediump float u_ratio;\nuniform vec2 u_patternscale_a;\nuniform float u_tex_y_a;\nuniform vec2 u_patternscale_b;\nuniform float u_tex_y_b;\nuniform vec2 u_gl_units_to_pixels;\n\nvarying vec2 v_normal;\nvarying vec2 v_width2;\nvarying vec2 v_tex_a;\nvarying vec2 v_tex_b;\nvarying float v_gamma_scale;\n\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 color\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize mediump float gapwidth\n #pragma mapbox: initialize lowp float offset\n #pragma mapbox: initialize mediump float width\n #pragma mapbox: initialize lowp float floorwidth\n\n vec2 a_extrude = a_data.xy - 128.0;\n float a_direction = mod(a_data.z, 4.0) - 1.0;\n float a_linesofar = (floor(a_data.z / 4.0) + a_data.w * 64.0) * LINE_DISTANCE_SCALE;\n\n vec2 pos = a_pos_normal.xy;\n\n // x is 1 if it's a round cap, 0 otherwise\n // y is 1 if the normal points up, and -1 if it points down\n mediump vec2 normal = a_pos_normal.zw;\n v_normal = normal;\n\n // these transformations used to be applied in the JS and native code bases.\n // moved them into the shader for clarity and simplicity.\n gapwidth = gapwidth / 2.0;\n float halfwidth = width / 2.0;\n offset = -1.0 * offset;\n\n float inset = gapwidth + (gapwidth > 0.0 ? ANTIALIASING : 0.0);\n float outset = gapwidth + halfwidth * (gapwidth > 0.0 ? 2.0 : 1.0) + ANTIALIASING;\n\n // Scale the extrusion vector down to a normal and then up by the line width\n // of this vertex.\n mediump vec2 dist =outset * a_extrude * scale;\n\n // Calculate the offset when drawing a line that is to the side of the actual line.\n // We do this by creating a vector that points towards the extrude, but rotate\n // it when we're drawing round end points (a_direction = -1 or 1) since their\n // extrude vector points in another direction.\n mediump float u = 0.5 * a_direction;\n mediump float t = 1.0 - abs(u);\n mediump vec2 offset2 = offset * a_extrude * scale * normal.y * mat2(t, -u, u, t);\n\n vec4 projected_extrude = u_matrix * vec4(dist / u_ratio, 0.0, 0.0);\n gl_Position = u_matrix * vec4(pos + offset2 / u_ratio, 0.0, 1.0) + projected_extrude;\n\n // calculate how much the perspective view squishes or stretches the extrude\n float extrude_length_without_perspective = length(dist);\n float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_gl_units_to_pixels);\n v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective;\n\n v_tex_a = vec2(a_linesofar * u_patternscale_a.x / floorwidth, normal.y * u_patternscale_a.y + u_tex_y_a);\n v_tex_b = vec2(a_linesofar * u_patternscale_b.x / floorwidth, normal.y * u_patternscale_b.y + u_tex_y_b);\n\n v_width2 = vec2(outset, inset);\n}\n"},raster:{fragmentSource:"uniform float u_fade_t;\nuniform float u_opacity;\nuniform sampler2D u_image0;\nuniform sampler2D u_image1;\nvarying vec2 v_pos0;\nvarying vec2 v_pos1;\n\nuniform float u_brightness_low;\nuniform float u_brightness_high;\n\nuniform float u_saturation_factor;\nuniform float u_contrast_factor;\nuniform vec3 u_spin_weights;\n\nvoid main() {\n\n // read and cross-fade colors from the main and parent tiles\n vec4 color0 = texture2D(u_image0, v_pos0);\n vec4 color1 = texture2D(u_image1, v_pos1);\n if (color0.a > 0.0) {\n color0.rgb = color0.rgb / color0.a;\n }\n if (color1.a > 0.0) {\n color1.rgb = color1.rgb / color1.a;\n }\n vec4 color = mix(color0, color1, u_fade_t);\n color.a *= u_opacity;\n vec3 rgb = color.rgb;\n\n // spin\n rgb = vec3(\n dot(rgb, u_spin_weights.xyz),\n dot(rgb, u_spin_weights.zxy),\n dot(rgb, u_spin_weights.yzx));\n\n // saturation\n float average = (color.r + color.g + color.b) / 3.0;\n rgb += (average - rgb) * u_saturation_factor;\n\n // contrast\n rgb = (rgb - 0.5) * u_contrast_factor + 0.5;\n\n // brightness\n vec3 u_high_vec = vec3(u_brightness_low, u_brightness_low, u_brightness_low);\n vec3 u_low_vec = vec3(u_brightness_high, u_brightness_high, u_brightness_high);\n\n gl_FragColor = vec4(mix(u_high_vec, u_low_vec, rgb) * color.a, color.a);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"uniform mat4 u_matrix;\nuniform vec2 u_tl_parent;\nuniform float u_scale_parent;\nuniform float u_buffer_scale;\n\nattribute vec2 a_pos;\nattribute vec2 a_texture_pos;\n\nvarying vec2 v_pos0;\nvarying vec2 v_pos1;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n // We are using Int16 for texture position coordinates to give us enough precision for\n // fractional coordinates. We use 8192 to scale the texture coordinates in the buffer\n // as an arbitrarily high number to preserve adequate precision when rendering.\n // This is also the same value as the EXTENT we are using for our tile buffer pos coordinates,\n // so math for modifying either is consistent.\n v_pos0 = (((a_texture_pos / 8192.0) - 0.5) / u_buffer_scale ) + 0.5;\n v_pos1 = (v_pos0 * u_scale_parent) + u_tl_parent;\n}\n"},symbolIcon:{fragmentSource:"uniform sampler2D u_texture;\n\n#pragma mapbox: define lowp float opacity\n\nvarying vec2 v_tex;\nvarying float v_fade_opacity;\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n\n lowp float alpha = opacity * v_fade_opacity;\n gl_FragColor = texture2D(u_texture, v_tex) * alpha;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"const float PI = 3.141592653589793;\n\nattribute vec4 a_pos_offset;\nattribute vec4 a_data;\nattribute vec3 a_projected_pos;\nattribute float a_fade_opacity;\n\nuniform bool u_is_size_zoom_constant;\nuniform bool u_is_size_feature_constant;\nuniform highp float u_size_t; // used to interpolate between zoom stops when size is a composite function\nuniform highp float u_size; // used when size is both zoom and feature constant\nuniform highp float u_camera_to_center_distance;\nuniform highp float u_pitch;\nuniform bool u_rotate_symbol;\nuniform highp float u_aspect_ratio;\nuniform float u_fade_change;\n\n#pragma mapbox: define lowp float opacity\n\nuniform mat4 u_matrix;\nuniform mat4 u_label_plane_matrix;\nuniform mat4 u_gl_coord_matrix;\n\nuniform bool u_is_text;\nuniform bool u_pitch_with_map;\n\nuniform vec2 u_texsize;\n\nvarying vec2 v_tex;\nvarying float v_fade_opacity;\n\nvoid main() {\n #pragma mapbox: initialize lowp float opacity\n\n vec2 a_pos = a_pos_offset.xy;\n vec2 a_offset = a_pos_offset.zw;\n\n vec2 a_tex = a_data.xy;\n vec2 a_size = a_data.zw;\n\n highp float segment_angle = -a_projected_pos[2];\n\n float size;\n if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {\n size = mix(a_size[0], a_size[1], u_size_t) / 10.0;\n } else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {\n size = a_size[0] / 10.0;\n } else if (!u_is_size_zoom_constant && u_is_size_feature_constant) {\n size = u_size;\n } else {\n size = u_size;\n }\n\n vec4 projectedPoint = u_matrix * vec4(a_pos, 0, 1);\n highp float camera_to_anchor_distance = projectedPoint.w;\n // See comments in symbol_sdf.vertex\n highp float distance_ratio = u_pitch_with_map ?\n camera_to_anchor_distance / u_camera_to_center_distance :\n u_camera_to_center_distance / camera_to_anchor_distance;\n highp float perspective_ratio = clamp(\n 0.5 + 0.5 * distance_ratio,\n 0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles\n 4.0);\n\n size *= perspective_ratio;\n\n float fontScale = u_is_text ? size / 24.0 : size;\n\n highp float symbol_rotation = 0.0;\n if (u_rotate_symbol) {\n // See comments in symbol_sdf.vertex\n vec4 offsetProjectedPoint = u_matrix * vec4(a_pos + vec2(1, 0), 0, 1);\n\n vec2 a = projectedPoint.xy / projectedPoint.w;\n vec2 b = offsetProjectedPoint.xy / offsetProjectedPoint.w;\n\n symbol_rotation = atan((b.y - a.y) / u_aspect_ratio, b.x - a.x);\n }\n\n highp float angle_sin = sin(segment_angle + symbol_rotation);\n highp float angle_cos = cos(segment_angle + symbol_rotation);\n mat2 rotation_matrix = mat2(angle_cos, -1.0 * angle_sin, angle_sin, angle_cos);\n\n vec4 projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy, 0.0, 1.0);\n gl_Position = u_gl_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale), 0.0, 1.0);\n\n v_tex = a_tex / u_texsize;\n vec2 fade_opacity = unpack_opacity(a_fade_opacity);\n float fade_change = fade_opacity[1] > 0.5 ? u_fade_change : -u_fade_change;\n v_fade_opacity = max(0.0, min(1.0, fade_opacity[0] + fade_change));\n}\n"},symbolSDF:{fragmentSource:"#define SDF_PX 8.0\n#define EDGE_GAMMA 0.105/DEVICE_PIXEL_RATIO\n\nuniform bool u_is_halo;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\n\nuniform sampler2D u_texture;\nuniform highp float u_gamma_scale;\nuniform bool u_is_text;\n\nvarying vec2 v_data0;\nvarying vec3 v_data1;\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 fill_color\n #pragma mapbox: initialize highp vec4 halo_color\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize lowp float halo_width\n #pragma mapbox: initialize lowp float halo_blur\n\n vec2 tex = v_data0.xy;\n float gamma_scale = v_data1.x;\n float size = v_data1.y;\n float fade_opacity = v_data1[2];\n\n float fontScale = u_is_text ? size / 24.0 : size;\n\n lowp vec4 color = fill_color;\n highp float gamma = EDGE_GAMMA / (fontScale * u_gamma_scale);\n lowp float buff = (256.0 - 64.0) / 256.0;\n if (u_is_halo) {\n color = halo_color;\n gamma = (halo_blur * 1.19 / SDF_PX + EDGE_GAMMA) / (fontScale * u_gamma_scale);\n buff = (6.0 - halo_width / fontScale) / SDF_PX;\n }\n\n lowp float dist = texture2D(u_texture, tex).a;\n highp float gamma_scaled = gamma * gamma_scale;\n highp float alpha = smoothstep(buff - gamma_scaled, buff + gamma_scaled, dist);\n\n gl_FragColor = color * (alpha * opacity * fade_opacity);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"const float PI = 3.141592653589793;\n\nattribute vec4 a_pos_offset;\nattribute vec4 a_data;\nattribute vec3 a_projected_pos;\nattribute float a_fade_opacity;\n\n// contents of a_size vary based on the type of property value\n// used for {text,icon}-size.\n// For constants, a_size is disabled.\n// For source functions, we bind only one value per vertex: the value of {text,icon}-size evaluated for the current feature.\n// For composite functions:\n// [ text-size(lowerZoomStop, feature),\n// text-size(upperZoomStop, feature) ]\nuniform bool u_is_size_zoom_constant;\nuniform bool u_is_size_feature_constant;\nuniform highp float u_size_t; // used to interpolate between zoom stops when size is a composite function\nuniform highp float u_size; // used when size is both zoom and feature constant\n\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\n\nuniform mat4 u_matrix;\nuniform mat4 u_label_plane_matrix;\nuniform mat4 u_gl_coord_matrix;\n\nuniform bool u_is_text;\nuniform bool u_pitch_with_map;\nuniform highp float u_pitch;\nuniform bool u_rotate_symbol;\nuniform highp float u_aspect_ratio;\nuniform highp float u_camera_to_center_distance;\nuniform float u_fade_change;\n\nuniform vec2 u_texsize;\n\nvarying vec2 v_data0;\nvarying vec3 v_data1;\n\nvoid main() {\n #pragma mapbox: initialize highp vec4 fill_color\n #pragma mapbox: initialize highp vec4 halo_color\n #pragma mapbox: initialize lowp float opacity\n #pragma mapbox: initialize lowp float halo_width\n #pragma mapbox: initialize lowp float halo_blur\n\n vec2 a_pos = a_pos_offset.xy;\n vec2 a_offset = a_pos_offset.zw;\n\n vec2 a_tex = a_data.xy;\n vec2 a_size = a_data.zw;\n\n highp float segment_angle = -a_projected_pos[2];\n float size;\n\n if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {\n size = mix(a_size[0], a_size[1], u_size_t) / 10.0;\n } else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {\n size = a_size[0] / 10.0;\n } else if (!u_is_size_zoom_constant && u_is_size_feature_constant) {\n size = u_size;\n } else {\n size = u_size;\n }\n\n vec4 projectedPoint = u_matrix * vec4(a_pos, 0, 1);\n highp float camera_to_anchor_distance = projectedPoint.w;\n // If the label is pitched with the map, layout is done in pitched space,\n // which makes labels in the distance smaller relative to viewport space.\n // We counteract part of that effect by multiplying by the perspective ratio.\n // If the label isn't pitched with the map, we do layout in viewport space,\n // which makes labels in the distance larger relative to the features around\n // them. We counteract part of that effect by dividing by the perspective ratio.\n highp float distance_ratio = u_pitch_with_map ?\n camera_to_anchor_distance / u_camera_to_center_distance :\n u_camera_to_center_distance / camera_to_anchor_distance;\n highp float perspective_ratio = clamp(\n 0.5 + 0.5 * distance_ratio,\n 0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles\n 4.0);\n\n size *= perspective_ratio;\n\n float fontScale = u_is_text ? size / 24.0 : size;\n\n highp float symbol_rotation = 0.0;\n if (u_rotate_symbol) {\n // Point labels with 'rotation-alignment: map' are horizontal with respect to tile units\n // To figure out that angle in projected space, we draw a short horizontal line in tile\n // space, project it, and measure its angle in projected space.\n vec4 offsetProjectedPoint = u_matrix * vec4(a_pos + vec2(1, 0), 0, 1);\n\n vec2 a = projectedPoint.xy / projectedPoint.w;\n vec2 b = offsetProjectedPoint.xy / offsetProjectedPoint.w;\n\n symbol_rotation = atan((b.y - a.y) / u_aspect_ratio, b.x - a.x);\n }\n\n highp float angle_sin = sin(segment_angle + symbol_rotation);\n highp float angle_cos = cos(segment_angle + symbol_rotation);\n mat2 rotation_matrix = mat2(angle_cos, -1.0 * angle_sin, angle_sin, angle_cos);\n\n vec4 projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy, 0.0, 1.0);\n gl_Position = u_gl_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale), 0.0, 1.0);\n float gamma_scale = gl_Position.w;\n\n vec2 tex = a_tex / u_texsize;\n vec2 fade_opacity = unpack_opacity(a_fade_opacity);\n float fade_change = fade_opacity[1] > 0.5 ? u_fade_change : -u_fade_change;\n float interpolated_fade_opacity = max(0.0, min(1.0, fade_opacity[0] + fade_change));\n\n v_data0 = vec2(tex.x, tex.y);\n v_data1 = vec3(gamma_scale, size, interpolated_fade_opacity);\n}\n"}},tr=/#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g,er=function(t){var e=Qe[t],r={};e.fragmentSource=e.fragmentSource.replace(tr,function(t,e,n,i,a){return r[a]=!0,"define"===e?"\n#ifndef HAS_UNIFORM_u_"+a+"\nvarying "+n+" "+i+" "+a+";\n#else\nuniform "+n+" "+i+" u_"+a+";\n#endif\n":"\n#ifdef HAS_UNIFORM_u_"+a+"\n "+n+" "+i+" "+a+" = u_"+a+";\n#endif\n"}),e.vertexSource=e.vertexSource.replace(tr,function(t,e,n,i,a){var o="float"===i?"vec2":"vec4";return r[a]?"define"===e?"\n#ifndef HAS_UNIFORM_u_"+a+"\nuniform lowp float a_"+a+"_t;\nattribute "+n+" "+o+" a_"+a+";\nvarying "+n+" "+i+" "+a+";\n#else\nuniform "+n+" "+i+" u_"+a+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+a+"\n "+a+" = unpack_mix_"+o+"(a_"+a+", a_"+a+"_t);\n#else\n "+n+" "+i+" "+a+" = u_"+a+";\n#endif\n":"define"===e?"\n#ifndef HAS_UNIFORM_u_"+a+"\nuniform lowp float a_"+a+"_t;\nattribute "+n+" "+o+" a_"+a+";\n#else\nuniform "+n+" "+i+" u_"+a+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+a+"\n "+n+" "+i+" "+a+" = unpack_mix_"+o+"(a_"+a+", a_"+a+"_t);\n#else\n "+n+" "+i+" "+a+" = u_"+a+";\n#endif\n"})};for(var rr in Qe)er(rr);var nr=Qe,ir=function(t,e,r,n){var i=t.gl;this.program=i.createProgram();var o=r.defines().concat("#define DEVICE_PIXEL_RATIO "+a.devicePixelRatio.toFixed(1));n&&o.push("#define OVERDRAW_INSPECTOR;");var s=o.concat(nr.prelude.fragmentSource,e.fragmentSource).join("\n"),l=o.concat(nr.prelude.vertexSource,e.vertexSource).join("\n"),u=i.createShader(i.FRAGMENT_SHADER);i.shaderSource(u,s),i.compileShader(u),i.attachShader(this.program,u);var c=i.createShader(i.VERTEX_SHADER);i.shaderSource(c,l),i.compileShader(c),i.attachShader(this.program,c);for(var f=r.layoutAttributes||[],h=0;h>16,s>>16),n.uniform2f(r.uniforms.u_pixel_coord_lower,65535&o,65535&s)};function vr(t,e,r,n,i){if(!dr(r.paint.get("fill-pattern"),t))for(var a=!0,o=0,s=n;o0){var l=a.now(),u=(l-e.timeAdded)/s,c=r?(l-r.timeAdded)/s:-1,f=n.getSource(),h=o.coveringZoomLevel({tileSize:f.tileSize,roundZoom:f.roundZoom}),p=!r||Math.abs(r.tileID.overscaledZ-h)>Math.abs(e.tileID.overscaledZ-h),d=p&&e.refreshedUponExpiration?1:t.clamp(p?u:1-c,0,1);return e.refreshedUponExpiration&&u>=1&&(e.refreshedUponExpiration=!1),r?{opacity:1,mix:1-d}:{opacity:d,mix:0}}return{opacity:1,mix:0}}function Sr(e,r,n){var i=e.context,o=i.gl;i.lineWidth.set(1*a.devicePixelRatio);var s=n.posMatrix,l=e.useProgram("debug");i.setDepthMode(qt.disabled),i.setStencilMode(Ht.disabled),i.setColorMode(e.colorModeForRenderPass()),o.uniformMatrix4fv(l.uniforms.u_matrix,!1,s),o.uniform4f(l.uniforms.u_color,1,0,0,1),e.debugVAO.bind(i,l,e.debugBuffer,[]),o.drawArrays(o.LINE_STRIP,0,e.debugBuffer.length);for(var u=function(t,e,r,n){n=n||1;var i,a,o,s,l,u,c,f,h=[];for(i=0,a=t.length;i":[24,[4,18,20,9,4,0]],"?":[18,[3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,-1,-1,9,2,8,1,9,0,10,1,9,2]],"@":[27,[18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,-1,-1,12,16,10,14,9,11,9,8,10,6,11,5,-1,-1,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,-1,-1,19,16,18,8,18,6,19,5]],A:[18,[9,21,1,0,-1,-1,9,21,17,0,-1,-1,4,7,14,7]],B:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,-1,-1,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0]],C:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5]],D:[21,[4,21,4,0,-1,-1,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0]],E:[19,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11,-1,-1,4,0,17,0]],F:[18,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11]],G:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,-1,-1,13,8,18,8]],H:[22,[4,21,4,0,-1,-1,18,21,18,0,-1,-1,4,11,18,11]],I:[8,[4,21,4,0]],J:[16,[12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7]],K:[21,[4,21,4,0,-1,-1,18,21,4,7,-1,-1,9,12,18,0]],L:[17,[4,21,4,0,-1,-1,4,0,16,0]],M:[24,[4,21,4,0,-1,-1,4,21,12,0,-1,-1,20,21,12,0,-1,-1,20,21,20,0]],N:[22,[4,21,4,0,-1,-1,4,21,18,0,-1,-1,18,21,18,0]],O:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21]],P:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10]],Q:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,-1,-1,12,4,18,-2]],R:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,-1,-1,11,11,18,0]],S:[20,[17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],T:[16,[8,21,8,0,-1,-1,1,21,15,21]],U:[22,[4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21]],V:[18,[1,21,9,0,-1,-1,17,21,9,0]],W:[24,[2,21,7,0,-1,-1,12,21,7,0,-1,-1,12,21,17,0,-1,-1,22,21,17,0]],X:[20,[3,21,17,0,-1,-1,17,21,3,0]],Y:[18,[1,21,9,11,9,0,-1,-1,17,21,9,11]],Z:[20,[17,21,3,0,-1,-1,3,21,17,21,-1,-1,3,0,17,0]],"[":[14,[4,25,4,-7,-1,-1,5,25,5,-7,-1,-1,4,25,11,25,-1,-1,4,-7,11,-7]],"\\":[14,[0,21,14,-3]],"]":[14,[9,25,9,-7,-1,-1,10,25,10,-7,-1,-1,3,25,10,25,-1,-1,3,-7,10,-7]],"^":[16,[6,15,8,18,10,15,-1,-1,3,12,8,17,13,12,-1,-1,8,17,8,0]],_:[16,[0,-2,16,-2]],"`":[10,[6,21,5,20,4,18,4,16,5,15,6,16,5,17]],a:[19,[15,14,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],b:[19,[4,21,4,0,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],c:[18,[15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],d:[19,[15,21,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],e:[18,[3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],f:[12,[10,21,8,21,6,20,5,17,5,0,-1,-1,2,14,9,14]],g:[19,[15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],h:[19,[4,21,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],i:[8,[3,21,4,20,5,21,4,22,3,21,-1,-1,4,14,4,0]],j:[10,[5,21,6,20,7,21,6,22,5,21,-1,-1,6,14,6,-3,5,-6,3,-7,1,-7]],k:[17,[4,21,4,0,-1,-1,14,14,4,4,-1,-1,8,8,15,0]],l:[8,[4,21,4,0]],m:[30,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0,-1,-1,15,10,18,13,20,14,23,14,25,13,26,10,26,0]],n:[19,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],o:[19,[8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14]],p:[19,[4,14,4,-7,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],q:[19,[15,14,15,-7,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],r:[13,[4,14,4,0,-1,-1,4,8,5,11,7,13,9,14,12,14]],s:[17,[14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3]],t:[12,[5,21,5,4,6,1,8,0,10,0,-1,-1,2,14,9,14]],u:[19,[4,14,4,4,5,1,7,0,10,0,12,1,15,4,-1,-1,15,14,15,0]],v:[16,[2,14,8,0,-1,-1,14,14,8,0]],w:[22,[3,14,7,0,-1,-1,11,14,7,0,-1,-1,11,14,15,0,-1,-1,19,14,15,0]],x:[17,[3,14,14,0,-1,-1,14,14,3,0]],y:[16,[2,14,8,0,-1,-1,14,14,8,0,6,-4,4,-6,2,-7,1,-7]],z:[17,[14,14,3,0,-1,-1,3,14,14,14,-1,-1,3,0,14,0]],"{":[14,[9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,-1,-1,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,-1,-1,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7]],"|":[8,[4,25,4,-7]],"}":[14,[5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,-1,-1,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,-1,-1,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7]],"~":[24,[3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,-1,-1,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]]},Lr={symbol:function(t,e,r,n){if("translucent"===t.renderPass){var i=t.context;i.setStencilMode(Ht.disabled),i.setColorMode(t.colorModeForRenderPass()),0!==r.paint.get("icon-opacity").constantOr(1)&&ur(t,e,r,n,!1,r.paint.get("icon-translate"),r.paint.get("icon-translate-anchor"),r.layout.get("icon-rotation-alignment"),r.layout.get("icon-pitch-alignment"),r.layout.get("icon-keep-upright")),0!==r.paint.get("text-opacity").constantOr(1)&&ur(t,e,r,n,!0,r.paint.get("text-translate"),r.paint.get("text-translate-anchor"),r.layout.get("text-rotation-alignment"),r.layout.get("text-pitch-alignment"),r.layout.get("text-keep-upright")),e.map.showCollisionBoxes&&function(t,e,r,n){or(t,e,r,n,!1),or(t,e,r,n,!0)}(t,e,r,n)}},circle:function(t,e,r,n){if("translucent"===t.renderPass){var i=r.paint.get("circle-opacity"),a=r.paint.get("circle-stroke-width"),o=r.paint.get("circle-stroke-opacity");if(0!==i.constantOr(1)||0!==a.constantOr(1)&&0!==o.constantOr(1)){var s=t.context,l=s.gl;s.setDepthMode(t.depthModeForSublayer(0,qt.ReadOnly)),s.setStencilMode(Ht.disabled),s.setColorMode(t.colorModeForRenderPass());for(var u=!0,c=0;c0?1-1/(1.001-i):-i),s.uniform1f(u.uniforms.u_contrast_factor,(a=r.paint.get("raster-contrast"))>0?1/(1-a):1+a),s.uniform3fv(u.uniforms.u_spin_weights,function(t){t*=Math.PI/180;var e=Math.sin(t),r=Math.cos(t);return[(2*r+1)/3,(-Math.sqrt(3)*e-r+1)/3,(Math.sqrt(3)*e-r+1)/3]}(r.paint.get("raster-hue-rotate"))),s.uniform1f(u.uniforms.u_buffer_scale,1),s.uniform1i(u.uniforms.u_image0,0),s.uniform1i(u.uniforms.u_image1,1);for(var c=n.length&&n[0].overscaledZ,f=0,h=n;fe.row){var r=t;t=e,e=r}return{x0:t.column,y0:t.row,x1:e.column,y1:e.row,dx:e.column-t.column,dy:e.row-t.row}}function Dr(t,e,r,n,i){var a=Math.max(r,Math.floor(e.y0)),o=Math.min(n,Math.ceil(e.y1));if(t.x0===e.x0&&t.y0===e.y0?t.x0+e.dy/t.dy*t.dx0,f=e.dx<0,h=a;hl.dy&&(o=s,s=l,l=o),s.dy>u.dy&&(o=s,s=u,u=o),l.dy>u.dy&&(o=l,l=u,u=o),s.dy&&Dr(u,s,n,i,a),l.dy&&Dr(u,l,n,i,a)}Or.prototype.resize=function(t,e){var r=this.context.gl;if(this.width=t*a.devicePixelRatio,this.height=e*a.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var n=0,i=this.style._order;n=0;this.currentLayer--){var v=n.style._layers[s[n.currentLayer]];v.source!==(m&&m.id)&&(g=[],(m=n.style.sourceCaches[v.source])&&(n.clearStencil(),g=m.getVisibleCoordinates(),m.getSource().isTileClipped&&n._renderTileClippingMasks(g))),n.renderLayer(n,m,v,g)}this.renderPass="translucent";var y,x=[];for(this.currentLayer=0,this.currentLayer;this.currentLayer0?e.pop():null},Or.prototype._createProgramCached=function(t,e){this.cache=this.cache||{};var r=""+t+(e.cacheKey||"")+(this._showOverdrawInspector?"/overdraw":"");return this.cache[r]||(this.cache[r]=new ir(this.context,nr[t],e,this._showOverdrawInspector)),this.cache[r]},Or.prototype.useProgram=function(t,e){var r=this._createProgramCached(t,e||this.emptyProgramConfiguration);return this.context.program.set(r.program),r};var Ir=t.default$20.vec4,Nr=t.default$20.mat4,Rr=t.default$20.mat2,Fr=function(t,e,r){this.tileSize=512,this._renderWorldCopies=void 0===r||r,this._minZoom=t||0,this._maxZoom=e||22,this.latRange=[-85.05113,85.05113],this.width=0,this.height=0,this._center=new G(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._posMatrixCache={},this._alignedPosMatrixCache={}},Br={minZoom:{configurable:!0},maxZoom:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerPoint:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},unmodified:{configurable:!0},x:{configurable:!0},y:{configurable:!0},point:{configurable:!0}};Fr.prototype.clone=function(){var t=new Fr(this._minZoom,this._maxZoom,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._calcMatrices(),t},Br.minZoom.get=function(){return this._minZoom},Br.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},Br.maxZoom.get=function(){return this._maxZoom},Br.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},Br.renderWorldCopies.get=function(){return this._renderWorldCopies},Br.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t},Br.worldSize.get=function(){return this.tileSize*this.scale},Br.centerPoint.get=function(){return this.size._div(2)},Br.size.get=function(){return new t.default$1(this.width,this.height)},Br.bearing.get=function(){return-this.angle/Math.PI*180},Br.bearing.set=function(e){var r=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==r&&(this._unmodified=!1,this.angle=r,this._calcMatrices(),this.rotationMatrix=Rr.create(),Rr.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},Br.pitch.get=function(){return this._pitch/Math.PI*180},Br.pitch.set=function(e){var r=t.clamp(e,0,60)/180*Math.PI;this._pitch!==r&&(this._unmodified=!1,this._pitch=r,this._calcMatrices())},Br.fov.get=function(){return this._fov/Math.PI*180},Br.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices())},Br.zoom.get=function(){return this._zoom},Br.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices())},Br.center.get=function(){return this._center},Br.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices())},Fr.prototype.coveringZoomLevel=function(t){return(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize))},Fr.prototype.getVisibleUnwrappedCoordinates=function(e){var r=this.pointCoordinate(new t.default$1(0,0),0),n=this.pointCoordinate(new t.default$1(this.width,0),0),i=Math.floor(r.column),a=Math.floor(n.column),o=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var s=i;s<=a;s++)0!==s&&o.push(new t.UnwrappedTileID(s,e));return o},Fr.prototype.coveringTiles=function(e){var r=this.coveringZoomLevel(e),n=r;if(void 0!==e.minzoom&&re.maxzoom&&(r=e.maxzoom);var i=this.pointCoordinate(this.centerPoint,r),a=new t.default$1(i.column-.5,i.row-.5);return function(e,r,n,i){void 0===i&&(i=!0);var a=1<=0&&l<=a)for(u=r;uo&&(i=o-m)}if(this.lngRange){var g=this.x,v=u.x/2;g-vl&&(n=l-v)}void 0===n&&void 0===i||(this.center=this.unproject(new t.default$1(void 0!==n?n:this.x,void 0!==i?i:this.y))),this._unmodified=c,this._constraining=!1}},Fr.prototype._calcMatrices=function(){if(this.height){this.cameraToCenterDistance=.5/Math.tan(this._fov/2)*this.height;var t=this._fov/2,e=Math.PI/2+this._pitch,r=Math.sin(t)*this.cameraToCenterDistance/Math.sin(Math.PI-e-t),n=this.x,i=this.y,a=1.01*(Math.cos(Math.PI/2-this._pitch)*r+this.cameraToCenterDistance),o=new Float64Array(16);Nr.perspective(o,this._fov,this.width/this.height,1,a),Nr.scale(o,o,[1,-1,1]),Nr.translate(o,o,[0,0,-this.cameraToCenterDistance]),Nr.rotateX(o,o,this._pitch),Nr.rotateZ(o,o,this.angle),Nr.translate(o,o,[-n,-i,0]);var s=this.worldSize/(2*Math.PI*6378137*Math.abs(Math.cos(this.center.lat*(Math.PI/180))));Nr.scale(o,o,[1,1,s,1]),this.projMatrix=o;var l=this.width%2/2,u=this.height%2/2,c=Math.cos(this.angle),f=Math.sin(this.angle),h=n-Math.round(n)+c*l+f*u,p=i-Math.round(i)+c*u+f*l,d=new Float64Array(o);if(Nr.translate(d,d,[h>.5?h-1:h,p>.5?p-1:p,0]),this.alignedProjMatrix=d,o=Nr.create(),Nr.scale(o,o,[this.width/2,-this.height/2,1]),Nr.translate(o,o,[1,-1,0]),this.pixelMatrix=Nr.multiply(new Float64Array(16),o,this.projMatrix),!(o=Nr.invert(new Float64Array(16),this.pixelMatrix)))throw new Error("failed to invert matrix");this.pixelMatrixInverse=o,this._posMatrixCache={},this._alignedPosMatrixCache={}}},Fr.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.default$1(0,0)).zoomTo(this.zoom),r=[e.column*this.tileSize,e.row*this.tileSize,0,1];return Ir.transformMat4(r,r,this.pixelMatrix)[3]/this.cameraToCenterDistance},Object.defineProperties(Fr.prototype,Br);var jr=function(){var e,r,n,i;t.bindAll(["_onHashChange","_updateHash"],this),this._updateHash=(e=this._updateHashUnthrottled.bind(this),300,r=!1,n=0,i=function(){n=0,r&&(e(),n=setTimeout(i,300),r=!1)},function(){return r=!0,n||i(),n})};jr.prototype.addTo=function(e){return this._map=e,t.default.addEventListener("hashchange",this._onHashChange,!1),this._map.on("moveend",this._updateHash),this},jr.prototype.remove=function(){return t.default.removeEventListener("hashchange",this._onHashChange,!1),this._map.off("moveend",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},jr.prototype.getHashString=function(t){var e=this._map.getCenter(),r=Math.round(100*this._map.getZoom())/100,n=Math.ceil((r*Math.LN2+Math.log(512/360/.5))/Math.LN10),i=Math.pow(10,n),a=Math.round(e.lng*i)/i,o=Math.round(e.lat*i)/i,s=this._map.getBearing(),l=this._map.getPitch(),u="";return u+=t?"#/"+a+"/"+o+"/"+r:"#"+r+"/"+o+"/"+a,(s||l)&&(u+="/"+Math.round(10*s)/10),l&&(u+="/"+Math.round(l)),u},jr.prototype._onHashChange=function(){var e=t.default.location.hash.replace("#","").split("/");return e.length>=3&&(this._map.jumpTo({center:[+e[2],+e[1]],zoom:+e[0],bearing:+(e[3]||0),pitch:+(e[4]||0)}),!0)},jr.prototype._updateHashUnthrottled=function(){var e=this.getHashString();t.default.history.replaceState(t.default.history.state,"",e)};var Vr=function(e){function r(r,n,i,a){void 0===a&&(a={});var o=s.mousePos(n.getCanvasContainer(),i),l=n.unproject(o);e.call(this,r,t.extend({point:o,lngLat:l,originalEvent:i},a)),this._defaultPrevented=!1,this.target=n}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var n={defaultPrevented:{configurable:!0}};return r.prototype.preventDefault=function(){this._defaultPrevented=!0},n.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(r.prototype,n),r}(t.Event),Ur=function(e){function r(r,n,i){var a=s.touchPos(n.getCanvasContainer(),i),o=a.map(function(t){return n.unproject(t)}),l=a.reduce(function(t,e,r,n){return t.add(e.div(n.length))},new t.default$1(0,0)),u=n.unproject(l);e.call(this,r,{points:a,point:l,lngLats:o,lngLat:u,originalEvent:i}),this._defaultPrevented=!1}e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r;var n={defaultPrevented:{configurable:!0}};return r.prototype.preventDefault=function(){this._defaultPrevented=!0},n.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(r.prototype,n),r}(t.Event),qr=function(t){function e(e,r,n){t.call(this,e,{originalEvent:n}),this._defaultPrevented=!1}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,r),e}(t.Event),Hr=function(e){this._map=e,this._el=e.getCanvasContainer(),this._delta=0,t.bindAll(["_onWheel","_onTimeout","_onScrollFrame","_onScrollFinished"],this)};Hr.prototype.isEnabled=function(){return!!this._enabled},Hr.prototype.isActive=function(){return!!this._active},Hr.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&"center"===t.around)},Hr.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},Hr.prototype.onWheel=function(e){if(this.isEnabled()){var r=e.deltaMode===t.default.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,n=a.now(),i=n-(this._lastWheelEventTime||0);this._lastWheelEventTime=n,0!==r&&r%4.000244140625==0?this._type="wheel":0!==r&&Math.abs(r)<4?this._type="trackpad":i>400?(this._type=null,this._lastValue=r,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(i*r)<200?"trackpad":"wheel",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,r+=this._lastValue)),e.shiftKey&&r&&(r/=4),this._type&&(this._lastWheelEvent=e,this._delta-=r,this.isActive()||this._start(e)),e.preventDefault()}},Hr.prototype._onTimeout=function(t){this._type="wheel",this._delta-=this._lastValue,this.isActive()||this._start(t)},Hr.prototype._start=function(e){if(this._delta){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),this._active=!0,this._map.fire(new t.Event("movestart",{originalEvent:e})),this._map.fire(new t.Event("zoomstart",{originalEvent:e})),this._finishTimeout&&clearTimeout(this._finishTimeout);var r=s.mousePos(this._el,e);this._around=G.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(r)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame))}},Hr.prototype._onScrollFrame=function(){var e=this;if(this._frameId=null,this.isActive()){var r=this._map.transform;if(0!==this._delta){var n="wheel"===this._type&&Math.abs(this._delta)>4.000244140625?1/450:.01,i=2/(1+Math.exp(-Math.abs(this._delta*n)));this._delta<0&&0!==i&&(i=1/i);var o="number"==typeof this._targetZoom?r.zoomScale(this._targetZoom):r.scale;this._targetZoom=Math.min(r.maxZoom,Math.max(r.minZoom,r.scaleZoom(o*i))),"wheel"===this._type&&(this._startZoom=r.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}var s=!1;if("wheel"===this._type){var l=Math.min((a.now()-this._lastWheelEventTime)/200,1),u=this._easing(l);r.zoom=t.number(this._startZoom,this._targetZoom,u),l<1?this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame)):s=!0}else r.zoom=this._targetZoom,s=!0;r.setLocationAtPoint(this._around,this._aroundPoint),this._map.fire(new t.Event("move",{originalEvent:this._lastWheelEvent})),this._map.fire(new t.Event("zoom",{originalEvent:this._lastWheelEvent})),s&&(this._active=!1,this._finishTimeout=setTimeout(function(){e._map.fire(new t.Event("zoomend",{originalEvent:e._lastWheelEvent})),e._map.fire(new t.Event("moveend",{originalEvent:e._lastWheelEvent})),delete e._targetZoom},200))}},Hr.prototype._smoothOutEasing=function(e){var r=t.ease;if(this._prevEase){var n=this._prevEase,i=(a.now()-n.start)/n.duration,o=n.easing(i+.01)-n.easing(i),s=.27/Math.sqrt(o*o+1e-4)*.01,l=Math.sqrt(.0729-s*s);r=t.bezier(s,l,.25,1)}return this._prevEase={start:a.now(),duration:e,easing:r},r};var Gr=function(e){this._map=e,this._el=e.getCanvasContainer(),this._container=e.getContainer(),t.bindAll(["_onMouseMove","_onMouseUp","_onKeyDown"],this)};Gr.prototype.isEnabled=function(){return!!this._enabled},Gr.prototype.isActive=function(){return!!this._active},Gr.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},Gr.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},Gr.prototype.onMouseDown=function(e){this.isEnabled()&&e.shiftKey&&0===e.button&&(t.default.document.addEventListener("mousemove",this._onMouseMove,!1),t.default.document.addEventListener("keydown",this._onKeyDown,!1),t.default.document.addEventListener("mouseup",this._onMouseUp,!1),s.disableDrag(),this._startPos=s.mousePos(this._el,e),this._active=!0)},Gr.prototype._onMouseMove=function(t){var e=this._startPos,r=s.mousePos(this._el,t);this._box||(this._box=s.create("div","mapboxgl-boxzoom",this._container),this._container.classList.add("mapboxgl-crosshair"),this._fireEvent("boxzoomstart",t));var n=Math.min(e.x,r.x),i=Math.max(e.x,r.x),a=Math.min(e.y,r.y),o=Math.max(e.y,r.y);s.setTransform(this._box,"translate("+n+"px,"+a+"px)"),this._box.style.width=i-n+"px",this._box.style.height=o-a+"px"},Gr.prototype._onMouseUp=function(e){if(0===e.button){var r=this._startPos,n=s.mousePos(this._el,e),i=(new W).extend(this._map.unproject(r)).extend(this._map.unproject(n));this._finish(),s.suppressClick(),r.x===n.x&&r.y===n.y?this._fireEvent("boxzoomcancel",e):this._map.fitBounds(i,{linear:!0}).fire(new t.Event("boxzoomend",{originalEvent:e,boxZoomBounds:i}))}},Gr.prototype._onKeyDown=function(t){27===t.keyCode&&(this._finish(),this._fireEvent("boxzoomcancel",t))},Gr.prototype._finish=function(){this._active=!1,t.default.document.removeEventListener("mousemove",this._onMouseMove,!1),t.default.document.removeEventListener("keydown",this._onKeyDown,!1),t.default.document.removeEventListener("mouseup",this._onMouseUp,!1),this._container.classList.remove("mapboxgl-crosshair"),this._box&&(s.remove(this._box),this._box=null),s.enableDrag()},Gr.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,{originalEvent:r}))};var Wr=t.bezier(0,0,.25,1),Yr=function(e,r){this._map=e,this._el=r.element||e.getCanvasContainer(),this._state="disabled",this._button=r.button||"right",this._bearingSnap=r.bearingSnap||0,this._pitchWithRotate=!1!==r.pitchWithRotate,t.bindAll(["_onMouseMove","_onMouseUp","_onBlur","_onDragFrame"],this)};Yr.prototype.isEnabled=function(){return"disabled"!==this._state},Yr.prototype.isActive=function(){return"active"===this._state},Yr.prototype.enable=function(){this.isEnabled()||(this._state="enabled")},Yr.prototype.disable=function(){if(this.isEnabled())switch(this._state){case"active":this._state="disabled",this._unbind(),this._deactivate(),this._fireEvent("rotateend"),this._pitchWithRotate&&this._fireEvent("pitchend"),this._fireEvent("moveend");break;case"pending":this._state="disabled",this._unbind();break;default:this._state="disabled"}},Yr.prototype.onMouseDown=function(e){if("enabled"===this._state){if("right"===this._button){if(this._eventButton=s.mouseButton(e),this._eventButton!==(e.ctrlKey?0:2))return}else{if(e.ctrlKey||0!==s.mouseButton(e))return;this._eventButton=0}s.disableDrag(),t.default.document.addEventListener("mousemove",this._onMouseMove,{capture:!0}),t.default.document.addEventListener("mouseup",this._onMouseUp),t.default.addEventListener("blur",this._onBlur),this._state="pending",this._inertia=[[a.now(),this._map.getBearing()]],this._previousPos=s.mousePos(this._el,e),this._center=this._map.transform.centerPoint,e.preventDefault()}},Yr.prototype._onMouseMove=function(t){this._lastMoveEvent=t,this._pos=s.mousePos(this._el,t),"pending"===this._state&&(this._state="active",this._fireEvent("rotatestart",t),this._fireEvent("movestart",t),this._pitchWithRotate&&this._fireEvent("pitchstart",t)),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onDragFrame))},Yr.prototype._onDragFrame=function(){this._frameId=null;var t=this._lastMoveEvent;if(t){var e=this._map.transform,r=this._previousPos,n=this._pos,i=.8*(r.x-n.x),o=-.5*(r.y-n.y),s=e.bearing-i,l=e.pitch-o,u=this._inertia,c=u[u.length-1];this._drainInertiaBuffer(),u.push([a.now(),this._map._normalizeBearing(s,c[1])]),e.bearing=s,this._pitchWithRotate&&(this._fireEvent("pitch",t),e.pitch=l),this._fireEvent("rotate",t),this._fireEvent("move",t),delete this._lastMoveEvent,this._previousPos=this._pos}},Yr.prototype._onMouseUp=function(t){if(s.mouseButton(t)===this._eventButton)switch(this._state){case"active":this._state="enabled",s.suppressClick(),this._unbind(),this._deactivate(),this._inertialRotate(t);break;case"pending":this._state="enabled",this._unbind()}},Yr.prototype._onBlur=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._fireEvent("rotateend",t),this._pitchWithRotate&&this._fireEvent("pitchend",t),this._fireEvent("moveend",t);break;case"pending":this._state="enabled",this._unbind()}},Yr.prototype._unbind=function(){t.default.document.removeEventListener("mousemove",this._onMouseMove,{capture:!0}),t.default.document.removeEventListener("mouseup",this._onMouseUp),t.default.removeEventListener("blur",this._onBlur),s.enableDrag()},Yr.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._previousPos},Yr.prototype._inertialRotate=function(t){var e=this;this._fireEvent("rotateend",t),this._drainInertiaBuffer();var r=this._map,n=r.getBearing(),i=this._inertia,a=function(){Math.abs(n)180&&(p=180);var d=p/180;u+=f*p*(d/2),Math.abs(r._normalizeBearing(u,0))0&&e-t[0][0]>160;)t.shift()};var Zr=t.bezier(0,0,.3,1),Xr=function(e){this._map=e,this._el=e.getCanvasContainer(),this._state="disabled",t.bindAll(["_onMove","_onMouseUp","_onTouchEnd","_onBlur","_onDragFrame"],this)};Xr.prototype.isEnabled=function(){return"disabled"!==this._state},Xr.prototype.isActive=function(){return"active"===this._state},Xr.prototype.enable=function(){this.isEnabled()||(this._el.classList.add("mapboxgl-touch-drag-pan"),this._state="enabled")},Xr.prototype.disable=function(){if(this.isEnabled())switch(this._el.classList.remove("mapboxgl-touch-drag-pan"),this._state){case"active":this._state="disabled",this._unbind(),this._deactivate(),this._fireEvent("dragend"),this._fireEvent("moveend");break;case"pending":this._state="disabled",this._unbind();break;default:this._state="disabled"}},Xr.prototype.onMouseDown=function(e){"enabled"===this._state&&(e.ctrlKey||0!==s.mouseButton(e)||(s.addEventListener(t.default.document,"mousemove",this._onMove,{capture:!0}),s.addEventListener(t.default.document,"mouseup",this._onMouseUp),this._start(e)))},Xr.prototype.onTouchStart=function(e){"enabled"===this._state&&(e.touches.length>1||(s.addEventListener(t.default.document,"touchmove",this._onMove,{capture:!0,passive:!1}),s.addEventListener(t.default.document,"touchend",this._onTouchEnd),this._start(e)))},Xr.prototype._start=function(e){t.default.addEventListener("blur",this._onBlur),this._state="pending",this._previousPos=s.mousePos(this._el,e),this._inertia=[[a.now(),this._previousPos]]},Xr.prototype._onMove=function(t){this._lastMoveEvent=t,t.preventDefault(),this._pos=s.mousePos(this._el,t),this._drainInertiaBuffer(),this._inertia.push([a.now(),this._pos]),"pending"===this._state&&(this._state="active",this._fireEvent("dragstart",t),this._fireEvent("movestart",t)),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onDragFrame))},Xr.prototype._onDragFrame=function(){this._frameId=null;var t=this._lastMoveEvent;if(t){var e=this._map.transform;e.setLocationAtPoint(e.pointLocation(this._previousPos),this._pos),this._fireEvent("drag",t),this._fireEvent("move",t),this._previousPos=this._pos,delete this._lastMoveEvent}},Xr.prototype._onMouseUp=function(t){if(0===s.mouseButton(t))switch(this._state){case"active":this._state="enabled",s.suppressClick(),this._unbind(),this._deactivate(),this._inertialPan(t);break;case"pending":this._state="enabled",this._unbind()}},Xr.prototype._onTouchEnd=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._inertialPan(t);break;case"pending":this._state="enabled",this._unbind()}},Xr.prototype._onBlur=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._fireEvent("dragend",t),this._fireEvent("moveend",t);break;case"pending":this._state="enabled",this._unbind()}},Xr.prototype._unbind=function(){s.removeEventListener(t.default.document,"touchmove",this._onMove,{capture:!0,passive:!1}),s.removeEventListener(t.default.document,"touchend",this._onTouchEnd),s.removeEventListener(t.default.document,"mousemove",this._onMove,{capture:!0}),s.removeEventListener(t.default.document,"mouseup",this._onMouseUp),s.removeEventListener(t.default,"blur",this._onBlur)},Xr.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._previousPos,delete this._pos},Xr.prototype._inertialPan=function(t){this._fireEvent("dragend",t),this._drainInertiaBuffer();var e=this._inertia;if(e.length<2)this._fireEvent("moveend",t);else{var r=e[e.length-1],n=e[0],i=r[1].sub(n[1]),a=(r[0]-n[0])/1e3;if(0===a||r[1].equals(n[1]))this._fireEvent("moveend",t);else{var o=i.mult(.3/a),s=o.mag();s>1400&&(s=1400,o._unit()._mult(s));var l=s/750,u=o.mult(-l/2);this._map.panBy(u,{duration:1e3*l,easing:Zr,noMoveStart:!0},{originalEvent:t})}}},Xr.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},Xr.prototype._drainInertiaBuffer=function(){for(var t=this._inertia,e=a.now();t.length>0&&e-t[0][0]>160;)t.shift()};var $r=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll(["_onKeyDown"],this)};function Jr(t){return t*(2-t)}$r.prototype.isEnabled=function(){return!!this._enabled},$r.prototype.enable=function(){this.isEnabled()||(this._el.addEventListener("keydown",this._onKeyDown,!1),this._enabled=!0)},$r.prototype.disable=function(){this.isEnabled()&&(this._el.removeEventListener("keydown",this._onKeyDown),this._enabled=!1)},$r.prototype._onKeyDown=function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e=0,r=0,n=0,i=0,a=0;switch(t.keyCode){case 61:case 107:case 171:case 187:e=1;break;case 189:case 109:case 173:e=-1;break;case 37:t.shiftKey?r=-1:(t.preventDefault(),i=-1);break;case 39:t.shiftKey?r=1:(t.preventDefault(),i=1);break;case 38:t.shiftKey?n=1:(t.preventDefault(),a=-1);break;case 40:t.shiftKey?n=-1:(a=1,t.preventDefault());break;default:return}var o=this._map,s=o.getZoom(),l={duration:300,delayEndEvents:500,easing:Jr,zoom:e?Math.round(s)+e*(t.shiftKey?2:1):s,bearing:o.getBearing()+15*r,pitch:o.getPitch()+10*n,offset:[100*-i,100*-a],center:o.getCenter()};o.easeTo(l,{originalEvent:t})}};var Kr=function(e){this._map=e,t.bindAll(["_onDblClick","_onZoomEnd"],this)};Kr.prototype.isEnabled=function(){return!!this._enabled},Kr.prototype.isActive=function(){return!!this._active},Kr.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},Kr.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},Kr.prototype.onTouchStart=function(t){var e=this;this.isEnabled()&&(t.points.length>1||(this._tapped?(clearTimeout(this._tapped),this._tapped=null,this._zoom(t)):this._tapped=setTimeout(function(){e._tapped=null},300)))},Kr.prototype.onDblClick=function(t){this.isEnabled()&&(t.originalEvent.preventDefault(),this._zoom(t))},Kr.prototype._zoom=function(t){this._active=!0,this._map.on("zoomend",this._onZoomEnd),this._map.zoomTo(this._map.getZoom()+(t.originalEvent.shiftKey?-1:1),{around:t.lngLat},t)},Kr.prototype._onZoomEnd=function(){this._active=!1,this._map.off("zoomend",this._onZoomEnd)};var Qr=t.bezier(0,0,.15,1),tn=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll(["_onMove","_onEnd","_onTouchFrame"],this)};tn.prototype.isEnabled=function(){return!!this._enabled},tn.prototype.enable=function(t){this.isEnabled()||(this._el.classList.add("mapboxgl-touch-zoom-rotate"),this._enabled=!0,this._aroundCenter=!!t&&"center"===t.around)},tn.prototype.disable=function(){this.isEnabled()&&(this._el.classList.remove("mapboxgl-touch-zoom-rotate"),this._enabled=!1)},tn.prototype.disableRotation=function(){this._rotationDisabled=!0},tn.prototype.enableRotation=function(){this._rotationDisabled=!1},tn.prototype.onStart=function(e){if(this.isEnabled()&&2===e.touches.length){var r=s.mousePos(this._el,e.touches[0]),n=s.mousePos(this._el,e.touches[1]);this._startVec=r.sub(n),this._gestureIntent=void 0,this._inertia=[],s.addEventListener(t.default.document,"touchmove",this._onMove,{passive:!1}),s.addEventListener(t.default.document,"touchend",this._onEnd)}},tn.prototype._getTouchEventData=function(t){var e=s.mousePos(this._el,t.touches[0]),r=s.mousePos(this._el,t.touches[1]),n=e.sub(r);return{vec:n,center:e.add(r).div(2),scale:n.mag()/this._startVec.mag(),bearing:this._rotationDisabled?0:180*n.angleWith(this._startVec)/Math.PI}},tn.prototype._onMove=function(e){if(2===e.touches.length){var r=this._getTouchEventData(e),n=r.vec,i=r.scale,a=r.bearing;if(!this._gestureIntent){var o=Math.abs(1-i)>.15;Math.abs(a)>10?this._gestureIntent="rotate":o&&(this._gestureIntent="zoom"),this._gestureIntent&&(this._map.fire(new t.Event(this._gestureIntent+"start",{originalEvent:e})),this._map.fire(new t.Event("movestart",{originalEvent:e})),this._startVec=n)}this._lastTouchEvent=e,this._frameId||(this._frameId=this._map._requestRenderFrame(this._onTouchFrame)),e.preventDefault()}},tn.prototype._onTouchFrame=function(){this._frameId=null;var e=this._gestureIntent;if(e){var r=this._map.transform;this._startScale||(this._startScale=r.scale,this._startBearing=r.bearing);var n=this._getTouchEventData(this._lastTouchEvent),i=n.center,o=n.bearing,s=n.scale,l=r.pointLocation(i),u=r.locationPoint(l);"rotate"===e&&(r.bearing=this._startBearing+o),r.zoom=r.scaleZoom(this._startScale*s),r.setLocationAtPoint(l,u),this._map.fire(new t.Event(e,{originalEvent:this._lastTouchEvent})),this._map.fire(new t.Event("move",{originalEvent:this._lastTouchEvent})),this._drainInertiaBuffer(),this._inertia.push([a.now(),s,i])}},tn.prototype._onEnd=function(e){s.removeEventListener(t.default.document,"touchmove",this._onMove,{passive:!1}),s.removeEventListener(t.default.document,"touchend",this._onEnd);var r=this._gestureIntent,n=this._startScale;if(this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._gestureIntent,delete this._startScale,delete this._startBearing,delete this._lastTouchEvent,r){this._map.fire(new t.Event(r+"end",{originalEvent:e})),this._drainInertiaBuffer();var i=this._inertia,a=this._map;if(i.length<2)a.snapToNorth({},{originalEvent:e});else{var o=i[i.length-1],l=i[0],u=a.transform.scaleZoom(n*o[1]),c=a.transform.scaleZoom(n*l[1]),f=u-c,h=(o[0]-l[0])/1e3,p=o[2];if(0!==h&&u!==c){var d=.15*f/h;Math.abs(d)>2.5&&(d=d>0?2.5:-2.5);var m=1e3*Math.abs(d/(12*.15)),g=u+d*m/2e3;g<0&&(g=0),a.easeTo({zoom:g,duration:m,easing:Qr,around:this._aroundCenter?a.getCenter():a.unproject(p),noMoveStart:!0},{originalEvent:e})}else a.snapToNorth({},{originalEvent:e})}}},tn.prototype._drainInertiaBuffer=function(){for(var t=this._inertia,e=a.now();t.length>2&&e-t[0][0]>160;)t.shift()};var en={scrollZoom:Hr,boxZoom:Gr,dragRotate:Yr,dragPan:Xr,keyboard:$r,doubleClickZoom:Kr,touchZoomRotate:tn},rn=function(e){function r(r,n){e.call(this),this._moving=!1,this._zooming=!1,this.transform=r,this._bearingSnap=n.bearingSnap,t.bindAll(["_renderFrameCallback"],this)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getCenter=function(){return this.transform.center},r.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},r.prototype.panBy=function(e,r,n){return e=t.default$1.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},r),n)},r.prototype.panTo=function(e,r,n){return this.easeTo(t.extend({center:e},r),n)},r.prototype.getZoom=function(){return this.transform.zoom},r.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},r.prototype.zoomTo=function(e,r,n){return this.easeTo(t.extend({zoom:e},r),n)},r.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},r.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},r.prototype.getBearing=function(){return this.transform.bearing},r.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},r.prototype.rotateTo=function(e,r,n){return this.easeTo(t.extend({bearing:e},r),n)},r.prototype.resetNorth=function(e,r){return this.rotateTo(0,t.extend({duration:1e3},e),r),this},r.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())e?1:0}),["bottom","left","right","top"]))return t.warnOnce("options.padding must be a positive number, or an Object with keys 'bottom', 'left', 'right', 'top'"),this;e=W.convert(e);var a=[(r.padding.left-r.padding.right)/2,(r.padding.top-r.padding.bottom)/2],o=Math.min(r.padding.right,r.padding.left),s=Math.min(r.padding.top,r.padding.bottom);r.offset=[r.offset[0]+a[0],r.offset[1]+a[1]];var l=t.default$1.convert(r.offset),u=this.transform,c=u.project(e.getNorthWest()),f=u.project(e.getSouthEast()),h=f.sub(c),p=(u.width-2*o-2*Math.abs(l.x))/h.x,d=(u.height-2*s-2*Math.abs(l.y))/h.y;return d<0||p<0?(t.warnOnce("Map cannot fit within canvas with the given bounds, padding, and/or offset."),this):(r.center=u.unproject(c.add(f).div(2)),r.zoom=Math.min(u.scaleZoom(u.scale*Math.min(p,d)),r.maxZoom),r.bearing=0,r.linear?this.easeTo(r,n):this.flyTo(r,n))},r.prototype.jumpTo=function(e,r){this.stop();var n=this.transform,i=!1,a=!1,o=!1;return"zoom"in e&&n.zoom!==+e.zoom&&(i=!0,n.zoom=+e.zoom),void 0!==e.center&&(n.center=G.convert(e.center)),"bearing"in e&&n.bearing!==+e.bearing&&(a=!0,n.bearing=+e.bearing),"pitch"in e&&n.pitch!==+e.pitch&&(o=!0,n.pitch=+e.pitch),this.fire(new t.Event("movestart",r)).fire(new t.Event("move",r)),i&&this.fire(new t.Event("zoomstart",r)).fire(new t.Event("zoom",r)).fire(new t.Event("zoomend",r)),a&&this.fire(new t.Event("rotatestart",r)).fire(new t.Event("rotate",r)).fire(new t.Event("rotateend",r)),o&&this.fire(new t.Event("pitchstart",r)).fire(new t.Event("pitch",r)).fire(new t.Event("pitchend",r)),this.fire(new t.Event("moveend",r))},r.prototype.easeTo=function(e,r){var n=this;this.stop(),!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate&&(e.duration=0);var i=this.transform,a=this.getZoom(),o=this.getBearing(),s=this.getPitch(),l="zoom"in e?+e.zoom:a,u="bearing"in e?this._normalizeBearing(e.bearing,o):o,c="pitch"in e?+e.pitch:s,f=i.centerPoint.add(t.default$1.convert(e.offset)),h=i.pointLocation(f),p=G.convert(e.center||h);this._normalizeCenter(p);var d,m,g=i.project(h),v=i.project(p).sub(g),y=i.zoomScale(l-a);return e.around&&(d=G.convert(e.around),m=i.locationPoint(d)),this._zooming=l!==a,this._rotating=o!==u,this._pitching=c!==s,this._prepareEase(r,e.noMoveStart),clearTimeout(this._easeEndTimeoutID),this._ease(function(e){if(n._zooming&&(i.zoom=t.number(a,l,e)),n._rotating&&(i.bearing=t.number(o,u,e)),n._pitching&&(i.pitch=t.number(s,c,e)),d)i.setLocationAtPoint(d,m);else{var h=i.zoomScale(i.zoom-a),p=l>a?Math.min(2,y):Math.max(.5,y),x=Math.pow(p,1-e),b=i.unproject(g.add(v.mult(e*x)).mult(h));i.setLocationAtPoint(i.renderWorldCopies?b.wrap():b,f)}n._fireMoveEvents(r)},function(){e.delayEndEvents?n._easeEndTimeoutID=setTimeout(function(){return n._afterEase(r)},e.delayEndEvents):n._afterEase(r)},e),this},r.prototype._prepareEase=function(e,r){this._moving=!0,r||this.fire(new t.Event("movestart",e)),this._zooming&&this.fire(new t.Event("zoomstart",e)),this._rotating&&this.fire(new t.Event("rotatestart",e)),this._pitching&&this.fire(new t.Event("pitchstart",e))},r.prototype._fireMoveEvents=function(e){this.fire(new t.Event("move",e)),this._zooming&&this.fire(new t.Event("zoom",e)),this._rotating&&this.fire(new t.Event("rotate",e)),this._pitching&&this.fire(new t.Event("pitch",e))},r.prototype._afterEase=function(e){var r=this._zooming,n=this._rotating,i=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,r&&this.fire(new t.Event("zoomend",e)),n&&this.fire(new t.Event("rotateend",e)),i&&this.fire(new t.Event("pitchend",e)),this.fire(new t.Event("moveend",e))},r.prototype.flyTo=function(e,r){var n=this;this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var i=this.transform,a=this.getZoom(),o=this.getBearing(),s=this.getPitch(),l="zoom"in e?t.clamp(+e.zoom,i.minZoom,i.maxZoom):a,u="bearing"in e?this._normalizeBearing(e.bearing,o):o,c="pitch"in e?+e.pitch:s,f=i.zoomScale(l-a),h=i.centerPoint.add(t.default$1.convert(e.offset)),p=i.pointLocation(h),d=G.convert(e.center||p);this._normalizeCenter(d);var m=i.project(p),g=i.project(d).sub(m),v=e.curve,y=Math.max(i.width,i.height),x=y/f,b=g.mag();if("minZoom"in e){var _=t.clamp(Math.min(e.minZoom,a,l),i.minZoom,i.maxZoom),w=y/i.zoomScale(_-a);v=Math.sqrt(w/b*2)}var A=v*v;function M(t){var e=(x*x-y*y+(t?-1:1)*A*A*b*b)/(2*(t?x:y)*A*b);return Math.log(Math.sqrt(e*e+1)-e)}function k(t){return(Math.exp(t)-Math.exp(-t))/2}function T(t){return(Math.exp(t)+Math.exp(-t))/2}var E=M(0),S=function(t){return T(E)/T(E+v*t)},C=function(t){return y*((T(E)*(k(e=E+v*t)/T(e))-k(E))/A)/b;var e},L=(M(1)-E)/v;if(Math.abs(b)<1e-6||!isFinite(L)){if(Math.abs(y-x)<1e-6)return this.easeTo(e,r);var O=xe.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=o!==u,this._pitching=c!==s,this._prepareEase(r,!1),this._ease(function(e){var l=e*L,f=1/S(l);i.zoom=a+i.scaleZoom(f),n._rotating&&(i.bearing=t.number(o,u,e)),n._pitching&&(i.pitch=t.number(s,c,e));var p=i.unproject(m.add(g.mult(C(l))).mult(f));i.setLocationAtPoint(i.renderWorldCopies?p.wrap():p,h),n._fireMoveEvents(r)},function(){return n._afterEase(r)},e),this},r.prototype.isEasing=function(){return!!this._easeFrameId},r.prototype.stop=function(){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var t=this._onEaseEnd;delete this._onEaseEnd,t.call(this)}return this},r.prototype._ease=function(t,e,r){!1===r.animate||0===r.duration?(t(1),e()):(this._easeStart=a.now(),this._easeOptions=r,this._onEaseFrame=t,this._onEaseEnd=e,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))},r.prototype._renderFrameCallback=function(){var t=Math.min((a.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(t)),t<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},r.prototype._normalizeBearing=function(e,r){e=t.wrap(e,-180,180);var n=Math.abs(e-r);return Math.abs(e-360-r)180?-360:r<-180?360:0}},r}(t.Evented),nn=function(e){void 0===e&&(e={}),this.options=e,t.bindAll(["_updateEditLink","_updateData","_updateCompact"],this)};nn.prototype.getDefaultPosition=function(){return"bottom-right"},nn.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=s.create("div","mapboxgl-ctrl mapboxgl-ctrl-attrib"),e&&this._container.classList.add("mapboxgl-compact"),this._updateAttributions(),this._updateEditLink(),this._map.on("sourcedata",this._updateData),this._map.on("moveend",this._updateEditLink),void 0===e&&(this._map.on("resize",this._updateCompact),this._updateCompact()),this._container},nn.prototype.onRemove=function(){s.remove(this._container),this._map.off("sourcedata",this._updateData),this._map.off("moveend",this._updateEditLink),this._map.off("resize",this._updateCompact),this._map=void 0},nn.prototype._updateEditLink=function(){var t=this._editLink;t||(t=this._editLink=this._container.querySelector(".mapbox-improve-map"));var e=[{key:"owner",value:this.styleOwner},{key:"id",value:this.styleId},{key:"access_token",value:g.ACCESS_TOKEN}];if(t){var r=e.reduce(function(t,r,n){return r.value&&(t+=r.key+"="+r.value+(n=0)return!1;return!0})).length?(this._container.innerHTML=t.join(" | "),this._container.classList.remove("mapboxgl-attrib-empty")):this._container.classList.add("mapboxgl-attrib-empty"),this._editLink=null}},nn.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add("mapboxgl-compact"):this._container.classList.remove("mapboxgl-compact")};var an=function(){t.bindAll(["_updateLogo"],this)};an.prototype.onAdd=function(t){this._map=t,this._container=s.create("div","mapboxgl-ctrl");var e=s.create("a","mapboxgl-ctrl-logo");return e.target="_blank",e.href="https://www.mapbox.com/",e.setAttribute("aria-label","Mapbox logo"),this._container.appendChild(e),this._container.style.display="none",this._map.on("sourcedata",this._updateLogo),this._updateLogo(),this._container},an.prototype.onRemove=function(){s.remove(this._container),this._map.off("sourcedata",this._updateLogo)},an.prototype.getDefaultPosition=function(){return"bottom-left"},an.prototype._updateLogo=function(t){t&&"metadata"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?"block":"none")},an.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return!0;return!1}};var on=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1};on.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},on.prototype.remove=function(t){for(var e=this._currentlyRunning,r=0,n=e?this._queue.concat(e):this._queue;re.maxZoom)throw new Error("maxZoom must be greater than minZoom");var n=new Fr(e.minZoom,e.maxZoom,e.renderWorldCopies);r.call(this,n,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new on;var i=e.transformRequest;if(this._transformRequest=i?function(t,e){return i(t,e)||{url:t}}:function(t){return{url:t}},"string"==typeof e.container){var a=t.default.document.getElementById(e.container);if(!a)throw new Error("Container '"+e.container+"' not found.");this._container=a}else{if(!(e.container instanceof ln))throw new Error("Invalid type: 'container' must be a String or HTMLElement.");this._container=e.container}e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll(["_onWindowOnline","_onWindowResize","_contextLost","_contextRestored","_update","_render","_onData","_onDataLoading"],this),this._setupContainer(),this._setupPainter(),this.on("move",this._update.bind(this,!1)),this.on("zoom",this._update.bind(this,!0)),void 0!==t.default&&(t.default.addEventListener("online",this._onWindowOnline,!1),t.default.addEventListener("resize",this._onWindowResize,!1)),function(t,e){var r=t.getCanvasContainer(),n=null,i=!1;for(var a in en)t[a]=new en[a](t,e),e.interactive&&e[a]&&t[a].enable(e[a]);s.addEventListener(r,"mouseout",function(e){t.fire(new Vr("mouseout",t,e))}),s.addEventListener(r,"mousedown",function(r){i=!0;var n=new Vr("mousedown",t,r);t.fire(n),n.defaultPrevented||(e.interactive&&!t.doubleClickZoom.isActive()&&t.stop(),t.boxZoom.onMouseDown(r),t.boxZoom.isActive()||t.dragPan.isActive()||t.dragRotate.onMouseDown(r),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onMouseDown(r))}),s.addEventListener(r,"mouseup",function(e){var r=t.dragRotate.isActive();n&&!r&&t.fire(new Vr("contextmenu",t,n)),n=null,i=!1,t.fire(new Vr("mouseup",t,e))}),s.addEventListener(r,"mousemove",function(e){if(!t.dragPan.isActive()&&!t.dragRotate.isActive()){for(var n=e.toElement||e.target;n&&n!==r;)n=n.parentNode;n===r&&t.fire(new Vr("mousemove",t,e))}}),s.addEventListener(r,"mouseover",function(e){for(var n=e.toElement||e.target;n&&n!==r;)n=n.parentNode;n===r&&t.fire(new Vr("mouseover",t,e))}),s.addEventListener(r,"touchstart",function(r){var n=new Ur("touchstart",t,r);t.fire(n),n.defaultPrevented||(e.interactive&&t.stop(),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onTouchStart(r),t.touchZoomRotate.onStart(r),t.doubleClickZoom.onTouchStart(n))},{passive:!1}),s.addEventListener(r,"touchmove",function(e){t.fire(new Ur("touchmove",t,e))},{passive:!1}),s.addEventListener(r,"touchend",function(e){t.fire(new Ur("touchend",t,e))}),s.addEventListener(r,"touchcancel",function(e){t.fire(new Ur("touchcancel",t,e))}),s.addEventListener(r,"click",function(e){t.fire(new Vr("click",t,e))}),s.addEventListener(r,"dblclick",function(e){var r=new Vr("dblclick",t,e);t.fire(r),r.defaultPrevented||t.doubleClickZoom.onDblClick(r)}),s.addEventListener(r,"contextmenu",function(e){var r=t.dragRotate.isActive();i||r?i&&(n=e):t.fire(new Vr("contextmenu",t,e)),e.preventDefault()}),s.addEventListener(r,"wheel",function(e){var r=new qr("wheel",t,e);t.fire(r),r.defaultPrevented||t.scrollZoom.onWheel(e)},{passive:!1})}(this,e),this._hash=e.hash&&(new jr).addTo(this),this._hash&&this._hash._onHashChange()||this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),this.resize(),e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new nn),this.addControl(new an,e.logoPosition),this.on("style.load",function(){this.transform.unmodified&&this.jumpTo(this.style.stylesheet)}),this.on("data",this._onData),this.on("dataloading",this._onDataLoading)}r&&(n.__proto__=r),n.prototype=Object.create(r&&r.prototype),n.prototype.constructor=n;var i={showTileBoundaries:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0}};return n.prototype.addControl=function(t,e){void 0===e&&t.getDefaultPosition&&(e=t.getDefaultPosition()),void 0===e&&(e="top-right");var r=t.onAdd(this),n=this._controlPositions[e];return-1!==e.indexOf("bottom")?n.insertBefore(r,n.firstChild):n.appendChild(r),this},n.prototype.removeControl=function(t){return t.onRemove(this),this},n.prototype.resize=function(e){var r=this._containerDimensions(),n=r[0],i=r[1];return this._resizeCanvas(n,i),this.transform.resize(n,i),this.painter.resize(n,i),this.fire(new t.Event("movestart",e)).fire(new t.Event("move",e)).fire(new t.Event("resize",e)).fire(new t.Event("moveend",e))},n.prototype.getBounds=function(){var e=new W(this.transform.pointLocation(new t.default$1(0,this.transform.height)),this.transform.pointLocation(new t.default$1(this.transform.width,0)));return(this.transform.angle||this.transform.pitch)&&(e.extend(this.transform.pointLocation(new t.default$1(this.transform.size.x,0))),e.extend(this.transform.pointLocation(new t.default$1(0,this.transform.size.y)))),e},n.prototype.getMaxBounds=function(){return this.transform.latRange&&2===this.transform.latRange.length&&this.transform.lngRange&&2===this.transform.lngRange.length?new W([this.transform.lngRange[0],this.transform.latRange[0]],[this.transform.lngRange[1],this.transform.latRange[1]]):null},n.prototype.setMaxBounds=function(t){if(t){var e=W.convert(t);this.transform.lngRange=[e.getWest(),e.getEast()],this.transform.latRange=[e.getSouth(),e.getNorth()],this.transform._constrain(),this._update()}else null==t&&(this.transform.lngRange=null,this.transform.latRange=null,this._update());return this},n.prototype.setMinZoom=function(t){if((t=null==t?0:t)>=0&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error("maxZoom must be greater than the current minZoom")},n.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},n.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update(),this},n.prototype.getMaxZoom=function(){return this.transform.maxZoom},n.prototype.project=function(t){return this.transform.locationPoint(G.convert(t))},n.prototype.unproject=function(e){return this.transform.pointLocation(t.default$1.convert(e))},n.prototype.isMoving=function(){return this._moving||this.dragPan.isActive()||this.dragRotate.isActive()||this.scrollZoom.isActive()},n.prototype.isZooming=function(){return this._zooming||this.scrollZoom.isActive()},n.prototype.isRotating=function(){return this._rotating||this.dragRotate.isActive()},n.prototype.on=function(t,e,n){var i,a=this;if(void 0===n)return r.prototype.on.call(this,t,e);var o=function(){if("mouseenter"===t||"mouseover"===t){var r=!1;return{layer:e,listener:n,delegates:{mousemove:function(i){var o=a.getLayer(e)?a.queryRenderedFeatures(i.point,{layers:[e]}):[];o.length?r||(r=!0,n.call(a,new Vr(t,a,i.originalEvent,{features:o}))):r=!1},mouseout:function(){r=!1}}}}if("mouseleave"===t||"mouseout"===t){var o=!1;return{layer:e,listener:n,delegates:{mousemove:function(r){(a.getLayer(e)?a.queryRenderedFeatures(r.point,{layers:[e]}):[]).length?o=!0:o&&(o=!1,n.call(a,new Vr(t,a,r.originalEvent)))},mouseout:function(e){o&&(o=!1,n.call(a,new Vr(t,a,e.originalEvent)))}}}}return{layer:e,listener:n,delegates:(i={},i[t]=function(t){var r=a.getLayer(e)?a.queryRenderedFeatures(t.point,{layers:[e]}):[];r.length&&(t.features=r,n.call(a,t),delete t.features)},i)}}();for(var s in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(o),o.delegates)a.on(s,o.delegates[s]);return this},n.prototype.off=function(t,e,n){if(void 0===n)return r.prototype.off.call(this,t,e);if(this._delegatedListeners&&this._delegatedListeners[t])for(var i=this._delegatedListeners[t],a=0;a180;){var o=r.locationPoint(t);if(o.x>=0&&o.y>=0&&o.x<=r.width&&o.y<=r.height)break;t.lng>r.center.lng?t.lng-=360:t.lng+=360}return t}pn.prototype._rotateCompassArrow=function(){var t="rotate("+this._map.transform.angle*(180/Math.PI)+"deg)";this._compassArrow.style.transform=t},pn.prototype.onAdd=function(t){return this._map=t,this.options.showCompass&&(this._map.on("rotate",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new Yr(t,{button:"left",element:this._compass}),this._handler.enable()),this._container},pn.prototype.onRemove=function(){s.remove(this._container),this.options.showCompass&&(this._map.off("rotate",this._rotateCompassArrow),this._handler.disable(),delete this._handler),delete this._map},pn.prototype._createButton=function(t,e,r){var n=s.create("button",t,this._container);return n.type="button",n.setAttribute("aria-label",e),n.addEventListener("click",r),n};var mn={center:"translate(-50%,-50%)",top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"};function gn(t,e,r){var n=t.classList;for(var i in mn)n.remove("mapboxgl-"+r+"-anchor-"+i);n.add("mapboxgl-"+r+"-anchor-"+e)}var vn=function(e){if((arguments[0]instanceof t.default.HTMLElement||2===arguments.length)&&(e=t.extend({element:e},arguments[1])),t.bindAll(["_update","_onMapClick"],this),this._anchor=e&&e.anchor||"center",this._color=e&&e.color||"#3FB1CE",e&&e.element)this._element=e.element,this._offset=t.default$1.convert(e&&e.offset||[0,0]);else{this._defaultMarker=!0,this._element=s.create("div");var r=s.createNS("http://www.w3.org/2000/svg","svg");r.setAttributeNS(null,"height","41px"),r.setAttributeNS(null,"width","27px"),r.setAttributeNS(null,"viewBox","0 0 27 41");var n=s.createNS("http://www.w3.org/2000/svg","g");n.setAttributeNS(null,"stroke","none"),n.setAttributeNS(null,"stroke-width","1"),n.setAttributeNS(null,"fill","none"),n.setAttributeNS(null,"fill-rule","evenodd");var i=s.createNS("http://www.w3.org/2000/svg","g");i.setAttributeNS(null,"fill-rule","nonzero");var a=s.createNS("http://www.w3.org/2000/svg","g");a.setAttributeNS(null,"transform","translate(3.0, 29.0)"),a.setAttributeNS(null,"fill","#000000");for(var o=0,l=[{rx:"10.5",ry:"5.25002273"},{rx:"10.5",ry:"5.25002273"},{rx:"9.5",ry:"4.77275007"},{rx:"8.5",ry:"4.29549936"},{rx:"7.5",ry:"3.81822308"},{rx:"6.5",ry:"3.34094679"},{rx:"5.5",ry:"2.86367051"},{rx:"4.5",ry:"2.38636864"}];o5280?Mn(e,u,h/5280,"mi"):Mn(e,u,h,"ft")}else r&&"nautical"===r.unit?Mn(e,u,f/1852,"nm"):Mn(e,u,f,"m")}function Mn(t,e,r,n){var i,a,o,s=(i=r,(a=Math.pow(10,(""+Math.floor(i)).length-1))*(o=(o=i/a)>=10?10:o>=5?5:o>=3?3:o>=2?2:1)),l=s/r;"m"===n&&s>=1e3&&(s/=1e3,n="km"),t.style.width=e*l+"px",t.innerHTML=s+n}wn.prototype.getDefaultPosition=function(){return"bottom-left"},wn.prototype._onMove=function(){An(this._map,this._container,this.options)},wn.prototype.onAdd=function(t){return this._map=t,this._container=s.create("div","mapboxgl-ctrl mapboxgl-ctrl-scale",t.getContainer()),this._map.on("move",this._onMove),this._onMove(),this._container},wn.prototype.onRemove=function(){s.remove(this._container),this._map.off("move",this._onMove),this._map=void 0},wn.prototype.setUnit=function(t){this.options.unit=t,An(this._map,this._container,this.options)};var kn=function(){this._fullscreen=!1,t.bindAll(["_onClickFullscreen","_changeIcon"],this),"onfullscreenchange"in t.default.document?this._fullscreenchange="fullscreenchange":"onmozfullscreenchange"in t.default.document?this._fullscreenchange="mozfullscreenchange":"onwebkitfullscreenchange"in t.default.document?this._fullscreenchange="webkitfullscreenchange":"onmsfullscreenchange"in t.default.document&&(this._fullscreenchange="MSFullscreenChange"),this._className="mapboxgl-ctrl"};kn.prototype.onAdd=function(e){return this._map=e,this._mapContainer=this._map.getContainer(),this._container=s.create("div",this._className+" mapboxgl-ctrl-group"),this._checkFullscreenSupport()?this._setupUI():(this._container.style.display="none",t.warnOnce("This device does not support fullscreen mode.")),this._container},kn.prototype.onRemove=function(){s.remove(this._container),this._map=null,t.default.document.removeEventListener(this._fullscreenchange,this._changeIcon)},kn.prototype._checkFullscreenSupport=function(){return!!(t.default.document.fullscreenEnabled||t.default.document.mozFullScreenEnabled||t.default.document.msFullscreenEnabled||t.default.document.webkitFullscreenEnabled)},kn.prototype._setupUI=function(){var e=this._fullscreenButton=s.create("button",this._className+"-icon "+this._className+"-fullscreen",this._container);e.setAttribute("aria-label","Toggle fullscreen"),e.type="button",this._fullscreenButton.addEventListener("click",this._onClickFullscreen),t.default.document.addEventListener(this._fullscreenchange,this._changeIcon)},kn.prototype._isFullscreen=function(){return this._fullscreen},kn.prototype._changeIcon=function(){(t.default.document.fullscreenElement||t.default.document.mozFullScreenElement||t.default.document.webkitFullscreenElement||t.default.document.msFullscreenElement)===this._mapContainer!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(this._className+"-shrink"),this._fullscreenButton.classList.toggle(this._className+"-fullscreen"))},kn.prototype._onClickFullscreen=function(){this._isFullscreen()?t.default.document.exitFullscreen?t.default.document.exitFullscreen():t.default.document.mozCancelFullScreen?t.default.document.mozCancelFullScreen():t.default.document.msExitFullscreen?t.default.document.msExitFullscreen():t.default.document.webkitCancelFullScreen&&t.default.document.webkitCancelFullScreen():this._mapContainer.requestFullscreen?this._mapContainer.requestFullscreen():this._mapContainer.mozRequestFullScreen?this._mapContainer.mozRequestFullScreen():this._mapContainer.msRequestFullscreen?this._mapContainer.msRequestFullscreen():this._mapContainer.webkitRequestFullscreen&&this._mapContainer.webkitRequestFullscreen()};var Tn={closeButton:!0,closeOnClick:!0},En=function(e){function r(r){e.call(this),this.options=t.extend(Object.create(Tn),r),t.bindAll(["_update","_onClickClose"],this)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.addTo=function(e){return this._map=e,this._map.on("move",this._update),this.options.closeOnClick&&this._map.on("click",this._onClickClose),this._update(),this.fire(new t.Event("open")),this},r.prototype.isOpen=function(){return!!this._map},r.prototype.remove=function(){return this._content&&s.remove(this._content),this._container&&(s.remove(this._container),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("click",this._onClickClose),delete this._map),this.fire(new t.Event("close")),this},r.prototype.getLngLat=function(){return this._lngLat},r.prototype.setLngLat=function(t){return this._lngLat=G.convert(t),this._pos=null,this._update(),this},r.prototype.setText=function(e){return this.setDOMContent(t.default.document.createTextNode(e))},r.prototype.setHTML=function(e){var r,n=t.default.document.createDocumentFragment(),i=t.default.document.createElement("body");for(i.innerHTML=e;r=i.firstChild;)n.appendChild(r);return this.setDOMContent(n)},r.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},r.prototype._createContent=function(){this._content&&s.remove(this._content),this._content=s.create("div","mapboxgl-popup-content",this._container),this.options.closeButton&&(this._closeButton=s.create("button","mapboxgl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.setAttribute("aria-label","Close popup"),this._closeButton.innerHTML="×",this._closeButton.addEventListener("click",this._onClickClose))},r.prototype._update=function(){if(this._map&&this._lngLat&&this._content){this._container||(this._container=s.create("div","mapboxgl-popup",this._map.getContainer()),this._tip=s.create("div","mapboxgl-popup-tip",this._container),this._container.appendChild(this._content)),this._map.transform.renderWorldCopies&&(this._lngLat=dn(this._lngLat,this._pos,this._map.transform));var e=this._pos=this._map.project(this._lngLat),r=this.options.anchor,n=function e(r){if(r){if("number"==typeof r){var n=Math.round(Math.sqrt(.5*Math.pow(r,2)));return{center:new t.default$1(0,0),top:new t.default$1(0,r),"top-left":new t.default$1(n,n),"top-right":new t.default$1(-n,n),bottom:new t.default$1(0,-r),"bottom-left":new t.default$1(n,-n),"bottom-right":new t.default$1(-n,-n),left:new t.default$1(r,0),right:new t.default$1(-r,0)}}if(r instanceof t.default$1||Array.isArray(r)){var i=t.default$1.convert(r);return{center:i,top:i,"top-left":i,"top-right":i,bottom:i,"bottom-left":i,"bottom-right":i,left:i,right:i}}return{center:t.default$1.convert(r.center||[0,0]),top:t.default$1.convert(r.top||[0,0]),"top-left":t.default$1.convert(r["top-left"]||[0,0]),"top-right":t.default$1.convert(r["top-right"]||[0,0]),bottom:t.default$1.convert(r.bottom||[0,0]),"bottom-left":t.default$1.convert(r["bottom-left"]||[0,0]),"bottom-right":t.default$1.convert(r["bottom-right"]||[0,0]),left:t.default$1.convert(r.left||[0,0]),right:t.default$1.convert(r.right||[0,0])}}return e(new t.default$1(0,0))}(this.options.offset);if(!r){var i,a=this._container.offsetWidth,o=this._container.offsetHeight;i=e.y+n.bottom.ythis._map.transform.height-o?["bottom"]:[],e.xthis._map.transform.width-a/2&&i.push("right"),r=0===i.length?"bottom":i.join("-")}var l=e.add(n[r]).round();s.setTransform(this._container,mn[r]+" translate("+l.x+"px,"+l.y+"px)"),gn(this._container,r,"popup")}},r.prototype._onClickClose=function(){this.remove()},r}(t.Evented),Sn={version:"0.45.0",supported:e,workerCount:Math.max(Math.floor(a.hardwareConcurrency/2),1),setRTLTextPlugin:t.setRTLTextPlugin,Map:cn,NavigationControl:pn,GeolocateControl:bn,AttributionControl:nn,ScaleControl:wn,FullscreenControl:kn,Popup:En,Marker:vn,Style:Je,LngLat:G,LngLatBounds:W,Point:t.default$1,Evented:t.Evented,config:g,get accessToken(){return g.ACCESS_TOKEN},set accessToken(t){g.ACCESS_TOKEN=t},workerUrl:""};return Sn}),n})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],431:[function(t,e,r){"use strict";e.exports=function(t){for(var e=1<p[1][2]&&(v[0]=-v[0]),p[0][2]>p[2][0]&&(v[1]=-v[1]),p[1][0]>p[0][1]&&(v[2]=-v[2]),!0}},{"./normalize":433,"gl-mat4/clone":260,"gl-mat4/create":261,"gl-mat4/determinant":262,"gl-mat4/invert":266,"gl-mat4/transpose":275,"gl-vec3/cross":372,"gl-vec3/dot":373,"gl-vec3/length":374,"gl-vec3/normalize":376}],433:[function(t,e,r){e.exports=function(t,e){var r=e[15];if(0===r)return!1;for(var n=1/r,i=0;i<16;i++)t[i]=e[i]*n;return!0}},{}],434:[function(t,e,r){var n=t("gl-vec3/lerp"),i=t("mat4-recompose"),a=t("mat4-decompose"),o=t("gl-mat4/determinant"),s=t("quat-slerp"),l=f(),u=f(),c=f();function f(){return{translate:h(),scale:h(1),skew:h(),perspective:[0,0,0,1],quaternion:[0,0,0,1]}}function h(t){return[t||0,t||0,t||0]}e.exports=function(t,e,r,f){if(0===o(e)||0===o(r))return!1;var h=a(e,l.translate,l.scale,l.skew,l.perspective,l.quaternion),p=a(r,u.translate,u.scale,u.skew,u.perspective,u.quaternion);return!(!h||!p||(n(c.translate,l.translate,u.translate,f),n(c.skew,l.skew,u.skew,f),n(c.scale,l.scale,u.scale,f),n(c.perspective,l.perspective,u.perspective,f),s(c.quaternion,l.quaternion,u.quaternion,f),i(t,c.translate,c.scale,c.skew,c.perspective,c.quaternion),0))}},{"gl-mat4/determinant":262,"gl-vec3/lerp":375,"mat4-decompose":432,"mat4-recompose":435,"quat-slerp":1318}],435:[function(t,e,r){var n={identity:t("gl-mat4/identity"),translate:t("gl-mat4/translate"),multiply:t("gl-mat4/multiply"),create:t("gl-mat4/create"),scale:t("gl-mat4/scale"),fromRotationTranslation:t("gl-mat4/fromRotationTranslation")},i=(n.create(),n.create());e.exports=function(t,e,r,a,o,s){return n.identity(t),n.fromRotationTranslation(t,s,e),t[3]=o[0],t[7]=o[1],t[11]=o[2],t[15]=o[3],n.identity(i),0!==a[2]&&(i[9]=a[2],n.multiply(t,t,i)),0!==a[1]&&(i[9]=0,i[8]=a[1],n.multiply(t,t,i)),0!==a[0]&&(i[8]=0,i[4]=a[0],n.multiply(t,t,i)),n.scale(t,t,r),t}},{"gl-mat4/create":261,"gl-mat4/fromRotationTranslation":264,"gl-mat4/identity":265,"gl-mat4/multiply":268,"gl-mat4/scale":273,"gl-mat4/translate":274}],436:[function(t,e,r){"use strict";e.exports=Math.log2||function(t){return Math.log(t)*Math.LOG2E}},{}],437:[function(t,e,r){e.exports=t("./lib/core/core")},{"./lib/core/core":439}],438:[function(t,e,r){"use strict";var n=t("./utils/object"),i=t("./utils/bignumber/constants");function a(t,e,r){t[e]=r,t.expression.mathWithTransform[e]=r}function o(t,e,r){n.lazy(t,e,r),n.lazy(t.expression.mathWithTransform,e,r)}r.factory=function e(r,n,s,l,u){u.on("config",function(t,i){t.number!==i.number&&e(r,n,s,l,u)}),a(u,"true",!0),a(u,"false",!1),a(u,"null",null),a(u,"uninitialized",t("./utils/array").UNINITIALIZED),"BigNumber"===n.number?(a(u,"Infinity",new r.BigNumber(1/0)),a(u,"NaN",new r.BigNumber(NaN)),o(u,"pi",function(){return i.pi(r.BigNumber)}),o(u,"tau",function(){return i.tau(r.BigNumber)}),o(u,"e",function(){return i.e(r.BigNumber)}),o(u,"phi",function(){return i.phi(r.BigNumber)}),o(u,"E",function(){return u.e}),o(u,"LN2",function(){return new r.BigNumber(2).ln()}),o(u,"LN10",function(){return new r.BigNumber(10).ln()}),o(u,"LOG2E",function(){return new r.BigNumber(1).div(new r.BigNumber(2).ln())}),o(u,"LOG10E",function(){return new r.BigNumber(1).div(new r.BigNumber(10).ln())}),o(u,"PI",function(){return u.pi}),o(u,"SQRT1_2",function(){return new r.BigNumber("0.5").sqrt()}),o(u,"SQRT2",function(){return new r.BigNumber(2).sqrt()})):(a(u,"Infinity",1/0),a(u,"NaN",NaN),a(u,"pi",Math.PI),a(u,"tau",2*Math.PI),a(u,"e",Math.E),a(u,"phi",1.618033988749895),a(u,"E",u.e),a(u,"LN2",Math.LN2),a(u,"LN10",Math.LN10),a(u,"LOG2E",Math.LOG2E),a(u,"LOG10E",Math.LOG10E),a(u,"PI",u.pi),a(u,"SQRT1_2",Math.SQRT1_2),a(u,"SQRT2",Math.SQRT2)),a(u,"i",r.Complex.I),a(u,"version",t("./version"))},r.lazy=!1,r.math=!0},{"./utils/array":589,"./utils/bignumber/constants":590,"./utils/object":608,"./version":611}],439:[function(t,e,r){var n=t("./../utils/object").isFactory,i=t("./typed"),a=t("./../utils/emitter"),o=t("./function/import"),s=t("./function/config");r.create=function(t){if("function"!=typeof Object.create)throw new Error("ES5 not supported by this JavaScript engine. Please load the es5-shim and es5-sham library for compatibility.");var e=[],r=[],l=a.mixin({});l.type={},l.expression={transform:{},mathWithTransform:{}},l.typed=i.create(l.type);var u={epsilon:1e-12,matrix:"Matrix",number:"number",precision:64,predictable:!1,randomSeed:null};function c(t){if(!n(t))throw new Error("Factory object with properties `type`, `name`, and `factory` expected");var i,a=e.indexOf(t);return-1===a?(i=!0===t.math?t.factory(l.type,u,c,l.typed,l):t.factory(l.type,u,c,l.typed),e.push(t),r.push(i)):i=r[a],i}return l.import=c(o),l.config=c(s),l.expression.mathWithTransform.config=l.config,t&&l.config(t),l}},{"./../utils/emitter":603,"./../utils/object":608,"./function/config":440,"./function/import":441,"./typed":442}],440:[function(t,e,r){"use strict";var n=t("../../utils/object");function i(t,e,r){if(void 0!==t[e]&&(i=r,a=t[e],-1===i.indexOf(a))){var n=function(t,e){return t.map(function(t){return t.toLowerCase()}).indexOf(e.toLowerCase())}(r,t[e]);-1!==n?(console.warn('Warning: Wrong casing for configuration option "'+e+'", should be "'+r[n]+'" instead of "'+t[e]+'".'),t[e]=r[n]):console.warn('Warning: Unknown value "'+t[e]+'" for configuration option "'+e+'". Available options: '+r.map(JSON.stringify).join(", ")+".")}var i,a}r.name="config",r.math=!0,r.factory=function(t,e,r,a,o){var s=["Matrix","Array"],l=["number","BigNumber","Fraction"];function u(t){if(t){var r=n.map(e,n.clone);i(t,"matrix",s),i(t,"number",l),n.deepExtend(e,t);var a=n.map(e,n.clone),u=n.map(t,n.clone);return o.emit("config",a,r,u),a}return n.map(e,n.clone)}return u.MATRIX=s,u.NUMBER=l,u}},{"../../utils/object":608}],441:[function(t,e,r){"use strict";var n=t("../../utils/object").lazy,i=t("../../utils/object").isFactory,a=t("../../utils/object").traverse,o=t("../../error/ArgumentsError");r.math=!0,r.name="import",r.factory=function(t,e,r,s,l){function u(t,e,r){if(r.wrap&&"function"==typeof e&&(i=function(){for(var t=[],e=0,r=arguments.length;e15)throw new TypeError("Cannot implicitly convert a number with >15 significant digits to BigNumber (value: "+e+"). Use function bignumber(x) to convert to BigNumber.");return new t.BigNumber(e)}},{from:"number",to:"Complex",convert:function(e){return new t.Complex(e,0)}},{from:"number",to:"string",convert:function(t){return t+""}},{from:"BigNumber",to:"Complex",convert:function(e){return new t.Complex(e.toNumber(),0)}},{from:"Fraction",to:"BigNumber",convert:function(t){throw new TypeError("Cannot implicitly convert a Fraction to BigNumber or vice versa. Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.")}},{from:"Fraction",to:"Complex",convert:function(e){return new t.Complex(e.valueOf(),0)}},{from:"number",to:"Fraction",convert:function(e){if(new t.Fraction(e).valueOf()!==e)throw new TypeError("Cannot implicitly convert a number to a Fraction when there will be a loss of precision (value: "+e+"). Use function fraction(x) to convert to Fraction.");return new t.Fraction(e)}},{from:"string",to:"number",convert:function(t){var e=Number(t);if(isNaN(e))throw new Error('Cannot convert "'+t+'" to a number');return e}},{from:"string",to:"BigNumber",convert:function(e){try{return new t.BigNumber(e)}catch(t){throw new Error('Cannot convert "'+e+'" to BigNumber')}}},{from:"string",to:"Fraction",convert:function(e){try{return new t.Fraction(e)}catch(t){throw new Error('Cannot convert "'+e+'" to Fraction')}}},{from:"string",to:"Complex",convert:function(e){try{return new t.Complex(e)}catch(t){throw new Error('Cannot convert "'+e+'" to Complex')}}},{from:"boolean",to:"number",convert:function(t){return+t}},{from:"boolean",to:"BigNumber",convert:function(e){return new t.BigNumber(+e)}},{from:"boolean",to:"Fraction",convert:function(e){return new t.Fraction(+e)}},{from:"boolean",to:"string",convert:function(t){return+t}},{from:"null",to:"number",convert:function(){return 0}},{from:"null",to:"string",convert:function(){return"null"}},{from:"null",to:"BigNumber",convert:function(){return new t.BigNumber(0)}},{from:"null",to:"Fraction",convert:function(){return new t.Fraction(0)}},{from:"Array",to:"Matrix",convert:function(e){return new t.DenseMatrix(e)}},{from:"Matrix",to:"Array",convert:function(t){return t.valueOf()}}],e}},{"./../utils/bignumber/isBigNumber":592,"./../utils/collection/isMatrix":599,"./../utils/number":607,"typed-function":1384}],443:[function(t,e,r){"use strict";function n(t,e,r,i){if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");this.fn=t,this.count=e,this.min=r,this.max=i,this.message="Wrong number of arguments in function "+t+" ("+e+" provided, "+r+(null!=i?"-"+i:"")+" expected)",this.stack=(new Error).stack}n.prototype=new Error,n.prototype.constructor=Error,n.prototype.name="ArgumentsError",n.prototype.isArgumentsError=!0,e.exports=n},{}],444:[function(t,e,r){"use strict";function n(t,e,r){if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");this.actual=t,this.expected=e,this.relation=r,this.message="Dimension mismatch ("+(Array.isArray(t)?"["+t.join(", ")+"]":t)+" "+(this.relation||"!=")+" "+(Array.isArray(e)?"["+e.join(", ")+"]":e)+")",this.stack=(new Error).stack}n.prototype=new RangeError,n.prototype.constructor=RangeError,n.prototype.name="DimensionError",n.prototype.isDimensionError=!0,e.exports=n},{}],445:[function(t,e,r){"use strict";function n(t,e,r){if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");this.index=t,arguments.length<3?(this.min=0,this.max=e):(this.min=e,this.max=r),void 0!==this.min&&this.index=this.max?this.message="Index out of range ("+this.index+" > "+(this.max-1)+")":this.message="Index out of range ("+this.index+")",this.stack=(new Error).stack}n.prototype=new RangeError,n.prototype.constructor=RangeError,n.prototype.name="IndexError",n.prototype.isIndexError=!0,e.exports=n},{}],446:[function(t,e,r){"use strict";var n=t("../utils/object").extend,i=t("../utils/customs");r.name="Parser",r.path="expression",r.factory=function(e,r,a,o,s){var l=a(t("./parse"));function u(){if(!(this instanceof u))throw new SyntaxError("Constructor must be called with the new operator");this.scope={}}return u.prototype.type="Parser",u.prototype.isParser=!0,u.prototype.parse=function(t){throw new Error("Parser.parse is deprecated. Use math.parse instead.")},u.prototype.compile=function(t){throw new Error("Parser.compile is deprecated. Use math.compile instead.")},u.prototype.eval=function(t){return l(t).compile().eval(this.scope)},u.prototype.get=function(t){return t in this.scope?i.getSafeProperty(this.scope,t):void 0},u.prototype.getAll=function(){return n({},this.scope)},u.prototype.set=function(t,e){return i.setSafeProperty(this.scope,t,e)},u.prototype.remove=function(t){delete this.scope[t]},u.prototype.clear=function(){for(var t in this.scope)this.scope.hasOwnProperty(t)&&delete this.scope[t]},u},r.math=!0},{"../utils/customs":602,"../utils/object":608,"./parse":474}],447:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="compile",r.factory=function(e,r,i,a){var o=i(t("../parse"));return a("compile",{string:function(t){return o(t).compile()},"Array | Matrix":function(t){return n(t,function(t){return o(t).compile()})}})}},{"../../utils/collection/deepMap":597,"../parse":474}],448:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="eval",r.factory=function(e,r,i,a){var o=i(t("../parse"));return a("compile",{string:function(t){return o(t).compile().eval({})},"string, Object":function(t,e){return o(t).compile().eval(e)},"Array | Matrix":function(t){var e={};return n(t,function(t){return o(t).compile().eval(e)})},"Array | Matrix, Object":function(t,e){return n(t,function(t){return o(t).compile().eval(e)})}})}},{"../../utils/collection/deepMap":597,"../parse":474}],449:[function(t,e,r){"use strict";r.name="parse",r.factory=function(e,r,n,i){var a=n(t("../parse"));return i("parse",{"string | Array | Matrix":a,"string | Array | Matrix, Object":a})}},{"../parse":474}],450:[function(t,e,r){"use strict";r.name="parser",r.factory=function(e,r,n,i,a){var o=n(t("../Parser"));return i("parser",{"":function(){return new o(a)}})},r.math=!0},{"../Parser":446}],451:[function(t,e,r){"use strict";e.exports={end:!0}},{}],452:[function(t,e,r){"use strict";var n=t("../../utils/string").stringify,i=t("../../utils/customs").getSafeProperty;r.name="AccessorNode",r.path="expression.node",r.factory=function(e,r,a,o){var s=a(t("./compile")).register,l=a(t("./compile")).compile,u=a(t("./Node")),c=(a(t("./IndexNode")),a(t("./utils/access")));function f(t,r){if(!(this instanceof f))throw new SyntaxError("Constructor must be called with the new operator");if(!e.isNode(t))throw new TypeError('Node expected for parameter "object"');if(!e.isIndexNode(r))throw new TypeError('IndexNode expected for parameter "index"');this.object=t||null,this.index=r,Object.defineProperty(this,"name",{get:function(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}})}function h(t){return!(e.isAccessorNode(t)||e.isArrayNode(t)||e.isConstantNode(t)||e.isFunctionNode(t)||e.isObjectNode(t)||e.isParenthesisNode(t)||e.isSymbolNode(t))}return f.prototype=new u,f.prototype.type="AccessorNode",f.prototype.isAccessorNode=!0,s(f.prototype.type,function(t,e,r){if(!(t instanceof f))throw new TypeError("No valid AccessorNode");e.access=c,e.getSafeProperty=i;var a=l(t.object,e,r),o=l(t.index,e,r);return t.index.isObjectProperty()?"getSafeProperty("+a+", "+n(t.index.getObjectProperty())+")":t.index.needsSize()?"(function () { var object = "+a+"; var size = math.size(object).valueOf(); return access(object, "+o+");})()":"access("+a+", "+o+")"}),f.prototype.forEach=function(t){t(this.object,"object",this),t(this.index,"index",this)},f.prototype.map=function(t){return new f(this._ifNode(t(this.object,"object",this)),this._ifNode(t(this.index,"index",this)))},f.prototype.clone=function(){return new f(this.object,this.index)},f.prototype._toString=function(t){var e=this.object.toString(t);return h(this.object)&&(e="("+e+")"),e+this.index.toString(t)},f.prototype.toHTML=function(t){var e=this.object.toHTML(t);return h(this.object)&&(e='('+e+')'),e+this.index.toHTML(t)},f.prototype._toTex=function(t){var e=this.object.toTex(t);return h(this.object)&&(e="\\left("+e+"\\right)"),e+this.index.toTex(t)},f}},{"../../utils/customs":602,"../../utils/string":609,"./IndexNode":460,"./Node":461,"./compile":468,"./utils/access":470}],453:[function(t,e,r){"use strict";var n=t("../../utils/array").map,i=t("../../utils/array").join;r.name="ArrayNode",r.path="expression.node",r.factory=function(e,r,a,o){var s=a(t("./compile")).register,l=a(t("./compile")).compile,u=a(t("./Node"));function c(t){if(!(this instanceof c))throw new SyntaxError("Constructor must be called with the new operator");if(this.items=t||[],!Array.isArray(this.items)||!this.items.every(e.isNode))throw new TypeError("Array containing Nodes expected");var r=function(){throw new Error("Property `ArrayNode.nodes` is deprecated, use `ArrayNode.items` instead")};Object.defineProperty(this,"nodes",{get:r,set:r})}return c.prototype=new u,c.prototype.type="ArrayNode",c.prototype.isArrayNode=!0,s(c.prototype.type,function(t,e,r){if(!(t instanceof c))throw new TypeError("No valid ArrayNode");var a="Array"!==e.math.config().matrix,o=n(t.items,function(t){return l(t,e,r)});return(a?"math.matrix([":"[")+i(o,",")+(a?"])":"]")}),c.prototype.forEach=function(t){for(var e=0;e['+this.items.map(function(e){return e.toHTML(t)}).join(',')+']'},c.prototype._toTex=function(t){var e="\\begin{bmatrix}";return this.items.forEach(function(r){r.items?e+=r.items.map(function(e){return e.toTex(t)}).join("&"):e+=r.toTex(t),e+="\\\\"}),e+="\\end{bmatrix}"},c}},{"../../utils/array":589,"./Node":461,"./compile":468}],454:[function(t,e,r){"use strict";t("../../utils/latex");var n=t("../../utils/string").stringify,i=t("../../utils/customs").getSafeProperty,a=t("../../utils/customs").setSafeProperty;r.name="AssignmentNode",r.path="expression.node",r.factory=function(e,r,o,s){var l=o(t("./compile")).register,u=o(t("./compile")).compile,c=o(t("./Node")),f=(o(t("./ArrayNode")),o(t("../../type/matrix/function/matrix")),o(t("./utils/assign"))),h=o(t("./utils/access")),p=(t("../keywords"),t("../operators"));function d(t,r,n){if(!(this instanceof d))throw new SyntaxError("Constructor must be called with the new operator");if(this.object=t,this.index=n?r:null,this.value=n||r,!e.isSymbolNode(t)&&!e.isAccessorNode(t))throw new TypeError('SymbolNode or AccessorNode expected as "object"');if(e.isSymbolNode(t)&&"end"===t.name)throw new Error('Cannot assign to symbol "end"');if(this.index&&!e.isIndexNode(this.index))throw new TypeError('IndexNode expected as "index"');if(!e.isNode(this.value))throw new TypeError('Node expected as "value"');Object.defineProperty(this,"name",{get:function(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}})}function m(t,e){e||(e="keep");var r=p.getPrecedence(t,e),n=p.getPrecedence(t.value,e);return"all"===e||null!==n&&n<=r}return d.prototype=new c,d.prototype.type="AssignmentNode",d.prototype.isAssignmentNode=!0,l(d.prototype.type,function(t,r,o){if(!(t instanceof d))throw new TypeError("No valid AssignmentNode");var s;r.assign=f,r.access=h,r.getSafeProperty=i,r.setSafeProperty=a;var l=u(t.object,r,o),c=t.index?u(t.index,r,o):null,p=u(t.value,r,o),m=n(t.object.name);if(t.index){if(t.index.isObjectProperty())return"setSafeProperty("+l+", "+n(t.index.getObjectProperty())+", "+p+")";if(e.isSymbolNode(t.object))return"(function () { var object = "+l+"; var value = "+p+"; "+(s=t.index.needsSize()?"var size = math.size(object).valueOf();":"")+" setSafeProperty(scope, "+m+", assign(object, "+c+", value)); return value;})()";s=t.index.needsSize()?"var size = math.size(object).valueOf();":"";var g=u(t.object.object,r,o);if(t.object.index.isObjectProperty()){var v=n(t.object.index.getObjectProperty());return"(function () { var parent = "+g+"; var object = getSafeProperty(parent, "+v+"); var value = "+p+";"+s+" setSafeProperty(parent, "+v+", assign(object, "+c+", value)); return value;})()"}return"(function () { var parent = "+g+"; "+(t.object.index.needsSize()?"var size = math.size(parent).valueOf();":"")+" var parentIndex = "+u(t.object.index,r,o)+"; var object = access(parent, parentIndex); var value = "+p+"; "+s+" assign(parent, parentIndex, assign(object, "+c+", value)); return value;})()"}if(!e.isSymbolNode(t.object))throw new TypeError("SymbolNode expected as object");return"setSafeProperty(scope, "+m+", "+p+")"}),d.prototype.forEach=function(t){t(this.object,"object",this),this.index&&t(this.index,"index",this),t(this.value,"value",this)},d.prototype.map=function(t){return new d(this._ifNode(t(this.object,"object",this)),this.index?this._ifNode(t(this.index,"index",this)):null,this._ifNode(t(this.value,"value",this)))},d.prototype.clone=function(){return new d(this.object,this.index,this.value)},d.prototype._toString=function(t){var e=this.object.toString(t),r=this.index?this.index.toString(t):"",n=this.value.toString(t);return m(this,t&&t.parenthesis)&&(n="("+n+")"),e+r+" = "+n},d.prototype.toHTML=function(t){var e=this.object.toHTML(t),r=this.index?this.index.toHTML(t):"",n=this.value.toHTML(t);return m(this,t&&t.parenthesis)&&(n='('+n+')'),e+r+'='+n},d.prototype._toTex=function(t){var e=this.object.toTex(t),r=this.index?this.index.toTex(t):"",n=this.value.toTex(t);return m(this,t&&t.parenthesis)&&(n="\\left("+n+"\\right)"),e+r+":="+n},d}},{"../../type/matrix/function/matrix":573,"../../utils/customs":602,"../../utils/latex":606,"../../utils/string":609,"../keywords":451,"../operators":473,"./ArrayNode":453,"./Node":461,"./compile":468,"./utils/access":470,"./utils/assign":471}],455:[function(t,e,r){"use strict";var n=t("../../utils/array").map,i=t("../../utils/array").join;r.name="BlockNode",r.path="expression.node",r.factory=function(e,r,a,o){var s=a(t("./compile")).register,l=a(t("./compile")).compile,u=a(t("./Node")),c=a(t("../../type/resultset/ResultSet"));function f(t){if(!(this instanceof f))throw new SyntaxError("Constructor must be called with the new operator");if(!Array.isArray(t))throw new Error("Array expected");this.blocks=t.map(function(t){var r=t&&t.node,n=!t||void 0===t.visible||t.visible;if(!e.isNode(r))throw new TypeError('Property "node" must be a Node');if("boolean"!=typeof n)throw new TypeError('Property "visible" must be a boolean');return{node:r,visible:n}})}return f.prototype=new u,f.prototype.type="BlockNode",f.prototype.isBlockNode=!0,s(f.prototype.type,function(t,e,r){if(!(t instanceof f))throw new TypeError("No valid BlockNode");e.ResultSet=c;var a=n(t.blocks,function(t){var n=l(t.node,e,r);return t.visible?"results.push("+n+");":n+";"});return"(function () {var results = [];"+i(a,"")+"return new ResultSet(results);})()"}),f.prototype.forEach=function(t){for(var e=0;e;')}).join('
')},f.prototype._toTex=function(t){return this.blocks.map(function(e){return e.node.toTex(t)+(e.visible?"":";")}).join("\\;\\;\n")},f}},{"../../type/resultset/ResultSet":588,"../../utils/array":589,"./Node":461,"./compile":468}],456:[function(t,e,r){"use strict";t("../../utils/latex");var n=t("../operators");r.name="ConditionalNode",r.path="expression.node",r.factory=function(e,r,i,a){var o=i(t("./compile")).register,s=i(t("./compile")).compile,l=i(t("./Node"));function u(t,r,n){if(!(this instanceof u))throw new SyntaxError("Constructor must be called with the new operator");if(!e.isNode(t))throw new TypeError("Parameter condition must be a Node");if(!e.isNode(r))throw new TypeError("Parameter trueExpr must be a Node");if(!e.isNode(n))throw new TypeError("Parameter falseExpr must be a Node");this.condition=t,this.trueExpr=r,this.falseExpr=n}return u.prototype=new l,u.prototype.type="ConditionalNode",u.prototype.isConditionalNode=!0,o(u.prototype.type,function(t,r,n){if(!(t instanceof u))throw new TypeError("No valid ConditionalNode");return r.testCondition=function(t){if("number"==typeof t||"boolean"==typeof t||"string"==typeof t)return!!t;if(t){if(e.isBigNumber(t))return!t.isZero();if(e.isComplex(t))return!(!t.re&&!t.im);if(e.isUnit(t))return!!t.value}if(null==t)return!1;throw new TypeError('Unsupported type of condition "'+r.math.typeof(t)+'"')},"testCondition("+s(t.condition,r,n)+") ? ( "+s(t.trueExpr,r,n)+") : ( "+s(t.falseExpr,r,n)+")"}),u.prototype.forEach=function(t){t(this.condition,"condition",this),t(this.trueExpr,"trueExpr",this),t(this.falseExpr,"falseExpr",this)},u.prototype.map=function(t){return new u(this._ifNode(t(this.condition,"condition",this)),this._ifNode(t(this.trueExpr,"trueExpr",this)),this._ifNode(t(this.falseExpr,"falseExpr",this)))},u.prototype.clone=function(){return new u(this.condition,this.trueExpr,this.falseExpr)},u.prototype._toString=function(t){var e=t&&t.parenthesis?t.parenthesis:"keep",r=n.getPrecedence(this,e),i=this.condition.toString(t),a=n.getPrecedence(this.condition,e);("all"===e||"OperatorNode"===this.condition.type||null!==a&&a<=r)&&(i="("+i+")");var o=this.trueExpr.toString(t),s=n.getPrecedence(this.trueExpr,e);("all"===e||"OperatorNode"===this.trueExpr.type||null!==s&&s<=r)&&(o="("+o+")");var l=this.falseExpr.toString(t),u=n.getPrecedence(this.falseExpr,e);return("all"===e||"OperatorNode"===this.falseExpr.type||null!==u&&u<=r)&&(l="("+l+")"),i+" ? "+o+" : "+l},u.prototype.toHTML=function(t){var e=t&&t.parenthesis?t.parenthesis:"keep",r=n.getPrecedence(this,e),i=this.condition.toHTML(t),a=n.getPrecedence(this.condition,e);("all"===e||"OperatorNode"===this.condition.type||null!==a&&a<=r)&&(i='('+i+')');var o=this.trueExpr.toHTML(t),s=n.getPrecedence(this.trueExpr,e);("all"===e||"OperatorNode"===this.trueExpr.type||null!==s&&s<=r)&&(o='('+o+')');var l=this.falseExpr.toHTML(t),u=n.getPrecedence(this.falseExpr,e);return("all"===e||"OperatorNode"===this.falseExpr.type||null!==u&&u<=r)&&(l='('+l+')'),i+'?'+o+':'+l},u.prototype._toTex=function(t){return"\\begin{cases} {"+this.trueExpr.toTex(t)+"}, &\\quad{\\text{if }\\;"+this.condition.toTex(t)+"}\\\\{"+this.falseExpr.toTex(t)+"}, &\\quad{\\text{otherwise}}\\end{cases}"},u}},{"../../utils/latex":606,"../operators":473,"./Node":461,"./compile":468}],457:[function(t,e,r){"use strict";var n=t("../../utils/types").type,i=t("../../utils/string").stringify,a=t("../../utils/string").escape,o=t("../../utils/latex").escape;r.name="ConstantNode",r.path="expression.node",r.factory=function(e,r,s,l){var u=s(t("./compile")).register,c=(s(t("./compile")).compile,s(t("./Node")));function f(t,e){if(!(this instanceof f))throw new SyntaxError("Constructor must be called with the new operator");if(e){if("string"!=typeof e)throw new TypeError('String expected for parameter "valueType"');if("string"!=typeof t)throw new TypeError('String expected for parameter "value"');this.value=t,this.valueType=e}else this.value=t+"",this.valueType=n(t);if(!h[this.valueType])throw new TypeError('Unsupported type of value "'+this.valueType+'"')}var h={number:!0,string:!0,boolean:!0,undefined:!0,null:!0};return f.prototype=new c,f.prototype.type="ConstantNode",f.prototype.isConstantNode=!0,u(f.prototype.type,function(t,e,n){if(!(t instanceof f))throw new TypeError("No valid ConstantNode");switch(t.valueType){case"number":return"BigNumber"===r.number?"math.bignumber("+i(t.value)+")":"Fraction"===r.number?"math.fraction("+i(t.value)+")":(function(t){if("string"!=typeof t||!/^[\-+]?((\d+\.?\d*)|(\d*\.?\d+))([eE][+\-]?\d+)?$/.test(t))throw new Error('Invalid numeric value "'+t+'"')}(t.value),t.value.replace(/^(0*)[0-9]/,function(t,e){return t.substring(e.length)}));case"string":return i(t.value);case"boolean":return"true"===String(t.value)?"true":"false";case"undefined":return"undefined";case"null":return"null";default:throw new TypeError('Unsupported type of constant "'+t.valueType+'"')}}),f.prototype.forEach=function(t){},f.prototype.map=function(t){return this.clone()},f.prototype.clone=function(){return new f(this.value,this.valueType)},f.prototype._toString=function(t){switch(this.valueType){case"string":return i(this.value);default:return this.value}},f.prototype.toHTML=function(t){var e=a(this.value);switch(this.valueType){case"number":return''+e+"";case"string":return''+e+"";case"boolean":return''+e+"";case"null":return''+e+"";case"undefined":return''+e+"";default:return''+e+""}},f.prototype._toTex=function(t){var e,r=this.value;switch(this.valueType){case"string":return"\\mathtt{"+o(i(r))+"}";case"number":return-1!==(e=r.toLowerCase().indexOf("e"))?r.substring(0,e)+"\\cdot10^{"+r.substring(e+1)+"}":r;default:return r}},f}},{"../../utils/latex":606,"../../utils/string":609,"../../utils/types":610,"./Node":461,"./compile":468}],458:[function(t,e,r){"use strict";var n=t("../keywords"),i=t("../../utils/string").stringify,a=t("../../utils/string").escape,o=t("../../utils/array").map,s=t("../../utils/array").join,l=t("../../utils/latex"),u=t("../operators"),c=t("../../utils/customs").setSafeProperty,f=t("./utils/getUniqueArgumentName");r.name="FunctionAssignmentNode",r.path="expression.node",r.factory=function(e,r,h,p){var d=h(t("./compile")).register,m=h(t("./compile")).compile,g=h(t("./Node"));function v(t,r,i){if(!(this instanceof v))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof t)throw new TypeError('String expected for parameter "name"');if(!Array.isArray(r))throw new TypeError('Array containing strings or objects expected for parameter "params"');if(!e.isNode(i))throw new TypeError('Node expected for parameter "expr"');if(t in n)throw new Error('Illegal function name, "'+t+'" is a reserved keyword');this.name=t,this.params=r.map(function(t){return t&&t.name||t}),this.types=r.map(function(t){return t&&t.type||"any"}),this.expr=i}function y(t,e){var r=u.getPrecedence(t,e),n=u.getPrecedence(t.expr,e);return"all"===e||null!==n&&n<=r}return v.prototype=new g,v.prototype.type="FunctionAssignmentNode",v.prototype.isFunctionAssignmentNode=!0,d(v.prototype.type,function(t,e,r){if(!(t instanceof v))throw new TypeError("No valid FunctionAssignmentNode");e.typed=p,e.setSafeProperty=c;var n=Object.create(r),a=o(t.params,function(t){return n[t]=f(n),n[t]}),l=m(t.expr,e,n),u=i(t.name);return"setSafeProperty(scope, "+u+", (function () { var fn = typed("+u+", { "+i(s(t.types,","))+": function ("+s(a,",")+") { return "+l+" } }); fn.syntax = "+i(t.name+"("+s(t.params,", ")+")")+"; return fn; })())"}),v.prototype.forEach=function(t){t(this.expr,"expr",this)},v.prototype.map=function(t){var e=this._ifNode(t(this.expr,"expr",this));return new v(this.name,this.params.slice(0),e)},v.prototype.clone=function(){return new v(this.name,this.params.slice(0),this.expr)},v.prototype._toString=function(t){var e=t&&t.parenthesis?t.parenthesis:"keep",r=this.expr.toString(t);return y(this,e)&&(r="("+r+")"),this.name+"("+this.params.join(", ")+") = "+r},v.prototype.toHTML=function(t){for(var e=t&&t.parenthesis?t.parenthesis:"keep",r=[],n=0;n'+a(this.params[n])+"");var i=this.expr.toHTML(t);return y(this,e)&&(i='('+i+')'),''+a(this.name)+'('+r.join(',')+')='+i},v.prototype._toTex=function(t){var e=t&&t.parenthesis?t.parenthesis:"keep",r=this.expr.toTex(t);return y(this,e)&&(r="\\left("+r+"\\right)"),"\\mathrm{"+this.name+"}\\left("+this.params.map(l.toSymbol).join(",")+"\\right):="+r},v}},{"../../utils/array":589,"../../utils/customs":602,"../../utils/latex":606,"../../utils/string":609,"../keywords":451,"../operators":473,"./Node":461,"./compile":468,"./utils/getUniqueArgumentName":472}],459:[function(t,e,r){"use strict";var n=t("../../utils/latex"),i=t("../../utils/string").stringify,a=t("../../utils/string").escape,o=t("../../utils/object").extend,s=t("../../utils/object").hasOwnProperty,l=t("../../utils/array").map,u=t("../../utils/array").join,c=t("../../utils/customs").validateSafeMethod,f=t("./utils/getUniqueArgumentName");r.name="FunctionNode",r.path="expression.node",r.math=!0,r.factory=function(e,r,h,p,d){var m=h(t("./compile")).register,g=h(t("./compile")).compile,v=h(t("./Node")),y=h(t("./SymbolNode"));function x(t,r){if(!(this instanceof x))throw new SyntaxError("Constructor must be called with the new operator");if("string"==typeof t&&(t=new y(t)),!e.isNode(t))throw new TypeError('Node expected as parameter "fn"');if(!Array.isArray(r)||!r.every(e.isNode))throw new TypeError('Array containing Nodes expected for parameter "args"');this.fn=t,this.args=r||[],Object.defineProperty(this,"name",{get:function(){return this.fn.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}});var n=function(){throw new Error("Property `FunctionNode.object` is deprecated, use `FunctionNode.fn` instead")};Object.defineProperty(this,"object",{get:n,set:n})}x.prototype=new v,x.prototype.type="FunctionNode",x.prototype.isFunctionNode=!0,m(x.prototype.type,function(t,r,n){if(!(t instanceof x))throw new TypeError("No valid FunctionNode");var a,h=g(t.fn,r,n),p=l(t.args,function(t){return g(t,r,n)}),d=function(t,e){var r=Object.keys(e);if(0===r.length)return"scope";t.extend=o;var n=l(r,function(t){return i(t)+": "+e[t]});return"extend(extend({}, scope), {"+u(n,", ")+"})"}(r,n);if(e.isSymbolNode(t.fn)){var m=t.fn.name,v=s(r.math,m)?r.math[m]:void 0;return"function"==typeof v&&1==v.rawArgs?(a=f(r),r[a]=t.args,h+"("+a+", math, "+d+")"):h+"("+u(p,", ")+")"}if(e.isAccessorNode(t.fn)&&e.isIndexNode(t.fn.index)&&t.fn.index.isObjectProperty()){a=f(r),r[a]=t.args,r.validateSafeMethod=c;var y=g(t.fn.object,r,n),b=i(t.fn.index.getObjectProperty());return"(function () {var object = "+y+";validateSafeMethod(object, "+b+");return (object["+b+"] && object["+b+"].rawArgs) ? object["+b+"]("+a+", math, "+d+") : object["+b+"]("+u(p,", ")+")})()"}return a=f(r),r[a]=t.args,"(function () {var fn = "+h+";return (fn && fn.rawArgs) ? fn("+a+", math, "+d+") : fn("+u(p,", ")+")})()"}),x.prototype.forEach=function(t){for(var e=0;e'+a(this.fn)+'('+e.join(',')+')'};var w=x.prototype.toTex;return x.prototype.toTex=function(t){var e;return t&&"object"==typeof t.handler&&s(t.handler,this.name)&&(e=t.handler[this.name](this,t)),"undefined"!=typeof e?e:w.call(this,t)},x.prototype._toTex=function(t){var e,r,i=this.args.map(function(e){return e.toTex(t)});switch(!d[this.name]||"function"!=typeof d[this.name].toTex&&"object"!=typeof d[this.name].toTex&&"string"!=typeof d[this.name].toTex||(e=d[this.name].toTex),typeof e){case"function":r=e(this,t);break;case"string":r=_(e,this,t);break;case"object":switch(typeof e[i.length]){case"function":r=e[i.length](this,t);break;case"string":r=_(e[i.length],this,t)}}return"undefined"!=typeof r?r:_(n.defaultTemplate,this,t)},x.prototype.getIdentifier=function(){return this.type+":"+this.name},x}},{"../../utils/array":589,"../../utils/customs":602,"../../utils/latex":606,"../../utils/object":608,"../../utils/string":609,"./Node":461,"./SymbolNode":466,"./compile":468,"./utils/getUniqueArgumentName":472}],460:[function(t,e,r){"use strict";var n=t("../../utils/array").map,i=t("../../utils/array").join,a=t("../../utils/string").escape;r.name="IndexNode",r.path="expression.node",r.factory=function(e,r,o,s){var l=o(t("./compile")).register,u=o(t("./compile")).compile,c=o(t("./Node")),f=(o(t("./RangeNode")),o(t("./SymbolNode")),o(t("../../type/matrix/Range"))),h=Array.isArray;function p(t,r){if(!(this instanceof p))throw new SyntaxError("Constructor must be called with the new operator");if(this.dimensions=t,this.dotNotation=r||!1,!h(t)||!t.every(e.isNode))throw new TypeError('Array containing Nodes expected for parameter "dimensions"');if(this.dotNotation&&!this.isObjectProperty())throw new Error("dotNotation only applicable for object properties");var n=function(){throw new Error("Property `IndexNode.object` is deprecated, use `IndexNode.fn` instead")};Object.defineProperty(this,"object",{get:n,set:n})}return p.prototype=new c,p.prototype.type="IndexNode",p.prototype.isIndexNode=!0,l(p.prototype.type,function(t,r,a){if(!(t instanceof p))throw new TypeError("No valid IndexNode");var o=Object.create(a);r.range=function(t,r,n){return new f(e.isBigNumber(t)?t.toNumber():t,e.isBigNumber(r)?r.toNumber():r,e.isBigNumber(n)?n.toNumber():n)};var s=n(t.dimensions,function(t,n){return e.isRangeNode(t)?t.needsEnd()?(o.end="end","(function () {var end = size["+n+"]; return range("+u(t.start,r,o)+", "+u(t.end,r,o)+", "+(t.step?u(t.step,r,o):"1")+"); })()"):"range("+u(t.start,r,o)+", "+u(t.end,r,o)+", "+(t.step?u(t.step,r,o):"1")+")":e.isSymbolNode(t)&&"end"===t.name?(o.end="end","(function () {var end = size["+n+"]; return "+u(t,r,o)+"; })()"):u(t,r,o)});return"math.index("+i(s,", ")+")"}),p.prototype.forEach=function(t){for(var e=0;e.'+a(this.getObjectProperty())+"":'['+e.join(',')+']'},p.prototype._toTex=function(t){var e=this.dimensions.map(function(e){return e.toTex(t)});return this.dotNotation?"."+this.getObjectProperty():"_{"+e.join(",")+"}"},p.prototype.needsSize=function(){return this.dimensions.some(function(t){return e.isRangeNode(t)&&t.needsEnd()||e.isSymbolNode(t)&&"end"===t.name})},p}},{"../../type/matrix/Range":572,"../../utils/array":589,"../../utils/string":609,"./Node":461,"./RangeNode":465,"./SymbolNode":466,"./compile":468}],461:[function(t,e,r){"use strict";var n=t("../keywords"),i=t("../../utils/object").deepEqual,a=t("../../utils/object").hasOwnProperty;r.name="Node",r.path="expression.node",r.math=!0,r.factory=function(e,r,o,s,l){var u=o(t("./compile")).compile;function c(){if(!(this instanceof c))throw new SyntaxError("Constructor must be called with the new operator")}function f(t){for(var e in t)if(a(t,e)&&e in n)throw new Error('Scope contains an illegal symbol, "'+e+'" is a reserved keyword')}return c.prototype.eval=function(t){return this.compile().eval(t)},c.prototype.type="Node",c.prototype.isNode=!0,c.prototype.comment="",c.prototype.compile=function(){if(arguments.length>0)throw new Error("Calling compile(math) is deprecated. Call the function as compile() instead.");var t={math:l.expression.mathWithTransform,args:{},_validateScope:f},e=u(this,t,{}),r=Object.keys(t).map(function(t){return" var "+t+' = defs["'+t+'"];'}).join(" ")+'return { "eval": function (scope) { if (scope) _validateScope(scope); scope = scope || {}; return '+e+"; }};";return new Function("defs",r)(t)},c.prototype.forEach=function(t){throw new Error("Cannot run forEach on a Node interface")},c.prototype.map=function(t){throw new Error("Cannot run map on a Node interface")},c.prototype._ifNode=function(t){if(!e.isNode(t))throw new TypeError("Callback function must return a Node");return t},c.prototype.traverse=function(t){t(this,null,null),function t(e,r){e.forEach(function(e,n,i){r(e,n,i),t(e,r)})}(this,t)},c.prototype.transform=function(t){return function t(e,r){return e.map(function(e,n,i){return t(r(e,n,i),r)})}(t(this,null,null),t)},c.prototype.filter=function(t){var e=[];return this.traverse(function(r,n,i){t(r,n,i)&&e.push(r)}),e},c.prototype.find=function(){throw new Error("Function Node.find is deprecated. Use Node.filter instead.")},c.prototype.match=function(){throw new Error("Function Node.match is deprecated. See functions Node.filter, Node.transform, Node.traverse.")},c.prototype.clone=function(){throw new Error("Cannot clone a Node interface")},c.prototype.cloneDeep=function(){return this.map(function(t){return t.cloneDeep()})},c.prototype.equals=function(t){return!!t&&i(this,t)},c.prototype.toString=function(t){var e;if(t&&"object"==typeof t)switch(typeof t.handler){case"object":case"undefined":break;case"function":e=t.handler(this,t);break;default:throw new TypeError("Object or function expected as callback")}return"undefined"!=typeof e?e:this._toString(t)},c.prototype.toHTML=function(t){var e;if(t&&"object"==typeof t)switch(typeof t.handler){case"object":case"undefined":break;case"function":e=t.handler(this,t);break;default:throw new TypeError("Object or function expected as callback")}return"undefined"!=typeof e?e:this.toHTML(t)},c.prototype._toString=function(){throw new Error("_toString not implemented for "+this.type)},c.prototype.toTex=function(t){var e;if(t&&"object"==typeof t)switch(typeof t.handler){case"object":case"undefined":break;case"function":e=t.handler(this,t);break;default:throw new TypeError("Object or function expected as callback")}return"undefined"!=typeof e?e:this._toTex(t)},c.prototype._toTex=function(t){throw new Error("_toTex not implemented for "+this.type)},c.prototype.getIdentifier=function(){return this.type},c.prototype.getContent=function(){return this},c}},{"../../utils/object":608,"../keywords":451,"./compile":468}],462:[function(t,e,r){"use strict";var n=t("../../utils/string").stringify,i=t("../../utils/string").escape,a=t("../../utils/customs").isSafeProperty,o=t("../../utils/object").hasOwnProperty;r.name="ObjectNode",r.path="expression.node",r.factory=function(e,r,s,l){var u=s(t("./compile")).register,c=s(t("./compile")).compile,f=s(t("./Node"));function h(t){if(!(this instanceof h))throw new SyntaxError("Constructor must be called with the new operator");if(this.properties=t||{},t&&("object"!=typeof t||!Object.keys(t).every(function(r){return e.isNode(t[r])})))throw new TypeError("Object containing Nodes expected")}return h.prototype=new f,h.prototype.type="ObjectNode",h.prototype.isObjectNode=!0,u(h.prototype.type,function(t,e,r){if(!(t instanceof h))throw new TypeError("No valid ObjectNode");var i=[];for(var s in t.properties)if(o(t.properties,s)){var l=n(s),u=JSON.parse(l);if(!a(t.properties,u))throw new Error('No access to property "'+u+'"');i.push(l+": "+c(t.properties[s],e,r))}return"{"+i.join(", ")+"}"}),h.prototype.forEach=function(t){for(var e in this.properties)this.properties.hasOwnProperty(e)&&t(this.properties[e],"properties["+n(e)+"]",this)},h.prototype.map=function(t){var e={};for(var r in this.properties)this.properties.hasOwnProperty(r)&&(e[r]=this._ifNode(t(this.properties[r],"properties["+n(r)+"]",this)));return new h(e)},h.prototype.clone=function(){var t={};for(var e in this.properties)this.properties.hasOwnProperty(e)&&(t[e]=this.properties[e]);return new h(t)},h.prototype._toString=function(t){var e=[];for(var r in this.properties)this.properties.hasOwnProperty(r)&&e.push(n(r)+": "+this.properties[r].toString(t));return"{"+e.join(", ")+"}"},h.prototype.toHTML=function(t){var e=[];for(var r in this.properties)this.properties.hasOwnProperty(r)&&e.push(''+i(r)+':'+this.properties[r].toHTML(t));return'{'+e.join(',')+'}'},h.prototype._toTex=function(t){var e=[];for(var r in this.properties)this.properties.hasOwnProperty(r)&&e.push("\\mathbf{"+r+":} & "+this.properties[r].toTex(t)+"\\\\");return"\\left\\{\\begin{array}{ll}"+e.join("\n")+"\\end{array}\\right\\}"},h}},{"../../utils/customs":602,"../../utils/object":608,"../../utils/string":609,"./Node":461,"./compile":468}],463:[function(t,e,r){"use strict";var n=t("../../utils/latex"),i=t("../../utils/array").map,a=t("../../utils/array").join,o=t("../../utils/string").stringify,s=t("../../utils/string").escape,l=t("../../utils/customs").isSafeMethod,u=t("../operators");r.name="OperatorNode",r.path="expression.node",r.factory=function(e,r,c,f){var h=c(t("./compile")).register,p=c(t("./compile")).compile,d=c(t("./Node"));function m(t,r,n,i){if(!(this instanceof m))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof t)throw new TypeError('string expected for parameter "op"');if("string"!=typeof r)throw new TypeError('string expected for parameter "fn"');if(!Array.isArray(n)||!n.every(e.isNode))throw new TypeError('Array containing Nodes expected for parameter "args"');this.implicit=!0===i,this.op=t,this.fn=r,this.args=n||[]}function g(t,e,r,n,i){var a=u.getPrecedence(t,e),o=u.getAssociativity(t,e);if("all"===e||n.length>2&&"OperatorNode:add"!==t.getIdentifier()&&"OperatorNode:multiply"!==t.getIdentifier())return n.map(function(t){switch(t.getContent().type){case"ArrayNode":case"ConstantNode":case"SymbolNode":case"ParenthesisNode":return!1;default:return!0}});var s=void 0;switch(n.length){case 0:s=[];break;case 1:var l=u.getPrecedence(n[0],e);if(i&&null!==l){var c;if("keep"===e?(c=n[0].getIdentifier(),m=t.getIdentifier()):(c=n[0].getContent().getIdentifier(),m=t.getContent().getIdentifier()),!1===u.properties[a][m].latexLeftParens){s=[!1];break}if(!1===u.properties[l][c].latexParens){s=[!1];break}}if(null===l){s=[!1];break}if(l<=a){s=[!0];break}s=[!1];break;case 2:var f,h,p=u.getPrecedence(n[0],e),d=u.isAssociativeWith(t,n[0],e);f=null!==p&&(p===a&&"right"===o&&!d||p=2&&"OperatorNode:multiply"===t.getIdentifier()&&t.implicit&&"auto"===e&&"hide"===r&&(s=n.map(function(t,e){var r="ParenthesisNode"===t.getIdentifier();return!(!s[e]&&!r)})),s}return c(t("./ConstantNode")),c(t("./SymbolNode")),c(t("./FunctionNode")),m.prototype=new d,m.prototype.type="OperatorNode",m.prototype.isOperatorNode=!0,h(m.prototype.type,function(t,e,r){if(!(t instanceof m))throw new TypeError("No valid OperatorNode");if("string"!=typeof t.fn||!l(e.math,t.fn))throw e.math[t.fn]?new Error('No access to function "'+t.fn+'"'):new Error("Function "+t.fn+' missing in provided namespace "math"');var n=i(t.args,function(t){return p(t,e,r)});return"math["+o(t.fn)+"]("+a(n,", ")+")"}),m.prototype.forEach=function(t){for(var e=0;e2&&("OperatorNode:add"===this.getIdentifier()||"OperatorNode:multiply"===this.getIdentifier())){var c=n.map(function(e,r){return e=e.toString(t),i[r]&&(e="("+e+")"),e});return this.implicit&&"OperatorNode:multiply"===this.getIdentifier()&&"hide"===r?c.join(" "):c.join(" "+this.op+" ")}return this.fn+"("+this.args.join(", ")+")"},m.prototype.toHTML=function(t){var e=t&&t.parenthesis?t.parenthesis:"keep",r=t&&t.implicit?t.implicit:"hide",n=this.args,i=g(this,e,r,n,!1);if(1===n.length){var a=u.getAssociativity(this,e),o=n[0].toHTML(t);return i[0]&&(o='('+o+')'),"right"===a?''+s(this.op)+""+o:''+s(this.op)+""+o}if(2==n.length){var l=n[0].toHTML(t),c=n[1].toHTML(t);return i[0]&&(l='('+l+')'),i[1]&&(c='('+c+')'),this.implicit&&"OperatorNode:multiply"===this.getIdentifier()&&"hide"==r?l+''+c:l+''+s(this.op)+""+c}if(n.length>2&&("OperatorNode:add"===this.getIdentifier()||"OperatorNode:multiply"===this.getIdentifier())){var f=n.map(function(e,r){return e=e.toHTML(t),i[r]&&(e='('+e+')'),e});return this.implicit&&"OperatorNode:multiply"===this.getIdentifier()&&"hide"===r?f.join(''):f.join(''+s(this.op)+"")}return''+s(this.fn)+'('+f.join(',')+')'},m.prototype._toTex=function(t){var e=t&&t.parenthesis?t.parenthesis:"keep",r=t&&t.implicit?t.implicit:"hide",i=this.args,a=g(this,e,r,i,!0),o=n.operators[this.fn];if(o="undefined"==typeof o?this.op:o,1===i.length){var s=u.getAssociativity(this,e),l=i[0].toTex(t);return a[0]&&(l="\\left("+l+"\\right)"),"right"===s?o+l:l+o}if(2===i.length){var c=i[0],f=c.toTex(t);a[0]&&(f="\\left("+f+"\\right)");var h,p=i[1].toTex(t);switch(a[1]&&(p="\\left("+p+"\\right)"),h="keep"===e?c.getIdentifier():c.getContent().getIdentifier(),this.getIdentifier()){case"OperatorNode:divide":return o+"{"+f+"}{"+p+"}";case"OperatorNode:pow":switch(f="{"+f+"}",p="{"+p+"}",h){case"ConditionalNode":case"OperatorNode:divide":f="\\left("+f+"\\right)"}case"OperatorNode:multiply":if(this.implicit&&"hide"===r)return f+"~"+p}return f+o+p}if(i.length>2&&("OperatorNode:add"===this.getIdentifier()||"OperatorNode:multiply"===this.getIdentifier())){var d=i.map(function(e,r){return e=e.toTex(t),a[r]&&(e="\\left("+e+"\\right)"),e});return"OperatorNode:multiply"===this.getIdentifier()&&this.implicit?d.join("~"):d.join(o)}return"\\mathrm{"+this.fn+"}\\left("+i.map(function(e){return e.toTex(t)}).join(",")+"\\right)"},m.prototype.getIdentifier=function(){return this.type+":"+this.fn},m}},{"../../utils/array":589,"../../utils/customs":602,"../../utils/latex":606,"../../utils/string":609,"../operators":473,"./ConstantNode":457,"./FunctionNode":459,"./Node":461,"./SymbolNode":466,"./compile":468}],464:[function(t,e,r){"use strict";r.name="ParenthesisNode",r.path="expression.node",r.factory=function(e,r,n,i){var a=n(t("./compile")).register,o=n(t("./compile")).compile,s=n(t("./Node"));function l(t){if(!(this instanceof l))throw new SyntaxError("Constructor must be called with the new operator");if(!e.isNode(t))throw new TypeError('Node expected for parameter "content"');this.content=t}return l.prototype=new s,l.prototype.type="ParenthesisNode",l.prototype.isParenthesisNode=!0,a(l.prototype.type,function(t,e,r){if(!(t instanceof l))throw new TypeError("No valid ParenthesisNode");return o(t.content,e,r)}),l.prototype.getContent=function(){return this.content.getContent()},l.prototype.forEach=function(t){t(this.content,"content",this)},l.prototype.map=function(t){return new l(t(this.content,"content",this))},l.prototype.clone=function(){return new l(this.content)},l.prototype._toString=function(t){return!t||t&&!t.parenthesis||t&&"keep"===t.parenthesis?"("+this.content.toString(t)+")":this.content.toString(t)},l.prototype.toHTML=function(t){return!t||t&&!t.parenthesis||t&&"keep"===t.parenthesis?'('+this.content.toHTML(t)+')':this.content.toHTML(t)},l.prototype._toTex=function(t){return!t||t&&!t.parenthesis||t&&"keep"===t.parenthesis?"\\left("+this.content.toTex(t)+"\\right)":this.content.toTex(t)},l}},{"./Node":461,"./compile":468}],465:[function(t,e,r){"use strict";var n=t("../operators");r.name="RangeNode",r.path="expression.node",r.factory=function(e,r,i,a){var o=i(t("./compile")).register,s=i(t("./compile")).compile,l=i(t("./Node"));function u(t,r,n){if(!(this instanceof u))throw new SyntaxError("Constructor must be called with the new operator");if(!e.isNode(t))throw new TypeError("Node expected");if(!e.isNode(r))throw new TypeError("Node expected");if(n&&!e.isNode(n))throw new TypeError("Node expected");if(arguments.length>3)throw new Error("Too many arguments");this.start=t,this.end=r,this.step=n||null}function c(t,e){var r=n.getPrecedence(t,e),i={},a=n.getPrecedence(t.start,e);if(i.start=null!==a&&a<=r||"all"===e,t.step){var o=n.getPrecedence(t.step,e);i.step=null!==o&&o<=r||"all"===e}var s=n.getPrecedence(t.end,e);return i.end=null!==s&&s<=r||"all"===e,i}return u.prototype=new l,u.prototype.type="RangeNode",u.prototype.isRangeNode=!0,u.prototype.needsEnd=function(){return this.filter(function(t){return e.isSymbolNode(t)&&"end"===t.name}).length>0},o(u.prototype.type,function(t,e,r){if(!(t instanceof u))throw new TypeError("No valid RangeNode");return"math.range("+s(t.start,e,r)+", "+s(t.end,e,r)+(t.step?", "+s(t.step,e,r):"")+")"}),u.prototype.forEach=function(t){t(this.start,"start",this),t(this.end,"end",this),this.step&&t(this.step,"step",this)},u.prototype.map=function(t){return new u(this._ifNode(t(this.start,"start",this)),this._ifNode(t(this.end,"end",this)),this.step&&this._ifNode(t(this.step,"step",this)))},u.prototype.clone=function(){return new u(this.start,this.end,this.step&&this.step)},u.prototype._toString=function(t){var e,r=c(this,t&&t.parenthesis?t.parenthesis:"keep"),n=this.start.toString(t);if(r.start&&(n="("+n+")"),e=n,this.step){var i=this.step.toString(t);r.step&&(i="("+i+")"),e+=":"+i}var a=this.end.toString(t);return r.end&&(a="("+a+")"),e+=":"+a},u.prototype.toHTML=function(t){var e,r=c(this,t&&t.parenthesis?t.parenthesis:"keep"),n=this.start.toHTML(t);if(r.start&&(n='('+n+')'),e=n,this.step){var i=this.step.toHTML(t);r.step&&(i='('+i+')'),e+=':'+i}var a=this.end.toHTML(t);return r.end&&(a='('+a+')'),e+=':'+a},u.prototype._toTex=function(t){var e=c(this,t&&t.parenthesis?t.parenthesis:"keep"),r=this.start.toTex(t);if(e.start&&(r="\\left("+r+"\\right)"),this.step){var n=this.step.toTex(t);e.step&&(n="\\left("+n+"\\right)"),r+=":"+n}var i=this.end.toTex(t);return e.end&&(i="\\left("+i+"\\right)"),r+=":"+i},u}},{"../operators":473,"./Node":461,"./compile":468}],466:[function(t,e,r){"use strict";var n=t("../../utils/latex"),i=t("../../utils/string").stringify,a=t("../../utils/string").escape,o=t("../../utils/object").hasOwnProperty,s=t("../../utils/customs").getSafeProperty;r.name="SymbolNode",r.path="expression.node",r.math=!0,r.factory=function(e,r,l,u,c){var f=l(t("./compile")).register,h=(l(t("./compile")).compile,l(t("./Node")));function p(t){return!!e.Unit&&e.Unit.isValuelessUnit(t)}function d(t){if(!(this instanceof d))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof t)throw new TypeError('String expected for parameter "name"');this.name=t}function m(t){throw new Error("Undefined symbol "+t)}return d.prototype=new h,d.prototype.type="SymbolNode",d.prototype.isSymbolNode=!0,f(d.prototype.type,function(t,r,n){if(!(t instanceof d))throw new TypeError("No valid SymbolNode");r.undef=m,r.Unit=e.Unit,r.getSafeProperty=s,r.hasOwnProperty=o;var a=i(t.name);return o(n,t.name)?n[t.name]:t.name in r.math?"("+a+" in scope ? getSafeProperty(scope, "+a+") : getSafeProperty(math, "+a+"))":"("+a+" in scope ? getSafeProperty(scope, "+a+") : "+(p(t.name)?"new Unit(null, "+a+")":"undef("+a+")")+")"}),d.prototype.forEach=function(t){},d.prototype.map=function(t){return this.clone()},d.prototype.clone=function(){return new d(this.name)},d.prototype._toString=function(t){return this.name},d.prototype.toHTML=function(t){var e=a(this.name);return"true"==e||"false"==e?''+e+"":"i"==e?''+e+"":"Infinity"==e?''+e+"":"NaN"==e?''+e+"":"null"==e?''+e+"":"uninitialized"==e?''+e+"":''+e+""},d.prototype._toTex=function(t){var e=!1;"undefined"==typeof c[this.name]&&p(this.name)&&(e=!0);var r=n.toSymbol(this.name,e);return"\\"===r[0]?r:" "+r},d}},{"../../utils/customs":602,"../../utils/latex":606,"../../utils/object":608,"../../utils/string":609,"./Node":461,"./compile":468}],467:[function(t,e,r){"use strict";r.name="UpdateNode",r.path="expression.node",r.factory=function(t,e,r,n){return function(){throw new Error("UpdateNode is deprecated. Use AssignmentNode instead.")}}},{}],468:[function(t,e,r){var n=t("../../utils/object").hasOwnProperty;r.factory=function(){var t={};return{register:function(e,r){if(void 0!==t[e])throw new Error('Cannot register type "'+e+'": already exists');t[e]=r},compile:function(e,r,i){if(n(t,e.type))return(0,t[e.type])(e,r,i);if("function"!=typeof e._compile||n(e,"_compile"))throw new Error('Cannot compile node: unknown type "'+e.type+'"');return e._compile(r,i)}}}},{"../../utils/object":608}],469:[function(t,e,r){e.exports=[t("./AccessorNode"),t("./ArrayNode"),t("./AssignmentNode"),t("./BlockNode"),t("./ConditionalNode"),t("./ConstantNode"),t("./IndexNode"),t("./FunctionAssignmentNode"),t("./FunctionNode"),t("./Node"),t("./ObjectNode"),t("./OperatorNode"),t("./ParenthesisNode"),t("./RangeNode"),t("./SymbolNode"),t("./UpdateNode")]},{"./AccessorNode":452,"./ArrayNode":453,"./AssignmentNode":454,"./BlockNode":455,"./ConditionalNode":456,"./ConstantNode":457,"./FunctionAssignmentNode":458,"./FunctionNode":459,"./IndexNode":460,"./Node":461,"./ObjectNode":462,"./OperatorNode":463,"./ParenthesisNode":464,"./RangeNode":465,"./SymbolNode":466,"./UpdateNode":467}],470:[function(t,e,r){"use strict";var n=t("../../transform/error.transform").transform,i=t("../../../utils/customs").getSafeProperty;r.factory=function(e,r,a,o){var s=a(t("../../../function/matrix/subset"));return function(t,e){try{if(Array.isArray(t))return s(t,e);if(t&&"function"==typeof t.subset)return t.subset(e);if("string"==typeof t)return s(t,e);if("object"==typeof t){if(!e.isObjectProperty())throw new TypeError("Cannot apply a numeric index as object property");return i(t,e.getObjectProperty())}throw new TypeError("Cannot apply index: unsupported type of object")}catch(t){throw n(t)}}}},{"../../../function/matrix/subset":527,"../../../utils/customs":602,"../../transform/error.transform":476}],471:[function(t,e,r){"use strict";var n=t("../../transform/error.transform").transform,i=t("../../../utils/customs").setSafeProperty;r.factory=function(e,r,a,o){var s=a(t("../../../function/matrix/subset")),l=a(t("../../../type/matrix/function/matrix"));return function(t,e,r){try{if(Array.isArray(t))return l(t).subset(e,r).valueOf();if(t&&"function"==typeof t.subset)return t.subset(e,r);if("string"==typeof t)return s(t,e,r);if("object"==typeof t){if(!e.isObjectProperty())throw TypeError("Cannot apply a numeric index as object property");return i(t,e.getObjectProperty(),r),t}throw new TypeError("Cannot apply index: unsupported type of object")}catch(t){throw n(t)}}}},{"../../../function/matrix/subset":527,"../../../type/matrix/function/matrix":573,"../../../utils/customs":602,"../../transform/error.transform":476}],472:[function(t,e,r){e.exports=function(t){return"arg"+Object.keys(t).length}},{}],473:[function(t,e,r){"use strict";var n=[{AssignmentNode:{},FunctionAssignmentNode:{}},{ConditionalNode:{latexLeftParens:!1,latexRightParens:!1,latexParens:!1}},{"OperatorNode:or":{associativity:"left",associativeWith:[]}},{"OperatorNode:xor":{associativity:"left",associativeWith:[]}},{"OperatorNode:and":{associativity:"left",associativeWith:[]}},{"OperatorNode:bitOr":{associativity:"left",associativeWith:[]}},{"OperatorNode:bitXor":{associativity:"left",associativeWith:[]}},{"OperatorNode:bitAnd":{associativity:"left",associativeWith:[]}},{"OperatorNode:equal":{associativity:"left",associativeWith:[]},"OperatorNode:unequal":{associativity:"left",associativeWith:[]},"OperatorNode:smaller":{associativity:"left",associativeWith:[]},"OperatorNode:larger":{associativity:"left",associativeWith:[]},"OperatorNode:smallerEq":{associativity:"left",associativeWith:[]},"OperatorNode:largerEq":{associativity:"left",associativeWith:[]}},{"OperatorNode:leftShift":{associativity:"left",associativeWith:[]},"OperatorNode:rightArithShift":{associativity:"left",associativeWith:[]},"OperatorNode:rightLogShift":{associativity:"left",associativeWith:[]}},{"OperatorNode:to":{associativity:"left",associativeWith:[]}},{RangeNode:{}},{"OperatorNode:add":{associativity:"left",associativeWith:["OperatorNode:add","OperatorNode:subtract"]},"OperatorNode:subtract":{associativity:"left",associativeWith:[]}},{"OperatorNode:multiply":{associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","Operator:dotMultiply","Operator:dotDivide"]},"OperatorNode:divide":{associativity:"left",associativeWith:[],latexLeftParens:!1,latexRightParens:!1,latexParens:!1},"OperatorNode:dotMultiply":{associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","OperatorNode:dotMultiply","OperatorNode:doDivide"]},"OperatorNode:dotDivide":{associativity:"left",associativeWith:[]},"OperatorNode:mod":{associativity:"left",associativeWith:[]}},{"OperatorNode:unaryPlus":{associativity:"right"},"OperatorNode:unaryMinus":{associativity:"right"},"OperatorNode:bitNot":{associativity:"right"},"OperatorNode:not":{associativity:"right"}},{"OperatorNode:pow":{associativity:"right",associativeWith:[],latexRightParens:!1},"OperatorNode:dotPow":{associativity:"right",associativeWith:[]}},{"OperatorNode:factorial":{associativity:"left"}},{"OperatorNode:transpose":{associativity:"left"}}];function i(t,e){var r=t;"keep"!==e&&(r=t.getContent());for(var i=r.getIdentifier(),a=0;a":!0,"<=":!0,">=":!0,"<<":!0,">>":!0,">>>":!0},M={mod:!0,to:!0,in:!0,and:!0,xor:!0,or:!0,not:!0},k={},T="",E="",S=0,C="",L="",O=w.NULL,z=0,D=null;function P(){S++,C=T.charAt(S)}function I(){return T.charAt(S-1)}function N(){return T.charAt(S+1)}function R(){for(O=w.NULL,L="",E="";_.isWhitespace(C,z);)P();if("#"==C)for(;"\n"!=C&&""!=C;)E+=C,P();if(""!=C){if("\n"==C&&!z)return O=w.DELIMITER,L=C,void P();var t=C+N(),e=t+T.charAt(S+2);if(3==e.length&&A[e])return O=w.DELIMITER,L=e,P(),P(),void P();if(2==t.length&&A[t])return O=w.DELIMITER,L=t,P(),void P();if(A[C])return O=w.DELIMITER,L=C,void P();if(_.isDigitDot(C)){if(O=w.NUMBER,"."==C)L+=C,P(),_.isDigit(C)||(O=w.DELIMITER);else{for(;_.isDigit(C);)L+=C,P();_.isDecimalMark(C,N())&&(L+=C,P())}for(;_.isDigit(C);)L+=C,P();if(t=N(),"E"==C||"e"==C)if(_.isDigit(t)||"-"==t||"+"==t){if(L+=C,P(),"+"!=C&&"-"!=C||(L+=C,P()),!_.isDigit(C))throw at('Digit expected, got "'+C+'"');for(;_.isDigit(C);)L+=C,P();if(_.isDecimalMark(C,N()))throw at('Digit expected, got "'+C+'"')}else if("."==t)throw P(),at('Digit expected, got "'+C+'"')}else{if(!_.isAlpha(C,I(),N())){for(O=w.UNKNOWN;""!=C;)L+=C,P();throw at('Syntax error in part "'+L+'"')}for(;_.isAlpha(C,I(),N())||_.isDigit(C);)L+=C,P();O=M.hasOwnProperty(L)?w.DELIMITER:w.SYMBOL}}else O=w.DELIMITER}function F(){do{R()}while("\n"==L)}function B(){z++}function j(){z--}function V(){S=0,C=T.charAt(0),z=0,D=null,R();var t=function(){var t,e,r=[];for(""!=L&&"\n"!=L&&";"!=L&&((t=U()).comment=E);"\n"==L||";"==L;)0==r.length&&t&&(e=";"!=L,r.push({node:t,visible:e})),R(),"\n"!=L&&";"!=L&&""!=L&&((t=U()).comment=E,e=";"!=L,r.push({node:t,visible:e}));return r.length>0?new c(r):(t||((t=new h("undefined","undefined")).comment=E),t)}();if(""!=L)throw O==w.DELIMITER?ot("Unexpected operator "+L):at('Unexpected part "'+L+'"');return t}function U(){var t,r,n,i,a=function(){for(var t=function(){for(var t=q();"or"==L;)F(),t=new g("or","or",[t,q()]);return t}();"?"==L;){var e=D;D=z,F();var r=t,n=U();if(":"!=L)throw at("False part of conditional expression expected");D=null,F();var i=U();t=new f(r,n,i),D=e}return t}();if("="==L){if(e.isSymbolNode(a))return t=a.name,F(),n=U(),new u(new b(t),n);if(e.isAccessorNode(a))return F(),n=U(),new u(a.object,a.index,n);if(e.isFunctionNode(a)&&e.isSymbolNode(a.fn)&&(i=!0,r=[],t=a.name,a.args.forEach(function(t,n){e.isSymbolNode(t)?r[n]=t.name:i=!1}),i))return F(),n=U(),new p(t,r,n);throw at("Invalid left hand side of assignment operator =")}return a}function q(){for(var t=H();"xor"==L;)F(),t=new g("xor","xor",[t,H()]);return t}function H(){for(var t=G();"and"==L;)F(),t=new g("and","and",[t,G()]);return t}function G(){for(var t=W();"|"==L;)F(),t=new g("|","bitOr",[t,W()]);return t}function W(){for(var t=Y();"^|"==L;)F(),t=new g("^|","bitXor",[t,Y()]);return t}function Y(){for(var t=Z();"&"==L;)F(),t=new g("&","bitAnd",[t,Z()]);return t}function Z(){var t,e,r,n,i;for(t=X(),e={"==":"equal","!=":"unequal","<":"smaller",">":"larger","<=":"smallerEq",">=":"largerEq"};e.hasOwnProperty(L);)n=e[r=L],F(),i=[t,X()],t=new g(r,n,i);return t}function X(){var t,e,r,n,i;for(t=$(),e={"<<":"leftShift",">>":"rightArithShift",">>>":"rightLogShift"};e.hasOwnProperty(L);)n=e[r=L],F(),i=[t,$()],t=new g(r,n,i);return t}function $(){var t,e,r,n,i;for(t=J(),e={to:"to",in:"to"};e.hasOwnProperty(L);)n=e[r=L],F(),"in"===r&&""===L?t=new g("*","multiply",[t,new b("in")],!0):(i=[t,J()],t=new g(r,n,i));return t}function J(){var t,e=[];if(t=":"==L?new h("1","number"):K(),":"==L&&D!==z){for(e.push(t);":"==L&&e.length<3;)F(),")"==L||"]"==L||","==L||""==L?e.push(new b("end")):e.push(K());t=3==e.length?new x(e[0],e[2],e[1]):new x(e[0],e[1])}return t}function K(){var t,e,r,n,i;for(t=Q(),e={"+":"add","-":"subtract"};e.hasOwnProperty(L);)n=e[r=L],F(),i=[t,Q()],t=new g(r,n,i);return t}function Q(){var t,r,n,i,a;for(r=t=tt(),n={"*":"multiply",".*":"dotMultiply","/":"divide","./":"dotDivide","%":"mod",mod:"mod"};;)if(n.hasOwnProperty(L))a=n[i=L],F(),r=tt(),t=new g(i,a,[t,r]);else{if(!(O===w.SYMBOL||"in"===L&&e.isConstantNode(t))&&(O!==w.NUMBER||e.isConstantNode(r)||e.isOperatorNode(r)&&"!"!==r.op)&&"("!==L)break;r=tt(),t=new g("*","multiply",[t,r],!0)}return t}function tt(){var t,e,r,n={"-":"unaryMinus","+":"unaryPlus","~":"bitNot",not:"not"};return n.hasOwnProperty(L)?(r=n[L],t=L,F(),e=[tt()],new g(t,r,e)):function(){var t,e,r,n;return t=function(){var t,e,r,n;for(t=function(){var t,e,r=[];if(O==w.SYMBOL&&k.hasOwnProperty(L)){var n=k[L];if(R(),"("==L){if(r=[],B(),R(),")"!=L)for(r.push(U());","==L;)R(),r.push(U());if(")"!=L)throw at("Parenthesis ) expected");j(),R()}return new n(r)}return O==w.SYMBOL||O==w.DELIMITER&&L in M?(t=L,R(),et(new b(t))):'"'==L?(e=rt(),et(new h(e,"string"))):function(){var t,e,r,n;if("["==L){if(B(),R(),"]"!=L){var i=nt();if(";"==L){for(r=1,e=[i];";"==L;)R(),e[r]=nt(),r++;if("]"!=L)throw at("End of matrix ] expected");j(),R(),n=e[0].items.length;for(var a=1;a0},_.isDecimalMark=function(t,e){return"."==t&&"/"!==e&&"*"!==e&&"^"!==e},_.isDigitDot=function(t){return t>="0"&&t<="9"||"."==t},_.isDigit=function(t){return t>="0"&&t<="9"},_}},{"../error/ArgumentsError":443,"../utils/collection/deepMap":597,"./node/AccessorNode":452,"./node/ArrayNode":453,"./node/AssignmentNode":454,"./node/BlockNode":455,"./node/ConditionalNode":456,"./node/ConstantNode":457,"./node/FunctionAssignmentNode":458,"./node/FunctionNode":459,"./node/IndexNode":460,"./node/ObjectNode":462,"./node/OperatorNode":463,"./node/ParenthesisNode":464,"./node/RangeNode":465,"./node/SymbolNode":466}],475:[function(t,e,r){"use strict";var n=t("./error.transform").transform;r.name="concat",r.path="expression.transform",r.factory=function(e,r,i,a){var o=i(t("../../function/matrix/concat"));return a("concat",{"...any":function(t){var r=t.length-1,i=t[r];e.isNumber(i)?t[r]=i-1:e.isBigNumber(i)&&(t[r]=i.minus(1));try{return o.apply(null,t)}catch(t){throw n(t)}}})}},{"../../function/matrix/concat":522,"./error.transform":476}],476:[function(t,e,r){var n=t("../../error/IndexError");r.transform=function(t){return t&&t.isIndexError?new n(t.index+1,t.min+1,void 0!==t.max?t.max+1:void 0):t}},{"../../error/IndexError":445}],477:[function(t,e,r){"use strict";var n=t("../../utils/array").filter,i=t("../../utils/array").filterRegExp,a=t("../../utils/function").maxArgumentCount;function o(t,e){var r=a(e);return n(t,function(t,n,i){return 1===r?e(t):2===r?e(t,[n+1]):e(t,[n+1],i)})}r.name="filter",r.path="expression.transform",r.factory=function(e,r,n,a){var s=n(t("./utils/compileInlineExpression")),l=n(t("../../type/matrix/function/matrix"));function u(t,r,n){var i,a;return t[0]&&(i=t[0].compile().eval(n)),t[1]&&(a=e.isSymbolNode(t[1])||e.isFunctionAssignmentNode(t[1])?t[1].compile().eval(n):s(t[1],r,n)),c(i,a)}u.rawArgs=!0;var c=a("filter",{"Array, function":o,"Matrix, function":function(t,e){return l(o(t.toArray(),e))},"Array, RegExp":i,"Matrix, RegExp":function(t,e){return l(i(t.toArray(),e))}});return c.toTex=void 0,u}},{"../../type/matrix/function/matrix":573,"../../utils/array":589,"../../utils/function":604,"./utils/compileInlineExpression":487}],478:[function(t,e,r){"use strict";var n=t("../../utils/function").maxArgumentCount,i=t("../../utils/array").forEach;r.name="forEach",r.path="expression.transform",r.factory=function(e,r,a,o){var s=a(t("./utils/compileInlineExpression"));function l(t,r,n){var i,a;return t[0]&&(i=t[0].compile().eval(n)),t[1]&&(a=e.isSymbolNode(t[1])||e.isFunctionAssignmentNode(t[1])?t[1].compile().eval(n):s(t[1],r,n)),u(i,a)}l.rawArgs=!0;var u=o("forEach",{"Array | Matrix, function":function(t,e){var r=n(e),a=function(n,o){Array.isArray(n)?i(n,function(t,e){a(t,o.concat(e+1))}):1===r?e(n):2===r?e(n,o):e(n,o,t)};a(t.valueOf(),[])}});return l}},{"../../utils/array":589,"../../utils/function":604,"./utils/compileInlineExpression":487}],479:[function(t,e,r){e.exports=[t("./concat.transform"),t("./filter.transform"),t("./forEach.transform"),t("./index.transform"),t("./map.transform"),t("./max.transform"),t("./mean.transform"),t("./min.transform"),t("./range.transform"),t("./subset.transform")]},{"./concat.transform":475,"./filter.transform":477,"./forEach.transform":478,"./index.transform":480,"./map.transform":481,"./max.transform":482,"./mean.transform":483,"./min.transform":484,"./range.transform":485,"./subset.transform":486}],480:[function(t,e,r){"use strict";r.name="index",r.path="expression.transform",r.factory=function(t,e,r){return function(){for(var e=[],r=0,n=arguments.length;r0?0:2;else if(i&&!0===i.isSet)i=i.map(function(t){return t-1});else if(t.isArray(i)||t.isMatrix(i))i=i.map(function(t){return t-1});else if(t.isNumber(i))i--;else if(t.isBigNumber(i))i=i.toNumber()-1;else if("string"!=typeof i)throw new TypeError("Dimension must be an Array, Matrix, number, string, or Range");e[r]=i}var a=new t.Index;return t.Index.apply(a,e),a}}},{}],481:[function(t,e,r){"use strict";var n=t("../../utils/function").maxArgumentCount,i=t("../../utils/array").map;function a(t,e,r){var a=n(e);return function t(n,o){return Array.isArray(n)?i(n,function(e,r){return t(e,o.concat(r+1))}):1===a?e(n):2===a?e(n,o):e(n,o,r)}(t,[])}r.name="map",r.path="expression.transform",r.factory=function(e,r,n,i){var o=n(t("./utils/compileInlineExpression")),s=n(t("../../type/matrix/function/matrix"));function l(t,r,n){var i,a;return t[0]&&(i=t[0].compile().eval(n)),t[1]&&(a=e.isSymbolNode(t[1])||e.isFunctionAssignmentNode(t[1])?t[1].compile().eval(n):o(t[1],r,n)),u(i,a)}l.rawArgs=!0;var u=i("map",{"Array, function":function(t,e){return a(t,e,t)},"Matrix, function":function(t,e){return s(a(t.valueOf(),e,t))}});return l}},{"../../type/matrix/function/matrix":573,"../../utils/array":589,"../../utils/function":604,"./utils/compileInlineExpression":487}],482:[function(t,e,r){"use strict";var n=t("./error.transform").transform,i=t("../../utils/collection/isCollection");r.name="max",r.path="expression.transform",r.factory=function(e,r,a,o){var s=a(t("../../function/statistics/max"));return o("max",{"...any":function(t){if(2==t.length&&i(t[0])){var r=t[1];e.isNumber(r)?t[1]=r-1:e.isBigNumber(r)&&(t[1]=r.minus(1))}try{return s.apply(null,t)}catch(t){throw n(t)}}})}},{"../../function/statistics/max":534,"../../utils/collection/isCollection":598,"./error.transform":476}],483:[function(t,e,r){"use strict";var n=t("./error.transform").transform,i=t("../../utils/collection/isCollection");r.name="mean",r.path="expression.transform",r.factory=function(e,r,a,o){var s=a(t("../../function/statistics/mean"));return o("mean",{"...any":function(t){if(2==t.length&&i(t[0])){var r=t[1];e.isNumber(r)?t[1]=r-1:e.isBigNumber(r)&&(t[1]=r.minus(1))}try{return s.apply(null,t)}catch(t){throw n(t)}}})}},{"../../function/statistics/mean":535,"../../utils/collection/isCollection":598,"./error.transform":476}],484:[function(t,e,r){"use strict";var n=t("./error.transform").transform,i=t("../../utils/collection/isCollection");r.name="min",r.path="expression.transform",r.factory=function(e,r,a,o){var s=a(t("../../function/statistics/min"));return o("min",{"...any":function(t){if(2==t.length&&i(t[0])){var r=t[1];e.isNumber(r)?t[1]=r-1:e.isBigNumber(r)&&(t[1]=r.minus(1))}try{return s.apply(null,t)}catch(t){throw n(t)}}})}},{"../../function/statistics/min":536,"../../utils/collection/isCollection":598,"./error.transform":476}],485:[function(t,e,r){"use strict";r.name="range",r.path="expression.transform",r.factory=function(e,r,n,i){var a=n(t("../../function/matrix/range"));return i("range",{"...any":function(t){return"boolean"!=typeof t[t.length-1]&&t.push(!0),a.apply(null,t)}})}},{"../../function/matrix/range":526}],486:[function(t,e,r){"use strict";var n=t("./error.transform").transform;r.name="subset",r.path="expression.transform",r.factory=function(e,r,i,a){var o=i(t("../../function/matrix/subset"));return a("subset",{"...any":function(t){try{return o.apply(null,t)}catch(t){throw n(t)}}})}},{"../../function/matrix/subset":527,"./error.transform":476}],487:[function(t,e,r){r.factory=function(t,e,r,n){return function(e,r,n){var i=e.filter(function(e){return t.isSymbolNode(e)&&!(e.name in r)&&!(e.name in n)})[0];if(!i)throw new Error('No undefined variable found in inline expression "'+e+'"');var a=i.name,o=Object.create(n),s=e.compile();return function(t){return o[a]=t,s.eval(o)}}}},{}],488:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="abs",r.factory=function(t,e,r,i){var a=i("abs",{number:Math.abs,Complex:function(t){return t.abs()},BigNumber:function(t){return t.abs()},Fraction:function(t){return t.abs()},"Array | Matrix":function(t){return n(t,a,!0)},Unit:function(t){return t.abs()}});return a.toTex={1:"\\left|${args[0]}\\right|"},a}},{"../../utils/collection/deepMap":597}],489:[function(t,e,r){"use strict";var n=t("../../utils/object").extend;r.name="add",r.factory=function(e,r,i,a){var o=i(t("../../type/matrix/function/matrix")),s=i(t("./addScalar")),l=t("../../utils/latex.js"),u=i(t("../../type/matrix/utils/algorithm01")),c=i(t("../../type/matrix/utils/algorithm04")),f=i(t("../../type/matrix/utils/algorithm10")),h=i(t("../../type/matrix/utils/algorithm13")),p=i(t("../../type/matrix/utils/algorithm14")),d=a("add",n({"Matrix, Matrix":function(t,e){var r;switch(t.storage()){case"sparse":switch(e.storage()){case"sparse":r=c(t,e,s);break;default:r=u(e,t,s,!0)}break;default:switch(e.storage()){case"sparse":r=u(t,e,s,!1);break;default:r=h(t,e,s)}}return r},"Array, Array":function(t,e){return d(o(t),o(e)).valueOf()},"Array, Matrix":function(t,e){return d(o(t),e)},"Matrix, Array":function(t,e){return d(t,o(e))},"Matrix, any":function(t,e){var r;switch(t.storage()){case"sparse":r=f(t,e,s,!1);break;default:r=p(t,e,s,!1)}return r},"any, Matrix":function(t,e){var r;switch(e.storage()){case"sparse":r=f(e,t,s,!0);break;default:r=p(e,t,s,!0)}return r},"Array, any":function(t,e){return p(o(t),e,s,!1).valueOf()},"any, Array":function(t,e){return p(o(e),t,s,!0).valueOf()},"any, any":s,"Array | Matrix | any, Array | Matrix | any, ...any":function(t,e,r){for(var n=d(t,e),i=0;i0?Math.floor(t):Math.ceil(t)},Complex:function(e){return new t.Complex(e.re>0?Math.floor(e.re):Math.ceil(e.re),e.im>0?Math.floor(e.im):Math.ceil(e.im))},BigNumber:function(t){return t.isNegative()?t.ceil():t.floor()},Fraction:function(t){return t.s<0?t.ceil():t.floor()},"Array | Matrix":function(t){return n(t,a,!0)}});return a.toTex={1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],501:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="floor",r.factory=function(t,e,r,i){var a=i("floor",{number:Math.floor,Complex:function(t){return t.floor()},BigNumber:function(t){return t.floor()},Fraction:function(t){return t.floor()},"Array | Matrix":function(t){return n(t,a,!0)}});return a.toTex={1:"\\left\\lfloor${args[0]}\\right\\rfloor"},a}},{"../../utils/collection/deepMap":597}],502:[function(t,e,r){"use strict";var n=t("../../utils/number").isInteger;function i(t,e){if(!n(t)||!n(e))throw new Error("Parameters in function gcd must be integer numbers");for(var r;0!=e;)r=t%e,t=e,e=r;return t<0?-t:t}r.name="gcd",r.factory=function(e,r,n,a){var o=n(t("../../type/matrix/function/matrix")),s=n(t("../../type/matrix/utils/algorithm01")),l=n(t("../../type/matrix/utils/algorithm04")),u=n(t("../../type/matrix/utils/algorithm10")),c=n(t("../../type/matrix/utils/algorithm13")),f=n(t("../../type/matrix/utils/algorithm14")),h=a("gcd",{"number, number":i,"BigNumber, BigNumber":function(t,r){if(!t.isInt()||!r.isInt())throw new Error("Parameters in function gcd must be integer numbers");for(var n=new e.BigNumber(0);!r.isZero();){var i=t.mod(r);t=r,r=i}return t.lt(n)?t.neg():t},"Fraction, Fraction":function(t,e){return t.gcd(e)},"Matrix, Matrix":function(t,e){var r;switch(t.storage()){case"sparse":switch(e.storage()){case"sparse":r=l(t,e,h);break;default:r=s(e,t,h,!0)}break;default:switch(e.storage()){case"sparse":r=s(t,e,h,!1);break;default:r=c(t,e,h)}}return r},"Array, Array":function(t,e){return h(o(t),o(e)).valueOf()},"Array, Matrix":function(t,e){return h(o(t),e)},"Matrix, Array":function(t,e){return h(t,o(e))},"Matrix, number | BigNumber":function(t,e){var r;switch(t.storage()){case"sparse":r=u(t,e,h,!1);break;default:r=f(t,e,h,!1)}return r},"number | BigNumber, Matrix":function(t,e){var r;switch(e.storage()){case"sparse":r=u(e,t,h,!0);break;default:r=f(e,t,h,!0)}return r},"Array, number | BigNumber":function(t,e){return f(o(t),e,h,!1).valueOf()},"number | BigNumber, Array":function(t,e){return f(o(e),t,h,!0).valueOf()},"Array | Matrix | number | BigNumber, Array | Matrix | number | BigNumber, ...Array | Matrix | number | BigNumber":function(t,e,r){for(var n=h(t,e),i=0;i=0||r.predictable?Math.log(t):new e.Complex(t,0).log()},Complex:function(t){return t.log()},BigNumber:function(t){return!t.isNegative()||r.predictable?t.ln():new e.Complex(t.toNumber(),0).log()},"Array | Matrix":function(t){return n(t,s)},"any, any":function(t,e){return o(s(t),s(e))}});return s.toTex={1:"\\ln\\left(${args[0]}\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}\\right)"},s}},{"../../utils/collection/deepMap":597,"./divideScalar":495}],507:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");var i=Math.log10||function(t){return Math.log(t)/Math.LN10};r.name="log10",r.factory=function(t,e,r,a){var o=a("log10",{number:function(r){return r>=0||e.predictable?i(r):new t.Complex(r,0).log().div(Math.LN10)},Complex:function(e){return new t.Complex(e).log().div(Math.LN10)},BigNumber:function(r){return!r.isNegative()||e.predictable?r.log():new t.Complex(r.toNumber(),0).log().div(Math.LN10)},"Array | Matrix":function(t){return n(t,o)}});return o.toTex={1:"\\log_{10}\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597}],508:[function(t,e,r){"use strict";r.name="mod",r.factory=function(e,r,n,i){var a=n(t("../../type/matrix/function/matrix")),o=t("../../utils/latex"),s=n(t("../../type/matrix/utils/algorithm02")),l=n(t("../../type/matrix/utils/algorithm03")),u=n(t("../../type/matrix/utils/algorithm05")),c=n(t("../../type/matrix/utils/algorithm11")),f=n(t("../../type/matrix/utils/algorithm12")),h=n(t("../../type/matrix/utils/algorithm13")),p=n(t("../../type/matrix/utils/algorithm14")),d=i("mod",{"number, number":function(t,e){if(e>0)return t-e*Math.floor(t/e);if(0===e)return t;throw new Error("Cannot calculate mod for a negative divisor")},"BigNumber, BigNumber":function(t,e){return e.isZero()?t:t.mod(e)},"Fraction, Fraction":function(t,e){return t.mod(e)},"Matrix, Matrix":function(t,e){var r;switch(t.storage()){case"sparse":switch(e.storage()){case"sparse":r=u(t,e,d,!1);break;default:r=s(e,t,d,!0)}break;default:switch(e.storage()){case"sparse":r=l(t,e,d,!1);break;default:r=h(t,e,d)}}return r},"Array, Array":function(t,e){return d(a(t),a(e)).valueOf()},"Array, Matrix":function(t,e){return d(a(t),e)},"Matrix, Array":function(t,e){return d(t,a(e))},"Matrix, any":function(t,e){var r;switch(t.storage()){case"sparse":r=c(t,e,d,!1);break;default:r=p(t,e,d,!1)}return r},"any, Matrix":function(t,e){var r;switch(e.storage()){case"sparse":r=f(e,t,d,!0);break;default:r=p(e,t,d,!0)}return r},"Array, any":function(t,e){return p(a(t),e,d,!1).valueOf()},"any, Array":function(t,e){return p(a(e),t,d,!0).valueOf()}});return d.toTex={2:"\\left(${args[0]}"+o.operators.mod+"${args[1]}\\right)"},d}},{"../../type/matrix/function/matrix":573,"../../type/matrix/utils/algorithm02":575,"../../type/matrix/utils/algorithm03":576,"../../type/matrix/utils/algorithm05":578,"../../type/matrix/utils/algorithm11":583,"../../type/matrix/utils/algorithm12":584,"../../type/matrix/utils/algorithm13":585,"../../type/matrix/utils/algorithm14":586,"../../utils/latex":606}],509:[function(t,e,r){"use strict";var n=t("../../utils/object").extend,i=t("../../utils/array");r.name="multiply",r.factory=function(e,r,a,o){var s=t("../../utils/latex"),l=a(t("../../type/matrix/function/matrix")),u=a(t("./addScalar")),c=a(t("./multiplyScalar")),f=a(t("../relational/equalScalar")),h=a(t("../../type/matrix/utils/algorithm11")),p=a(t("../../type/matrix/utils/algorithm14")),d=e.DenseMatrix,m=e.SparseMatrix,g=o("multiply",n({"Array, Array":function(t,r){v(i.size(t),i.size(r));var n=g(l(t),l(r));return e.isMatrix(n)?n.valueOf():n},"Matrix, Matrix":function(t,e){var r=t.size(),n=e.size();return v(r,n),1===r.length?1===n.length?y(t,e,r[0]):x(t,e):1===n.length?_(t,e):w(t,e)},"Matrix, Array":function(t,e){return g(t,l(e))},"Array, Matrix":function(t,e){return g(l(t,e.storage()),e)},"Matrix, any":function(t,e){var r;switch(t.storage()){case"sparse":r=h(t,e,c,!1);break;case"dense":r=p(t,e,c,!1)}return r},"any, Matrix":function(t,e){var r;switch(e.storage()){case"sparse":r=h(e,t,c,!0);break;case"dense":r=p(e,t,c,!0)}return r},"Array, any":function(t,e){return p(l(t),e,c,!1).valueOf()},"any, Array":function(t,e){return p(l(e),t,c,!0).valueOf()},"any, any":c,"Array | Matrix | any, Array | Matrix | any, ...any":function(t,e,r){for(var n=g(t,e),i=0;iE)for(var C=0,L=0;L=0||r.predictable?t.pow(n):new e.Complex(t.toNumber(),0).pow(n.toNumber(),0)},"Fraction, Fraction":function(t,e){if(1!==e.d){if(r.predictable)throw new Error("Function pow does not support non-integer exponents for fractions.");return d(t.valueOf(),e.valueOf())}return t.pow(e)},"Array, number":m,"Array, BigNumber":function(t,e){return m(t,e.toNumber())},"Matrix, number":g,"Matrix, BigNumber":function(t,e){return g(t,e.toNumber())},"Unit, number":function(t,e){return t.pow(e)}});function d(t,i){if(r.predictable&&!n(i)&&t<0)try{var a=f(i),o=h(a);if((i===o||Math.abs((i-o)/i)<1e-14)&&a.d%2==1)return(a.n%2==0?1:-1)*Math.pow(-t,i)}catch(t){}return t*t<1&&i===1/0||t*t>1&&i===-1/0?0:r.predictable&&(t<-1&&i===1/0||t>-1&&t<0&&i===-1/0)?NaN:n(i)||t>=0||r.predictable?Math.pow(t,i):new e.Complex(t,0).pow(i,0)}function m(t,e){if(!n(e)||e<0)throw new TypeError("For A^b, b must be a positive integer (value is "+e+")");var r=i(t);if(2!=r.length)throw new Error("For A^b, A must be 2 dimensional (A has "+r.length+" dimensions)");if(r[0]!=r[1])throw new Error("For A^b, A must be square (size is "+r[0]+"x"+r[1]+")");for(var a=l(r[0]).valueOf(),o=t;e>=1;)1==(1&e)&&(a=u(o,a)),e>>=1,o=u(o,o);return a}function g(t,e){return c(m(t.valueOf(),e))}return p.toTex={2:"\\left(${args[0]}\\right)"+s.operators.pow+"{${args[1]}}"},p}},{"../../type/fraction/function/fraction":571,"../../type/matrix/function/matrix":573,"../../type/number":587,"../../utils/array":589,"../../utils/latex":606,"../../utils/number":607,"../matrix/eye":524,"./multiply":509}],514:[function(t,e,r){"use strict";var n=t("../../utils/number").isInteger,i=t("../../utils/number").toFixed,a=t("../../utils/collection/deepMap"),o="Number of decimals in function round must be an integer";r.name="round",r.factory=function(e,r,s,l){var u=s(t("../../type/matrix/function/matrix")),c=s(t("../relational/equalScalar")),f=s(t("../matrix/zeros")),h=s(t("../../type/matrix/utils/algorithm11")),p=s(t("../../type/matrix/utils/algorithm12")),d=s(t("../../type/matrix/utils/algorithm14")),m=l("round",{number:Math.round,"number, number":function(t,e){if(!n(e))throw new TypeError(o);if(e<0||e>15)throw new Error("Number of decimals in function round must be in te range of 0-15");return parseFloat(i(t,e))},Complex:function(t){return t.round()},"Complex, number":function(t,e){if(e%1)throw new TypeError(o);return t.round(e)},"Complex, BigNumber":function(t,e){if(!e.isInteger())throw new TypeError(o);var r=e.toNumber();return t.round(r)},"number, BigNumber":function(t,r){if(!r.isInteger())throw new TypeError(o);return new e.BigNumber(t).toDecimalPlaces(r.toNumber())},BigNumber:function(t){return t.toDecimalPlaces(0)},"BigNumber, BigNumber":function(t,e){if(!e.isInteger())throw new TypeError(o);return t.toDecimalPlaces(e.toNumber())},Fraction:function(t){return t.round()},"Fraction, number":function(t,e){if(e%1)throw new TypeError(o);return t.round(e)},"Array | Matrix":function(t){return a(t,m,!0)},"Matrix, number | BigNumber":function(t,e){var r;switch(t.storage()){case"sparse":r=h(t,e,m,!1);break;default:r=d(t,e,m,!1)}return r},"number | Complex | BigNumber, Matrix":function(t,e){if(!c(t,0)){var r;switch(e.storage()){case"sparse":r=p(e,t,m,!0);break;default:r=d(e,t,m,!0)}return r}return f(e.size(),e.storage())},"Array, number | BigNumber":function(t,e){return d(u(t),e,m,!1).valueOf()},"number | Complex | BigNumber, Array":function(t,e){return d(u(e),t,m,!0).valueOf()}});return m.toTex={1:"\\left\\lfloor${args[0]}\\right\\rceil",2:void 0},m}},{"../../type/matrix/function/matrix":573,"../../type/matrix/utils/algorithm11":583,"../../type/matrix/utils/algorithm12":584,"../../type/matrix/utils/algorithm14":586,"../../utils/collection/deepMap":597,"../../utils/number":607,"../matrix/zeros":530,"../relational/equalScalar":531}],515:[function(t,e,r){"use strict";var n=t("../../utils/number"),i=t("../../utils/collection/deepMap");r.name="sign",r.factory=function(t,e,r,a){var o=a("sign",{number:n.sign,Complex:function(t){return t.sign()},BigNumber:function(e){return new t.BigNumber(e.cmp(0))},Fraction:function(e){return new t.Fraction(e.s,1)},"Array | Matrix":function(t){return i(t,o,!0)},Unit:function(t){return o(t.value)}});return o.toTex={1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597,"../../utils/number":607}],516:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="sqrt",r.factory=function(t,e,r,i){var a=i("sqrt",{number:o,Complex:function(t){return t.sqrt()},BigNumber:function(t){return!t.isNegative()||e.predictable?t.sqrt():o(t.toNumber())},"Array | Matrix":function(t){return n(t,a,!0)},Unit:function(t){return t.pow(.5)}});function o(r){return r>=0||e.predictable?Math.sqrt(r):new t.Complex(r,0).sqrt()}return a.toTex={1:"\\sqrt{${args[0]}}"},a}},{"../../utils/collection/deepMap":597}],517:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="square",r.factory=function(t,e,r,i){var a=i("square",{number:function(t){return t*t},Complex:function(t){return t.mul(t)},BigNumber:function(t){return t.times(t)},Fraction:function(t){return t.mul(t)},"Array | Matrix":function(t){return n(t,a,!0)},Unit:function(t){return t.pow(2)}});return a.toTex={1:"\\left(${args[0]}\\right)^2"},a}},{"../../utils/collection/deepMap":597}],518:[function(t,e,r){"use strict";var n=t("../../error/DimensionError");r.name="subtract",r.factory=function(e,r,i,a){var o=t("../../utils/latex"),s=i(t("../../type/matrix/function/matrix")),l=i(t("./addScalar")),u=i(t("./unaryMinus")),c=i(t("../../type/matrix/utils/algorithm01")),f=i(t("../../type/matrix/utils/algorithm03")),h=i(t("../../type/matrix/utils/algorithm05")),p=i(t("../../type/matrix/utils/algorithm10")),d=i(t("../../type/matrix/utils/algorithm13")),m=i(t("../../type/matrix/utils/algorithm14")),g=a("subtract",{"number, number":function(t,e){return t-e},"Complex, Complex":function(t,e){return t.sub(e)},"BigNumber, BigNumber":function(t,e){return t.minus(e)},"Fraction, Fraction":function(t,e){return t.sub(e)},"Unit, Unit":function(t,e){if(null==t.value)throw new Error("Parameter x contains a unit with undefined value");if(null==e.value)throw new Error("Parameter y contains a unit with undefined value");if(!t.equalBase(e))throw new Error("Units do not match");var r=t.clone();return r.value=g(r.value,e.value),r.fixPrefix=!1,r},"Matrix, Matrix":function(t,e){var r,i=t.size(),a=e.size();if(i.length!==a.length)throw new n(i.length,a.length);switch(t.storage()){case"sparse":switch(e.storage()){case"sparse":r=h(t,e,g);break;default:r=f(e,t,g,!0)}break;default:switch(e.storage()){case"sparse":r=c(t,e,g,!1);break;default:r=d(t,e,g)}}return r},"Array, Array":function(t,e){return g(s(t),s(e)).valueOf()},"Array, Matrix":function(t,e){return g(s(t),e)},"Matrix, Array":function(t,e){return g(t,s(e))},"Matrix, any":function(t,e){var r;switch(t.storage()){case"sparse":r=p(t,u(e),l);break;default:r=m(t,e,g)}return r},"any, Matrix":function(t,e){var r;switch(e.storage()){case"sparse":r=p(e,t,g,!0);break;default:r=m(e,t,g,!0)}return r},"Array, any":function(t,e){return m(s(t),e,g,!1).valueOf()},"any, Array":function(t,e){return m(s(e),t,g,!0).valueOf()}});return g.toTex={2:"\\left(${args[0]}"+o.operators.subtract+"${args[1]}\\right)"},g}},{"../../error/DimensionError":444,"../../type/matrix/function/matrix":573,"../../type/matrix/utils/algorithm01":574,"../../type/matrix/utils/algorithm03":576,"../../type/matrix/utils/algorithm05":578,"../../type/matrix/utils/algorithm10":582,"../../type/matrix/utils/algorithm13":585,"../../type/matrix/utils/algorithm14":586,"../../utils/latex":606,"./addScalar":490,"./unaryMinus":519}],519:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="unaryMinus",r.factory=function(e,r,i,a){var o=t("../../utils/latex"),s=a("unaryMinus",{number:function(t){return-t},Complex:function(t){return t.neg()},BigNumber:function(t){return t.neg()},Fraction:function(t){return t.neg()},Unit:function(t){var e=t.clone();return e.value=s(t.value),e},"Array | Matrix":function(t){return n(t,s,!0)}});return s.toTex={1:o.operators.unaryMinus+"\\left(${args[0]}\\right)"},s}},{"../../utils/collection/deepMap":597,"../../utils/latex":606}],520:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="unaryPlus",r.factory=function(e,r,i,a){var o=t("../../utils/latex"),s=a("unaryPlus",{number:function(t){return t},Complex:function(t){return t},BigNumber:function(t){return t},Fraction:function(t){return t},Unit:function(t){return t.clone()},"Array | Matrix":function(t){return n(t,s,!0)},"boolean | string | null":function(t){return"BigNumber"==r.number?new e.BigNumber(+t):+t}});return s.toTex={1:o.operators.unaryPlus+"\\left(${args[0]}\\right)"},s}},{"../../utils/collection/deepMap":597,"../../utils/latex":606}],521:[function(t,e,r){"use strict";var n=t("../../utils/number").isInteger;r.name="xgcd",r.factory=function(e,r,i,a){var o=i(t("../../type/matrix/function/matrix")),s=a("xgcd",{"number, number":function(t,e){var i,a,s,l,u=0,c=1,f=1,h=0;if(!n(t)||!n(e))throw new Error("Parameters in function xgcd must be integer numbers");for(;e;)a=Math.floor(t/e),s=t-a*e,i=u,u=c-a*u,c=i,i=f,f=h-a*f,h=i,t=e,e=s;return l=t<0?[-t,-c,-h]:[t,t?c:0,h],"Array"===r.matrix?l:o(l)},"BigNumber, BigNumber":function(t,n){var i,a,s,l,u=new e.BigNumber(0),c=new e.BigNumber(1),f=u,h=c,p=c,d=u;if(!t.isInt()||!n.isInt())throw new Error("Parameters in function xgcd must be integer numbers");for(;!n.isZero();)a=t.div(n).floor(),s=t.mod(n),i=f,f=h.minus(a.times(f)),h=i,i=p,p=d.minus(a.times(p)),d=i,t=n,n=s;return l=t.lt(u)?[t.neg(),h.neg(),d.neg()]:[t,t.isZero()?0:h,d],"Array"===r.matrix?l:o(l)}});return s.toTex=void 0,s}},{"../../type/matrix/function/matrix":573,"../../utils/number":607}],522:[function(t,e,r){"use strict";var n=t("../../utils/object").clone,i=t("../../utils/number").isInteger,a=t("../../utils/array"),o=t("../../error/IndexError"),s=t("../../error/DimensionError");function l(t,e,r,n){if(n0&&h>u)throw new o(h,u+1)}else{var g=n(m).valueOf(),v=a.size(g);if(d[r]=g,u=h,h=v.length-1,r>0&&h!=u)throw new s(u+1,h+1)}}if(0==d.length)throw new SyntaxError("At least one matrix expected");for(var y=d.shift();d.length;)y=l(y,d.shift(),h,0);return p?f(y):y},"...string":function(t){return t.join("")}});return h.toTex=void 0,h}},{"../../error/DimensionError":444,"../../error/IndexError":445,"../../type/matrix/function/matrix":573,"../../utils/array":589,"../../utils/number":607,"../../utils/object":608}],523:[function(t,e,r){"use strict";var n=t("../../utils/index"),i=n.object,a=n.string;r.name="det",r.factory=function(e,r,n,o){var s=n(t("../../type/matrix/function/matrix")),l=n(t("../arithmetic/add")),u=n(t("../arithmetic/subtract")),c=n(t("../arithmetic/multiply")),f=n(t("../arithmetic/unaryMinus")),h=o("det",{any:function(t){return i.clone(t)},"Array | Matrix":function(t){var r;switch((r=e.isMatrix(t)?t.size():Array.isArray(t)?(t=s(t)).size():[]).length){case 0:return i.clone(t);case 1:if(1==r[0])return i.clone(t.valueOf()[0]);throw new RangeError("Matrix must be square (size: "+a.format(r)+")");case 2:var n=r[0],o=r[1];if(n==o)return function(t,e,r){if(1==e)return i.clone(t[0][0]);if(2==e)return u(c(t[0][0],t[1][1]),c(t[1][0],t[0][1]));for(var n=function(t){var e,r,n=new Array(t.length),i=0;for(e=1;e0)for(;ie;)n.push(i),i+=r;return n}function h(t,e,r){var n=[],i=t;if(r>0)for(;i<=e;)n.push(i),i+=r;else if(r<0)for(;i>=e;)n.push(i),i+=r;return n}function p(t,e,r){var n=[],i=t;if(r.gt(o))for(;i.lt(e);)n.push(i),i=i.plus(r);else if(r.lt(o))for(;i.gt(e);)n.push(i),i=i.plus(r);return n}function d(t,e,r){var n=[],i=t;if(r.gt(o))for(;i.lte(e);)n.push(i),i=i.plus(r);else if(r.lt(o))for(;i.gte(e);)n.push(i),i=i.plus(r);return n}}},{"../../type/matrix/function/matrix":573}],527:[function(t,e,r){"use strict";var n=t("../../utils/object").clone,i=t("../../utils/array").validateIndex,a=t("../../utils/customs").getSafeProperty,o=t("../../utils/customs").setSafeProperty,s=t("../../error/DimensionError");function l(t,e){if(1!==e.size().length)throw new s(e.size(),1);var r=e.dimension(0);if("string"!=typeof r)throw new TypeError("String expected as index to retrieve an object property");return a(t,r)}function u(t,e,r){if(1!==e.size().length)throw new s(e.size(),1);var i=e.dimension(0);if("string"!=typeof i)throw new TypeError("String expected as index to retrieve an object property");var a=n(t);return o(a,i,r),a}r.name="subset",r.factory=function(e,r,a,o){var c=a(t("../../type/matrix/function/matrix")),f=o("subset",{"Array, Index":function(t,e){var r=c(t).subset(e);return e.isScalar()?r:r.valueOf()},"Matrix, Index":function(t,e){return t.subset(e)},"Object, Index":l,"string, Index":function(t,r){if(!e.isIndex(r))throw new TypeError("Index expected");if(1!=r.size().length)throw new s(r.size().length,1);var n=t.length;i(r.min()[0],n),i(r.max()[0],n);var a=r.dimension(0),o="";return a.forEach(function(e){o+=t.charAt(e)}),o},"Array, Index, any":function(t,e,r){return c(n(t)).subset(e,r,void 0).valueOf()},"Array, Index, any, any":function(t,e,r,i){return c(n(t)).subset(e,r,i).valueOf()},"Matrix, Index, any":function(t,e,r){return t.clone().subset(e,r)},"Matrix, Index, any, any":function(t,e,r,n){return t.clone().subset(e,r,n)},"string, Index, string":h,"string, Index, string, string":h,"Object, Index, any":u});return f.toTex=void 0,f;function h(t,e,r,n){if(!e||!0!==e.isIndex)throw new TypeError("Index expected");if(1!=e.size().length)throw new s(e.size().length,1);if(void 0!==n){if("string"!=typeof n||1!==n.length)throw new TypeError("Single character expected as defaultValue")}else n=" ";var a=e.dimension(0),o=a.size()[0];if(o!=r.length)throw new s(a.size()[0],r.length);var l=t.length;i(e.min()[0]),i(e.max()[0]);for(var u=[],c=0;cl)for(c=l-1,o=u.length;c0)for(var c=0;cc)break}return u}throw new RangeError("Matrix must be square (size: "+i(a)+")")};return u.toTex={1:"\\mathrm{tr}\\left(${args[0]}\\right)"},u}},{"../../type/matrix/function/matrix":573,"../../utils/object":608,"../../utils/string":609,"../arithmetic/add":489}],529:[function(t,e,r){"use strict";var n=t("../../utils/object").clone,i=t("../../utils/string").format;r.name="transpose",r.factory=function(e,r,a,o){var s=t("../../utils/latex"),l=a(t("../../type/matrix/function/matrix")),u=e.DenseMatrix,c=e.SparseMatrix,f=o("transpose",{Array:function(t){return f(l(t)).valueOf()},Matrix:function(t){var e,r=t.size();switch(r.length){case 1:e=t.clone();break;case 2:var n=r[0],a=r[1];if(0===a)throw new RangeError("Cannot transpose a 2D matrix with no columns (size: "+i(r)+")");switch(t.storage()){case"dense":e=h(t,n,a);break;case"sparse":e=p(t,n,a)}break;default:throw new RangeError("Matrix must be a vector or two dimensional (size: "+i(this._size)+")")}return e},any:function(t){return n(t)}}),h=function(t,e,r){for(var i,a=t._data,o=[],s=0;s0?o.resize(t,a):o}var l=[];return t.length>0?i(l,t,a):l}}},{"../../type/matrix/function/matrix":573,"../../utils/array":589,"../../utils/number":607}],531:[function(t,e,r){"use strict";var n=t("../../utils/number").nearlyEqual,i=t("../../utils/bignumber/nearlyEqual");r.factory=function(t,e,r,a){var o=a("equalScalar",{"boolean, boolean":function(t,e){return t===e},"number, number":function(t,r){return t===r||n(t,r,e.epsilon)},"BigNumber, BigNumber":function(t,r){return t.eq(r)||i(t,r,e.epsilon)},"Fraction, Fraction":function(t,e){return t.equals(e)},"Complex, Complex":function(t,e){return t.equals(e)},"Unit, Unit":function(t,e){if(!t.equalBase(e))throw new Error("Cannot compare units with different base");return o(t.value,e.value)},"string, string":function(t,e){return t===e}});return o}},{"../../utils/bignumber/nearlyEqual":593,"../../utils/number":607}],532:[function(t,e,r){"use strict";var n=t("../../utils/number").nearlyEqual,i=t("../../utils/bignumber/nearlyEqual");r.name="larger",r.factory=function(e,r,a,o){var s=a(t("../../type/matrix/function/matrix")),l=a(t("../../type/matrix/utils/algorithm03")),u=a(t("../../type/matrix/utils/algorithm07")),c=a(t("../../type/matrix/utils/algorithm12")),f=a(t("../../type/matrix/utils/algorithm13")),h=a(t("../../type/matrix/utils/algorithm14")),p=t("../../utils/latex"),d=o("larger",{"boolean, boolean":function(t,e){return t>e},"number, number":function(t,e){return t>e&&!n(t,e,r.epsilon)},"BigNumber, BigNumber":function(t,e){return t.gt(e)&&!i(t,e,r.epsilon)},"Fraction, Fraction":function(t,e){return 1===t.compare(e)},"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")},"Unit, Unit":function(t,e){if(!t.equalBase(e))throw new Error("Cannot compare units with different base");return d(t.value,e.value)},"string, string":function(t,e){return t>e},"Matrix, Matrix":function(t,e){var r;switch(t.storage()){case"sparse":switch(e.storage()){case"sparse":r=u(t,e,d);break;default:r=l(e,t,d,!0)}break;default:switch(e.storage()){case"sparse":r=l(t,e,d,!1);break;default:r=f(t,e,d)}}return r},"Array, Array":function(t,e){return d(s(t),s(e)).valueOf()},"Array, Matrix":function(t,e){return d(s(t),e)},"Matrix, Array":function(t,e){return d(t,s(e))},"Matrix, any":function(t,e){var r;switch(t.storage()){case"sparse":r=c(t,e,d,!1);break;default:r=h(t,e,d,!1)}return r},"any, Matrix":function(t,e){var r;switch(e.storage()){case"sparse":r=c(e,t,d,!0);break;default:r=h(e,t,d,!0)}return r},"Array, any":function(t,e){return h(s(t),e,d,!1).valueOf()},"any, Array":function(t,e){return h(s(e),t,d,!0).valueOf()}});return d.toTex={2:"\\left(${args[0]}"+p.operators.larger+"${args[1]}\\right)"},d}},{"../../type/matrix/function/matrix":573,"../../type/matrix/utils/algorithm03":576,"../../type/matrix/utils/algorithm07":580,"../../type/matrix/utils/algorithm12":584,"../../type/matrix/utils/algorithm13":585,"../../type/matrix/utils/algorithm14":586,"../../utils/bignumber/nearlyEqual":593,"../../utils/latex":606,"../../utils/number":607}],533:[function(t,e,r){"use strict";var n=t("../../utils/number").nearlyEqual,i=t("../../utils/bignumber/nearlyEqual");r.name="smaller",r.factory=function(e,r,a,o){var s=a(t("../../type/matrix/function/matrix")),l=a(t("../../type/matrix/utils/algorithm03")),u=a(t("../../type/matrix/utils/algorithm07")),c=a(t("../../type/matrix/utils/algorithm12")),f=a(t("../../type/matrix/utils/algorithm13")),h=a(t("../../type/matrix/utils/algorithm14")),p=t("../../utils/latex"),d=o("smaller",{"boolean, boolean":function(t,e){return t=-1&&r<=1||e.predictable?Math.acos(r):new t.Complex(r,0).acos()},Complex:function(t){return t.acos()},BigNumber:function(t){return t.acos()},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={1:"\\cos^{-1}\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],538:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");var i=Math.acosh||function(t){return Math.log(Math.sqrt(t*t-1)+t)};r.name="acosh",r.factory=function(t,e,r,a){var o=a("acosh",{number:function(r){return r>=1||e.predictable?i(r):r<=-1?new t.Complex(Math.log(Math.sqrt(r*r-1)-r),Math.PI):new t.Complex(r,0).acosh()},Complex:function(t){return t.acosh()},BigNumber:function(t){return t.acosh()},"Array | Matrix":function(t){return n(t,o)}});return o.toTex={1:"\\cosh^{-1}\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597}],539:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="acot",r.factory=function(t,e,r,i){var a=i("acot",{number:function(t){return Math.atan(1/t)},Complex:function(t){return t.acot()},BigNumber:function(e){return new t.BigNumber(1).div(e).atan()},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={1:"\\cot^{-1}\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],540:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="acoth",r.factory=function(t,e,r,i){var a=i("acoth",{number:function(r){return r>=1||r<=-1||e.predictable?isFinite(r)?(Math.log((r+1)/r)+Math.log(r/(r-1)))/2:0:new t.Complex(r,0).acoth()},Complex:function(t){return t.acoth()},BigNumber:function(e){return new t.BigNumber(1).div(e).atanh()},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={1:"\\coth^{-1}\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],541:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="acsc",r.factory=function(t,e,r,i){var a=i("acsc",{number:function(r){return r<=-1||r>=1||e.predictable?Math.asin(1/r):new t.Complex(r,0).acsc()},Complex:function(t){return t.acsc()},BigNumber:function(e){return new t.BigNumber(1).div(e).asin()},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={1:"\\csc^{-1}\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],542:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="acsch",r.factory=function(t,e,r,i){var a=i("acsch",{number:function(t){return t=1/t,Math.log(t+Math.sqrt(t*t+1))},Complex:function(t){return t.acsch()},BigNumber:function(e){return new t.BigNumber(1).div(e).asinh()},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={1:"\\mathrm{csch}^{-1}\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],543:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="asec",r.factory=function(t,e,r,i){var a=i("asec",{number:function(r){return r<=-1||r>=1||e.predictable?Math.acos(1/r):new t.Complex(r,0).asec()},Complex:function(t){return t.asec()},BigNumber:function(e){return new t.BigNumber(1).div(e).acos()},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={1:"\\sec^{-1}\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],544:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="asech",r.factory=function(e,r,i,a){a.find(i(t("./acosh")),["Complex"]);var o=a("asech",{number:function(t){if(t<=1&&t>=-1||r.predictable){t=1/t;var n=Math.sqrt(t*t-1);return t>0||r.predictable?Math.log(n+t):new e.Complex(Math.log(n-t),Math.PI)}return new e.Complex(t,0).asech()},Complex:function(t){return t.asech()},BigNumber:function(t){return new e.BigNumber(1).div(t).acosh()},"Array | Matrix":function(t){return n(t,o)}});return o.toTex={1:"\\mathrm{sech}^{-1}\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597,"./acosh":538}],545:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="asin",r.factory=function(t,e,r,i){var a=i("asin",{number:function(r){return r>=-1&&r<=1||e.predictable?Math.asin(r):new t.Complex(r,0).asin()},Complex:function(t){return t.asin()},BigNumber:function(t){return t.asin()},"Array | Matrix":function(t){return n(t,a,!0)}});return a.toTex={1:"\\sin^{-1}\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],546:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="asinh",r.factory=function(t,e,r,i){var a=i("asinh",{number:Math.asinh||function(t){return Math.log(Math.sqrt(t*t+1)+t)},Complex:function(t){return t.asinh()},BigNumber:function(t){return t.asinh()},"Array | Matrix":function(t){return n(t,a,!0)}});return a.toTex={1:"\\sinh^{-1}\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],547:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="atan",r.factory=function(t,e,r,i){var a=i("atan",{number:function(t){return Math.atan(t)},Complex:function(t){return t.atan()},BigNumber:function(t){return t.atan()},"Array | Matrix":function(t){return n(t,a,!0)}});return a.toTex={1:"\\tan^{-1}\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],548:[function(t,e,r){"use strict";r.name="atan2",r.factory=function(e,r,n,i){var a=n(t("../../type/matrix/function/matrix")),o=n(t("../../type/matrix/utils/algorithm02")),s=n(t("../../type/matrix/utils/algorithm03")),l=n(t("../../type/matrix/utils/algorithm09")),u=n(t("../../type/matrix/utils/algorithm11")),c=n(t("../../type/matrix/utils/algorithm12")),f=n(t("../../type/matrix/utils/algorithm13")),h=n(t("../../type/matrix/utils/algorithm14")),p=i("atan2",{"number, number":Math.atan2,"BigNumber, BigNumber":function(t,r){return e.BigNumber.atan2(t,r)},"Matrix, Matrix":function(t,e){var r;switch(t.storage()){case"sparse":switch(e.storage()){case"sparse":r=l(t,e,p,!1);break;default:r=o(e,t,p,!0)}break;default:switch(e.storage()){case"sparse":r=s(t,e,p,!1);break;default:r=f(t,e,p)}}return r},"Array, Array":function(t,e){return p(a(t),a(e)).valueOf()},"Array, Matrix":function(t,e){return p(a(t),e)},"Matrix, Array":function(t,e){return p(t,a(e))},"Matrix, number | BigNumber":function(t,e){var r;switch(t.storage()){case"sparse":r=u(t,e,p,!1);break;default:r=h(t,e,p,!1)}return r},"number | BigNumber, Matrix":function(t,e){var r;switch(e.storage()){case"sparse":r=c(e,t,p,!0);break;default:r=h(e,t,p,!0)}return r},"Array, number | BigNumber":function(t,e){return h(a(t),e,p,!1).valueOf()},"number | BigNumber, Array":function(t,e){return h(a(e),t,p,!0).valueOf()}});return p.toTex={2:"\\mathrm{atan2}\\left(${args}\\right)"},p}},{"../../type/matrix/function/matrix":573,"../../type/matrix/utils/algorithm02":575,"../../type/matrix/utils/algorithm03":576,"../../type/matrix/utils/algorithm09":581,"../../type/matrix/utils/algorithm11":583,"../../type/matrix/utils/algorithm12":584,"../../type/matrix/utils/algorithm13":585,"../../type/matrix/utils/algorithm14":586}],549:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");var i=Math.atanh||function(t){return Math.log((1+t)/(1-t))/2};r.name="atanh",r.factory=function(t,e,r,a){var o=a("atanh",{number:function(r){return r<=1&&r>=-1||e.predictable?i(r):new t.Complex(r,0).atanh()},Complex:function(t){return t.atanh()},BigNumber:function(t){return t.atanh()},"Array | Matrix":function(t){return n(t,o,!0)}});return o.toTex={1:"\\tanh^{-1}\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597}],550:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="cos",r.factory=function(t,e,r,i){var a=i("cos",{number:Math.cos,Complex:function(t){return t.cos()},BigNumber:function(t){return t.cos()},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function cos is no angle");return a(e.value)},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={1:"\\cos\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],551:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");var i=Math.cosh||function(t){return(Math.exp(t)+Math.exp(-t))/2};r.name="cosh",r.factory=function(t,e,r,a){var o=a("cosh",{number:i,Complex:function(t){return t.cosh()},BigNumber:function(t){return t.cosh()},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function cosh is no angle");return o(e.value)},"Array | Matrix":function(t){return n(t,o)}});return o.toTex={1:"\\cosh\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597}],552:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="cot",r.factory=function(t,e,r,i){var a=i("cot",{number:function(t){return 1/Math.tan(t)},Complex:function(t){return t.cot()},BigNumber:function(e){return new t.BigNumber(1).div(e.tan())},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function cot is no angle");return a(e.value)},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={1:"\\cot\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],553:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");function i(t){var e=Math.exp(2*t);return(e+1)/(e-1)}r.name="coth",r.factory=function(t,e,r,a){var o=a("coth",{number:i,Complex:function(t){return t.coth()},BigNumber:function(e){return new t.BigNumber(1).div(e.tanh())},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function coth is no angle");return o(e.value)},"Array | Matrix":function(t){return n(t,o)}});return o.toTex={1:"\\coth\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597}],554:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="csc",r.factory=function(t,e,r,i){var a=i("csc",{number:function(t){return 1/Math.sin(t)},Complex:function(t){return t.csc()},BigNumber:function(e){return new t.BigNumber(1).div(e.sin())},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function csc is no angle");return a(e.value)},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={1:"\\csc\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],555:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap"),i=t("../../utils/number").sign;function a(t){return 0==t?Number.POSITIVE_INFINITY:Math.abs(2/(Math.exp(t)-Math.exp(-t)))*i(t)}r.name="csch",r.factory=function(t,e,r,i){var o=i("csch",{number:a,Complex:function(t){return t.csch()},BigNumber:function(e){return new t.BigNumber(1).div(e.sinh())},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function csch is no angle");return o(e.value)},"Array | Matrix":function(t){return n(t,o)}});return o.toTex={1:"\\mathrm{csch}\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597,"../../utils/number":607}],556:[function(t,e,r){e.exports=[t("./acos"),t("./acosh"),t("./acot"),t("./acoth"),t("./acsc"),t("./acsch"),t("./asec"),t("./asech"),t("./asin"),t("./asinh"),t("./atan"),t("./atan2"),t("./atanh"),t("./cos"),t("./cosh"),t("./cot"),t("./coth"),t("./csc"),t("./csch"),t("./sec"),t("./sech"),t("./sin"),t("./sinh"),t("./tan"),t("./tanh")]},{"./acos":537,"./acosh":538,"./acot":539,"./acoth":540,"./acsc":541,"./acsch":542,"./asec":543,"./asech":544,"./asin":545,"./asinh":546,"./atan":547,"./atan2":548,"./atanh":549,"./cos":550,"./cosh":551,"./cot":552,"./coth":553,"./csc":554,"./csch":555,"./sec":557,"./sech":558,"./sin":559,"./sinh":560,"./tan":561,"./tanh":562}],557:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="sec",r.factory=function(t,e,r,i){var a=i("sec",{number:function(t){return 1/Math.cos(t)},Complex:function(t){return t.sec()},BigNumber:function(e){return new t.BigNumber(1).div(e.cos())},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function sec is no angle");return a(e.value)},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={1:"\\sec\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],558:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");function i(t){return 2/(Math.exp(t)+Math.exp(-t))}r.name="sech",r.factory=function(t,e,r,a){var o=a("sech",{number:i,Complex:function(t){return t.sech()},BigNumber:function(e){return new t.BigNumber(1).div(e.cosh())},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function sech is no angle");return o(e.value)},"Array | Matrix":function(t){return n(t,o)}});return o.toTex={1:"\\mathrm{sech}\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597}],559:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="sin",r.factory=function(t,e,r,i){var a=i("sin",{number:Math.sin,Complex:function(t){return t.sin()},BigNumber:function(t){return t.sin()},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function sin is no angle");return a(e.value)},"Array | Matrix":function(t){return n(t,a,!0)}});return a.toTex={1:"\\sin\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],560:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");var i=Math.sinh||function(t){return(Math.exp(t)-Math.exp(-t))/2};r.name="sinh",r.factory=function(t,e,r,a){var o=a("sinh",{number:i,Complex:function(t){return t.sinh()},BigNumber:function(t){return t.sinh()},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function sinh is no angle");return o(e.value)},"Array | Matrix":function(t){return n(t,o,!0)}});return o.toTex={1:"\\sinh\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597}],561:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");r.name="tan",r.factory=function(t,e,r,i){var a=i("tan",{number:Math.tan,Complex:function(t){return t.tan()},BigNumber:function(t){return t.tan()},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function tan is no angle");return a(e.value)},"Array | Matrix":function(t){return n(t,a,!0)}});return a.toTex={1:"\\tan\\left(${args[0]}\\right)"},a}},{"../../utils/collection/deepMap":597}],562:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");var i=Math.tanh||function(t){var e=Math.exp(2*t);return(e-1)/(e+1)};r.name="tanh",r.factory=function(t,e,r,a){var o=a("tanh",{number:i,Complex:function(t){return t.tanh()},BigNumber:function(t){return t.tanh()},Unit:function(e){if(!e.hasBase(t.Unit.BASE_UNITS.ANGLE))throw new TypeError("Unit in function tanh is no angle");return o(e.value)},"Array | Matrix":function(t){return n(t,o,!0)}});return o.toTex={1:"\\tanh\\left(${args[0]}\\right)"},o}},{"../../utils/collection/deepMap":597}],563:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");t("../../utils/number");r.name="isNegative",r.factory=function(t,e,r,i){var a=i("isNegative",{number:function(t){return t<0},BigNumber:function(t){return t.isNeg()&&!t.isZero()&&!t.isNaN()},Fraction:function(t){return t.s<0},Unit:function(t){return a(t.value)},"Array | Matrix":function(t){return n(t,a)}});return a}},{"../../utils/collection/deepMap":597,"../../utils/number":607}],564:[function(t,e,r){"use strict";var n=t("../../utils/collection/deepMap");t("../../utils/number");r.name="isPositive",r.factory=function(t,e,r,i){var a=i("isPositive",{number:function(t){return t>0},BigNumber:function(t){return!t.isNeg()&&!t.isZero()&&!t.isNaN()},Fraction:function(t){return t.s>0&&t.n>0},Unit:function(t){return a(t.value)},"Array | Matrix":function(t){return n(t,a)}});return a}},{"../../utils/collection/deepMap":597,"../../utils/number":607}],565:[function(t,e,r){var n=t("decimal.js/decimal.js");r.name="BigNumber",r.path="type",r.factory=function(t,e,r,i,a){var o=n.clone({precision:e.precision});return o.prototype.type="BigNumber",o.prototype.isBigNumber=!0,o.prototype.toJSON=function(){return{mathjs:"BigNumber",value:this.toString()}},o.fromJSON=function(t){return new o(t.value)},a.on("config",function(t,e){t.precision!==e.precision&&o.config({precision:t.precision})}),o},r.math=!0},{"decimal.js/decimal.js":109}],566:[function(t,e,r){"use strict";var n=t("../../../utils/collection/deepMap");r.name="bignumber",r.factory=function(t,e,r,i){var a=i("bignumber",{"":function(){return new t.BigNumber(0)},number:function(e){return new t.BigNumber(e+"")},string:function(e){return new t.BigNumber(e)},BigNumber:function(t){return t},Fraction:function(e){return new t.BigNumber(e.n).div(e.d)},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={0:"0",1:"\\left(${args[0]}\\right)"},a}},{"../../../utils/collection/deepMap":597}],567:[function(t,e,r){e.exports=[t("./BigNumber"),t("./function/bignumber")]},{"./BigNumber":565,"./function/bignumber":566}],568:[function(t,e,r){var n=t("complex.js"),i=t("../../utils/number").format,a=t("../../utils/number").isNumber;r.name="Complex",r.path="type",r.factory=function(t,e,r,o,s){return n.prototype.type="Complex",n.prototype.isComplex=!0,n.prototype.toJSON=function(){return{mathjs:"Complex",re:this.re,im:this.im}},n.prototype.toPolar=function(){return{r:this.abs(),phi:this.arg()}},n.prototype.format=function(t){var e=this.im,r=this.re,n=i(this.re,t),o=i(this.im,t),s=a(t)?t:t?t.precision:null;if(null!==s){var l=Math.pow(10,-s);Math.abs(r/e)e.re?1:t.ree.im?1:t.im0?this.step>0?this.start:this.start+(t-1)*this.step:void 0},a.prototype.max=function(){var t=this.size()[0];return t>0?this.step>0?this.start+(t-1)*this.step:this.start:void 0},a.prototype.forEach=function(t){var e=this.start,r=this.step,n=this.end,i=0;if(r>0)for(;en;)t(e,[i],this),e+=r,i++},a.prototype.map=function(t){var e=[];return this.forEach(function(r,n,i){e[n[0]]=t(r,n,i)}),e},a.prototype.toArray=function(){var t=[];return this.forEach(function(e,r){t[r[0]]=e}),t},a.prototype.valueOf=function(){return this.toArray()},a.prototype.format=function(t){var e=n.format(this.start,t);return 1!=this.step&&(e+=":"+n.format(this.step,t)),e+=":"+n.format(this.end,t)},a.prototype.toString=function(){return this.format()},a.prototype.toJSON=function(){return{mathjs:"Range",start:this.start,end:this.end,step:this.step}},a.fromJSON=function(t){return new a(t.start,t.end,t.step)},a}},{"../../utils/number":607}],573:[function(t,e,r){"use strict";r.name="matrix",r.factory=function(t,e,r,n){var i=n("matrix",{"":function(){return a([])},string:function(t){return a([],t)},"string, string":function(t,e){return a([],t,e)},Array:function(t){return a(t)},Matrix:function(t){return a(t,t.storage())},"Array | Matrix, string":a,"Array | Matrix, string, string":a});return i.toTex={0:"\\begin{bmatrix}\\end{bmatrix}",1:"\\left(${args[0]}\\right)",2:"\\left(${args[0]}\\right)"},i;function a(e,r,n){return new(t.Matrix.storage(r||"default"))(e,n)}}},{}],574:[function(t,e,r){"use strict";var n=t("../../../error/DimensionError");r.name="algorithm01",r.factory=function(t,e,r,i){var a=t.DenseMatrix;return function(t,e,r,o){var s=t._data,l=t._size,u=t._datatype,c=e._values,f=e._index,h=e._ptr,p=e._size,d=e._datatype;if(l.length!==p.length)throw new n(l.length,p.length);if(l[0]!==p[0]||l[1]!==p[1])throw new RangeError("Dimension mismatch. Matrix A ("+l+") must match Matrix B ("+p+")");if(!c)throw new Error("Cannot perform operation on Dense Matrix and Pattern Sparse Matrix");var m,g,v=l[0],y=l[1],x="string"==typeof u&&u===d?u:void 0,b=x?i.find(r,[x,x]):r,_=[];for(m=0;m0?o(g,0,d,d[0],l,f):[];return new a({data:v,size:d,datatype:s})}}},{"../../../error/DimensionError":444,"../../../utils/index":605}],586:[function(t,e,r){"use strict";var n=t("../../../utils/object").clone;r.name="algorithm14",r.factory=function(t,e,r,i){var a=t.DenseMatrix,o=function(t,e,r,n,i,a,s){var l=[];if(e===r.length-1)for(var u=0;u0?o(h,0,c,c[0],u,e,s):[];return new a({data:p,size:n(c),datatype:l})}}},{"../../../utils/object":608}],587:[function(t,e,r){"use strict";var n=t("./../utils/collection/deepMap");r.name="number",r.factory=function(t,e,r,i){var a=i("number",{"":function(){return 0},number:function(t){return t},string:function(t){var e=Number(t);if(isNaN(e))throw new SyntaxError('String "'+t+'" is no valid number');return e},BigNumber:function(t){return t.toNumber()},Fraction:function(t){return t.valueOf()},Unit:function(t){throw new Error("Second argument with valueless unit expected")},"Unit, string | Unit":function(t,e){return t.toNumber(e)},"Array | Matrix":function(t){return n(t,a)}});return a.toTex={0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"},a}},{"./../utils/collection/deepMap":597}],588:[function(t,e,r){"use strict";r.name="ResultSet",r.path="type",r.factory=function(t,e,r,n){function i(t){if(!(this instanceof i))throw new SyntaxError("Constructor must be called with the new operator");this.entries=t||[]}return i.prototype.type="ResultSet",i.prototype.isResultSet=!0,i.prototype.valueOf=function(){return this.entries},i.prototype.toString=function(){return"["+this.entries.join(", ")+"]"},i.prototype.toJSON=function(){return{mathjs:"ResultSet",entries:this.entries}},i.fromJSON=function(t){return new i(t.entries)},i}},{}],589:[function(t,e,r){"use strict";var n=t("./number"),i=t("./string"),a=(t("./object"),t("./types"),t("../error/DimensionError")),o=t("../error/IndexError");r.size=function(t){for(var e=[];Array.isArray(t);)e.push(t.length),t=t[0];return e},r.validate=function(t,e){if(0==e.length){if(Array.isArray(t))throw new a(t.length,0)}else!function t(e,r,n){var i,o=e.length;if(o!=r[n])throw new a(o,r[n]);if(n")}(t,e,0)},r.validateIndex=function(t,e){if(!n.isNumber(t)||!n.isInteger(t))throw new TypeError("Index must be an integer (value: "+t+")");if(t<0||"number"==typeof e&&t>=e)throw new o(t,e)},r.UNINITIALIZED={},r.resize=function(t,e,a){if(!Array.isArray(t)||!Array.isArray(e))throw new TypeError("Array expected");if(0===e.length)throw new Error("Resizing to scalar is not supported");return e.forEach(function(t){if(!n.isNumber(t)||!n.isInteger(t)||t<0)throw new TypeError("Invalid size, must contain positive integers (size: "+i.format(e)+")")}),function t(e,n,i,a){var o;var s;var l=e.length;var u=n[i];var c=Math.min(l,u);e.length=u;if(i=s.length)throw new a(e,s.length);return i(t)?t.create(o(t.valueOf(),e,r)):o(t,e,r)}},{"../../error/IndexError":445,"../array":589,"../collection/isMatrix":599}],601:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,i,a,o,s,l,u,c){var f,h,p,d,m=t._values,g=t._index,v=t._ptr,y=o._index;if(n)for(h=v[e],p=v[e+1],f=h;f>",rightLogShift:">>>",equal:"=",unequal:"\\neq",smaller:"<",larger:">",smallerEq:"\\leq",largerEq:"\\geq",bitAnd:"\\&",bitXor:"\\underline{|}",bitOr:"|",and:"\\wedge",xor:"\\veebar",or:"\\vee"},r.defaultTemplate="\\mathrm{${name}}\\left(${args}\\right)";var i={deg:"^\\circ"};r.escape=function(t){return n(t,{preserveFormatting:!0})},r.toSymbol=function(t,e){return(e="undefined"!=typeof e&&e)?i.hasOwnProperty(t)?i[t]:"\\mathrm{"+r.escape(t)+"}":r.symbols.hasOwnProperty(t)?r.symbols[t]:r.escape(t)}},{"escape-latex":176}],607:[function(t,e,r){"use strict";function n(t){for(var e=[],r=0;r0?1:t<0?-1:0},r.format=function(t,e){if("function"==typeof e)return e(t);if(t===1/0)return"Infinity";if(t===-1/0)return"-Infinity";if(isNaN(t))return"NaN";var n="auto",i=void 0;switch(e&&(e.notation&&(n=e.notation),r.isNumber(e)?i=e:e.precision&&(i=e.precision)),n){case"fixed":return r.toFixed(t,i);case"exponential":return r.toExponential(t,i);case"engineering":return r.toEngineering(t,i);case"auto":return r.toPrecision(t,i,e&&e.exponential).replace(/((\.\d*?)(0+))($|e)/,function(){var t=arguments[2],e=arguments[4];return"."!==t?t+e:e});default:throw new Error('Unknown notation "'+n+'". Choose "auto", "exponential", or "fixed".')}},r.splitNumber=function(t){var e=String(t).toLowerCase().match(/^0*?(-?)(\d+\.?\d*)(e([+-]?\d+))?$/);if(!e)throw new SyntaxError("Invalid number "+t);var r=e[1],n=e[2],i=parseFloat(e[4]||"0"),a=n.indexOf(".");i+=-1!==a?a-1:n.length-1;var o=n.replace(".","").replace(/^0*/,function(t){return i-=t.length,""}).replace(/0*$/,"").split("").map(function(t){return parseInt(t)});return 0===o.length&&(o.push(0),i++),{sign:r,coefficients:o,exponent:i}},r.toEngineering=function(t,e){if(isNaN(t)||!isFinite(t))return String(t);var i=r.roundDigits(r.splitNumber(t),e),a=i.exponent,o=i.coefficients,s=a%3==0?a:a<0?a-3-a%3:a-a%3,l=a>=0?a:Math.abs(s);o.length-1=0;)c++;var f=o.slice(c).join(""),h=f.match(/[1-9]/)?"."+f:"",p=o.slice(0,c).join("")+h+"e"+(a>=0?"+":"")+s.toString();return i.sign+p},r.toFixed=function(t,e){if(isNaN(t)||!isFinite(t))return String(t);var i=r.splitNumber(t),a=r.roundDigits(i,i.exponent+1+(e||0)),o=a.coefficients,s=a.exponent+1,l=s+(e||0);return o.length0?"."+o.join(""):"")+"e"+(s>=0?"+":"")+s},r.toPrecision=function(t,e,i){if(isNaN(t)||!isFinite(t))return String(t);var a=i&&void 0!==i.lower?i.lower:.001,o=i&&void 0!==i.upper?i.upper:1e5,s=r.splitNumber(t),l=Math.abs(Math.pow(10,s.exponent));if(l=o)return r.toExponential(t,e);var u=e?r.roundDigits(s,e):s,c=u.coefficients,f=u.exponent;c.length0?f:0;return h<(c=n(-f).concat(c)).length-1&&c.splice(h+1,0,"."),u.sign+c.join("")},r.roundDigits=function(t,e){for(var r={sign:t.sign,coefficients:t.coefficients,exponent:t.exponent},n=r.coefficients;e<=0;)n.unshift(0),r.exponent++,e++;if(n.length>e&&n.splice(e,n.length-e)[0]>=5){var i=e-1;for(n[i]++;10===n[i];)n.pop(),0===i&&(n.unshift(0),r.exponent++,i++),n[--i]++}return r},r.digits=function(t){return t.toExponential().replace(/e.*$/,"").replace(/^0\.?0*|\./,"").length},r.DBL_EPSILON=Number.EPSILON||2.220446049250313e-16,r.nearlyEqual=function(t,e,n){if(null==n)return t==e;if(t==e)return!0;if(isNaN(t)||isNaN(e))return!1;if(isFinite(t)&&isFinite(e)){var i=Math.abs(t-e);return i/g,">")}},{"./bignumber/formatter":591,"./bignumber/isBigNumber":592,"./number":607}],610:[function(t,e,r){"use strict";r.type=function(t){var e=typeof t;return"object"===e?null===t?"null":Array.isArray(t)?"Array":t instanceof Date?"Date":t instanceof RegExp?"RegExp":t instanceof Boolean?"boolean":t instanceof Number?"number":t instanceof String?"string":"Object":"function"===e?"Function":e}},{}],611:[function(t,e,r){e.exports="3.20.2"},{}],612:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),i=t("mat4-interpolate"),a=t("gl-mat4/invert"),o=t("gl-mat4/rotateX"),s=t("gl-mat4/rotateY"),l=t("gl-mat4/rotateZ"),u=t("gl-mat4/lookAt"),c=t("gl-mat4/translate"),f=(t("gl-mat4/scale"),t("gl-vec3/normalize")),h=[0,0,0];function p(t){this._components=t.slice(),this._time=[0],this.prevMatrix=t.slice(),this.nextMatrix=t.slice(),this.computedMatrix=t.slice(),this.computedInverse=t.slice(),this.computedEye=[0,0,0],this.computedUp=[0,0,0],this.computedCenter=[0,0,0],this.computedRadius=[0],this._limits=[-1/0,1/0]}e.exports=function(t){return new p((t=t||{}).matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])};var d=p.prototype;d.recalcMatrix=function(t){var e=this._time,r=n.le(e,t),o=this.computedMatrix;if(!(r<0)){var s=this._components;if(r===e.length-1)for(var l=16*r,u=0;u<16;++u)o[u]=s[l++];else{var c=e[r+1]-e[r],h=(l=16*r,this.prevMatrix),p=!0;for(u=0;u<16;++u)h[u]=s[l++];var d=this.nextMatrix;for(u=0;u<16;++u)d[u]=s[l++],p=p&&h[u]===d[u];if(c<1e-6||p)for(u=0;u<16;++u)o[u]=h[u];else i(o,h,d,(t-e[r])/c)}var m=this.computedUp;m[0]=o[1],m[1]=o[5],m[2]=o[9],f(m,m);var g=this.computedInverse;a(g,o);var v=this.computedEye,y=g[15];v[0]=g[12]/y,v[1]=g[13]/y,v[2]=g[14]/y;var x=this.computedCenter,b=Math.exp(this.computedRadius[0]);for(u=0;u<3;++u)x[u]=v[u]-o[2+4*u]*b}},d.idle=function(t){if(!(t1&&n(t[o[c-2]],t[o[c-1]],u)<=0;)c-=1,o.pop();for(o.push(l),c=s.length;c>1&&n(t[s[c-2]],t[s[c-1]],u)>=0;)c-=1,s.pop();s.push(l)}for(var r=new Array(s.length+o.length-2),f=0,i=0,h=o.length;i0;--p)r[f++]=s[p];return r};var n=t("robust-orientation")[3]},{"robust-orientation":1350}],615:[function(t,e,r){"use strict";e.exports=function(t,e){e||(e=t,t=window);var r=0,i=0,a=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return"altKey"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),"shiftKey"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),"ctrlKey"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),"metaKey"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function u(t,s){var u=n.x(s),c=n.y(s);"buttons"in s&&(t=0|s.buttons),(t!==r||u!==i||c!==a||l(s))&&(r=0|t,i=u||0,a=c||0,e&&e(r,i,a,o))}function c(t){u(0,t)}function f(){(r||i||a||o.shift||o.alt||o.meta||o.control)&&(i=a=0,r=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function h(t){l(t)&&e&&e(r,i,a,o)}function p(t){0===n.buttons(t)?u(0,t):u(r,t)}function d(t){u(r|n.buttons(t),t)}function m(t){u(r&~n.buttons(t),t)}function g(){s||(s=!0,t.addEventListener("mousemove",p),t.addEventListener("mousedown",d),t.addEventListener("mouseup",m),t.addEventListener("mouseleave",c),t.addEventListener("mouseenter",c),t.addEventListener("mouseout",c),t.addEventListener("mouseover",c),t.addEventListener("blur",f),t.addEventListener("keyup",h),t.addEventListener("keydown",h),t.addEventListener("keypress",h),t!==window&&(window.addEventListener("blur",f),window.addEventListener("keyup",h),window.addEventListener("keydown",h),window.addEventListener("keypress",h)))}g();var v={element:t};return Object.defineProperties(v,{enabled:{get:function(){return s},set:function(e){e?g():s&&(s=!1,t.removeEventListener("mousemove",p),t.removeEventListener("mousedown",d),t.removeEventListener("mouseup",m),t.removeEventListener("mouseleave",c),t.removeEventListener("mouseenter",c),t.removeEventListener("mouseout",c),t.removeEventListener("mouseover",c),t.removeEventListener("blur",f),t.removeEventListener("keyup",h),t.removeEventListener("keydown",h),t.removeEventListener("keypress",h),t!==window&&(window.removeEventListener("blur",f),window.removeEventListener("keyup",h),window.removeEventListener("keydown",h),window.removeEventListener("keypress",h)))},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return i},enumerable:!0},y:{get:function(){return a},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),v};var n=t("mouse-event")},{"mouse-event":617}],616:[function(t,e,r){var n={left:0,top:0};e.exports=function(t,e,r){e=e||t.currentTarget||t.srcElement,Array.isArray(r)||(r=[0,0]);var i=t.clientX||0,a=t.clientY||0,o=(s=e,s===window||s===document||s===document.body?n:s.getBoundingClientRect());var s;return r[0]=i-o.left,r[1]=a-o.top,r}},{}],617:[function(t,e,r){"use strict";function n(t){return t.target||t.srcElement||window}r.buttons=function(t){if("object"==typeof t){if("buttons"in t)return t.buttons;if("which"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<=0)return 1< 0");"function"!=typeof t.vertex&&e("Must specify vertex creation function");"function"!=typeof t.cell&&e("Must specify cell creation function");"function"!=typeof t.phase&&e("Must specify phase function");for(var S=t.getters||[],C=new Array(T),L=0;L=0?C[L]=!0:C[L]=!1;return function(t,e,r,T,E,S){var C=S.length,L=E.length;if(L<2)throw new Error("ndarray-extract-contour: Dimension must be at least 2");for(var O="extractContour"+E.join("_"),z=[],D=[],P=[],I=0;I0&&B.push(l(I,E[N-1])+"*"+s(E[N-1])),D.push(d(I,E[N])+"=("+B.join("-")+")|0")}for(var I=0;I=0;--I)j.push(s(E[I]));D.push(w+"=("+j.join("*")+")|0",b+"=mallocUint32("+w+")",x+"=mallocUint32("+w+")",A+"=0"),D.push(m(0)+"=0");for(var N=1;N<1<0;M=M-1&d)w.push(x+"["+A+"+"+v(M)+"]");w.push(y(0));for(var M=0;M=0;--e)G(e,0);for(var r=[],e=0;e0){",p(E[e]),"=1;");t(e-1,r|1<=0?s.push("0"):e.indexOf(-(l+1))>=0?s.push("s["+l+"]-1"):(s.push("-1"),a.push("1"),o.push("s["+l+"]-2"));var u=".lo("+a.join()+").hi("+o.join()+")";if(0===a.length&&(u=""),i>0){n.push("if(1");for(var l=0;l=0||e.indexOf(-(l+1))>=0||n.push("&&s[",l,"]>2");n.push("){grad",i,"(src.pick(",s.join(),")",u);for(var l=0;l=0||e.indexOf(-(l+1))>=0||n.push(",dst.pick(",s.join(),",",l,")",u);n.push(");")}for(var l=0;l1){dst.set(",s.join(),",",c,",0.5*(src.get(",h.join(),")-src.get(",p.join(),")))}else{dst.set(",s.join(),",",c,",0)};"):n.push("if(s[",c,"]>1){diff(",f,",src.pick(",h.join(),")",u,",src.pick(",p.join(),")",u,");}else{zero(",f,");};");break;case"mirror":0===i?n.push("dst.set(",s.join(),",",c,",0);"):n.push("zero(",f,");");break;case"wrap":var d=s.slice(),m=s.slice();e[l]<0?(d[c]="s["+c+"]-2",m[c]="0"):(d[c]="s["+c+"]-1",m[c]="1"),0===i?n.push("if(s[",c,"]>2){dst.set(",s.join(),",",c,",0.5*(src.get(",d.join(),")-src.get(",m.join(),")))}else{dst.set(",s.join(),",",c,",0)};"):n.push("if(s[",c,"]>2){diff(",f,",src.pick(",d.join(),")",u,",src.pick(",m.join(),")",u,");}else{zero(",f,");};");break;default:throw new Error("ndarray-gradient: Invalid boundary condition")}}i>0&&n.push("};")}for(var s=0;s<1<>",rrshift:">>>"};!function(){for(var t in s){var e=s[t];r[t]=o({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+e+"c"},funcName:t}),r[t+"eq"]=o({args:["array","array"],body:{args:["a","b"],body:"a"+e+"=b"},rvalue:!0,funcName:t+"eq"}),r[t+"s"]=o({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+e+"s"},funcName:t+"s"}),r[t+"seq"]=o({args:["array","scalar"],body:{args:["a","s"],body:"a"+e+"=s"},rvalue:!0,funcName:t+"seq"})}}();var l={not:"!",bnot:"~",neg:"-",recip:"1.0/"};!function(){for(var t in l){var e=l[t];r[t]=o({args:["array","array"],body:{args:["a","b"],body:"a="+e+"b"},funcName:t}),r[t+"eq"]=o({args:["array"],body:{args:["a"],body:"a="+e+"a"},rvalue:!0,count:2,funcName:t+"eq"})}}();var u={and:"&&",or:"||",eq:"===",neq:"!==",lt:"<",gt:">",leq:"<=",geq:">="};!function(){for(var t in u){var e=u[t];r[t]=o({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+e+"c"},funcName:t}),r[t+"s"]=o({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+e+"s"},funcName:t+"s"}),r[t+"eq"]=o({args:["array","array"],body:{args:["a","b"],body:"a=a"+e+"b"},rvalue:!0,count:2,funcName:t+"eq"}),r[t+"seq"]=o({args:["array","scalar"],body:{args:["a","s"],body:"a=a"+e+"s"},rvalue:!0,count:2,funcName:t+"seq"})}}();var c=["abs","acos","asin","atan","ceil","cos","exp","floor","log","round","sin","sqrt","tan"];!function(){for(var t=0;tthis_s){this_s=-a}else if(a>this_s){this_s=a}",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norminf"}),r.norm1=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:3}],body:"this_s+=a<0?-a:a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm1"}),r.sup=n({args:["array"],pre:{body:"this_h=-Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),r.inf=n({args:["array"],pre:{body:"this_h=Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),r.random=o({args:["array"],pre:{args:[],body:"this_f=Math.random",thisVars:["this_f"]},body:{args:["a"],body:"a=this_f()",thisVars:["this_f"]},funcName:"random"}),r.assign=o({args:["array","array"],body:{args:["a","b"],body:"a=b"},funcName:"assign"}),r.assigns=o({args:["array","scalar"],body:{args:["a","b"],body:"a=b"},funcName:"assigns"}),r.equals=n({args:["array","array"],pre:i,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1},{name:"y",lvalue:!1,rvalue:!0,count:1}],body:"if(x!==y){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"equals"})},{"cwise-compiler":89}],625:[function(t,e,r){"use strict";var n=t("ndarray"),i=t("./doConvert.js");e.exports=function(t,e){for(var r=[],a=t,o=1;Array.isArray(a);)r.push(a.length),o*=a.length,a=a[0];return 0===r.length?n():(e||(e=n(new Float64Array(o),r)),i(e,t),e)}},{"./doConvert.js":626,ndarray:630}],626:[function(t,e,r){e.exports=t("cwise-compiler")({args:["array","scalar","index"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{\nvar _inline_1_v=_inline_1_arg1_,_inline_1_i\nfor(_inline_1_i=0;_inline_1_i<_inline_1_arg2_.length-1;++_inline_1_i) {\n_inline_1_v=_inline_1_v[_inline_1_arg2_[_inline_1_i]]\n}\n_inline_1_arg0_=_inline_1_v[_inline_1_arg2_[_inline_1_arg2_.length-1]]\n}",args:[{name:"_inline_1_arg0_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg2_",lvalue:!1,rvalue:!0,count:4}],thisVars:[],localVars:["_inline_1_i","_inline_1_v"]},post:{body:"{}",args:[],thisVars:[],localVars:[]},funcName:"convert",blockSize:64})},{"cwise-compiler":89}],627:[function(t,e,r){"use strict";var n=t("typedarray-pool"),i=32;function a(t){switch(t){case"uint8":return[n.mallocUint8,n.freeUint8];case"uint16":return[n.mallocUint16,n.freeUint16];case"uint32":return[n.mallocUint32,n.freeUint32];case"int8":return[n.mallocInt8,n.freeInt8];case"int16":return[n.mallocInt16,n.freeInt16];case"int32":return[n.mallocInt32,n.freeInt32];case"float32":return[n.mallocFloat,n.freeFloat];case"float64":return[n.mallocDouble,n.freeDouble];default:return null}}function o(t){for(var e=[],r=0;r0?s.push(["d",d,"=s",d,"-d",f,"*n",f].join("")):s.push(["d",d,"=s",d].join("")),f=d),0!=(p=t.length-1-l)&&(h>0?s.push(["e",p,"=s",p,"-e",h,"*n",h,",f",p,"=",u[p],"-f",h,"*n",h].join("")):s.push(["e",p,"=s",p,",f",p,"=",u[p]].join("")),h=p)}r.push("var "+s.join(","));var m=["0","n0-1","data","offset"].concat(o(t.length));r.push(["if(n0<=",i,"){","insertionSort(",m.join(","),")}else{","quickSort(",m.join(","),")}"].join("")),r.push("}return "+n);var g=new Function("insertionSort","quickSort",r.join("\n")),v=function(t,e){var r=["'use strict'"],n=["ndarrayInsertionSort",t.join("d"),e].join(""),i=["left","right","data","offset"].concat(o(t.length)),s=a(e),l=["i,j,cptr,ptr=left*s0+offset"];if(t.length>1){for(var u=[],c=1;c1){for(r.push("dptr=0;sptr=ptr"),c=t.length-1;c>=0;--c)0!==(p=t[c])&&r.push(["for(i",p,"=0;i",p,"b){break __l}"].join("")),c=t.length-1;c>=1;--c)r.push("sptr+=e"+c,"dptr+=f"+c,"}");for(r.push("dptr=cptr;sptr=cptr-s0"),c=t.length-1;c>=0;--c)0!==(p=t[c])&&r.push(["for(i",p,"=0;i",p,"=0;--c)0!==(p=t[c])&&r.push(["for(i",p,"=0;i",p,"scratch)){",h("cptr",f("cptr-s0")),"cptr-=s0","}",h("cptr","scratch"));return r.push("}"),t.length>1&&s&&r.push("free(scratch)"),r.push("} return "+n),s?new Function("malloc","free",r.join("\n"))(s[0],s[1]):new Function(r.join("\n"))()}(t,e),y=function(t,e,r){var n=["'use strict'"],s=["ndarrayQuickSort",t.join("d"),e].join(""),l=["left","right","data","offset"].concat(o(t.length)),u=a(e),c=0;n.push(["function ",s,"(",l.join(","),"){"].join(""));var f=["sixth=((right-left+1)/6)|0","index1=left+sixth","index5=right-sixth","index3=(left+right)>>1","index2=index3-sixth","index4=index3+sixth","el1=index1","el2=index2","el3=index3","el4=index4","el5=index5","less=left+1","great=right-1","pivots_are_equal=true","tmp","tmp0","x","y","z","k","ptr0","ptr1","ptr2","comp_pivot1=0","comp_pivot2=0","comp=0"];if(t.length>1){for(var h=[],p=1;p=0;--a)0!==(o=t[a])&&n.push(["for(i",o,"=0;i",o,"1)for(a=0;a1?n.push("ptr_shift+=d"+o):n.push("ptr0+=d"+o),n.push("}"))}}function y(e,r,i,a){if(1===r.length)n.push("ptr0="+d(r[0]));else{for(var o=0;o1)for(o=0;o=1;--o)i&&n.push("pivot_ptr+=f"+o),r.length>1?n.push("ptr_shift+=e"+o):n.push("ptr0+=e"+o),n.push("}")}function x(){t.length>1&&u&&n.push("free(pivot1)","free(pivot2)")}function b(e,r){var i="el"+e,a="el"+r;if(t.length>1){var o="__l"+ ++c;y(o,[i,a],!1,["comp=",m("ptr0"),"-",m("ptr1"),"\n","if(comp>0){tmp0=",i,";",i,"=",a,";",a,"=tmp0;break ",o,"}\n","if(comp<0){break ",o,"}"].join(""))}else n.push(["if(",m(d(i)),">",m(d(a)),"){tmp0=",i,";",i,"=",a,";",a,"=tmp0}"].join(""))}function _(e,r){t.length>1?v([e,r],!1,g("ptr0",m("ptr1"))):n.push(g(d(e),m(d(r))))}function w(e,r,i){if(t.length>1){var a="__l"+ ++c;y(a,[r],!0,[e,"=",m("ptr0"),"-pivot",i,"[pivot_ptr]\n","if(",e,"!==0){break ",a,"}"].join(""))}else n.push([e,"=",m(d(r)),"-pivot",i].join(""))}function A(e,r){t.length>1?v([e,r],!1,["tmp=",m("ptr0"),"\n",g("ptr0",m("ptr1")),"\n",g("ptr1","tmp")].join("")):n.push(["ptr0=",d(e),"\n","ptr1=",d(r),"\n","tmp=",m("ptr0"),"\n",g("ptr0",m("ptr1")),"\n",g("ptr1","tmp")].join(""))}function M(e,r,i){t.length>1?(v([e,r,i],!1,["tmp=",m("ptr0"),"\n",g("ptr0",m("ptr1")),"\n",g("ptr1",m("ptr2")),"\n",g("ptr2","tmp")].join("")),n.push("++"+r,"--"+i)):n.push(["ptr0=",d(e),"\n","ptr1=",d(r),"\n","ptr2=",d(i),"\n","++",r,"\n","--",i,"\n","tmp=",m("ptr0"),"\n",g("ptr0",m("ptr1")),"\n",g("ptr1",m("ptr2")),"\n",g("ptr2","tmp")].join(""))}function k(t,e){A(t,e),n.push("--"+e)}function T(e,r,i){t.length>1?v([e,r],!0,[g("ptr0",m("ptr1")),"\n",g("ptr1",["pivot",i,"[pivot_ptr]"].join(""))].join("")):n.push(g(d(e),m(d(r))),g(d(r),"pivot"+i))}function E(e,r){n.push(["if((",r,"-",e,")<=",i,"){\n","insertionSort(",e,",",r,",data,offset,",o(t.length).join(","),")\n","}else{\n",s,"(",e,",",r,",data,offset,",o(t.length).join(","),")\n","}"].join(""))}function S(e,r,i){t.length>1?(n.push(["__l",++c,":while(true){"].join("")),v([e],!0,["if(",m("ptr0"),"!==pivot",r,"[pivot_ptr]){break __l",c,"}"].join("")),n.push(i,"}")):n.push(["while(",m(d(e)),"===pivot",r,"){",i,"}"].join(""))}return n.push("var "+f.join(",")),b(1,2),b(4,5),b(1,3),b(2,3),b(1,4),b(3,4),b(2,5),b(2,3),b(4,5),t.length>1?v(["el1","el2","el3","el4","el5","index1","index3","index5"],!0,["pivot1[pivot_ptr]=",m("ptr1"),"\n","pivot2[pivot_ptr]=",m("ptr3"),"\n","pivots_are_equal=pivots_are_equal&&(pivot1[pivot_ptr]===pivot2[pivot_ptr])\n","x=",m("ptr0"),"\n","y=",m("ptr2"),"\n","z=",m("ptr4"),"\n",g("ptr5","x"),"\n",g("ptr6","y"),"\n",g("ptr7","z")].join("")):n.push(["pivot1=",m(d("el2")),"\n","pivot2=",m(d("el4")),"\n","pivots_are_equal=pivot1===pivot2\n","x=",m(d("el1")),"\n","y=",m(d("el3")),"\n","z=",m(d("el5")),"\n",g(d("index1"),"x"),"\n",g(d("index3"),"y"),"\n",g(d("index5"),"z")].join("")),_("index2","left"),_("index4","right"),n.push("if(pivots_are_equal){"),n.push("for(k=less;k<=great;++k){"),w("comp","k",1),n.push("if(comp===0){continue}"),n.push("if(comp<0){"),n.push("if(k!==less){"),A("k","less"),n.push("}"),n.push("++less"),n.push("}else{"),n.push("while(true){"),w("comp","great",1),n.push("if(comp>0){"),n.push("great--"),n.push("}else if(comp<0){"),M("k","less","great"),n.push("break"),n.push("}else{"),k("k","great"),n.push("break"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}else{"),n.push("for(k=less;k<=great;++k){"),w("comp_pivot1","k",1),n.push("if(comp_pivot1<0){"),n.push("if(k!==less){"),A("k","less"),n.push("}"),n.push("++less"),n.push("}else{"),w("comp_pivot2","k",2),n.push("if(comp_pivot2>0){"),n.push("while(true){"),w("comp","great",2),n.push("if(comp>0){"),n.push("if(--greatindex5){"),S("less",1,"++less"),S("great",2,"--great"),n.push("for(k=less;k<=great;++k){"),w("comp_pivot1","k",1),n.push("if(comp_pivot1===0){"),n.push("if(k!==less){"),A("k","less"),n.push("}"),n.push("++less"),n.push("}else{"),w("comp_pivot2","k",2),n.push("if(comp_pivot2===0){"),n.push("while(true){"),w("comp","great",2),n.push("if(comp===0){"),n.push("if(--great1&&u?new Function("insertionSort","malloc","free",n.join("\n"))(r,u[0],u[1]):new Function("insertionSort",n.join("\n"))(r)}(t,e,v);return g(v,y)}},{"typedarray-pool":1385}],628:[function(t,e,r){"use strict";var n=t("./lib/compile_sort.js"),i={};e.exports=function(t){var e=t.order,r=t.dtype,a=[e,r].join(":"),o=i[a];return o||(i[a]=o=n(e,r)),o(t),t}},{"./lib/compile_sort.js":627}],629:[function(t,e,r){"use strict";var n=t("ndarray-linear-interpolate"),i=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=new Array(_inline_3_arg4_)}",args:[{name:"_inline_3_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg2_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg3_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_4_arg2_(this_warped,_inline_4_arg0_),_inline_4_arg1_=_inline_4_arg3_.apply(void 0,this_warped)}",args:[{name:"_inline_4_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_4_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_4_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_4_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_4_arg4_",lvalue:!1,rvalue:!1,count:0}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warpND",blockSize:64}),a=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_7_arg2_(this_warped,_inline_7_arg0_),_inline_7_arg1_=_inline_7_arg3_(_inline_7_arg4_,this_warped[0])}",args:[{name:"_inline_7_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_7_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_7_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_7_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_7_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp1D",blockSize:64}),o=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0,0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_10_arg2_(this_warped,_inline_10_arg0_),_inline_10_arg1_=_inline_10_arg3_(_inline_10_arg4_,this_warped[0],this_warped[1])}",args:[{name:"_inline_10_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_10_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_10_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_10_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_10_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp2D",blockSize:64}),s=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0,0,0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_13_arg2_(this_warped,_inline_13_arg0_),_inline_13_arg1_=_inline_13_arg3_(_inline_13_arg4_,this_warped[0],this_warped[1],this_warped[2])}",args:[{name:"_inline_13_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_13_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_13_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_13_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_13_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp3D",blockSize:64});e.exports=function(t,e,r){switch(e.shape.length){case 1:a(t,r,n.d1,e);break;case 2:o(t,r,n.d2,e);break;case 3:s(t,r,n.d3,e);break;default:i(t,r,n.bind(void 0,e),e.shape.length)}return t}},{"cwise/lib/wrapper":92,"ndarray-linear-interpolate":623}],630:[function(t,e,r){var n=t("iota-array"),i=t("is-buffer"),a="undefined"!=typeof Float64Array;function o(t,e){return t[0]-e[0]}function s(){var t,e=this.stride,r=new Array(e.length);for(t=0;tMath.abs(this.stride[1]))?[1,0]:[0,1]}})"):3===e&&a.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")):a.push("ORDER})")),a.push("proto.set=function "+r+"_set("+l.join(",")+",v){"),i?a.push("return this.data.set("+c+",v)}"):a.push("return this.data["+c+"]=v}"),a.push("proto.get=function "+r+"_get("+l.join(",")+"){"),i?a.push("return this.data.get("+c+")}"):a.push("return this.data["+c+"]}"),a.push("proto.index=function "+r+"_index(",l.join(),"){return "+c+"}"),a.push("proto.hi=function "+r+"_hi("+l.join(",")+"){return new "+r+"(this.data,"+o.map(function(t){return["(typeof i",t,"!=='number'||i",t,"<0)?this.shape[",t,"]:i",t,"|0"].join("")}).join(",")+","+o.map(function(t){return"this.stride["+t+"]"}).join(",")+",this.offset)}");var p=o.map(function(t){return"a"+t+"=this.shape["+t+"]"}),d=o.map(function(t){return"c"+t+"=this.stride["+t+"]"});a.push("proto.lo=function "+r+"_lo("+l.join(",")+"){var b=this.offset,d=0,"+p.join(",")+","+d.join(","));for(var m=0;m=0){d=i"+m+"|0;b+=c"+m+"*d;a"+m+"-=d}");a.push("return new "+r+"(this.data,"+o.map(function(t){return"a"+t}).join(",")+","+o.map(function(t){return"c"+t}).join(",")+",b)}"),a.push("proto.step=function "+r+"_step("+l.join(",")+"){var "+o.map(function(t){return"a"+t+"=this.shape["+t+"]"}).join(",")+","+o.map(function(t){return"b"+t+"=this.stride["+t+"]"}).join(",")+",c=this.offset,d=0,ceil=Math.ceil");for(m=0;m=0){c=(c+this.stride["+m+"]*i"+m+")|0}else{a.push(this.shape["+m+"]);b.push(this.stride["+m+"])}");return a.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}"),a.push("return function construct_"+r+"(data,shape,stride,offset){return new "+r+"(data,"+o.map(function(t){return"shape["+t+"]"}).join(",")+","+o.map(function(t){return"stride["+t+"]"}).join(",")+",offset)}"),new Function("CTOR_LIST","ORDER",a.join("\n"))(u[t],s)}var u={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],buffer:[],generic:[]};e.exports=function(t,e,r,n){if(void 0===t)return(0,u.array[0])([]);"number"==typeof t&&(t=[t]),void 0===e&&(e=[t.length]);var o=e.length;if(void 0===r){r=new Array(o);for(var s=o-1,c=1;s>=0;--s)r[s]=c,c*=e[s]}if(void 0===n)for(n=0,s=0;s>>0;e.exports=function(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t===e)return t;if(0===t)return e<0?-i:i;var r=n.hi(t),o=n.lo(t);e>t==t>0?o===a?(r+=1,o=0):o+=1:0===o?(o=a,r-=1):o-=1;return n.pack(o,r)}},{"double-bits":113}],632:[function(t,e,r){"use strict";e.exports=function(t){for(var e,r=[],o=0,s=0,l=0,u=0,c=null,f=null,h=0,p=0,d=0,m=t.length;d4?(o=g[g.length-4],s=g[g.length-3]):(o=h,s=p),r.push(g)}return r};var n=t("svg-arc-to-cubic-bezier");function i(t,e,r,n){return["C",t,e,r,n,r,n]}function a(t,e,r,n,i,a){return["C",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}},{"svg-arc-to-cubic-bezier":1371}],633:[function(t,e,r){r.vertexNormals=function(t,e,r){for(var n=e.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;oa){var b=i[u],_=1/Math.sqrt(g*y);for(x=0;x<3;++x){var w=(x+1)%3,A=(x+2)%3;b[x]+=_*(v[w]*m[A]-v[A]*m[w])}}}for(o=0;oa)for(_=1/Math.sqrt(M),x=0;x<3;++x)b[x]*=_;else for(x=0;x<3;++x)b[x]=0}return i},r.faceNormals=function(t,e,r){for(var n=t.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;oa?1/Math.sqrt(p):0;for(u=0;u<3;++u)h[u]*=p;i[o]=h}return i}},{}],634:[function(t,e,r){"use strict";var n=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(t){n[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var r,o,s=function(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),l=1;l0){var f=Math.sqrt(c+1);t[0]=.5*(o-l)/f,t[1]=.5*(s-n)/f,t[2]=.5*(r-a)/f,t[3]=.5*f}else{var h=Math.max(e,a,u),f=Math.sqrt(2*h-c+1);e>=h?(t[0]=.5*f,t[1]=.5*(i+r)/f,t[2]=.5*(s+n)/f,t[3]=.5*(o-l)/f):a>=h?(t[0]=.5*(r+i)/f,t[1]=.5*f,t[2]=.5*(l+o)/f,t[3]=.5*(s-n)/f):(t[0]=.5*(n+s)/f,t[1]=.5*(o+l)/f,t[2]=.5*f,t[3]=.5*(r-i)/f)}return t}},{}],636:[function(t,e,r){"use strict";e.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.rotation||[0,0,0,1],n=t.radius||1;e=[].slice.call(e,0,3),c(r=[].slice.call(r,0,4),r);var i=new f(r,e,Math.log(n));i.setDistanceLimits(t.zoomMin,t.zoomMax),("eye"in t||"up"in t)&&i.lookAt(0,t.eye,t.center,t.up);return i};var n=t("filtered-vector"),i=t("gl-mat4/lookAt"),a=t("gl-mat4/fromQuat"),o=t("gl-mat4/invert"),s=t("./lib/quatFromFrame");function l(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function u(t,e,r,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2)+Math.pow(n,2))}function c(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=u(r,n,i,a);o>1e-6?(t[0]=r/o,t[1]=n/o,t[2]=i/o,t[3]=a/o):(t[0]=t[1]=t[2]=0,t[3]=1)}function f(t,e,r){this.radius=n([r]),this.center=n(e),this.rotation=n(t),this.computedRadius=this.radius.curve(0),this.computedCenter=this.center.curve(0),this.computedRotation=this.rotation.curve(0),this.computedUp=[.1,0,0],this.computedEye=[.1,0,0],this.computedMatrix=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}var h=f.prototype;h.lastT=function(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},h.recalcMatrix=function(t){this.radius.curve(t),this.center.curve(t),this.rotation.curve(t);var e=this.computedRotation;c(e,e);var r=this.computedMatrix;a(r,e);var n=this.computedCenter,i=this.computedEye,o=this.computedUp,s=Math.exp(this.computedRadius[0]);i[0]=n[0]+s*r[2],i[1]=n[1]+s*r[6],i[2]=n[2]+s*r[10],o[0]=r[1],o[1]=r[5],o[2]=r[9];for(var l=0;l<3;++l){for(var u=0,f=0;f<3;++f)u+=r[l+4*f]*i[f];r[12+l]=-u}},h.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r},h.idle=function(t){this.center.idle(t),this.radius.idle(t),this.rotation.idle(t)},h.flush=function(t){this.center.flush(t),this.radius.flush(t),this.rotation.flush(t)},h.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var i=this.computedMatrix,a=i[1],o=i[5],s=i[9],u=l(a,o,s);a/=u,o/=u,s/=u;var c=i[0],f=i[4],h=i[8],p=c*a+f*o+h*s,d=l(c-=a*p,f-=o*p,h-=s*p);c/=d,f/=d,h/=d;var m=i[2],g=i[6],v=i[10],y=m*a+g*o+v*s,x=m*c+g*f+v*h,b=l(m-=y*a+x*c,g-=y*o+x*f,v-=y*s+x*h);m/=b,g/=b,v/=b;var _=c*e+a*r,w=f*e+o*r,A=h*e+s*r;this.center.move(t,_,w,A);var M=Math.exp(this.computedRadius[0]);M=Math.max(1e-4,M+n),this.radius.set(t,Math.log(M))},h.rotate=function(t,e,r,n){this.recalcMatrix(t),e=e||0,r=r||0;var i=this.computedMatrix,a=i[0],o=i[4],s=i[8],c=i[1],f=i[5],h=i[9],p=i[2],d=i[6],m=i[10],g=e*a+r*c,v=e*o+r*f,y=e*s+r*h,x=-(d*y-m*v),b=-(m*g-p*y),_=-(p*v-d*g),w=Math.sqrt(Math.max(0,1-Math.pow(x,2)-Math.pow(b,2)-Math.pow(_,2))),A=u(x,b,_,w);A>1e-6?(x/=A,b/=A,_/=A,w/=A):(x=b=_=0,w=1);var M=this.computedRotation,k=M[0],T=M[1],E=M[2],S=M[3],C=k*w+S*x+T*_-E*b,L=T*w+S*b+E*x-k*_,O=E*w+S*_+k*b-T*x,z=S*w-k*x-T*b-E*_;if(n){x=p,b=d,_=m;var D=Math.sin(n)/l(x,b,_);x*=D,b*=D,_*=D,z=z*(w=Math.cos(e))-(C=C*w+z*x+L*_-O*b)*x-(L=L*w+z*b+O*x-C*_)*b-(O=O*w+z*_+C*b-L*x)*_}var P=u(C,L,O,z);P>1e-6?(C/=P,L/=P,O/=P,z/=P):(C=L=O=0,z=1),this.rotation.set(t,C,L,O,z)},h.lookAt=function(t,e,r,n){this.recalcMatrix(t),r=r||this.computedCenter,e=e||this.computedEye,n=n||this.computedUp;var a=this.computedMatrix;i(a,e,r,n);var o=this.computedRotation;s(o,a[0],a[1],a[2],a[4],a[5],a[6],a[8],a[9],a[10]),c(o,o),this.rotation.set(t,o[0],o[1],o[2],o[3]);for(var l=0,u=0;u<3;++u)l+=Math.pow(r[u]-e[u],2);this.radius.set(t,.5*Math.log(Math.max(l,1e-6))),this.center.set(t,r[0],r[1],r[2])},h.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},h.setMatrix=function(t,e){var r=this.computedRotation;s(r,e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]),c(r,r),this.rotation.set(t,r[0],r[1],r[2],r[3]);var n=this.computedMatrix;o(n,e);var i=n[15];if(Math.abs(i)>1e-6){var a=n[12]/i,l=n[13]/i,u=n[14]/i;this.recalcMatrix(t);var f=Math.exp(this.computedRadius[0]);this.center.set(t,a-n[2]*f,l-n[6]*f,u-n[10]*f),this.radius.idle(t)}else this.center.idle(t),this.radius.idle(t)},h.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},h.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},h.getDistanceLimits=function(t){var e=this.radius.bounds;return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},h.toJSON=function(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},h.fromJSON=function(t){var e=this.lastT(),r=t.center;r&&this.center.set(e,r[0],r[1],r[2]);var n=t.rotation;n&&this.rotation.set(e,n[0],n[1],n[2],n[3]);var i=t.distance;i&&i>0&&this.radius.set(e,Math.log(i)),this.setDistanceLimits(t.zoomMin,t.zoomMax)}},{"./lib/quatFromFrame":635,"filtered-vector":179,"gl-mat4/fromQuat":263,"gl-mat4/invert":266,"gl-mat4/lookAt":267}],637:[function(t,e,r){"use strict";var n=t("repeat-string");e.exports=function(t,e,r){return n(r="undefined"!=typeof r?r+"":" ",e)+t}},{"repeat-string":1343}],638:[function(t,e,r){"use strict";function n(t,e){if("string"!=typeof t)return[t];var r=[t];"string"==typeof e||Array.isArray(e)?e={brackets:e}:e||(e={});var n=e.brackets?Array.isArray(e.brackets)?e.brackets:[e.brackets]:["{}","[]","()"],i=e.escape||"___",a=!!e.flat;n.forEach(function(t){var e=new RegExp(["\\",t[0],"[^\\",t[0],"\\",t[1],"]*\\",t[1]].join("")),n=[];function a(e,a,o){var s=r.push(e.slice(t[0].length,-t[1].length))-1;return n.push(s),i+s}r.forEach(function(t,n){for(var i,o=0;t!=i;)if(i=t,t=t.replace(e,a),o++>1e4)throw Error("References have circular dependency. Please, check them.");r[n]=t}),n=n.reverse(),r=r.map(function(e){return n.forEach(function(r){e=e.replace(new RegExp("(\\"+i+r+"(?![0-9]))","g"),t[0]+"$1"+t[1])}),e})});var o=new RegExp("\\"+i+"([0-9]+)");return a?r:function t(e,r,n){for(var i,a=[],s=0;i=o.exec(e);){if(s++>1e4)throw Error("Circular references in parenthesis");a.push(e.slice(0,i.index)),a.push(t(r[i[1]],r)),e=e.slice(i.index+i[0].length)}return a.push(e),a}(r[0],r)}function i(t,e){if(e&&e.flat){var r,n=e&&e.escape||"___",i=t[0];if(!i)return"";for(var a=new RegExp("\\"+n+"([0-9]+)"),o=0;i!=r;){if(o++>1e4)throw Error("Circular references in "+t);r=i,i=i.replace(a,s)}return i}return t.reduce(function t(e,r){return Array.isArray(r)&&(r=r.reduce(t,"")),e+r},"");function s(e,r){if(null==t[r])throw Error("Reference "+r+"is undefined");return t[r]}}function a(t,e){return Array.isArray(t)?i(t,e):n(t,e)}a.parse=n,a.stringify=i,e.exports=a},{}],639:[function(t,e,r){"use strict";var n=t("pick-by-alias");e.exports=function(t){var e;arguments.length>1&&(t=arguments);"string"==typeof t?t=t.split(/\s/).map(parseFloat):"number"==typeof t&&(t=[t]);t.length&&"number"==typeof t[0]?e=1===t.length?{width:t[0],height:t[0],x:0,y:0}:2===t.length?{width:t[0],height:t[1],x:0,y:0}:{x:t[0],y:t[1],width:t[2]-t[0]||0,height:t[3]-t[1]||0}:t&&(t=n(t,{left:"x l left Left",top:"y t top Top",width:"w width W Width",height:"h height W Width",bottom:"b bottom Bottom",right:"r right Right"}),e={x:t.left||0,y:t.top||0},null==t.width?t.right?e.width=t.right-e.x:e.width=0:e.width=t.width,null==t.height?t.bottom?e.height=t.bottom-e.y:e.height=0:e.height=t.height);return e}},{"pick-by-alias":645}],640:[function(t,e,r){e.exports=function(t){var e=[];return t.replace(i,function(t,r,i){var o=r.toLowerCase();for(i=function(t){var e=t.match(a);return e?e.map(Number):[]}(i),"m"==o&&i.length>2&&(e.push([r].concat(i.splice(0,2))),o="l",r="m"==r?"l":"L");;){if(i.length==n[o])return i.unshift(r),e.push(i);if(i.length0;--o)a=l[o],r=s[o],s[o]=s[a],s[a]=r,l[o]=l[r],l[r]=a,u=(u+r)*o;return n.freeUint32(l),n.freeUint32(s),u},r.unrank=function(t,e,r){switch(t){case 0:return r||[];case 1:return r?(r[0]=0,r):[0];case 2:return r?(e?(r[0]=0,r[1]=1):(r[0]=1,r[1]=0),r):e?[0,1]:[1,0]}var n,i,a,o=1;for((r=r||new Array(t))[0]=0,a=1;a0;--a)e=e-(n=e/o|0)*o|0,o=o/a|0,i=0|r[a],r[a]=0|r[n],r[n]=0|i;return r}},{"invert-permutation":419,"typedarray-pool":1385}],645:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n,a,o={};if("string"==typeof e&&(e=i(e)),Array.isArray(e)){var s={};for(a=0;a0){o=a[c][r][0],l=c;break}s=o[1^l];for(var f=0;f<2;++f)for(var h=a[f][r],p=0;p0&&(o=d,s=m,l=f)}return i?s:(o&&u(o,l),s)}function f(t,r){var i=a[r][t][0],o=[t];u(i,r);for(var s=i[1^r];;){for(;s!==t;)o.push(s),s=c(o[o.length-2],s,!1);if(a[0][t].length+a[1][t].length===0)break;var l=o[o.length-1],f=t,h=o[1],p=c(l,f,!0);if(n(e[l],e[f],e[h],e[p])<0)break;o.push(t),s=c(l,f)}return o}function h(t,e){return e[1]===e[e.length-1]}for(var o=0;o0;){a[0][o].length;var m=f(o,p);h(d,m)?d.push.apply(d,m):(d.length>0&&l.push(d),d=m)}d.length>0&&l.push(d)}return l};var n=t("compare-angle")},{"compare-angle":68}],647:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=n(t,e.length),i=new Array(e.length),a=new Array(e.length),o=[],s=0;s0;){var u=o.pop();i[u]=!1;for(var c=r[u],s=0;s0})).length,g=new Array(m),v=new Array(m),p=0;p0;){var B=R.pop(),j=C[B];l(j,function(t,e){return t-e});var V,U=j.length,q=F[B];if(0===q){var A=d[B];V=[A]}for(var p=0;p=0)&&(F[H]=1^q,R.push(H),0===q)){var A=d[H];N(A)||(A.reverse(),V.push(A))}}0===q&&r.push(V)}return r};var n=t("edges-to-adjacency-list"),i=t("planar-dual"),a=t("point-in-big-polygon"),o=t("two-product"),s=t("robust-sum"),l=t("uniq"),u=t("./lib/trim-leaves");function c(t,e){for(var r=new Array(t),n=0;n:not(.watermark)":"opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;","X:hover .modebar--hover .modebar-group":"opacity:1;","X .modebar-group":"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;","X .modebar-btn":"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;","X .modebar-btn svg":"position:relative;top:2px;","X .modebar.vertical":"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;","X .modebar.vertical svg":"top:-1px;","X .modebar.vertical .modebar-group":"display:block;float:none;padding-left:0px;padding-bottom:8px;","X .modebar.vertical .modebar-group .modebar-btn":"display:block;text-align:center;","X [data-title]:before,X [data-title]:after":"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;","X [data-title]:hover:before,X [data-title]:hover:after":"display:block;opacity:1;","X [data-title]:before":"content:'';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;","X [data-title]:after":"content:attr(data-title);background:#69738a;color:white;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;","X .vertical [data-title]:before,X .vertical [data-title]:after":"top:0%;right:200%;","X .vertical [data-title]:before":"border:6px solid transparent;border-left-color:#69738a;margin-top:8px;margin-right:-30px;","X .select-outline":"fill:none;stroke-width:1;shape-rendering:crispEdges;","X .select-outline-1":"stroke:white;","X .select-outline-2":"stroke:black;stroke-dasharray:2px 2px;",Y:"font-family:'Open Sans';position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;","Y p":"margin:0;","Y .notifier-note":"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,0.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;","Y .notifier-close":"color:#fff;opacity:0.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;","Y .notifier-close:hover":"color:#444;text-decoration:none;cursor:pointer;"};for(var a in i){var o=a.replace(/^,/," ,").replace(/X/g,".js-plotly-plot .plotly").replace(/Y/g,".plotly-notifier");n.addStyleRule(o,i[a])}},{"../src/lib":836}],650:[function(t,e,r){"use strict";e.exports={undo:{width:857.1,height:1e3,path:"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z",transform:"matrix(1 0 0 -1 0 850)"},home:{width:928.6,height:1e3,path:"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z",transform:"matrix(1 0 0 -1 0 850)"},"camera-retro":{width:1e3,height:1e3,path:"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z",transform:"matrix(1 0 0 -1 0 850)"},zoombox:{width:1e3,height:1e3,path:"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z",transform:"matrix(1 0 0 -1 0 850)"},pan:{width:1e3,height:1e3,path:"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z",transform:"matrix(1 0 0 -1 0 850)"},zoom_plus:{width:875,height:1e3,path:"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},zoom_minus:{width:875,height:1e3,path:"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},autoscale:{width:1e3,height:1e3,path:"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_basic:{width:1500,height:1e3,path:"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_compare:{width:1125,height:1e3,path:"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z",transform:"matrix(1 0 0 -1 0 850)"},plotlylogo:{width:1542,height:1e3,path:"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z",transform:"matrix(1 0 0 -1 0 850)"},"z-axis":{width:1e3,height:1e3,path:"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z",transform:"matrix(1 0 0 -1 0 850)"},"3d_rotate":{width:1e3,height:1e3,path:"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z",transform:"matrix(1 0 0 -1 0 850)"},camera:{width:1e3,height:1e3,path:"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z",transform:"matrix(1 0 0 -1 0 850)"},movie:{width:1e3,height:1e3,path:"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z",transform:"matrix(1 0 0 -1 0 850)"},question:{width:857.1,height:1e3,path:"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z",transform:"matrix(1 0 0 -1 0 850)"},disk:{width:857.1,height:1e3,path:"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z",transform:"matrix(1 0 0 -1 0 850)"},lasso:{width:1031,height:1e3,path:"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z",transform:"matrix(1 0 0 -1 0 850)"},selectbox:{width:1e3,height:1e3,path:"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z",transform:"matrix(1 0 0 -1 0 850)"},spikeline:{width:1e3,height:1e3,path:"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z",transform:"matrix(1.5 0 0 -1.5 0 850)"},newplotlylogo:{name:"newplotlylogo",svg:"plotly-logomark"}}},{}],651:[function(t,e,r){"use strict";e.exports=t("../src/transforms/aggregate")},{"../src/transforms/aggregate":1299}],652:[function(t,e,r){"use strict";e.exports=t("../src/traces/bar")},{"../src/traces/bar":982}],653:[function(t,e,r){"use strict";e.exports=t("../src/traces/barpolar")},{"../src/traces/barpolar":994}],654:[function(t,e,r){"use strict";e.exports=t("../src/traces/box")},{"../src/traces/box":1004}],655:[function(t,e,r){"use strict";e.exports=t("../src/components/calendars")},{"../src/components/calendars":711}],656:[function(t,e,r){"use strict";e.exports=t("../src/traces/candlestick")},{"../src/traces/candlestick":1013}],657:[function(t,e,r){"use strict";e.exports=t("../src/traces/carpet")},{"../src/traces/carpet":1032}],658:[function(t,e,r){"use strict";e.exports=t("../src/traces/choropleth")},{"../src/traces/choropleth":1046}],659:[function(t,e,r){"use strict";e.exports=t("../src/traces/cone")},{"../src/traces/cone":1054}],660:[function(t,e,r){"use strict";e.exports=t("../src/traces/contour")},{"../src/traces/contour":1069}],661:[function(t,e,r){"use strict";e.exports=t("../src/traces/contourcarpet")},{"../src/traces/contourcarpet":1080}],662:[function(t,e,r){"use strict";e.exports=t("../src/core")},{"../src/core":815}],663:[function(t,e,r){"use strict";e.exports=t("../src/transforms/filter")},{"../src/transforms/filter":1300}],664:[function(t,e,r){"use strict";e.exports=t("../src/transforms/groupby")},{"../src/transforms/groupby":1301}],665:[function(t,e,r){"use strict";e.exports=t("../src/traces/heatmap")},{"../src/traces/heatmap":1092}],666:[function(t,e,r){"use strict";e.exports=t("../src/traces/heatmapgl")},{"../src/traces/heatmapgl":1101}],667:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram")},{"../src/traces/histogram":1113}],668:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram2d")},{"../src/traces/histogram2d":1120}],669:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram2dcontour")},{"../src/traces/histogram2dcontour":1124}],670:[function(t,e,r){"use strict";var n=t("./core");n.register([t("./bar"),t("./box"),t("./heatmap"),t("./histogram"),t("./histogram2d"),t("./histogram2dcontour"),t("./pie"),t("./contour"),t("./scatterternary"),t("./violin"),t("./scatter3d"),t("./surface"),t("./isosurface"),t("./mesh3d"),t("./cone"),t("./streamtube"),t("./scattergeo"),t("./choropleth"),t("./scattergl"),t("./splom"),t("./pointcloud"),t("./heatmapgl"),t("./parcoords"),t("./parcats"),t("./scattermapbox"),t("./sankey"),t("./table"),t("./carpet"),t("./scattercarpet"),t("./contourcarpet"),t("./ohlc"),t("./candlestick"),t("./scatterpolar"),t("./scatterpolargl"),t("./barpolar")]),n.register([t("./aggregate"),t("./filter"),t("./groupby"),t("./sort")]),n.register([t("./calendars")]),e.exports=n},{"./aggregate":651,"./bar":652,"./barpolar":653,"./box":654,"./calendars":655,"./candlestick":656,"./carpet":657,"./choropleth":658,"./cone":659,"./contour":660,"./contourcarpet":661,"./core":662,"./filter":663,"./groupby":664,"./heatmap":665,"./heatmapgl":666,"./histogram":667,"./histogram2d":668,"./histogram2dcontour":669,"./isosurface":671,"./mesh3d":672,"./ohlc":673,"./parcats":674,"./parcoords":675,"./pie":676,"./pointcloud":677,"./sankey":678,"./scatter3d":679,"./scattercarpet":680,"./scattergeo":681,"./scattergl":682,"./scattermapbox":683,"./scatterpolar":684,"./scatterpolargl":685,"./scatterternary":686,"./sort":687,"./splom":688,"./streamtube":689,"./surface":690,"./table":691,"./violin":692}],671:[function(t,e,r){"use strict";e.exports=t("../src/traces/isosurface")},{"../src/traces/isosurface":1129}],672:[function(t,e,r){"use strict";e.exports=t("../src/traces/mesh3d")},{"../src/traces/mesh3d":1134}],673:[function(t,e,r){"use strict";e.exports=t("../src/traces/ohlc")},{"../src/traces/ohlc":1139}],674:[function(t,e,r){"use strict";e.exports=t("../src/traces/parcats")},{"../src/traces/parcats":1148}],675:[function(t,e,r){"use strict";e.exports=t("../src/traces/parcoords")},{"../src/traces/parcoords":1157}],676:[function(t,e,r){"use strict";e.exports=t("../src/traces/pie")},{"../src/traces/pie":1168}],677:[function(t,e,r){"use strict";e.exports=t("../src/traces/pointcloud")},{"../src/traces/pointcloud":1177}],678:[function(t,e,r){"use strict";e.exports=t("../src/traces/sankey")},{"../src/traces/sankey":1183}],679:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatter3d")},{"../src/traces/scatter3d":1219}],680:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattercarpet")},{"../src/traces/scattercarpet":1225}],681:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattergeo")},{"../src/traces/scattergeo":1232}],682:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattergl")},{"../src/traces/scattergl":1240}],683:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattermapbox")},{"../src/traces/scattermapbox":1246}],684:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatterpolar")},{"../src/traces/scatterpolar":1253}],685:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatterpolargl")},{"../src/traces/scatterpolargl":1257}],686:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatterternary")},{"../src/traces/scatterternary":1263}],687:[function(t,e,r){"use strict";e.exports=t("../src/transforms/sort")},{"../src/transforms/sort":1303}],688:[function(t,e,r){"use strict";e.exports=t("../src/traces/splom")},{"../src/traces/splom":1268}],689:[function(t,e,r){"use strict";e.exports=t("../src/traces/streamtube")},{"../src/traces/streamtube":1273}],690:[function(t,e,r){"use strict";e.exports=t("../src/traces/surface")},{"../src/traces/surface":1278}],691:[function(t,e,r){"use strict";e.exports=t("../src/traces/table")},{"../src/traces/table":1286}],692:[function(t,e,r){"use strict";e.exports=t("../src/traces/violin")},{"../src/traces/violin":1294}],693:[function(t,e,r){"use strict";var n=t("is-string-blank");e.exports=function(t){var e=typeof t;if("string"===e){var r=t;if(0===(t=+t)&&n(r))return!1}else if("number"!==e)return!1;return t-t<1}},{"is-string-blank":427}],694:[function(t,e,r){arguments[4][263][0].apply(r,arguments)},{dup:263}],695:[function(t,e,r){"use strict";e.exports=[{path:"",backoff:0},{path:"M-2.4,-3V3L0.6,0Z",backoff:.6},{path:"M-3.7,-2.5V2.5L1.3,0Z",backoff:1.3},{path:"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z",backoff:1.55},{path:"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z",backoff:1.6},{path:"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z",backoff:2},{path:"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z",backoff:0,noRotate:!0},{path:"M2,2V-2H-2V2Z",backoff:0,noRotate:!0}]},{}],696:[function(t,e,r){"use strict";var n=t("./arrow_paths"),i=t("../../plots/font_attributes"),a=t("../../plots/cartesian/constants"),o=t("../../plot_api/plot_template").templatedArray;e.exports=o("annotation",{visible:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},text:{valType:"string",editType:"calc+arraydraw"},textangle:{valType:"angle",dflt:0,editType:"calc+arraydraw"},font:i({editType:"calc+arraydraw",colorEditType:"arraydraw"}),width:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},height:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},align:{valType:"enumerated",values:["left","center","right"],dflt:"center",editType:"arraydraw"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"arraydraw"},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},bordercolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},borderpad:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},borderwidth:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},showarrow:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},arrowcolor:{valType:"color",editType:"arraydraw"},arrowhead:{valType:"integer",min:0,max:n.length,dflt:1,editType:"arraydraw"},startarrowhead:{valType:"integer",min:0,max:n.length,dflt:1,editType:"arraydraw"},arrowside:{valType:"flaglist",flags:["end","start"],extras:["none"],dflt:"end",editType:"arraydraw"},arrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},startarrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},arrowwidth:{valType:"number",min:.1,editType:"calc+arraydraw"},standoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},startstandoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},ax:{valType:"any",editType:"calc+arraydraw"},ay:{valType:"any",editType:"calc+arraydraw"},axref:{valType:"enumerated",dflt:"pixel",values:["pixel",a.idRegex.x.toString()],editType:"calc"},ayref:{valType:"enumerated",dflt:"pixel",values:["pixel",a.idRegex.y.toString()],editType:"calc"},xref:{valType:"enumerated",values:["paper",a.idRegex.x.toString()],editType:"calc"},x:{valType:"any",editType:"calc+arraydraw"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto",editType:"calc+arraydraw"},xshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},yref:{valType:"enumerated",values:["paper",a.idRegex.y.toString()],editType:"calc"},y:{valType:"any",editType:"calc+arraydraw"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"auto",editType:"calc+arraydraw"},yshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},clicktoshow:{valType:"enumerated",values:[!1,"onoff","onout"],dflt:!1,editType:"arraydraw"},xclick:{valType:"any",editType:"arraydraw"},yclick:{valType:"any",editType:"arraydraw"},hovertext:{valType:"string",editType:"arraydraw"},hoverlabel:{bgcolor:{valType:"color",editType:"arraydraw"},bordercolor:{valType:"color",editType:"arraydraw"},font:i({editType:"arraydraw"}),editType:"arraydraw"},captureevents:{valType:"boolean",editType:"arraydraw"},editType:"calc",_deprecated:{ref:{valType:"string",editType:"calc"}}})},{"../../plot_api/plot_template":874,"../../plots/cartesian/constants":890,"../../plots/font_attributes":910,"./arrow_paths":695}],697:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../plots/cartesian/axes"),a=t("./draw").draw;function o(t){var e=t._fullLayout;n.filterVisible(e.annotations).forEach(function(e){var r=i.getFromId(t,e.xref),n=i.getFromId(t,e.yref);e._extremes={},r&&s(e,r),n&&s(e,n)})}function s(t,e){var r,n=e._id,a=n.charAt(0),o=t[a],s=t["a"+a],l=t[a+"ref"],u=t["a"+a+"ref"],c=t["_"+a+"padplus"],f=t["_"+a+"padminus"],h={x:1,y:-1}[a]*t[a+"shift"],p=3*t.arrowsize*t.arrowwidth||0,d=p+h,m=p-h,g=3*t.startarrowsize*t.arrowwidth||0,v=g+h,y=g-h;if(u===l){var x=i.findExtremes(e,[e.r2c(o)],{ppadplus:d,ppadminus:m}),b=i.findExtremes(e,[e.r2c(s)],{ppadplus:Math.max(c,v),ppadminus:Math.max(f,y)});r={min:[x.min[0],b.min[0]],max:[x.max[0],b.max[0]]}}else v=s?v+s:v,y=s?y-s:y,r=i.findExtremes(e,[e.r2c(o)],{ppadplus:Math.max(c,d,v),ppadminus:Math.max(f,m,y)});t._extremes[n]=r}e.exports=function(t){var e=t._fullLayout;if(n.filterVisible(e.annotations).length&&t._fullData.length)return n.syncOrAsync([a,o],t)}},{"../../lib":836,"../../plots/cartesian/axes":884,"./draw":702}],698:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../registry"),a=t("../../plot_api/plot_template").arrayEditor;function o(t,e){var r,n,i,a,o,l,u,c=t._fullLayout.annotations,f=[],h=[],p=[],d=(e||[]).length;for(r=0;r0||r.explicitOff.length>0},onClick:function(t,e){var r,s,l=o(t,e),u=l.on,c=l.off.concat(l.explicitOff),f={},h=t._fullLayout.annotations;if(!u.length&&!c.length)return;for(r=0;r2/3?"right":"center"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}for(var q=!1,H=["x","y"],G=0;G1)&&(Q===K?((lt=tt.r2fraction(e["a"+J]))<0||lt>1)&&(q=!0):q=!0),W=tt._offset+tt.r2p(e[J]),X=.5}else"x"===J?(Z=e[J],W=b.l+b.w*Z):(Z=1-e[J],W=b.t+b.h*Z),X=e.showarrow?.5:Z;if(e.showarrow){st.head=W;var ut=e["a"+J];$=rt*V(.5,e.xanchor)-nt*V(.5,e.yanchor),Q===K?(st.tail=tt._offset+tt.r2p(ut),Y=$):(st.tail=W+ut,Y=$+ut),st.text=st.tail+$;var ct=x["x"===J?"width":"height"];if("paper"===K&&(st.head=o.constrain(st.head,1,ct-1)),"pixel"===Q){var ft=-Math.max(st.tail-3,st.text),ht=Math.min(st.tail+3,st.text)-ct;ft>0?(st.tail+=ft,st.text+=ft):ht>0&&(st.tail-=ht,st.text-=ht)}st.tail+=ot,st.head+=ot}else Y=$=it*V(X,at),st.text=W+$;st.text+=ot,$+=ot,Y+=ot,e["_"+J+"padplus"]=it/2+Y,e["_"+J+"padminus"]=it/2-Y,e["_"+J+"size"]=it,e["_"+J+"shift"]=$}if(t._dragging||!q){var pt=0,dt=0;if("left"!==e.align&&(pt=(w-v)*("center"===e.align?.5:1)),"top"!==e.valign&&(dt=(z-y)*("middle"===e.valign?.5:1)),c)n.select("svg").attr({x:N+pt-1,y:N+dt}).call(u.setClipUrl,F?T:null,t);else{var mt=N+dt-d.top,gt=N+pt-d.left;U.call(f.positionText,gt,mt).call(u.setClipUrl,F?T:null,t)}B.select("rect").call(u.setRect,N,N,w,z),R.call(u.setRect,P/2,P/2,I-P,j-P),D.call(u.setTranslate,Math.round(E.x.text-I/2),Math.round(E.y.text-j/2)),L.attr({transform:"rotate("+S+","+E.x.text+","+E.y.text+")"});var vt,yt=function(r,n){C.selectAll(".annotation-arrow-g").remove();var c=E.x.head,f=E.y.head,h=E.x.tail+r,d=E.y.tail+n,v=E.x.text+r,y=E.y.text+n,x=o.rotationXYMatrix(S,v,y),w=o.apply2DTransform(x),T=o.apply2DTransform2(x),O=+R.attr("width"),z=+R.attr("height"),P=v-.5*O,I=P+O,N=y-.5*z,F=N+z,B=[[P,N,P,F],[P,F,I,F],[I,F,I,N],[I,N,P,N]].map(T);if(!B.reduce(function(t,e){return t^!!o.segmentsIntersect(c,f,c+1e6,f+1e6,e[0],e[1],e[2],e[3])},!1)){B.forEach(function(t){var e=o.segmentsIntersect(h,d,c,f,t[0],t[1],t[2],t[3]);e&&(h=e.x,d=e.y)});var j=e.arrowwidth,V=e.arrowcolor,U=e.arrowside,q=C.append("g").style({opacity:l.opacity(V)}).classed("annotation-arrow-g",!0),H=q.append("path").attr("d","M"+h+","+d+"L"+c+","+f).style("stroke-width",j+"px").call(l.stroke,l.rgb(V));if(m(H,U,e),_.annotationPosition&&H.node().parentNode&&!a){var G=c,W=f;if(e.standoff){var Y=Math.sqrt(Math.pow(c-h,2)+Math.pow(f-d,2));G+=e.standoff*(h-c)/Y,W+=e.standoff*(d-f)/Y}var Z,X,$=q.append("path").classed("annotation-arrow",!0).classed("anndrag",!0).classed("cursor-move",!0).attr({d:"M3,3H-3V-3H3ZM0,0L"+(h-G)+","+(d-W),transform:"translate("+G+","+W+")"}).style("stroke-width",j+6+"px").call(l.stroke,"rgba(0,0,0,0)").call(l.fill,"rgba(0,0,0,0)");p.init({element:$.node(),gd:t,prepFn:function(){var t=u.getTranslate(D);Z=t.x,X=t.y,s&&s.autorange&&A(s._name+".autorange",!0),g&&g.autorange&&A(g._name+".autorange",!0)},moveFn:function(t,r){var n=w(Z,X),i=n[0]+t,a=n[1]+r;D.call(u.setTranslate,i,a),M("x",s?s.p2r(s.r2p(e.x)+t):e.x+t/b.w),M("y",g?g.p2r(g.r2p(e.y)+r):e.y-r/b.h),e.axref===e.xref&&M("ax",s.p2r(s.r2p(e.ax)+t)),e.ayref===e.yref&&M("ay",g.p2r(g.r2p(e.ay)+r)),q.attr("transform","translate("+t+","+r+")"),L.attr({transform:"rotate("+S+","+i+","+a+")"})},doneFn:function(){i.call("_guiRelayout",t,k());var e=document.querySelector(".js-notes-box-panel");e&&e.redraw(e.selectedObj)}})}}};if(e.showarrow&&yt(0,0),O)p.init({element:D.node(),gd:t,prepFn:function(){vt=L.attr("transform")},moveFn:function(t,r){var n="pointer";if(e.showarrow)e.axref===e.xref?M("ax",s.p2r(s.r2p(e.ax)+t)):M("ax",e.ax+t),e.ayref===e.yref?M("ay",g.p2r(g.r2p(e.ay)+r)):M("ay",e.ay+r),yt(t,r);else{if(a)return;var i,o;if(s)i=s.p2r(s.r2p(e.x)+t);else{var l=e._xsize/b.w,u=e.x+(e._xshift-e.xshift)/b.w-l/2;i=p.align(u+t/b.w,l,0,1,e.xanchor)}if(g)o=g.p2r(g.r2p(e.y)+r);else{var c=e._ysize/b.h,f=e.y-(e._yshift+e.yshift)/b.h-c/2;o=p.align(f-r/b.h,c,0,1,e.yanchor)}M("x",i),M("y",o),s&&g||(n=p.getCursor(s?.5:i,g?.5:o,e.xanchor,e.yanchor))}L.attr({transform:"translate("+t+","+r+")"+vt}),h(D,n)},doneFn:function(){h(D),i.call("_guiRelayout",t,k());var e=document.querySelector(".js-notes-box-panel");e&&e.redraw(e.selectedObj)}})}else D.remove()}}e.exports={draw:function(t){var e=t._fullLayout;e._infolayer.selectAll(".annotation").remove();for(var r=0;r=0,g=e.indexOf("end")>=0,v=f.backoff*p+r.standoff,y=h.backoff*d+r.startstandoff;if("line"===c.nodeName){o={x:+t.attr("x1"),y:+t.attr("y1")},s={x:+t.attr("x2"),y:+t.attr("y2")};var x=o.x-s.x,b=o.y-s.y;if(u=(l=Math.atan2(b,x))+Math.PI,v&&y&&v+y>Math.sqrt(x*x+b*b))return void O();if(v){if(v*v>x*x+b*b)return void O();var _=v*Math.cos(l),w=v*Math.sin(l);s.x+=_,s.y+=w,t.attr({x2:s.x,y2:s.y})}if(y){if(y*y>x*x+b*b)return void O();var A=y*Math.cos(l),M=y*Math.sin(l);o.x-=A,o.y-=M,t.attr({x1:o.x,y1:o.y})}}else if("path"===c.nodeName){var k=c.getTotalLength(),T="";if(k1){u=!0;break}}u?t.fullLayout._infolayer.select(".annotation-"+t.id+'[data-index="'+s+'"]').remove():(l._pdata=i(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*r[0],e.yaxis.r2l(l.y)*r[1],e.zaxis.r2l(l.z)*r[2]]),n(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},{"../../plots/gl3d/project":934,"../annotations/draw":702}],709:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../lib");e.exports={moduleType:"component",name:"annotations3d",schema:{subplots:{scene:{annotations:t("./attributes")}}},layoutAttributes:t("./attributes"),handleDefaults:t("./defaults"),includeBasePlot:function(t,e){var r=n.subplotsRegistry.gl3d;if(!r)return;for(var a=r.attrRegex,o=Object.keys(t),s=0;s=0))return t;if(3===o)n[o]>1&&(n[o]=1);else if(n[o]>=1)return t}var s=Math.round(255*n[0])+", "+Math.round(255*n[1])+", "+Math.round(255*n[2]);return a?"rgba("+s+", "+n[3]+")":"rgb("+s+")"}a.tinyRGB=function(t){var e=t.toRgb();return"rgb("+Math.round(e.r)+", "+Math.round(e.g)+", "+Math.round(e.b)+")"},a.rgb=function(t){return a.tinyRGB(n(t))},a.opacity=function(t){return t?n(t).getAlpha():0},a.addOpacity=function(t,e){var r=n(t).toRgb();return"rgba("+Math.round(r.r)+", "+Math.round(r.g)+", "+Math.round(r.b)+", "+e+")"},a.combine=function(t,e){var r=n(t).toRgb();if(1===r.a)return n(t).toRgbString();var i=n(e||l).toRgb(),a=1===i.a?i:{r:255*(1-i.a)+i.r*i.a,g:255*(1-i.a)+i.g*i.a,b:255*(1-i.a)+i.b*i.a},o={r:a.r*(1-r.a)+r.r*r.a,g:a.g*(1-r.a)+r.g*r.a,b:a.b*(1-r.a)+r.b*r.a};return n(o).toRgbString()},a.contrast=function(t,e,r){var i=n(t);return 1!==i.getAlpha()&&(i=n(a.combine(t,l))),(i.isDark()?e?i.lighten(e):l:r?i.darken(r):s).toString()},a.stroke=function(t,e){var r=n(e);t.style({stroke:a.tinyRGB(r),"stroke-opacity":r.getAlpha()})},a.fill=function(t,e){var r=n(e);t.style({fill:a.tinyRGB(r),"fill-opacity":r.getAlpha()})},a.clean=function(t){if(t&&"object"==typeof t){var e,r,n,i,o=Object.keys(t);for(e=0;e0?S>=I:S<=I));C++)S>R&&S0?S>=I:S<=I));C++)S>L[0]&&S1){var ot=Math.pow(10,Math.floor(Math.log(at)/Math.LN10));nt*=ot*u.roundUp(at/ot,[2,5,10]),(Math.abs(r.levels.start)/r.levels.size+1e-6)%1<2e-6&&(et.tick0=0)}et.dtick=nt}et.domain=[J+Z,J+G-Z],et.setScale();var st=u.ensureSingle(g._infolayer,"g",e,function(t){t.classed(M.colorbar,!0).each(function(){var t=n.select(this);t.append("rect").classed(M.cbbg,!0),t.append("g").classed(M.cbfills,!0),t.append("g").classed(M.cblines,!0),t.append("g").classed(M.cbaxis,!0).classed(M.crisp,!0),t.append("g").classed(M.cbtitleunshift,!0).append("g").classed(M.cbtitle,!0),t.append("rect").classed(M.cboutline,!0),t.select(".cbtitle").datum(0)})});st.attr("transform","translate("+Math.round(A.l)+","+Math.round(A.t)+")");var lt=st.select(".cbtitleunshift").attr("transform","translate(-"+Math.round(A.l)+",-"+Math.round(A.t)+")"),ut=st.select(".cbaxis"),ct=0;if(-1!==["top","bottom"].indexOf(r.title.side)){var ft,ht=A.l+(r.x+W)*A.w,pt=et.title.font.size;ft="top"===r.title.side?(1-(J+G-Z))*A.h+A.t+3+.75*pt:(1-(J+Z))*A.h+A.t-3-.25*pt,xt(et._id+"title",{attributes:{x:ht,y:ft,"text-anchor":"start"}})}var dt,mt,gt,vt=u.syncOrAsync([a.previousPromises,function(){if(-1!==["top","bottom"].indexOf(r.title.side)){var a=st.select(".cbtitle"),o=a.select("text"),l=[-r.outlinewidth/2,r.outlinewidth/2],c=a.select(".h"+et._id+"title-math-group").node(),f=15.6;if(o.node()&&(f=parseInt(o.node().style.fontSize,10)*v),c?(ct=h.bBox(c).height)>f&&(l[1]-=(ct-f)/2):o.node()&&!o.classed(M.jsPlaceholder)&&(ct=h.bBox(o.node()).height),ct){if(ct+=5,"top"===r.title.side)et.domain[1]-=ct/A.h,l[1]*=-1;else{et.domain[0]+=ct/A.h;var p=m.lineCount(o);l[1]+=(1-p)*f}a.attr("transform","translate("+l+")"),et.setScale()}}st.selectAll(".cbfills,.cblines").attr("transform","translate(0,"+Math.round(A.h*(1-et.domain[1]))+")"),ut.attr("transform","translate(0,"+Math.round(-A.t)+")");var d=st.select(".cbfills").selectAll("rect.cbfill").data(z);d.enter().append("rect").classed(M.cbfill,!0).style("stroke","none"),d.exit().remove();var y=L.map(et.c2p).map(Math.round).sort(function(t,e){return t-e});d.each(function(a,o){var s=[0===o?L[0]:(z[o]+z[o-1])/2,o===z.length-1?L[1]:(z[o]+z[o+1])/2].map(et.c2p).map(Math.round);s[1]=u.constrain(s[1]+(s[1]>s[0])?1:-1,y[0],y[1]);var l=n.select(this).attr({x:X,width:Math.max(U,2),y:n.min(s),height:Math.max(n.max(s)-n.min(s),2)});if(r.fillgradient)h.gradient(l,t,e,"vertical",r.fillgradient,"fill");else{var c=P(a).replace("e-","");l.attr("fill",i(c).toHexString())}});var x=st.select(".cblines").selectAll("path.cbline").data(r.line.color&&r.line.width?O:[]);return x.enter().append("path").classed(M.cbline,!0),x.exit().remove(),x.each(function(t){n.select(this).attr("d","M"+X+","+(Math.round(et.c2p(t))+r.line.width/2%1)+"h"+U).call(h.lineGroupStyle,r.line.width,D(t),r.line.dash)}),ut.selectAll("g."+et._id+"tick,path").remove(),u.syncOrAsync([function(){var e=X+U+(r.outlinewidth||0)/2-("outside"===r.ticks?1:0),n=s.calcTicks(et),i=s.makeTransFn(et),a=s.getTickSigns(et)[2];return s.drawTicks(t,et,{vals:"inside"===et.ticks?s.clipEnds(et,n):n,layer:ut,path:s.makeTickPath(et,e,a),transFn:i}),s.drawLabels(t,et,{vals:n,layer:ut,transFn:i,labelFns:s.makeLabelFns(et,e)})},function(){if(-1===["top","bottom"].indexOf(r.title.side)){var e=et.title.font.size,i=et._offset+et._length/2,a=A.l+(et.position||0)*A.w+("right"===et.side?10+e*(et.showticklabels?1:.5):-10-e*(et.showticklabels?.5:0));xt("h"+et._id+"title",{avoid:{selection:n.select(t).selectAll("g."+et._id+"tick"),side:r.title.side,offsetLeft:A.l,offsetTop:0,maxShift:g.width},attributes:{x:a,y:i,"text-anchor":"middle"},transform:{rotate:"-90",offset:0}})}}])},a.previousPromises,function(){var n=U+r.outlinewidth/2+h.bBox(ut.node()).width;if((B=lt.select("text")).node()&&!B.classed(M.jsPlaceholder)){var i,o=lt.select(".h"+et._id+"title-math-group").node();i=o&&-1!==["top","bottom"].indexOf(r.title.side)?h.bBox(o).width:h.bBox(lt.node()).right-X-A.l,n=Math.max(n,i)}var s=2*r.xpad+n+r.borderwidth+r.outlinewidth/2,l=K-Q;st.select(".cbbg").attr({x:X-r.xpad-(r.borderwidth+r.outlinewidth)/2,y:Q-Y,width:Math.max(s,2),height:Math.max(l+2*Y,2)}).call(p.fill,r.bgcolor).call(p.stroke,r.bordercolor).style({"stroke-width":r.borderwidth}),st.selectAll(".cboutline").attr({x:X,y:Q+r.ypad+("top"===r.title.side?ct:0),width:Math.max(U,2),height:Math.max(l-2*r.ypad-ct,2)}).call(p.stroke,r.outlinecolor).style({fill:"None","stroke-width":r.outlinewidth});var u=({center:.5,right:1}[r.xanchor]||0)*s;st.attr("transform","translate("+(A.l-u)+","+A.t+")");var c={},f=y[r.yanchor],d=x[r.yanchor];"pixels"===r.lenmode?(c.y=r.y,c.t=l*f,c.b=l*d):(c.t=c.b=0,c.yt=r.y+r.len*f,c.yb=r.y-r.len*d);var m=y[r.xanchor],g=x[r.xanchor];if("pixels"===r.thicknessmode)c.x=r.x,c.l=s*m,c.r=s*g;else{var v=s-U;c.l=v*m,c.r=v*g,c.xl=r.x-r.thickness*m,c.xr=r.x+r.thickness*g}a.autoMargin(t,e,c)}],t);if(vt&&vt.then&&(t._promises||[]).push(vt),t._context.edits.colorbarPosition)l.init({element:st.node(),gd:t,prepFn:function(){dt=st.attr("transform"),f(st)},moveFn:function(t,e){st.attr("transform",dt+" translate("+t+","+e+")"),mt=l.align($+t/A.w,q,0,1,r.xanchor),gt=l.align(J-e/A.h,G,0,1,r.yanchor);var n=l.getCursor(mt,gt,r.xanchor,r.yanchor);f(st,n)},doneFn:function(){if(f(st),void 0!==mt&&void 0!==gt){var e={};e[E("x")]=mt,e[E("y")]=gt,o.call("_guiRestyle",t,e,T().index)}}});return vt}function yt(t,e){return u.coerce(tt,et,w,t,e)}function xt(e,r){var n={propContainer:et,propName:E("title"),traceIndex:T().index,placeholder:g._dfltTitle.colorbar,containerGroup:st.select(".cbtitle")},i="h"===e.charAt(0)?e.substr(1):"h"+e;st.selectAll("."+i+",."+i+"-math-group").remove(),d.draw(t,e,c(n,r||{}))}g._infolayer.selectAll("g."+e).remove()}function T(){for(var r=e.substr(2),n=0;nm-p?p=m-(d-m):d-m=0?i.colorscale.sequential:i.colorscale.sequentialminus,l._colorscale=l.colorscale=g)}},{"../../lib":836}],722:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./helpers").hasColorscale;e.exports=function(t){function e(t,e){var r=t["_"+e];void 0!==r&&(t[e]=r)}function r(t,r){var i=r.container?n.nestedProperty(t,r.container).get():t;if(i){var a=i.zauto||i.cauto,o=r.min,s=r.max;(a||void 0===i[o])&&e(i,o),(a||void 0===i[s])&&e(i,s),i.autocolorscale&&e(i,"colorscale")}}for(var a=0;a=0;n--,i++){var a=t[n];r[i]=[1-a[0],a[1]]}return r}function c(t){var e={r:t[0],g:t[1],b:t[2],a:t[3]};return i(e).toRgbString()}e.exports={hasColorscale:function(t,e){var r=e?o.nestedProperty(t,e).get()||{}:t,n=r.color,i=!1;if(o.isArrayOrTypedArray(n))for(var s=0;s4/3-s?o:s}},{}],730:[function(t,e,r){"use strict";var n=t("../../lib"),i=[["sw-resize","s-resize","se-resize"],["w-resize","move","e-resize"],["nw-resize","n-resize","ne-resize"]];e.exports=function(t,e,r,a){return t="left"===r?0:"center"===r?1:"right"===r?2:n.constrain(Math.floor(3*t),0,2),e="bottom"===a?0:"middle"===a?1:"top"===a?2:n.constrain(Math.floor(3*e),0,2),i[e][t]}},{"../../lib":836}],731:[function(t,e,r){"use strict";var n=t("mouse-event-offset"),i=t("has-hover"),a=t("has-passive-events"),o=t("../../registry"),s=t("../../lib"),l=t("../../plots/cartesian/constants"),u=t("../../constants/interactions"),c=e.exports={};c.align=t("./align"),c.getCursor=t("./cursor");var f=t("./unhover");function h(){var t=document.createElement("div");t.className="dragcover";var e=t.style;return e.position="fixed",e.left=0,e.right=0,e.top=0,e.bottom=0,e.zIndex=999999999,e.background="none",document.body.appendChild(t),t}function p(t){return n(t.changedTouches?t.changedTouches[0]:t,document.body)}c.unhover=f.wrapped,c.unhoverRaw=f.raw,c.init=function(t){var e,r,n,f,d,m,g,v,y=t.gd,x=1,b=u.DBLCLICKDELAY,_=t.element;y._mouseDownTime||(y._mouseDownTime=0),_.style.pointerEvents="all",_.onmousedown=A,a?(_._ontouchstart&&_.removeEventListener("touchstart",_._ontouchstart),_._ontouchstart=A,_.addEventListener("touchstart",A,{passive:!1})):_.ontouchstart=A;var w=t.clampFn||function(t,e,r){return Math.abs(t)b&&(x=Math.max(x-1,1)),y._dragged)t.doneFn&&t.doneFn();else if(t.clickFn&&t.clickFn(x,m),!v){var r;try{r=new MouseEvent("click",e)}catch(t){var n=p(e);(r=document.createEvent("MouseEvents")).initMouseEvent("click",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,n[0],n[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}g.dispatchEvent(r)}!function(t){t._dragging=!1,t._replotPending&&o.call("plot",t)}(y),y._dragged=!1}else y._dragged=!1}},c.coverSlip=h},{"../../constants/interactions":812,"../../lib":836,"../../plots/cartesian/constants":890,"../../registry":965,"./align":729,"./cursor":730,"./unhover":732,"has-hover":413,"has-passive-events":414,"mouse-event-offset":616}],732:[function(t,e,r){"use strict";var n=t("../../lib/events"),i=t("../../lib/throttle"),a=t("../../lib/get_graph_div"),o=t("../fx/constants"),s=e.exports={};s.wrapped=function(t,e,r){(t=a(t))._fullLayout&&i.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,r)},s.raw=function(t,e){var r=t._fullLayout,i=t._hoverdata;e||(e={}),e.target&&!1===n.triggerHandler(t,"plotly_beforehover",e)||(r._hoverlayer.selectAll("g").remove(),r._hoverlayer.selectAll("line").remove(),r._hoverlayer.selectAll("circle").remove(),t._hoverdata=void 0,e.target&&i&&t.emit("plotly_unhover",{event:e,points:i}))}},{"../../lib/events":825,"../../lib/get_graph_div":832,"../../lib/throttle":861,"../fx/constants":746}],733:[function(t,e,r){"use strict";r.dash={valType:"string",values:["solid","dot","dash","longdash","dashdot","longdashdot"],dflt:"solid",editType:"style"}},{}],734:[function(t,e,r){"use strict";var n=t("d3"),i=t("fast-isnumeric"),a=t("tinycolor2"),o=t("../../registry"),s=t("../color"),l=t("../colorscale"),u=t("../../lib"),c=t("../../lib/svg_text_utils"),f=t("../../constants/xmlns_namespaces"),h=t("../../constants/alignment").LINE_SPACING,p=t("../../constants/interactions").DESELECTDIM,d=t("../../traces/scatter/subtypes"),m=t("../../traces/scatter/make_bubble_size_func"),g=e.exports={};g.font=function(t,e,r,n){u.isPlainObject(e)&&(n=e.color,r=e.size,e=e.family),e&&t.style("font-family",e),r+1&&t.style("font-size",r+"px"),n&&t.call(s.fill,n)},g.setPosition=function(t,e,r){t.attr("x",e).attr("y",r)},g.setSize=function(t,e,r){t.attr("width",e).attr("height",r)},g.setRect=function(t,e,r,n,i){t.call(g.setPosition,e,r).call(g.setSize,n,i)},g.translatePoint=function(t,e,r,n){var a=r.c2p(t.x),o=n.c2p(t.y);return!!(i(a)&&i(o)&&e.node())&&("text"===e.node().nodeName?e.attr("x",a).attr("y",o):e.attr("transform","translate("+a+","+o+")"),!0)},g.translatePoints=function(t,e,r){t.each(function(t){var i=n.select(this);g.translatePoint(t,i,e,r)})},g.hideOutsideRangePoint=function(t,e,r,n,i,a){e.attr("display",r.isPtWithinRange(t,i)&&n.isPtWithinRange(t,a)?null:"none")},g.hideOutsideRangePoints=function(t,e){if(e._hasClipOnAxisFalse){var r=e.xaxis,i=e.yaxis;t.each(function(e){var a=e[0].trace,o=a.xcalendar,s=a.ycalendar,l="bar"===a.type?".bartext":".point,.textpoint";t.selectAll(l).each(function(t){g.hideOutsideRangePoint(t,n.select(this),r,i,o,s)})})}},g.crispRound=function(t,e,r){return e&&i(e)?t._context.staticPlot?e:e<1?1:Math.round(e):r||0},g.singleLineStyle=function(t,e,r,n,i){e.style("fill","none");var a=(((t||[])[0]||{}).trace||{}).line||{},o=r||a.width||0,l=i||a.dash||"";s.stroke(e,n||a.color),g.dashLine(e,l,o)},g.lineGroupStyle=function(t,e,r,i){t.style("fill","none").each(function(t){var a=(((t||[])[0]||{}).trace||{}).line||{},o=e||a.width||0,l=i||a.dash||"";n.select(this).call(s.stroke,r||a.color).call(g.dashLine,l,o)})},g.dashLine=function(t,e,r){r=+r||0,e=g.dashStyle(e,r),t.style({"stroke-dasharray":e,"stroke-width":r+"px"})},g.dashStyle=function(t,e){e=+e||1;var r=Math.max(e,3);return"solid"===t?t="":"dot"===t?t=r+"px,"+r+"px":"dash"===t?t=3*r+"px,"+3*r+"px":"longdash"===t?t=5*r+"px,"+5*r+"px":"dashdot"===t?t=3*r+"px,"+r+"px,"+r+"px,"+r+"px":"longdashdot"===t&&(t=5*r+"px,"+2*r+"px,"+r+"px,"+2*r+"px"),t},g.singleFillStyle=function(t){var e=(((n.select(t.node()).data()[0]||[])[0]||{}).trace||{}).fillcolor;e&&t.call(s.fill,e)},g.fillGroupStyle=function(t){t.style("stroke-width",0).each(function(t){var e=n.select(this);t[0].trace&&e.call(s.fill,t[0].trace.fillcolor)})};var v=t("./symbol_defs");g.symbolNames=[],g.symbolFuncs=[],g.symbolNeedLines={},g.symbolNoDot={},g.symbolNoFill={},g.symbolList=[],Object.keys(v).forEach(function(t){var e=v[t];g.symbolList=g.symbolList.concat([e.n,t,e.n+100,t+"-open"]),g.symbolNames[e.n]=t,g.symbolFuncs[e.n]=e.f,e.needLine&&(g.symbolNeedLines[e.n]=!0),e.noDot?g.symbolNoDot[e.n]=!0:g.symbolList=g.symbolList.concat([e.n+200,t+"-dot",e.n+300,t+"-open-dot"]),e.noFill&&(g.symbolNoFill[e.n]=!0)});var y=g.symbolNames.length,x="M0,0.5L0.5,0L0,-0.5L-0.5,0Z";function b(t,e){var r=t%100;return g.symbolFuncs[r](e)+(t>=200?x:"")}g.symbolNumber=function(t){if("string"==typeof t){var e=0;t.indexOf("-open")>0&&(e=100,t=t.replace("-open","")),t.indexOf("-dot")>0&&(e+=200,t=t.replace("-dot","")),(t=g.symbolNames.indexOf(t))>=0&&(t+=e)}return t%100>=y||t>=400?0:Math.floor(Math.max(t,0))};var _={x1:1,x2:0,y1:0,y2:0},w={x1:0,x2:0,y1:1,y2:0},A=n.format("~.1f"),M={radial:{node:"radialGradient"},radialreversed:{node:"radialGradient",reversed:!0},horizontal:{node:"linearGradient",attrs:_},horizontalreversed:{node:"linearGradient",attrs:_,reversed:!0},vertical:{node:"linearGradient",attrs:w},verticalreversed:{node:"linearGradient",attrs:w,reversed:!0}};g.gradient=function(t,e,r,i,o,l){for(var c=o.length,f=M[i],h=new Array(c),p=0;p=100,e.attr("d",b(c,l))}var f,h,p,d=!1;if(t.so)p=o.outlierwidth,h=o.outliercolor,f=a.outliercolor;else{var m=(o||{}).width;p=(t.mlw+1||m+1||(t.trace?(t.trace.marker.line||{}).width:0)+1)-1||0,h="mlc"in t?t.mlcc=n.lineScale(t.mlc):u.isArrayOrTypedArray(o.color)?s.defaultLine:o.color,u.isArrayOrTypedArray(a.color)&&(f=s.defaultLine,d=!0),f="mc"in t?t.mcc=n.markerScale(t.mc):a.color||"rgba(0,0,0,0)",n.selectedColorFn&&(f=n.selectedColorFn(t))}if(t.om)e.call(s.stroke,f).style({"stroke-width":(p||1)+"px",fill:"none"});else{e.style("stroke-width",p+"px");var v=a.gradient,y=t.mgt;if(y?d=!0:y=v&&v.type,Array.isArray(y)&&(y=y[0],M[y]||(y=0)),y&&"none"!==y){var x=t.mgc;x?d=!0:x=v.color;var _=r.uid;d&&(_+="-"+t.i),g.gradient(e,i,_,y,[[0,x],[1,f]],"fill")}else s.fill(e,f);p&&s.stroke(e,h)}},g.makePointStyleFns=function(t){var e={},r=t.marker;return e.markerScale=g.tryColorscale(r,""),e.lineScale=g.tryColorscale(r,"line"),o.traceIs(t,"symbols")&&(e.ms2mrc=d.isBubble(t)?m(t):function(){return(r.size||6)/2}),t.selectedpoints&&u.extendFlat(e,g.makeSelectedPointStyleFns(t)),e},g.makeSelectedPointStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},i=t.marker||{},a=r.marker||{},s=n.marker||{},l=i.opacity,c=a.opacity,f=s.opacity,h=void 0!==c,d=void 0!==f;(u.isArrayOrTypedArray(l)||h||d)&&(e.selectedOpacityFn=function(t){var e=void 0===t.mo?i.opacity:t.mo;return t.selected?h?c:e:d?f:p*e});var m=i.color,g=a.color,v=s.color;(g||v)&&(e.selectedColorFn=function(t){var e=t.mcc||m;return t.selected?g||e:v||e});var y=i.size,x=a.size,b=s.size,_=void 0!==x,w=void 0!==b;return o.traceIs(t,"symbols")&&(_||w)&&(e.selectedSizeFn=function(t){var e=t.mrc||y/2;return t.selected?_?x/2:e:w?b/2:e}),e},g.makeSelectedTextStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},i=t.textfont||{},a=r.textfont||{},o=n.textfont||{},l=i.color,u=a.color,c=o.color;return e.selectedTextColorFn=function(t){var e=t.tc||l;return t.selected?u||e:c||(u?e:s.addOpacity(e,p))},e},g.selectedPointStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=g.makeSelectedPointStyleFns(e),i=e.marker||{},a=[];r.selectedOpacityFn&&a.push(function(t,e){t.style("opacity",r.selectedOpacityFn(e))}),r.selectedColorFn&&a.push(function(t,e){s.fill(t,r.selectedColorFn(e))}),r.selectedSizeFn&&a.push(function(t,e){var n=e.mx||i.symbol||0,a=r.selectedSizeFn(e);t.attr("d",b(g.symbolNumber(n),a)),e.mrc2=a}),a.length&&t.each(function(t){for(var e=n.select(this),r=0;r0?r:0}g.textPointStyle=function(t,e,r){if(t.size()){var i;if(e.selectedpoints){var a=g.makeSelectedTextStyleFns(e);i=a.selectedTextColorFn}t.each(function(t){var a=n.select(this),o=u.extractOption(t,e,"tx","text");if(o||0===o){var s=t.tp||e.textposition,l=E(t,e),f=i?i(t):t.tc||e.textfont.color;a.call(g.font,t.tf||e.textfont.family,l,f).text(o).call(c.convertToTspans,r).call(T,s,l,t.mrc)}else a.remove()})}},g.selectedTextStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=g.makeSelectedTextStyleFns(e);t.each(function(t){var i=n.select(this),a=r.selectedTextColorFn(t),o=t.tp||e.textposition,l=E(t,e);s.fill(i,a),T(i,o,l,t.mrc2||t.mrc)})}};var S=.5;function C(t,e,r,i){var a=t[0]-e[0],o=t[1]-e[1],s=r[0]-e[0],l=r[1]-e[1],u=Math.pow(a*a+o*o,S/2),c=Math.pow(s*s+l*l,S/2),f=(c*c*a-u*u*s)*i,h=(c*c*o-u*u*l)*i,p=3*c*(u+c),d=3*u*(u+c);return[[n.round(e[0]+(p&&f/p),2),n.round(e[1]+(p&&h/p),2)],[n.round(e[0]-(d&&f/d),2),n.round(e[1]-(d&&h/d),2)]]}g.smoothopen=function(t,e){if(t.length<3)return"M"+t.join("L");var r,n="M"+t[0],i=[];for(r=1;r=1e4&&(g.savedBBoxes={},z=0),r&&(g.savedBBoxes[r]=v),z++,u.extendFlat({},v)},g.setClipUrl=function(t,e,r){if(e){var n=r._context,i=n._exportedPlot?"":n._baseUrl||"";t.attr("clip-path","url("+i+"#"+e+")")}else t.attr("clip-path",null)},g.getTranslate=function(t){var e=(t[t.attr?"attr":"getAttribute"]("transform")||"").replace(/.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/,function(t,e,r){return[e,r].join(" ")}).split(" ");return{x:+e[0]||0,y:+e[1]||0}},g.setTranslate=function(t,e,r){var n=t.attr?"attr":"getAttribute",i=t.attr?"attr":"setAttribute",a=t[n]("transform")||"";return e=e||0,r=r||0,a=a.replace(/(\btranslate\(.*?\);?)/,"").trim(),a=(a+=" translate("+e+", "+r+")").trim(),t[i]("transform",a),a},g.getScale=function(t){var e=(t[t.attr?"attr":"getAttribute"]("transform")||"").replace(/.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/,function(t,e,r){return[e,r].join(" ")}).split(" ");return{x:+e[0]||1,y:+e[1]||1}},g.setScale=function(t,e,r){var n=t.attr?"attr":"getAttribute",i=t.attr?"attr":"setAttribute",a=t[n]("transform")||"";return e=e||1,r=r||1,a=a.replace(/(\bscale\(.*?\);?)/,"").trim(),a=(a+=" scale("+e+", "+r+")").trim(),t[i]("transform",a),a};var P=/\s*sc.*/;g.setPointGroupScale=function(t,e,r){if(e=e||1,r=r||1,t){var n=1===e&&1===r?"":" scale("+e+","+r+")";t.each(function(){var t=(this.getAttribute("transform")||"").replace(P,"");t=(t+=n).trim(),this.setAttribute("transform",t)})}};var I=/translate\([^)]*\)\s*$/;g.setTextPointsScale=function(t,e,r){t&&t.each(function(){var t,i=n.select(this),a=i.select("text");if(a.node()){var o=parseFloat(a.attr("x")||0),s=parseFloat(a.attr("y")||0),l=(i.attr("transform")||"").match(I);t=1===e&&1===r?[]:["translate("+o+","+s+")","scale("+e+","+r+")","translate("+-o+","+-s+")"],l&&t.push(l),i.attr("transform",t.join(" "))}})}},{"../../constants/alignment":808,"../../constants/interactions":812,"../../constants/xmlns_namespaces":814,"../../lib":836,"../../lib/svg_text_utils":860,"../../registry":965,"../../traces/scatter/make_bubble_size_func":1204,"../../traces/scatter/subtypes":1211,"../color":713,"../colorscale":725,"./symbol_defs":735,d3:108,"fast-isnumeric":693,tinycolor2:1376}],735:[function(t,e,r){"use strict";var n=t("d3");e.exports={circle:{n:0,f:function(t){var e=n.round(t,2);return"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"}},square:{n:1,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"}},diamond:{n:2,f:function(t){var e=n.round(1.3*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"Z"}},cross:{n:3,f:function(t){var e=n.round(.4*t,2),r=n.round(1.2*t,2);return"M"+r+","+e+"H"+e+"V"+r+"H-"+e+"V"+e+"H-"+r+"V-"+e+"H-"+e+"V-"+r+"H"+e+"V-"+e+"H"+r+"Z"}},x:{n:4,f:function(t){var e=n.round(.8*t/Math.sqrt(2),2),r="l"+e+","+e,i="l"+e+",-"+e,a="l-"+e+",-"+e,o="l-"+e+","+e;return"M0,"+e+r+i+a+i+a+o+a+o+r+o+r+"Z"}},"triangle-up":{n:5,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+e+","+n.round(t/2,2)+"H"+e+"L0,-"+n.round(t,2)+"Z"}},"triangle-down":{n:6,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+e+",-"+n.round(t/2,2)+"H"+e+"L0,"+n.round(t,2)+"Z"}},"triangle-left":{n:7,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M"+n.round(t/2,2)+",-"+e+"V"+e+"L-"+n.round(t,2)+",0Z"}},"triangle-right":{n:8,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+n.round(t/2,2)+",-"+e+"V"+e+"L"+n.round(t,2)+",0Z"}},"triangle-ne":{n:9,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M-"+r+",-"+e+"H"+e+"V"+r+"Z"}},"triangle-se":{n:10,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M"+e+",-"+r+"V"+e+"H-"+r+"Z"}},"triangle-sw":{n:11,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M"+r+","+e+"H-"+e+"V-"+r+"Z"}},"triangle-nw":{n:12,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M-"+e+","+r+"V-"+e+"H"+r+"Z"}},pentagon:{n:13,f:function(t){var e=n.round(.951*t,2),r=n.round(.588*t,2),i=n.round(-t,2),a=n.round(-.309*t,2);return"M"+e+","+a+"L"+r+","+n.round(.809*t,2)+"H-"+r+"L-"+e+","+a+"L0,"+i+"Z"}},hexagon:{n:14,f:function(t){var e=n.round(t,2),r=n.round(t/2,2),i=n.round(t*Math.sqrt(3)/2,2);return"M"+i+",-"+r+"V"+r+"L0,"+e+"L-"+i+","+r+"V-"+r+"L0,-"+e+"Z"}},hexagon2:{n:15,f:function(t){var e=n.round(t,2),r=n.round(t/2,2),i=n.round(t*Math.sqrt(3)/2,2);return"M-"+r+","+i+"H"+r+"L"+e+",0L"+r+",-"+i+"H-"+r+"L-"+e+",0Z"}},octagon:{n:16,f:function(t){var e=n.round(.924*t,2),r=n.round(.383*t,2);return"M-"+r+",-"+e+"H"+r+"L"+e+",-"+r+"V"+r+"L"+r+","+e+"H-"+r+"L-"+e+","+r+"V-"+r+"Z"}},star:{n:17,f:function(t){var e=1.4*t,r=n.round(.225*e,2),i=n.round(.951*e,2),a=n.round(.363*e,2),o=n.round(.588*e,2),s=n.round(-e,2),l=n.round(-.309*e,2),u=n.round(.118*e,2),c=n.round(.809*e,2);return"M"+r+","+l+"H"+i+"L"+a+","+u+"L"+o+","+c+"L0,"+n.round(.382*e,2)+"L-"+o+","+c+"L-"+a+","+u+"L-"+i+","+l+"H-"+r+"L0,"+s+"Z"}},hexagram:{n:18,f:function(t){var e=n.round(.66*t,2),r=n.round(.38*t,2),i=n.round(.76*t,2);return"M-"+i+",0l-"+r+",-"+e+"h"+i+"l"+r+",-"+e+"l"+r+","+e+"h"+i+"l-"+r+","+e+"l"+r+","+e+"h-"+i+"l-"+r+","+e+"l-"+r+",-"+e+"h-"+i+"Z"}},"star-triangle-up":{n:19,f:function(t){var e=n.round(t*Math.sqrt(3)*.8,2),r=n.round(.8*t,2),i=n.round(1.6*t,2),a=n.round(4*t,2),o="A "+a+","+a+" 0 0 1 ";return"M-"+e+","+r+o+e+","+r+o+"0,-"+i+o+"-"+e+","+r+"Z"}},"star-triangle-down":{n:20,f:function(t){var e=n.round(t*Math.sqrt(3)*.8,2),r=n.round(.8*t,2),i=n.round(1.6*t,2),a=n.round(4*t,2),o="A "+a+","+a+" 0 0 1 ";return"M"+e+",-"+r+o+"-"+e+",-"+r+o+"0,"+i+o+e+",-"+r+"Z"}},"star-square":{n:21,f:function(t){var e=n.round(1.1*t,2),r=n.round(2*t,2),i="A "+r+","+r+" 0 0 1 ";return"M-"+e+",-"+e+i+"-"+e+","+e+i+e+","+e+i+e+",-"+e+i+"-"+e+",-"+e+"Z"}},"star-diamond":{n:22,f:function(t){var e=n.round(1.4*t,2),r=n.round(1.9*t,2),i="A "+r+","+r+" 0 0 1 ";return"M-"+e+",0"+i+"0,"+e+i+e+",0"+i+"0,-"+e+i+"-"+e+",0Z"}},"diamond-tall":{n:23,f:function(t){var e=n.round(.7*t,2),r=n.round(1.4*t,2);return"M0,"+r+"L"+e+",0L0,-"+r+"L-"+e+",0Z"}},"diamond-wide":{n:24,f:function(t){var e=n.round(1.4*t,2),r=n.round(.7*t,2);return"M0,"+r+"L"+e+",0L0,-"+r+"L-"+e+",0Z"}},hourglass:{n:25,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"H-"+e+"L"+e+",-"+e+"H-"+e+"Z"},noDot:!0},bowtie:{n:26,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"V-"+e+"L-"+e+","+e+"V-"+e+"Z"},noDot:!0},"circle-cross":{n:27,f:function(t){var e=n.round(t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"},needLine:!0,noDot:!0},"circle-x":{n:28,f:function(t){var e=n.round(t,2),r=n.round(t/Math.sqrt(2),2);return"M"+r+","+r+"L-"+r+",-"+r+"M"+r+",-"+r+"L-"+r+","+r+"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"},needLine:!0,noDot:!0},"square-cross":{n:29,f:function(t){var e=n.round(t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"},needLine:!0,noDot:!0},"square-x":{n:30,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e+"M"+e+",-"+e+"L-"+e+","+e+"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"},needLine:!0,noDot:!0},"diamond-cross":{n:31,f:function(t){var e=n.round(1.3*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"ZM0,-"+e+"V"+e+"M-"+e+",0H"+e},needLine:!0,noDot:!0},"diamond-x":{n:32,f:function(t){var e=n.round(1.3*t,2),r=n.round(.65*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"ZM-"+r+",-"+r+"L"+r+","+r+"M-"+r+","+r+"L"+r+",-"+r},needLine:!0,noDot:!0},"cross-thin":{n:33,f:function(t){var e=n.round(1.4*t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e},needLine:!0,noDot:!0,noFill:!0},"x-thin":{n:34,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e+"M"+e+",-"+e+"L-"+e+","+e},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(t){var e=n.round(1.2*t,2),r=n.round(.85*t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+r+","+r+"L-"+r+",-"+r+"M"+r+",-"+r+"L-"+r+","+r},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(t){var e=n.round(t/2,2),r=n.round(t,2);return"M"+e+","+r+"V-"+r+"m-"+r+",0V"+r+"M"+r+","+e+"H-"+r+"m0,-"+r+"H"+r},needLine:!0,noFill:!0},"y-up":{n:37,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return"M-"+e+","+i+"L0,0M"+e+","+i+"L0,0M0,-"+r+"L0,0"},needLine:!0,noDot:!0,noFill:!0},"y-down":{n:38,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return"M-"+e+",-"+i+"L0,0M"+e+",-"+i+"L0,0M0,"+r+"L0,0"},needLine:!0,noDot:!0,noFill:!0},"y-left":{n:39,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return"M"+i+","+e+"L0,0M"+i+",-"+e+"L0,0M-"+r+",0L0,0"},needLine:!0,noDot:!0,noFill:!0},"y-right":{n:40,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return"M-"+i+","+e+"L0,0M-"+i+",-"+e+"L0,0M"+r+",0L0,0"},needLine:!0,noDot:!0,noFill:!0},"line-ew":{n:41,f:function(t){var e=n.round(1.4*t,2);return"M"+e+",0H-"+e},needLine:!0,noDot:!0,noFill:!0},"line-ns":{n:42,f:function(t){var e=n.round(1.4*t,2);return"M0,"+e+"V-"+e},needLine:!0,noDot:!0,noFill:!0},"line-ne":{n:43,f:function(t){var e=n.round(t,2);return"M"+e+",-"+e+"L-"+e+","+e},needLine:!0,noDot:!0,noFill:!0},"line-nw":{n:44,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e},needLine:!0,noDot:!0,noFill:!0}}},{d3:108}],736:[function(t,e,r){"use strict";e.exports={visible:{valType:"boolean",editType:"calc"},type:{valType:"enumerated",values:["percent","constant","sqrt","data"],editType:"calc"},symmetric:{valType:"boolean",editType:"calc"},array:{valType:"data_array",editType:"calc"},arrayminus:{valType:"data_array",editType:"calc"},value:{valType:"number",min:0,dflt:10,editType:"calc"},valueminus:{valType:"number",min:0,dflt:10,editType:"calc"},traceref:{valType:"integer",min:0,dflt:0,editType:"style"},tracerefminus:{valType:"integer",min:0,dflt:0,editType:"style"},copy_ystyle:{valType:"boolean",editType:"plot"},copy_zstyle:{valType:"boolean",editType:"style"},color:{valType:"color",editType:"style"},thickness:{valType:"number",min:0,dflt:2,editType:"style"},width:{valType:"number",min:0,editType:"plot"},editType:"calc",_deprecated:{opacity:{valType:"number",editType:"style"}}}},{}],737:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../registry"),a=t("../../plots/cartesian/axes"),o=t("../../lib"),s=t("./compute_error");function l(t,e,r,i){var l=e["error_"+i]||{},u=[];if(l.visible&&-1!==["linear","log"].indexOf(r.type)){for(var c=s(l),f=0;f0;e.each(function(e){var f,h=e[0].trace,p=h.error_x||{},d=h.error_y||{};h.ids&&(f=function(t){return t.id});var m=o.hasMarkers(h)&&h.marker.maxdisplayed>0;d.visible||p.visible||(e=[]);var g=n.select(this).selectAll("g.errorbar").data(e,f);if(g.exit().remove(),e.length){p.visible||g.selectAll("path.xerror").remove(),d.visible||g.selectAll("path.yerror").remove(),g.style("opacity",1);var v=g.enter().append("g").classed("errorbar",!0);c&&v.style("opacity",0).transition().duration(s.duration).style("opacity",1),a.setClipUrl(g,r.layerClipId,t),g.each(function(t){var e=n.select(this),r=function(t,e,r){var n={x:e.c2p(t.x),y:r.c2p(t.y)};void 0!==t.yh&&(n.yh=r.c2p(t.yh),n.ys=r.c2p(t.ys),i(n.ys)||(n.noYS=!0,n.ys=r.c2p(t.ys,!0)));void 0!==t.xh&&(n.xh=e.c2p(t.xh),n.xs=e.c2p(t.xs),i(n.xs)||(n.noXS=!0,n.xs=e.c2p(t.xs,!0)));return n}(t,l,u);if(!m||t.vis){var a,o=e.select("path.yerror");if(d.visible&&i(r.x)&&i(r.yh)&&i(r.ys)){var f=d.width;a="M"+(r.x-f)+","+r.yh+"h"+2*f+"m-"+f+",0V"+r.ys,r.noYS||(a+="m-"+f+",0h"+2*f),!o.size()?o=e.append("path").style("vector-effect","non-scaling-stroke").classed("yerror",!0):c&&(o=o.transition().duration(s.duration).ease(s.easing)),o.attr("d",a)}else o.remove();var h=e.select("path.xerror");if(p.visible&&i(r.y)&&i(r.xh)&&i(r.xs)){var g=(p.copy_ystyle?d:p).width;a="M"+r.xh+","+(r.y-g)+"v"+2*g+"m0,-"+g+"H"+r.xs,r.noXS||(a+="m0,-"+g+"v"+2*g),!h.size()?h=e.append("path").style("vector-effect","non-scaling-stroke").classed("xerror",!0):c&&(h=h.transition().duration(s.duration).ease(s.easing)),h.attr("d",a)}else h.remove()}})}})}},{"../../traces/scatter/subtypes":1211,"../drawing":734,d3:108,"fast-isnumeric":693}],742:[function(t,e,r){"use strict";var n=t("d3"),i=t("../color");e.exports=function(t){t.each(function(t){var e=t[0].trace,r=e.error_y||{},a=e.error_x||{},o=n.select(this);o.selectAll("path.yerror").style("stroke-width",r.thickness+"px").call(i.stroke,r.color),a.copy_ystyle&&(a=r),o.selectAll("path.xerror").style("stroke-width",a.thickness+"px").call(i.stroke,a.color)})}},{"../color":713,d3:108}],743:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes");e.exports={hoverlabel:{bgcolor:{valType:"color",arrayOk:!0,editType:"none"},bordercolor:{valType:"color",arrayOk:!0,editType:"none"},font:n({arrayOk:!0,editType:"none"}),namelength:{valType:"integer",min:-1,arrayOk:!0,editType:"none"},editType:"calc"}}},{"../../plots/font_attributes":910}],744:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../registry");function a(t,e,r,i){i=i||n.identity,Array.isArray(t)&&(e[0][r]=i(t))}e.exports=function(t){var e=t.calcdata,r=t._fullLayout;function o(t){return function(e){return n.coerceHoverinfo({hoverinfo:e},{_module:t._module},r)}}for(var s=0;s=0&&r.indexw[0]._length||et<0||et>A[0]._length)return h.unhoverRaw(t,e)}if(e.pointerX=tt+w[0]._offset,e.pointerY=et+A[0]._offset,I="xval"in e?m.flat(l,e.xval):m.p2c(w,tt),N="yval"in e?m.flat(l,e.yval):m.p2c(A,et),!i(I[0])||!i(N[0]))return o.warn("Fx.hover failed",e,t),h.unhoverRaw(t,e)}var it=1/0;for(F=0;FY&&($.splice(0,Y),it=$[0].distance),y&&0!==X&&0===$.length){W.distance=X,W.index=!1;var ut=j._module.hoverPoints(W,H,G,"closest",c._hoverlayer);if(ut&&(ut=ut.filter(function(t){return t.spikeDistance<=X})),ut&&ut.length){var ct,ft=ut.filter(function(t){return t.xa.showspikes});if(ft.length){var ht=ft[0];i(ht.x0)&&i(ht.y0)&&(ct=gt(ht),(!K.vLinePoint||K.vLinePoint.spikeDistance>ct.spikeDistance)&&(K.vLinePoint=ct))}var pt=ut.filter(function(t){return t.ya.showspikes});if(pt.length){var dt=pt[0];i(dt.x0)&&i(dt.y0)&&(ct=gt(dt),(!K.hLinePoint||K.hLinePoint.spikeDistance>ct.spikeDistance)&&(K.hLinePoint=ct))}}}}function mt(t,e){for(var r,n=null,i=1/0,a=0;a1||$.length>1)||"closest"===P&&Q&&$.length>1,Ot=f.combine(c.plot_bgcolor||f.background,c.paper_bgcolor),zt={hovermode:P,rotateLabels:Lt,bgColor:Ot,container:c._hoverlayer,outerContainer:c._paperdiv,commonLabelOpts:c.hoverlabel,hoverdistance:c.hoverdistance},Dt=k($,zt,t);if(function(t,e,r){var n,i,a,o,s,l,u,c=0,f=1,h=t.map(function(t,n){var i=t[e],a="x"===i._id.charAt(0),o=i.range;return!n&&o&&o[0]>o[1]!==a&&(f=-1),[{i:n,traceIndex:t.trace.index,dp:0,pos:t.pos,posref:t.posref,size:t.by*(a?x:1)/2,pmin:0,pmax:a?r.width:r.height}]}).sort(function(t,e){return t[0].posref-e[0].posref||f*(e[0].traceIndex-t[0].traceIndex)});function p(t){var e=t[0],r=t[t.length-1];if(i=e.pmin-e.pos-e.dp+e.size,a=r.pos+r.dp+r.size-e.pmax,i>.01){for(s=t.length-1;s>=0;s--)t[s].dp+=i;n=!1}if(!(a<.01)){if(i<-.01){for(s=t.length-1;s>=0;s--)t[s].dp-=a;n=!1}if(n){var u=0;for(o=0;oe.pmax&&u++;for(o=t.length-1;o>=0&&!(u<=0);o--)(l=t[o]).pos>e.pmax-1&&(l.del=!0,u--);for(o=0;o=0;s--)t[s].dp-=a;for(o=t.length-1;o>=0&&!(u<=0);o--)(l=t[o]).pos+l.dp+l.size>e.pmax&&(l.del=!0,u--)}}}for(;!n&&c<=t.length;){for(c++,n=!0,o=0;o.01&&g.pmin===v.pmin&&g.pmax===v.pmax){for(s=m.length-1;s>=0;s--)m[s].dp+=i;for(d.push.apply(d,m),h.splice(o+1,1),u=0,s=d.length-1;s>=0;s--)u+=d[s].dp;for(a=u/d.length,s=d.length-1;s>=0;s--)d[s].dp-=a;n=!1}else o++}h.forEach(p)}for(o=h.length-1;o>=0;o--){var y=h[o];for(s=y.length-1;s>=0;s--){var b=y[s],_=t[b.i];_.offset=b.dp,_.del=b.del}}}($,Lt?"xa":"ya",c),T(Dt,Lt),e.target&&e.target.tagName){var Pt=d.getComponentMethod("annotations","hasClickToShow")(t,Tt);u(n.select(e.target),Pt?"pointer":"")}if(!e.target||a||!function(t,e,r){if(!r||r.length!==t._hoverdata.length)return!0;for(var n=r.length-1;n>=0;n--){var i=r[n],a=t._hoverdata[n];if(i.curveNumber!==a.curveNumber||String(i.pointNumber)!==String(a.pointNumber)||String(i.pointNumbers)!==String(a.pointNumbers))return!0}return!1}(t,0,kt))return;kt&&t.emit("plotly_unhover",{event:e,points:kt});t.emit("plotly_hover",{event:e,points:t._hoverdata,xaxes:w,yaxes:A,xvals:I,yvals:N})}(t,e,r,a)})},r.loneHover=function(t,e){var r={color:t.color||f.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,trace:t.trace||{index:0,hoverinfo:""},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,eventData:t.eventData||!1,hovertemplateLabels:t.hovertemplateLabels||!1},i=n.select(e.container),a=e.outerContainer?n.select(e.outerContainer):i,o={hovermode:"closest",rotateLabels:!1,bgColor:e.bgColor||f.background,container:i,outerContainer:a},s=k([r],o,e.gd);return T(s,o.rotateLabels),s.node()},r.multiHovers=function(t,e){Array.isArray(t)||(t=[t]);var r=t.map(function(t){return{color:t.color||f.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,trace:t.trace||{index:0,hoverinfo:""},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,eventData:t.eventData||!1,hovertemplateLabels:t.hovertemplateLabels||!1}}),i=n.select(e.container),a=e.outerContainer?n.select(e.outerContainer):i,o={hovermode:"closest",rotateLabels:!1,bgColor:e.bgColor||f.background,container:i,outerContainer:a},s=k(r,o,e.gd),l=0;return s.sort(function(t,e){return t.y0-e.y0}).each(function(t){var e=t.y0-t.by/2;t.offset=e-5([\s\S]*)<\/extra>/;function k(t,e,r){var i=r._fullLayout,a=e.hovermode,s=e.rotateLabels,u=e.bgColor,h=e.container,p=e.outerContainer,d=e.commonLabelOpts||{},m=e.fontFamily||g.HOVERFONT,y=e.fontSize||g.HOVERFONTSIZE,x=t[0],b=x.xa,_=x.ya,k="y"===a?"yLabel":"xLabel",T=x[k],E=(String(T)||"").split(" ")[0],S=p.node().getBoundingClientRect(),C=S.top,L=S.width,O=S.height,z=void 0!==T&&x.distance<=e.hoverdistance&&("x"===a||"y"===a);if(z){var D,P,I=!0;for(D=0;D"),void 0!==t.yLabel&&(p+="y: "+t.yLabel+"
"),p+=(p?"z: ":"")+t.zLabel):z&&t[a+"Label"]===T?p=t[("x"===a?"y":"x")+"Label"]||"":void 0===t.xLabel?void 0!==t.yLabel&&"scattercarpet"!==t.trace.type&&(p=t.yLabel):p=void 0===t.yLabel?t.xLabel:"("+t.xLabel+", "+t.yLabel+")",!t.text&&0!==t.text||Array.isArray(t.text)||(p+=(p?"
":"")+t.text),void 0!==t.extraText&&(p+=(p?"
":"")+t.extraText),""!==p||t.hovertemplate||(""===h&&e.remove(),p=h);var _=r._fullLayout._d3locale,k=t.hovertemplate||!1,E=t.hovertemplateLabels||t,S=t.eventData[0]||{};k&&(p=(p=o.hovertemplateString(k,E,_,S,{meta:i.meta})).replace(M,function(t,e){return h=e,""}));var D=e.select("text.nums").call(c.font,t.fontFamily||m,t.fontSize||y,t.fontColor||b).text(p).attr("data-notex",1).call(l.positionText,0,0).call(l.convertToTspans,r),P=e.select("text.name"),I=0,N=0;if(h&&h!==p){P.call(c.font,t.fontFamily||m,t.fontSize||y,x).text(h).attr("data-notex",1).call(l.positionText,0,0).call(l.convertToTspans,r);var R=P.node().getBoundingClientRect();I=R.width+2*A,N=R.height+2*A}else P.remove(),e.select("rect").remove();e.select("path").style({fill:g,stroke:b});var F,B,j=D.node().getBoundingClientRect(),V=t.xa._offset+(t.x0+t.x1)/2,U=t.ya._offset+(t.y0+t.y1)/2,q=Math.abs(t.x1-t.x0),H=Math.abs(t.y1-t.y0),G=j.width+w+A+I;t.ty0=C-j.top,t.bx=j.width+2*A,t.by=Math.max(j.height+2*A,N),t.anchor="start",t.txwidth=j.width,t.tx2width=I,t.offset=0,s?(t.pos=V,F=U+H/2+G<=O,B=U-H/2-G>=0,"top"!==t.idealAlign&&F||!B?F?(U+=H/2,t.anchor="start"):t.anchor="middle":(U-=H/2,t.anchor="end")):(t.pos=U,F=V+q/2+G<=L,B=V-q/2-G>=0,"left"!==t.idealAlign&&F||!B?F?(V+=q/2,t.anchor="start"):t.anchor="middle":(V-=q/2,t.anchor="end")),D.attr("text-anchor",t.anchor),I&&P.attr("text-anchor",t.anchor),e.attr("transform","translate("+V+","+U+")"+(s?"rotate("+v+")":""))}),F}function T(t,e){t.each(function(t){var r=n.select(this);if(t.del)r.remove();else{var i="end"===t.anchor?-1:1,a=r.select("text.nums"),o={start:1,end:-1,middle:0}[t.anchor],s=o*(w+A),u=s+o*(t.txwidth+A),f=0,h=t.offset;"middle"===t.anchor&&(s-=t.tx2width/2,u+=t.txwidth/2+A),e&&(h*=-_,f=t.offset*b),r.select("path").attr("d","middle"===t.anchor?"M-"+(t.bx/2+t.tx2width/2)+","+(h-t.by/2)+"h"+t.bx+"v"+t.by+"h-"+t.bx+"Z":"M0,0L"+(i*w+f)+","+(w+h)+"v"+(t.by/2-w)+"h"+i*t.bx+"v-"+t.by+"H"+(i*w+f)+"V"+(h-w)+"Z"),a.call(l.positionText,s+f,h+t.ty0-t.by/2+A),t.tx2width&&(r.select("text.name").call(l.positionText,u+o*A+f,h+t.ty0-t.by/2+A),r.select("rect").call(c.setRect,u+(o-1)*t.tx2width/2+f,h-t.by/2-1,t.tx2width,t.by+2))}})}function E(t,e){var r=t.index,n=t.trace||{},i=t.cd[0],a=t.cd[r]||{},s=Array.isArray(r)?function(t,e){return o.castOption(i,r,t)||o.extractOption({},n,"",e)}:function(t,e){return o.extractOption(a,n,t,e)};function l(e,r,n){var i=s(r,n);i&&(t[e]=i)}if(l("hoverinfo","hi","hoverinfo"),l("bgcolor","hbg","hoverlabel.bgcolor"),l("borderColor","hbc","hoverlabel.bordercolor"),l("fontFamily","htf","hoverlabel.font.family"),l("fontSize","hts","hoverlabel.font.size"),l("fontColor","htc","hoverlabel.font.color"),l("nameLength","hnl","hoverlabel.namelength"),t.posref="y"===e||"closest"===e&&"h"===n.orientation?t.xa._offset+(t.x0+t.x1)/2:t.ya._offset+(t.y0+t.y1)/2,t.x0=o.constrain(t.x0,0,t.xa._length),t.x1=o.constrain(t.x1,0,t.xa._length),t.y0=o.constrain(t.y0,0,t.ya._length),t.y1=o.constrain(t.y1,0,t.ya._length),void 0!==t.xLabelVal&&(t.xLabel="xLabel"in t?t.xLabel:p.hoverLabelText(t.xa,t.xLabelVal),t.xVal=t.xa.c2d(t.xLabelVal)),void 0!==t.yLabelVal&&(t.yLabel="yLabel"in t?t.yLabel:p.hoverLabelText(t.ya,t.yLabelVal),t.yVal=t.ya.c2d(t.yLabelVal)),void 0!==t.zLabelVal&&void 0===t.zLabel&&(t.zLabel=String(t.zLabelVal)),!(isNaN(t.xerr)||"log"===t.xa.type&&t.xerr<=0)){var u=p.tickText(t.xa,t.xa.c2l(t.xerr),"hover").text;void 0!==t.xerrneg?t.xLabel+=" +"+u+" / -"+p.tickText(t.xa,t.xa.c2l(t.xerrneg),"hover").text:t.xLabel+=" \xb1 "+u,"x"===e&&(t.distance+=1)}if(!(isNaN(t.yerr)||"log"===t.ya.type&&t.yerr<=0)){var c=p.tickText(t.ya,t.ya.c2l(t.yerr),"hover").text;void 0!==t.yerrneg?t.yLabel+=" +"+c+" / -"+p.tickText(t.ya,t.ya.c2l(t.yerrneg),"hover").text:t.yLabel+=" \xb1 "+c,"y"===e&&(t.distance+=1)}var f=t.hoverinfo||t.trace.hoverinfo;return f&&"all"!==f&&(-1===(f=Array.isArray(f)?f:f.split("+")).indexOf("x")&&(t.xLabel=void 0),-1===f.indexOf("y")&&(t.yLabel=void 0),-1===f.indexOf("z")&&(t.zLabel=void 0),-1===f.indexOf("text")&&(t.text=void 0),-1===f.indexOf("name")&&(t.name=void 0)),t}function S(t,e){var r,n,i=e.container,o=e.fullLayout,s=e.event,l=!!t.hLinePoint,u=!!t.vLinePoint;if(i.selectAll(".spikeline").remove(),u||l){var h=f.combine(o.plot_bgcolor,o.paper_bgcolor);if(l){var p,d,m=t.hLinePoint;r=m&&m.xa,"cursor"===(n=m&&m.ya).spikesnap?(p=s.pointerX,d=s.pointerY):(p=r._offset+m.x,d=n._offset+m.y);var g,v,y=a.readability(m.color,h)<1.5?f.contrast(h):m.color,x=n.spikemode,b=n.spikethickness,_=n.spikecolor||y,w=n._boundingBox,A=(w.left+w.right)/20){for(var n=[],i=0;i-1?o="closest":(e._isHoriz=function(t){for(var e=!0,r=0;r1){h||p||d||"independent"===M("pattern")&&(h=!0),g._hasSubplotGrid=h;var x,b,_="top to bottom"===M("roworder"),w=h?.2:.1,A=h?.3:.1;m&&e._splomGridDflt&&(x=e._splomGridDflt.xside,b=e._splomGridDflt.yside),g._domains={x:c("x",M,w,x,y),y:c("y",M,A,b,v,_)}}else delete e.grid}function M(t,e){return n.coerce(r,g,l,t,e)}},contentDefaults:function(t,e){var r=e.grid;if(r&&r._domains){var n,i,a,o,s,l,c,h=t.grid||{},p=e._subplots,d=r._hasSubplotGrid,m=r.rows,g=r.columns,v="independent"===r.pattern,y=r._axisMap={};if(d){var x=h.subplots||[];l=r.subplots=new Array(m);var b=1;for(n=0;n1);if(!1!==x||p.uirevision){var b=a.newContainer(e,"legend");if(w("uirevision",e.uirevision),!1!==x){if(w("bgcolor",e.paper_bgcolor),w("bordercolor"),w("borderwidth"),i.coerceFont(w,"font",e.font),w("orientation"),"h"===b.orientation){var _=t.xaxis;n.getComponentMethod("rangeslider","isVisible")(_)?(u=0,f="left",c=1.1,h="bottom"):(u=0,f="left",c=-.1,h="top")}w("traceorder",g),l.isGrouped(e.legend)&&w("tracegroupgap"),w("x",u),w("xanchor",f),w("y",c),w("yanchor",h),w("valign"),i.noneOrAll(p,b,["x","y"])}}function w(t,e){return i.coerce(p,b,o,t,e)}}},{"../../lib":836,"../../plot_api/plot_template":874,"../../plots/layout_attributes":937,"../../registry":965,"./attributes":762,"./helpers":768}],765:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../lib"),a=t("../../plots/plots"),o=t("../../registry"),s=t("../../lib/events"),l=t("../dragelement"),u=t("../drawing"),c=t("../color"),f=t("../../lib/svg_text_utils"),h=t("./handle_click"),p=t("./constants"),d=t("../../constants/interactions"),m=t("../../constants/alignment"),g=m.LINE_SPACING,v=m.FROM_TL,y=m.FROM_BR,x=t("./get_legend_data"),b=t("./style"),_=t("./helpers"),w=d.DBLCLICKDELAY;function A(t,e,r,n,i){var a=r.data()[0][0].trace,o={event:i,node:r.node(),curveNumber:a.index,expandedIndex:a._expandedIndex,data:t.data,layout:t.layout,frames:t._transitionData._frames,config:t._context,fullData:t._fullData,fullLayout:t._fullLayout};if(a._group&&(o.group=a._group),"pie"===a.type&&(o.label=r.datum()[0].label),!1!==s.triggerHandler(t,"plotly_legendclick",o))if(1===n)e._clickTimeout=setTimeout(function(){h(r,t,n)},w);else if(2===n){e._clickTimeout&&clearTimeout(e._clickTimeout),t._legendMouseDownTime=0,!1!==s.triggerHandler(t,"plotly_legenddoubleclick",o)&&h(r,t,n)}}function M(t,e,r){var n=t.data()[0][0],a=e._fullLayout,s=n.trace,l=o.traceIs(s,"pie"),c=s.index,h=e._context.edits.legendText&&!l,d=l?n.label:s.name;a.meta&&(d=i.templateString(d,{meta:a.meta}));var m=i.ensureSingle(t,"text","legendtext");function v(r){f.convertToTspans(r,e,function(){!function(t,e){var r=t.data()[0][0];if(!r.trace.showlegend)return void t.remove();var n,i,a=t.select("g[class*=math-group]"),o=a.node(),s=e._fullLayout.legend.font.size*g;if(o){var l=u.bBox(o);n=l.height,i=l.width,u.setTranslate(a,0,n/4)}else{var c=t.select(".legendtext"),h=f.lineCount(c),d=c.node();n=s*h,i=d?u.bBox(d).width:0;var m=s*(.3+(1-h)/2);f.positionText(c,p.textOffsetX,m)}r.lineHeight=s,r.height=Math.max(n,16)+3,r.width=i}(t,e)})}m.attr("text-anchor","start").classed("user-select-none",!0).call(u.font,a.legend.font).text(h?k(d,r):d),f.positionText(m,p.textOffsetX,0),h?m.call(f.makeEditable,{gd:e,text:d}).call(v).on("edit",function(t){this.text(k(t,r)).call(v);var a=n.trace._fullInput||{},s={};if(o.hasTransform(a,"groupby")){var l=o.getTransformIndices(a,"groupby"),u=l[l.length-1],f=i.keyedContainer(a,"transforms["+u+"].styles","target","value.name");f.set(n.trace._group,t),s=f.constructUpdate()}else s.name=t;return o.call("_guiRestyle",e,s,c)}):v(m)}function k(t,e){var r=Math.max(4,e);if(t&&t.trim().length>=r/2)return t;for(var n=r-(t=t||"").length;n>0;n--)t+=" ";return t}function T(t,e){var r,a=1,o=i.ensureSingle(t,"rect","legendtoggle",function(t){t.style("cursor","pointer").attr("pointer-events","all").call(c.fill,"rgba(0,0,0,0)")});o.on("mousedown",function(){(r=(new Date).getTime())-e._legendMouseDownTimew&&(a=Math.max(a-1,1)),A(e,r,t,a,n.event)}})}function E(t,e,r){var i=t._fullLayout,a=i.legend,o=a.borderwidth,s=_.isGrouped(a),l=0;if(a._width=0,a._height=0,_.isVertical(a))s&&e.each(function(t,e){u.setTranslate(this,0,e*a.tracegroupgap)}),r.each(function(t){var e=t[0],r=e.height,n=e.width;u.setTranslate(this,o,5+o+a._height+r/2),a._height+=r,a._width=Math.max(a._width,n)}),a._width+=45+2*o,a._height+=10+2*o,s&&(a._height+=(a._lgroupsLength-1)*a.tracegroupgap),l=40;else if(s){for(var c=[a._width],f=e.data(),h=0,p=f.length;ho+b-w;r.each(function(t){var e=t[0],r=A?40+t[0].width:y;o+x+w+r>i._size.w&&(x=0,g+=v,a._height+=v,v=0),u.setTranslate(this,o+x,5+o+e.height/2+g),a._width+=w+r,x+=w+r,v=Math.max(e.height,v)}),A?a._height=v:a._height+=v,a._width+=2*o,a._height+=10+2*o}a._width=Math.ceil(a._width),a._height=Math.ceil(a._height);var M=t._context.edits.legendText||t._context.edits.legendPosition;r.each(function(t){var e=t[0],r=n.select(this).select(".legendtoggle");u.setRect(r,0,-e.height/2,(M?0:a._width)+l,e.height)})}function S(t){var e=t._fullLayout.legend,r="left";i.isRightAnchor(e)?r="right":i.isCenterAnchor(e)&&(r="center");var n="top";i.isBottomAnchor(e)?n="bottom":i.isMiddleAnchor(e)&&(n="middle"),a.autoMargin(t,"legend",{x:e.x,y:e.y,l:e._width*v[r],r:e._width*y[r],b:e._height*y[n],t:e._height*v[n]})}e.exports=function(t){var e=t._fullLayout,r="legend"+e._uid;if(e._infolayer&&t.calcdata){t._legendMouseDownTime||(t._legendMouseDownTime=0);var s=e.legend,f=e.showlegend&&x(t.calcdata,s),h=e.hiddenlabels||[];if(!e.showlegend||!f.length)return e._infolayer.selectAll(".legend").remove(),e._topdefs.select("#"+r).remove(),void a.autoMargin(t,"legend");for(var d=0,m=0;mf?function(t){var e=t._fullLayout.legend,r="left";i.isRightAnchor(e)?r="right":i.isCenterAnchor(e)&&(r="center");a.autoMargin(t,"legend",{x:e.x,y:.5,l:e._width*v[r],r:e._width*y[r],b:0,t:0})}(t):S(t);var h=e._size,d=h.l+h.w*s.x,m=h.t+h.h*(1-s.y);i.isRightAnchor(s)?d-=s._width:i.isCenterAnchor(s)&&(d-=s._width/2),i.isBottomAnchor(s)?m-=s._height:i.isMiddleAnchor(s)&&(m-=s._height/2);var g=s._width,x=h.w;g>x?(d=h.l,g=x):(d+g>c&&(d=c-g),d<0&&(d=0),g=Math.min(c-d,s._width));var b,_,w,M,k=s._height,T=h.h;if(k>T?(m=h.t,k=T):(m+k>f&&(m=f-k),m<0&&(m=0),k=Math.min(f-m,s._height)),u.setTranslate(L,d,m),P.on(".drag",null),L.on("wheel",null),s._height<=k||t._context.staticPlot)z.attr({width:g-s.borderwidth,height:k-s.borderwidth,x:s.borderwidth/2,y:s.borderwidth/2}),u.setTranslate(D,0,0),O.select("rect").attr({width:g-2*s.borderwidth,height:k-2*s.borderwidth,x:s.borderwidth,y:s.borderwidth}),u.setClipUrl(D,r,t),u.setRect(P,0,0,0,0),delete s._scrollY;else{var R,F,B=Math.max(p.scrollBarMinHeight,k*k/s._height),j=k-B-2*p.scrollBarMargin,V=s._height-k,U=j/V,q=Math.min(s._scrollY||0,V);z.attr({width:g-2*s.borderwidth+p.scrollBarWidth+p.scrollBarMargin,height:k-s.borderwidth,x:s.borderwidth/2,y:s.borderwidth/2}),O.select("rect").attr({width:g-2*s.borderwidth+p.scrollBarWidth+p.scrollBarMargin,height:k-2*s.borderwidth,x:s.borderwidth,y:s.borderwidth+q}),u.setClipUrl(D,r,t),G(q,B,U),L.on("wheel",function(){G(q=i.constrain(s._scrollY+n.event.deltaY/j*V,0,V),B,U),0!==q&&q!==V&&n.event.preventDefault()});var H=n.behavior.drag().on("dragstart",function(){R=n.event.sourceEvent.clientY,F=q}).on("drag",function(){var t=n.event.sourceEvent;2===t.buttons||t.ctrlKey||G(q=i.constrain((t.clientY-R)/U+F,0,V),B,U)});P.call(H)}function G(e,r,n){s._scrollY=t._fullLayout.legend._scrollY=e,u.setTranslate(D,0,-e),u.setRect(P,g,p.scrollBarMargin+e*n,p.scrollBarWidth,r),O.select("rect").attr({y:s.borderwidth+e})}t._context.edits.legendPosition&&(L.classed("cursor-move",!0),l.init({element:L.node(),gd:t,prepFn:function(){var t=u.getTranslate(L);w=t.x,M=t.y},moveFn:function(t,e){var r=w+t,n=M+e;u.setTranslate(L,r,n),b=l.align(r,0,h.l,h.l+h.w,s.xanchor),_=l.align(n,0,h.t+h.h,h.t,s.yanchor)},doneFn:function(){void 0!==b&&void 0!==_&&o.call("_guiRelayout",t,{"legend.x":b,"legend.y":_})},clickFn:function(r,n){var i=e._infolayer.selectAll("g.traces").filter(function(){var t=this.getBoundingClientRect();return n.clientX>=t.left&&n.clientX<=t.right&&n.clientY>=t.top&&n.clientY<=t.bottom});i.size()>0&&A(t,L,i,r,n)}}))}],t)}}},{"../../constants/alignment":808,"../../constants/interactions":812,"../../lib":836,"../../lib/events":825,"../../lib/svg_text_utils":860,"../../plots/plots":946,"../../registry":965,"../color":713,"../dragelement":731,"../drawing":734,"./constants":763,"./get_legend_data":766,"./handle_click":767,"./helpers":768,"./style":770,d3:108}],766:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("./helpers");e.exports=function(t,e){var r,a,o={},s=[],l=!1,u={},c=0;function f(t,r){if(""!==t&&i.isGrouped(e))-1===s.indexOf(t)?(s.push(t),l=!0,o[t]=[[r]]):o[t].push([r]);else{var n="~~i"+c;s.push(n),o[n]=[[r]],c++}}for(r=0;rr[1])return r[1]}return i}function d(t){return t[0]}if(c||f||h){var m={},g={};if(c){m.mc=p("marker.color",d),m.mx=p("marker.symbol",d),m.mo=p("marker.opacity",a.mean,[.2,1]),m.mlc=p("marker.line.color",d),m.mlw=p("marker.line.width",a.mean,[0,5]),g.marker={sizeref:1,sizemin:1,sizemode:"diameter"};var v=p("marker.size",a.mean,[2,16]);m.ms=v,g.marker.size=v}h&&(g.line={width:p("line.width",d,[0,10])}),f&&(m.tx="Aa",m.tp=p("textposition",d),m.ts=10,m.tc=p("textfont.color",d),m.tf=p("textfont.family",d)),r=[a.minExtend(s,m)],(i=a.minExtend(u,g)).selectedpoints=null}var y=n.select(this).select("g.legendpoints"),x=y.selectAll("path.scatterpts").data(c?r:[]);x.enter().insert("path",":first-child").classed("scatterpts",!0).attr("transform","translate(20,0)"),x.exit().remove(),x.call(o.pointStyle,i,e),c&&(r[0].mrc=3);var b=y.selectAll("g.pointtext").data(f?r:[]);b.enter().append("g").classed("pointtext",!0).append("text").attr("transform","translate(20,0)"),b.exit().remove(),b.selectAll("text").call(o.textPointStyle,i,e)}).each(function(t){var e=t[0].trace,r=n.select(this).select("g.legendpoints").selectAll("path.legendcandle").data("candlestick"===e.type&&e.visible?[t,t]:[]);r.enter().append("path").classed("legendcandle",!0).attr("d",function(t,e){return e?"M-15,0H-8M-8,6V-6H8Z":"M15,0H8M8,-6V6H-8Z"}).attr("transform","translate(20,0)").style("stroke-miterlimit",1),r.exit().remove(),r.each(function(t,r){var i=e[r?"increasing":"decreasing"],a=i.line.width,o=n.select(this);o.style("stroke-width",a+"px").call(s.fill,i.fillcolor),a&&s.stroke(o,i.line.color)})}).each(function(t){var e=t[0].trace,r=n.select(this).select("g.legendpoints").selectAll("path.legendohlc").data("ohlc"===e.type&&e.visible?[t,t]:[]);r.enter().append("path").classed("legendohlc",!0).attr("d",function(t,e){return e?"M-15,0H0M-8,-6V0":"M15,0H0M8,6V0"}).attr("transform","translate(20,0)").style("stroke-miterlimit",1),r.exit().remove(),r.each(function(t,r){var i=e[r?"increasing":"decreasing"],a=i.line.width,l=n.select(this);l.style("fill","none").call(o.dashLine,i.line.dash,a),a&&s.stroke(l,i.line.color)})})}},{"../../lib":836,"../../registry":965,"../../traces/pie/style_one":1173,"../../traces/scatter/subtypes":1211,"../color":713,"../drawing":734,d3:108}],771:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../plots/plots"),a=t("../../plots/cartesian/axis_ids"),o=t("../../lib"),s=t("../../../build/ploticon"),l=o._,u=e.exports={};function c(t,e){var r,i,o=e.currentTarget,s=o.getAttribute("data-attr"),l=o.getAttribute("data-val")||!0,u=t._fullLayout,c={},f=a.list(t,null,!0),h="on";if("zoom"===s){var p,d="in"===l?.5:2,m=(1+d)/2,g=(1-d)/2;for(i=0;i1?(A=["toggleHover"],M=["resetViews"]):h?(w=["zoomInGeo","zoomOutGeo"],A=["hoverClosestGeo"],M=["resetGeo"]):f?(A=["hoverClosest3d"],M=["resetCameraDefault3d","resetCameraLastSave3d"]):g?(A=["toggleHover"],M=["resetViewMapbox"]):A=d?["hoverClosestGl2d"]:p?["hoverClosestPie"]:["toggleHover"];c&&(A=["toggleSpikelines","hoverClosestCartesian","hoverCompareCartesian"]);!c&&!d||y||(w=["zoomIn2d","zoomOut2d","autoScale2d"],"resetViews"!==M[0]&&(M=["resetScale2d"]));f?k=["zoom3d","pan3d","orbitRotation","tableRotation"]:(c||d)&&!y||m?k=["zoom2d","pan2d"]:g||h?k=["pan2d"]:v&&(k=["zoom2d"]);(function(t){for(var e=!1,r=0;r0)){var m=function(t,e,r){for(var n=r.filter(function(r){return e[r].anchor===t._id}),i=0,a=0;a0?h+u:u;return{ppad:u,ppadplus:c?d:m,ppadminus:c?m:d}}return{ppad:u}}function c(t,e,r,n,i){var s="category"===t.type||"multicategory"===t.type?t.r2c:t.d2c;if(void 0!==e)return[s(e),s(r)];if(n){var l,u,c,f,h=1/0,p=-1/0,d=n.match(a.segmentRE);for("date"===t.type&&(s=o.decodeDate(s)),l=0;lp&&(p=f)));return p>=h?[h,p]:void 0}}e.exports=function(t){var e=t._fullLayout,r=n.filterVisible(e.shapes);if(r.length&&t._fullData.length)for(var o=0;o10?t/2:10;return n.append("circle").attr({"data-line-point":"start-point",cx:I?q(r.xanchor)+r.x0:q(r.x0),cy:N?H(r.yanchor)-r.y0:H(r.y0),r:a}).style(i).classed("cursor-grab",!0),n.append("circle").attr({"data-line-point":"end-point",cx:I?q(r.xanchor)+r.x1:q(r.x1),cy:N?H(r.yanchor)-r.y1:H(r.y1),r:a}).style(i).classed("cursor-grab",!0),n}():e,Z={element:Y.node(),gd:t,prepFn:function(n){I&&(_=q(r.xanchor));N&&(w=H(r.yanchor));"path"===r.type?O=r.path:(v=I?r.x0:q(r.x0),y=N?r.y0:H(r.y0),x=I?r.x1:q(r.x1),b=N?r.y1:H(r.y1));vb?(A=y,E="y0",M=b,S="y1"):(A=b,E="y1",M=y,S="y0");X(n),K(p,r),function(t,e,r){var n=e.xref,i=e.yref,o=a.getFromId(r,n),l=a.getFromId(r,i),u="";"paper"===n||o.autorange||(u+=n);"paper"===i||l.autorange||(u+=i);s.setClipUrl(t,u?"clip"+r._fullLayout._uid+u:null,r)}(e,r,t),Z.moveFn="move"===z?$:J},doneFn:function(){c(e),Q(p),d(e,t,r),n.call("_guiRelayout",t,B.getUpdateObj())},clickFn:function(){Q(p)}};function X(t){if(R)z="path"===t.target.tagName?"move":"start-point"===t.target.attributes["data-line-point"].value?"resize-over-start-point":"resize-over-end-point";else{var r=Z.element.getBoundingClientRect(),n=r.right-r.left,i=r.bottom-r.top,a=t.clientX-r.left,o=t.clientY-r.top,s=!F&&n>D&&i>P&&!t.shiftKey?u.getCursor(a/n,1-o/i):"move";c(e,s),z=s.split("-")[0]}}function $(n,i){if("path"===r.type){var a=function(t){return t},o=a,s=a;I?j("xanchor",r.xanchor=G(_+n)):(o=function(t){return G(q(t)+n)},V&&"date"===V.type&&(o=h.encodeDate(o))),N?j("yanchor",r.yanchor=W(w+i)):(s=function(t){return W(H(t)+i)},U&&"date"===U.type&&(s=h.encodeDate(s))),j("path",r.path=g(O,o,s))}else I?j("xanchor",r.xanchor=G(_+n)):(j("x0",r.x0=G(v+n)),j("x1",r.x1=G(x+n))),N?j("yanchor",r.yanchor=W(w+i)):(j("y0",r.y0=W(y+i)),j("y1",r.y1=W(b+i)));e.attr("d",m(t,r)),K(p,r)}function J(n,i){if(F){var a=function(t){return t},o=a,s=a;I?j("xanchor",r.xanchor=G(_+n)):(o=function(t){return G(q(t)+n)},V&&"date"===V.type&&(o=h.encodeDate(o))),N?j("yanchor",r.yanchor=W(w+i)):(s=function(t){return W(H(t)+i)},U&&"date"===U.type&&(s=h.encodeDate(s))),j("path",r.path=g(O,o,s))}else if(R){if("resize-over-start-point"===z){var l=v+n,u=N?y-i:y+i;j("x0",r.x0=I?l:G(l)),j("y0",r.y0=N?u:W(u))}else if("resize-over-end-point"===z){var c=x+n,f=N?b-i:b+i;j("x1",r.x1=I?c:G(c)),j("y1",r.y1=N?f:W(f))}}else{var d=~z.indexOf("n")?A+i:A,B=~z.indexOf("s")?M+i:M,Y=~z.indexOf("w")?k+n:k,Z=~z.indexOf("e")?T+n:T;~z.indexOf("n")&&N&&(d=A-i),~z.indexOf("s")&&N&&(B=M-i),(!N&&B-d>P||N&&d-B>P)&&(j(E,r[E]=N?d:W(d)),j(S,r[S]=N?B:W(B))),Z-Y>D&&(j(C,r[C]=I?Y:G(Y)),j(L,r[L]=I?Z:G(Z)))}e.attr("d",m(t,r)),K(p,r)}function K(t,e){(I||N)&&function(){var r="path"!==e.type,n=t.selectAll(".visual-cue").data([0]);n.enter().append("path").attr({fill:"#fff","fill-rule":"evenodd",stroke:"#000","stroke-width":1}).classed("visual-cue",!0);var a=q(I?e.xanchor:i.midRange(r?[e.x0,e.x1]:h.extractPathCoords(e.path,f.paramIsX))),o=H(N?e.yanchor:i.midRange(r?[e.y0,e.y1]:h.extractPathCoords(e.path,f.paramIsY)));if(a=h.roundPositionForSharpStrokeRendering(a,1),o=h.roundPositionForSharpStrokeRendering(o,1),I&&N){var s="M"+(a-1-1)+","+(o-1-1)+"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z";n.attr("d",s)}else if(I){var l="M"+(a-1-1)+","+(o-9-1)+"v18 h2 v-18 Z";n.attr("d",l)}else{var u="M"+(a-9-1)+","+(o-1-1)+"h18 v2 h-18 Z";n.attr("d",u)}}()}function Q(t){t.selectAll(".visual-cue").remove()}u.init(Z),Y.node().onmousemove=X}(t,x,r,e,p)}}function d(t,e,r){var n=(r.xref+r.yref).replace(/paper/g,"");s.setClipUrl(t,n?"clip"+e._fullLayout._uid+n:null,e)}function m(t,e){var r,n,o,s,l,u,c,p,d=e.type,m=a.getFromId(t,e.xref),g=a.getFromId(t,e.yref),v=t._fullLayout._size;if(m?(r=h.shapePositionToRange(m),n=function(t){return m._offset+m.r2p(r(t,!0))}):n=function(t){return v.l+v.w*t},g?(o=h.shapePositionToRange(g),s=function(t){return g._offset+g.r2p(o(t,!0))}):s=function(t){return v.t+v.h*(1-t)},"path"===d)return m&&"date"===m.type&&(n=h.decodeDate(n)),g&&"date"===g.type&&(s=h.decodeDate(s)),function(t,e,r){var n=t.path,a=t.xsizemode,o=t.ysizemode,s=t.xanchor,l=t.yanchor;return n.replace(f.segmentRE,function(t){var n=0,u=t.charAt(0),c=f.paramIsX[u],h=f.paramIsY[u],p=f.numParams[u],d=t.substr(1).replace(f.paramRE,function(t){return c[n]?t="pixel"===a?e(s)+Number(t):e(t):h[n]&&(t="pixel"===o?r(l)-Number(t):r(t)),++n>p&&(t="X"),t});return n>p&&(d=d.replace(/[\s,]*X.*/,""),i.log("Ignoring extra params in segment "+t)),u+d})}(e,n,s);if("pixel"===e.xsizemode){var y=n(e.xanchor);l=y+e.x0,u=y+e.x1}else l=n(e.x0),u=n(e.x1);if("pixel"===e.ysizemode){var x=s(e.yanchor);c=x-e.y0,p=x-e.y1}else c=s(e.y0),p=s(e.y1);if("line"===d)return"M"+l+","+c+"L"+u+","+p;if("rect"===d)return"M"+l+","+c+"H"+u+"V"+p+"H"+l+"Z";var b=(l+u)/2,_=(c+p)/2,w=Math.abs(b-l),A=Math.abs(_-c),M="A"+w+","+A,k=b+w+","+_;return"M"+k+M+" 0 1,1 "+(b+","+(_-A))+M+" 0 0,1 "+k+"Z"}function g(t,e,r){return t.replace(f.segmentRE,function(t){var n=0,i=t.charAt(0),a=f.paramIsX[i],o=f.paramIsY[i],s=f.numParams[i];return i+t.substr(1).replace(f.paramRE,function(t){return n>=s?t:(a[n]?t=e(t):o[n]&&(t=r(t)),n++,t)})})}e.exports={draw:function(t){var e=t._fullLayout;for(var r in e._shapeUpperLayer.selectAll("path").remove(),e._shapeLowerLayer.selectAll("path").remove(),e._plots){var n=e._plots[r].shapelayer;n&&n.selectAll("path").remove()}for(var i=0;i0&&(s=s.transition().duration(e.transition.duration).ease(e.transition.easing)),s.attr("transform","translate("+(o-.5*c.gripWidth)+","+e._dims.currentValueTotalHeight+")")}}function E(t,e){var r=t._dims;return r.inputAreaStart+c.stepInset+(r.inputAreaLength-2*c.stepInset)*Math.min(1,Math.max(0,e))}function S(t,e){var r=t._dims;return Math.min(1,Math.max(0,(e-c.stepInset-r.inputAreaStart)/(r.inputAreaLength-2*c.stepInset-2*r.inputAreaStart)))}function C(t,e,r){var n=r._dims,i=s.ensureSingle(t,"rect",c.railTouchRectClass,function(n){n.call(M,e,t,r).style("pointer-events","all")});i.attr({width:n.inputAreaLength,height:Math.max(n.inputAreaWidth,c.tickOffset+r.ticklen+n.labelHeight)}).call(a.fill,r.bgcolor).attr("opacity",0),o.setTranslate(i,0,n.currentValueTotalHeight)}function L(t,e){var r=e._dims,n=r.inputAreaLength-2*c.railInset,i=s.ensureSingle(t,"rect",c.railRectClass);i.attr({width:n,height:c.railWidth,rx:c.railRadius,ry:c.railRadius,"shape-rendering":"crispEdges"}).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px"),o.setTranslate(i,c.railInset,.5*(r.inputAreaWidth-c.railWidth)+r.currentValueTotalHeight)}e.exports=function(t){var e=t._fullLayout,r=function(t,e){for(var r=t[c.name],n=[],i=0;i0?[0]:[]);function s(e){e._commandObserver&&(e._commandObserver.remove(),delete e._commandObserver),i.autoMargin(t,m(e))}if(a.enter().append("g").classed(c.containerClassName,!0).style("cursor","ew-resize"),a.exit().each(function(){n.select(this).selectAll("g."+c.groupClassName).each(s)}).remove(),0!==r.length){var l=a.selectAll("g."+c.groupClassName).data(r,g);l.enter().append("g").classed(c.groupClassName,!0),l.exit().each(s).remove();for(var u=0;u0||h<0){var m={left:[-r,0],right:[r,0],top:[0,-r],bottom:[0,r]}[y.side];e.attr("transform","translate("+m+")")}}}D.call(P),O&&(T?D.on(".opacity",null):(A=0,M=!0,D.text(g).on("mouseover.opacity",function(){n.select(this).transition().duration(f.SHOW_PLACEHOLDER).style("opacity",1)}).on("mouseout.opacity",function(){n.select(this).transition().duration(f.HIDE_PLACEHOLDER).style("opacity",0)})),D.call(c.makeEditable,{gd:t}).on("edit",function(e){void 0!==v?o.call("_guiRestyle",t,m,e,v):o.call("_guiRelayout",t,m,e)}).on("cancel",function(){this.text(this.attr("data-unformatted")).call(P)}).on("input",function(t){this.text(t||" ").call(c.positionText,x.x,x.y)}));return D.classed("js-placeholder",M),_}};var h=/ [XY][0-9]* /},{"../../constants/interactions":812,"../../lib":836,"../../lib/svg_text_utils":860,"../../plots/plots":946,"../../registry":965,"../color":713,"../drawing":734,d3:108,"fast-isnumeric":693}],802:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),i=t("../color/attributes"),a=t("../../lib/extend").extendFlat,o=t("../../plot_api/edit_types").overrideAll,s=t("../../plots/pad_attributes"),l=t("../../plot_api/plot_template").templatedArray,u=l("button",{visible:{valType:"boolean"},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string",dflt:""},execute:{valType:"boolean",dflt:!0}});e.exports=o(l("updatemenu",{_arrayAttrRegexps:[/^updatemenus\[(0|[1-9][0-9]+)\]\.buttons/],visible:{valType:"boolean"},type:{valType:"enumerated",values:["dropdown","buttons"],dflt:"dropdown"},direction:{valType:"enumerated",values:["left","right","up","down"],dflt:"down"},active:{valType:"integer",min:-1,dflt:0},showactive:{valType:"boolean",dflt:!0},buttons:u,x:{valType:"number",min:-2,max:3,dflt:-.05},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"right"},y:{valType:"number",min:-2,max:3,dflt:1},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},pad:a(s({editType:"arraydraw"}),{}),font:n({}),bgcolor:{valType:"color"},bordercolor:{valType:"color",dflt:i.borderLine},borderwidth:{valType:"number",min:0,dflt:1,editType:"arraydraw"}}),"arraydraw","from-root")},{"../../lib/extend":826,"../../plot_api/edit_types":867,"../../plot_api/plot_template":874,"../../plots/font_attributes":910,"../../plots/pad_attributes":945,"../color/attributes":712}],803:[function(t,e,r){"use strict";e.exports={name:"updatemenus",containerClassName:"updatemenu-container",headerGroupClassName:"updatemenu-header-group",headerClassName:"updatemenu-header",headerArrowClassName:"updatemenu-header-arrow",dropdownButtonGroupClassName:"updatemenu-dropdown-button-group",dropdownButtonClassName:"updatemenu-dropdown-button",buttonClassName:"updatemenu-button",itemRectClassName:"updatemenu-item-rect",itemTextClassName:"updatemenu-item-text",menuIndexAttrName:"updatemenu-active-index",autoMarginIdRoot:"updatemenu-",blankHeaderOpts:{label:" "},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:"#F4FAFF",hoverColor:"#F4FAFF",arrowSymbol:{left:"\u25c4",right:"\u25ba",up:"\u25b2",down:"\u25bc"}}},{}],804:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../plots/array_container_defaults"),a=t("./attributes"),o=t("./constants").name,s=a.buttons;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}o("visible",i(t,e,{name:"buttons",handleItemDefaults:u}).length>0)&&(o("active"),o("direction"),o("type"),o("showactive"),o("x"),o("y"),n.noneOrAll(t,e,["x","y"]),o("xanchor"),o("yanchor"),o("pad.t"),o("pad.r"),o("pad.b"),o("pad.l"),n.coerceFont(o,"font",r.font),o("bgcolor",r.paper_bgcolor),o("bordercolor"),o("borderwidth"))}function u(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}r("visible","skip"===t.method||Array.isArray(t.args))&&(r("method"),r("args"),r("label"),r("execute"))}e.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},{"../../lib":836,"../../plots/array_container_defaults":880,"./attributes":802,"./constants":803}],805:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../plots/plots"),a=t("../color"),o=t("../drawing"),s=t("../../lib"),l=t("../../lib/svg_text_utils"),u=t("../../plot_api/plot_template").arrayEditor,c=t("../../constants/alignment").LINE_SPACING,f=t("./constants"),h=t("./scrollbox");function p(t){return t._index}function d(t,e){return+t.attr(f.menuIndexAttrName)===e._index}function m(t,e,r,n,i,a,o,s){e.active=o,u(t.layout,f.name,e).applyUpdate("active",o),"buttons"===e.type?v(t,n,null,null,e):"dropdown"===e.type&&(i.attr(f.menuIndexAttrName,"-1"),g(t,n,i,a,e),s||v(t,n,i,a,e))}function g(t,e,r,n,i){var a=s.ensureSingle(e,"g",f.headerClassName,function(t){t.style("pointer-events","all")}),l=i._dims,u=i.active,c=i.buttons[u]||f.blankHeaderOpts,h={y:i.pad.t,yPad:0,x:i.pad.l,xPad:0,index:0},p={width:l.headerWidth,height:l.headerHeight};a.call(y,i,c,t).call(T,i,h,p),s.ensureSingle(e,"text",f.headerArrowClassName,function(t){t.classed("user-select-none",!0).attr("text-anchor","end").call(o.font,i.font).text(f.arrowSymbol[i.direction])}).attr({x:l.headerWidth-f.arrowOffsetX+i.pad.l,y:l.headerHeight/2+f.textOffsetY+i.pad.t}),a.on("click",function(){r.call(E,String(d(r,i)?-1:i._index)),v(t,e,r,n,i)}),a.on("mouseover",function(){a.call(w)}),a.on("mouseout",function(){a.call(A,i)}),o.setTranslate(e,l.lx,l.ly)}function v(t,e,r,a,o){r||(r=e).attr("pointer-events","all");var l=function(t){return-1==+t.attr(f.menuIndexAttrName)}(r)&&"buttons"!==o.type?[]:o.buttons,u="dropdown"===o.type?f.dropdownButtonClassName:f.buttonClassName,c=r.selectAll("g."+u).data(s.filterVisible(l)),h=c.enter().append("g").classed(u,!0),p=c.exit();"dropdown"===o.type?(h.attr("opacity","0").transition().attr("opacity","1"),p.transition().attr("opacity","0").remove()):p.remove();var d=0,g=0,v=o._dims,x=-1!==["up","down"].indexOf(o.direction);"dropdown"===o.type&&(x?g=v.headerHeight+f.gapButtonHeader:d=v.headerWidth+f.gapButtonHeader),"dropdown"===o.type&&"up"===o.direction&&(g=-f.gapButtonHeader+f.gapButton-v.openHeight),"dropdown"===o.type&&"left"===o.direction&&(d=-f.gapButtonHeader+f.gapButton-v.openWidth);var b={x:v.lx+d+o.pad.l,y:v.ly+g+o.pad.t,yPad:f.gapButton,xPad:f.gapButton,index:0},M={l:b.x+o.borderwidth,t:b.y+o.borderwidth};c.each(function(s,l){var u=n.select(this);u.call(y,o,s,t).call(T,o,b),u.on("click",function(){n.event.defaultPrevented||(m(t,o,0,e,r,a,l),s.execute&&i.executeAPICommand(t,s.method,s.args),t.emit("plotly_buttonclicked",{menu:o,button:s,active:o.active}))}),u.on("mouseover",function(){u.call(w)}),u.on("mouseout",function(){u.call(A,o),c.call(_,o)})}),c.call(_,o),x?(M.w=Math.max(v.openWidth,v.headerWidth),M.h=b.y-M.t):(M.w=b.x-M.l,M.h=Math.max(v.openHeight,v.headerHeight)),M.direction=o.direction,a&&(c.size()?function(t,e,r,n,i,a){var o,s,l,u=i.direction,c="up"===u||"down"===u,h=i._dims,p=i.active;if(c)for(s=0,l=0;l0?[0]:[]);if(o.enter().append("g").classed(f.containerClassName,!0).style("cursor","pointer"),o.exit().each(function(){n.select(this).selectAll("g."+f.headerGroupClassName).each(a)}).remove(),0!==r.length){var l=o.selectAll("g."+f.headerGroupClassName).data(r,p);l.enter().append("g").classed(f.headerGroupClassName,!0);for(var u=s.ensureSingle(o,"g",f.dropdownButtonGroupClassName,function(t){t.style("pointer-events","all")}),c=0;cw,k=s.barLength+2*s.barPad,T=s.barWidth+2*s.barPad,E=d,S=g+v;S+T>u&&(S=u-T);var C=this.container.selectAll("rect.scrollbar-horizontal").data(M?[0]:[]);C.exit().on(".drag",null).remove(),C.enter().append("rect").classed("scrollbar-horizontal",!0).call(i.fill,s.barColor),M?(this.hbar=C.attr({rx:s.barRadius,ry:s.barRadius,x:E,y:S,width:k,height:T}),this._hbarXMin=E+k/2,this._hbarTranslateMax=w-k):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var L=v>A,O=s.barWidth+2*s.barPad,z=s.barLength+2*s.barPad,D=d+m,P=g;D+O>l&&(D=l-O);var I=this.container.selectAll("rect.scrollbar-vertical").data(L?[0]:[]);I.exit().on(".drag",null).remove(),I.enter().append("rect").classed("scrollbar-vertical",!0).call(i.fill,s.barColor),L?(this.vbar=I.attr({rx:s.barRadius,ry:s.barRadius,x:D,y:P,width:O,height:z}),this._vbarYMin=P+z/2,this._vbarTranslateMax=A-z):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var N=this.id,R=c-.5,F=L?f+O+.5:f+.5,B=h-.5,j=M?p+T+.5:p+.5,V=o._topdefs.selectAll("#"+N).data(M||L?[0]:[]);if(V.exit().remove(),V.enter().append("clipPath").attr("id",N).append("rect"),M||L?(this._clipRect=V.select("rect").attr({x:Math.floor(R),y:Math.floor(B),width:Math.ceil(F)-Math.floor(R),height:Math.ceil(j)-Math.floor(B)}),this.container.call(a.setClipUrl,N,this.gd),this.bg.attr({x:d,y:g,width:m,height:v})):(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(a.setClipUrl,null),delete this._clipRect),M||L){var U=n.behavior.drag().on("dragstart",function(){n.event.sourceEvent.preventDefault()}).on("drag",this._onBoxDrag.bind(this));this.container.on("wheel",null).on("wheel",this._onBoxWheel.bind(this)).on(".drag",null).call(U);var q=n.behavior.drag().on("dragstart",function(){n.event.sourceEvent.preventDefault(),n.event.sourceEvent.stopPropagation()}).on("drag",this._onBarDrag.bind(this));M&&this.hbar.on(".drag",null).call(q),L&&this.vbar.on(".drag",null).call(q)}this.setTranslate(e,r)},s.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(a.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(".drag",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(".drag",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t-=n.event.dx),this.vbar&&(e-=n.event.dy),this.setTranslate(t,e)},s.prototype._onBoxWheel=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t+=n.event.deltaY),this.vbar&&(e+=n.event.deltaY),this.setTranslate(t,e)},s.prototype._onBarDrag=function(){var t=this.translateX,e=this.translateY;if(this.hbar){var r=t+this._hbarXMin,i=r+this._hbarTranslateMax;t=(o.constrain(n.event.x,r,i)-r)/(i-r)*(this.position.w-this._box.w)}if(this.vbar){var a=e+this._vbarYMin,s=a+this._vbarTranslateMax;e=(o.constrain(n.event.y,a,s)-a)/(s-a)*(this.position.h-this._box.h)}this.setTranslate(t,e)},s.prototype.setTranslate=function(t,e){var r=this.position.w-this._box.w,n=this.position.h-this._box.h;if(t=o.constrain(t||0,0,r),e=o.constrain(e||0,0,n),this.translateX=t,this.translateY=e,this.container.call(a.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar){var i=t/r;this.hbar.call(a.setTranslate,t+i*this._hbarTranslateMax,e)}if(this.vbar){var s=e/n;this.vbar.call(a.setTranslate,t,e+s*this._vbarTranslateMax)}}},{"../../lib":836,"../color":713,"../drawing":734,d3:108}],808:[function(t,e,r){"use strict";e.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:"right",right:"left",top:"bottom",bottom:"top"}}},{}],809:[function(t,e,r){"use strict";e.exports={COMPARISON_OPS:["=","!=","<",">=",">","<="],COMPARISON_OPS2:["=","<",">=",">","<="],INTERVAL_OPS:["[]","()","[)","(]","][",")(","](",")["],SET_OPS:["{}","}{"],CONSTRAINT_REDUCTION:{"=":"=","<":"<","<=":"<",">":">",">=":">","[]":"[]","()":"[]","[)":"[]","(]":"[]","][":"][",")(":"][","](":"][",")[":"]["}}},{}],810:[function(t,e,r){"use strict";e.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},{}],811:[function(t,e,r){"use strict";e.exports={circle:"\u25cf","circle-open":"\u25cb",square:"\u25a0","square-open":"\u25a1",diamond:"\u25c6","diamond-open":"\u25c7",cross:"+",x:"\u274c"}},{}],812:[function(t,e,r){"use strict";e.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DBLCLICKDELAY:300,DESELECTDIM:.2}},{}],813:[function(t,e,r){"use strict";e.exports={BADNUM:void 0,FP_SAFE:Number.MAX_VALUE/1e4,ONEAVGYEAR:315576e5,ONEAVGMONTH:26298e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,EPOCHJD:2440587.5,ALMOST_EQUAL:1-1e-6,LOG_CLIP:10,MINUS_SIGN:"\u2212"}},{}],814:[function(t,e,r){"use strict";r.xmlns="http://www.w3.org/2000/xmlns/",r.svg="http://www.w3.org/2000/svg",r.xlink="http://www.w3.org/1999/xlink",r.svgAttrs={xmlns:r.svg,"xmlns:xlink":r.xlink}},{}],815:[function(t,e,r){"use strict";r.version="1.45.1",t("es6-promise").polyfill(),t("../build/plotcss"),t("./fonts/mathjax_config")();for(var n=t("./registry"),i=r.register=n.register,a=t("./plot_api"),o=Object.keys(a),s=0;s1/3&&t.x<2/3},r.isRightAnchor=function(t){return"right"===t.xanchor||"auto"===t.xanchor&&t.x>=2/3},r.isTopAnchor=function(t){return"top"===t.yanchor||"auto"===t.yanchor&&t.y>=2/3},r.isMiddleAnchor=function(t){return"middle"===t.yanchor||"auto"===t.yanchor&&t.y>1/3&&t.y<2/3},r.isBottomAnchor=function(t){return"bottom"===t.yanchor||"auto"===t.yanchor&&t.y<=1/3}},{}],818:[function(t,e,r){"use strict";var n=t("./mod"),i=n.mod,a=n.modHalf,o=Math.PI,s=2*o;function l(t){return Math.abs(t[1]-t[0])>s-1e-15}function u(t,e){return a(e-t,s)}function c(t,e){if(l(e))return!0;var r,n;e[0](n=i(n,s))&&(n+=s);var a=i(t,s),o=a+s;return a>=r&&a<=n||o>=r&&o<=n}function f(t,e,r,n,i,a,u){i=i||0,a=a||0;var c,f,h,p,d,m=l([r,n]);function g(t,e){return[t*Math.cos(e)+i,a-t*Math.sin(e)]}m?(c=0,f=o,h=s):r=i&&t<=a);var i,a},pathArc:function(t,e,r,n,i){return f(null,t,e,r,n,i,0)},pathSector:function(t,e,r,n,i){return f(null,t,e,r,n,i,1)},pathAnnulus:function(t,e,r,n,i,a){return f(t,e,r,n,i,a,1)}}},{"./mod":843}],819:[function(t,e,r){"use strict";var n=Array.isArray,i="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer:{isView:function(){return!1}},a="undefined"==typeof DataView?function(){}:DataView;function o(t){return i.isView(t)&&!(t instanceof a)}function s(t){return n(t)||o(t)}function l(t,e,r){if(s(t)){if(s(t[0])){for(var n=r,i=0;ii.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,i){t%1||!n(t)||void 0!==i.min&&ti.max?e.set(r):e.set(+t)}},string:{coerceFunction:function(t,e,r,n){if("string"!=typeof t){var i="number"==typeof t;!0!==n.strict&&i?e.set(String(t)):e.set(r)}else n.noBlank&&!t?e.set(r):e.set(t)}},color:{coerceFunction:function(t,e,r){i(t).isValid()?e.set(t):e.set(r)}},colorlist:{coerceFunction:function(t,e,r){Array.isArray(t)&&t.length&&t.every(function(t){return i(t).isValid()})?e.set(t):e.set(r)}},colorscale:{coerceFunction:function(t,e,r){e.set(o.get(t,r))}},angle:{coerceFunction:function(t,e,r){"auto"===t?e.set("auto"):n(t)?e.set(c(+t,360)):e.set(r)}},subplotid:{coerceFunction:function(t,e,r,n){var i=n.regex||u(r);"string"==typeof t&&i.test(t)?e.set(t):e.set(r)},validateFunction:function(t,e){var r=e.dflt;return t===r||"string"==typeof t&&!!u(r).test(t)}},flaglist:{coerceFunction:function(t,e,r,n){if("string"==typeof t)if(-1===(n.extras||[]).indexOf(t)){for(var i=t.split("+"),a=0;a=n&&t<=i?t:c}if("string"!=typeof t&&"number"!=typeof t)return c;t=String(t);var u=_(e),v=t.charAt(0);!u||"G"!==v&&"g"!==v||(t=t.substr(1),e="");var w=u&&"chinese"===e.substr(0,7),A=t.match(w?x:y);if(!A)return c;var M=A[1],k=A[3]||"1",T=Number(A[5]||1),E=Number(A[7]||0),S=Number(A[9]||0),C=Number(A[11]||0);if(u){if(2===M.length)return c;var L;M=Number(M);try{var O=g.getComponentMethod("calendars","getCal")(e);if(w){var z="i"===k.charAt(k.length-1);k=parseInt(k,10),L=O.newDate(M,O.toMonthIndex(M,k,z),T)}else L=O.newDate(M,Number(k),T)}catch(t){return c}return L?(L.toJD()-m)*f+E*h+S*p+C*d:c}M=2===M.length?(Number(M)+2e3-b)%100+b:Number(M),k-=1;var D=new Date(Date.UTC(2e3,k,T,E,S));return D.setUTCFullYear(M),D.getUTCMonth()!==k?c:D.getUTCDate()!==T?c:D.getTime()+C*d},n=r.MIN_MS=r.dateTime2ms("-9999"),i=r.MAX_MS=r.dateTime2ms("9999-12-31 23:59:59.9999"),r.isDateTime=function(t,e){return r.dateTime2ms(t,e)!==c};var A=90*f,M=3*h,k=5*p;function T(t,e,r,n,i){if((e||r||n||i)&&(t+=" "+w(e,2)+":"+w(r,2),(n||i)&&(t+=":"+w(n,2),i))){for(var a=4;i%10==0;)a-=1,i/=10;t+="."+w(i,a)}return t}r.ms2DateTime=function(t,e,r){if("number"!=typeof t||!(t>=n&&t<=i))return c;e||(e=0);var a,o,s,u,y,x,b=Math.floor(10*l(t+.05,1)),w=Math.round(t-b/10);if(_(r)){var E=Math.floor(w/f)+m,S=Math.floor(l(t,f));try{a=g.getComponentMethod("calendars","getCal")(r).fromJD(E).formatDate("yyyy-mm-dd")}catch(t){a=v("G%Y-%m-%d")(new Date(w))}if("-"===a.charAt(0))for(;a.length<11;)a="-0"+a.substr(1);else for(;a.length<10;)a="0"+a;o=e=n+f&&t<=i-f))return c;var e=Math.floor(10*l(t+.05,1)),r=new Date(Math.round(t-e/10));return T(a.time.format("%Y-%m-%d")(r),r.getHours(),r.getMinutes(),r.getSeconds(),10*r.getUTCMilliseconds()+e)},r.cleanDate=function(t,e,n){if(t===c)return e;if(r.isJSDate(t)||"number"==typeof t&&isFinite(t)){if(_(n))return s.error("JS Dates and milliseconds are incompatible with world calendars",t),e;if(!(t=r.ms2DateTimeLocal(+t))&&void 0!==e)return e}else if(!r.isDateTime(t,n))return s.error("unrecognized date",t),e;return t};var E=/%\d?f/g;function S(t,e,r,n){t=t.replace(E,function(t){var r=Math.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(r).substr(2).replace(/0+$/,"")||"0"});var i=new Date(Math.floor(e+.05));if(_(n))try{t=g.getComponentMethod("calendars","worldCalFmt")(t,e,n)}catch(t){return"Invalid"}return r(t)(i)}var C=[59,59.9,59.99,59.999,59.9999];r.formatDate=function(t,e,r,n,i,a){if(i=_(i)&&i,!e)if("y"===r)e=a.year;else if("m"===r)e=a.month;else{if("d"!==r)return function(t,e){var r=l(t+.05,f),n=w(Math.floor(r/h),2)+":"+w(l(Math.floor(r/p),60),2);if("M"!==e){o(e)||(e=0);var i=(100+Math.min(l(t/d,60),C[e])).toFixed(e).substr(1);e>0&&(i=i.replace(/0+$/,"").replace(/[\.]$/,"")),n+=":"+i}return n}(t,r)+"\n"+S(a.dayMonthYear,t,n,i);e=a.dayMonth+"\n"+a.year}return S(e,t,n,i)};var L=3*f;r.incrementMonth=function(t,e,r){r=_(r)&&r;var n=l(t,f);if(t=Math.round(t-n),r)try{var i=Math.round(t/f)+m,a=g.getComponentMethod("calendars","getCal")(r),o=a.fromJD(i);return e%12?a.add(o,e,"m"):a.add(o,e/12,"y"),(o.toJD()-m)*f+n}catch(e){s.error("invalid ms "+t+" in calendar "+r)}var u=new Date(t+L);return u.setUTCMonth(u.getUTCMonth()+e)+n-L},r.findExactDates=function(t,e){for(var r,n,i=0,a=0,s=0,l=0,u=_(e)&&g.getComponentMethod("calendars","getCal")(e),c=0;c0&&(r.push(i),i=[])}return i.length>0&&r.push(i),r},r.makeLine=function(t){return 1===t.length?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}},r.makePolygon=function(t){if(1===t.length)return{type:"Polygon",coordinates:t};for(var e=new Array(t.length),r=0;r1||m<0||m>1?null:{x:t+l*m,y:e+f*m}}function l(t,e,r,n,i){var a=n*t+i*e;if(a<0)return n*n+i*i;if(a>r){var o=n-t,s=i-e;return o*o+s*s}var l=n*e-i*t;return l*l/r}r.segmentsIntersect=s,r.segmentDistance=function(t,e,r,n,i,a,o,u){if(s(t,e,r,n,i,a,o,u))return 0;var c=r-t,f=n-e,h=o-i,p=u-a,d=c*c+f*f,m=h*h+p*p,g=Math.min(l(c,f,d,i-t,a-e),l(c,f,d,o-t,u-e),l(h,p,m,t-i,e-a),l(h,p,m,r-i,n-a));return Math.sqrt(g)},r.getTextLocation=function(t,e,r,s){if(t===i&&s===a||(n={},i=t,a=s),n[r])return n[r];var l=t.getPointAtLength(o(r-s/2,e)),u=t.getPointAtLength(o(r+s/2,e)),c=Math.atan((u.y-l.y)/(u.x-l.x)),f=t.getPointAtLength(o(r,e)),h={x:(4*f.x+l.x+u.x)/6,y:(4*f.y+l.y+u.y)/6,theta:c};return n[r]=h,h},r.clearLocationCache=function(){i=null},r.getVisibleSegment=function(t,e,r){var n,i,a=e.left,o=e.right,s=e.top,l=e.bottom,u=0,c=t.getTotalLength(),f=c;function h(e){var r=t.getPointAtLength(e);0===e?n=r:e===c&&(i=r);var u=r.xo?r.x-o:0,f=r.yl?r.y-l:0;return Math.sqrt(u*u+f*f)}for(var p=h(u);p;){if((u+=p+r)>f)return;p=h(u)}for(p=h(f);p;){if(u>(f-=p+r))return;p=h(f)}return{min:u,max:f,len:f-u,total:c,isClosed:0===u&&f===c&&Math.abs(n.x-i.x)<.1&&Math.abs(n.y-i.y)<.1}},r.findPointOnPath=function(t,e,r,n){for(var i,a,o,s=(n=n||{}).pathLength||t.getTotalLength(),l=n.tolerance||.001,u=n.iterationLimit||30,c=t.getPointAtLength(0)[r]>t.getPointAtLength(s)[r]?-1:1,f=0,h=0,p=s;f0?p=i:h=i,f++}return a}},{"./mod":843}],832:[function(t,e,r){"use strict";e.exports=function(t){var e;if("string"==typeof t){if(null===(e=document.getElementById(t)))throw new Error("No DOM element with id '"+t+"' exists on the page.");return e}if(null==t)throw new Error("DOM element provided is null or undefined");return t}},{}],833:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("tinycolor2"),a=t("color-normalize"),o=t("../components/colorscale"),s=t("../components/color/attributes").defaultLine,l=t("./array").isArrayOrTypedArray,u=a(s),c=1;function f(t,e){var r=t;return r[3]*=e,r}function h(t){if(n(t))return u;var e=a(t);return e.length?e:u}function p(t){return n(t)?t:c}e.exports={formatColor:function(t,e,r){var n,i,s,d,m,g=t.color,v=l(g),y=l(e),x=[];if(n=void 0!==t.colorscale?o.makeColorScaleFunc(o.extractScale(t,{cLetter:"c"})):h,i=v?function(t,e){return void 0===t[e]?u:a(n(t[e]))}:h,s=y?function(t,e){return void 0===t[e]?c:p(t[e])}:p,v||y)for(var b=0;bo?s:i(t)?Number(t):s:s},l.isIndex=function(t,e){return!(void 0!==e&&t>=e)&&(i(t)&&t>=0&&t%1==0)},l.noop=t("./noop"),l.identity=t("./identity"),l.repeat=function(t,e){for(var r=new Array(e),n=0;nr?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},l.bBoxIntersect=function(t,e,r){return r=r||0,t.left<=e.right+r&&e.left<=t.right+r&&t.top<=e.bottom+r&&e.top<=t.bottom+r},l.simpleMap=function(t,e,r,n){for(var i=t.length,a=new Array(i),o=0;o=Math.pow(2,r)?i>10?(l.warn("randstr failed uniqueness"),u):t(e,r,n,(i||0)+1):u},l.OptionControl=function(t,e){t||(t={}),e||(e="opt");var r={optionList:[],_newoption:function(n){n[e]=t,r[n.name]=n,r.optionList.push(n)}};return r["_"+e]=t,r},l.smooth=function(t,e){if((e=Math.round(e)||0)<2)return t;var r,n,i,a,o=t.length,s=2*o,l=2*e-1,u=new Array(l),c=new Array(o);for(r=0;r=s&&(i-=s*Math.floor(i/s)),i<0?i=-1-i:i>=o&&(i=s-1-i),a+=t[i]*u[n];c[r]=a}return c},l.syncOrAsync=function(t,e,r){var n;function i(){return l.syncOrAsync(t,e,r)}for(;t.length;)if((n=(0,t.splice(0,1)[0])(e))&&n.then)return n.then(i).then(void 0,l.promiseError);return r&&r(e)},l.stripTrailingSlash=function(t){return"/"===t.substr(-1)?t.substr(0,t.length-1):t},l.noneOrAll=function(t,e,r){if(t){var n,i=!1,a=!0;for(n=0;n1?i+o[1]:"";if(a&&(o.length>1||s.length>4||r))for(;n.test(s);)s=s.replace(n,"$1"+a+"$2");return s+l},l.TEMPLATE_STRING_REGEX=/%{([^\s%{}:]*)(:[^}]*)?}/g;var T=/^\w*$/;l.templateString=function(t,e){var r={};return t.replace(l.TEMPLATE_STRING_REGEX,function(t,n){return T.test(n)?e[n]||"":(r[n]=r[n]||l.nestedProperty(e,n).get,r[n]()||"")})};var E=/^:/,S=0;l.hovertemplateString=function(t,e,r){var i=arguments,a={};return t.replace(l.TEMPLATE_STRING_REGEX,function(t,o,s){var u,c,f;for(f=3;f=48&&o<=57,u=s>=48&&s<=57;if(l&&(n=10*n+o-48),u&&(i=10*i+s-48),!l||!u){if(n!==i)return n-i;if(o!==s)return o-s}}return i-n};var C=2e9;l.seedPseudoRandom=function(){C=2e9},l.pseudoRandom=function(){var t=C;return C=(69069*C+1)%4294967296,Math.abs(C-t)<429496729?l.pseudoRandom():C/4294967296}},{"../constants/numerical":813,"./anchor_utils":817,"./angles":818,"./array":819,"./clean_number":820,"./clear_responsive":822,"./coerce":823,"./dates":824,"./extend":826,"./filter_unique":827,"./filter_visible":828,"./geometry2d":831,"./get_graph_div":832,"./identity":835,"./is_plain_object":837,"./keyed_container":838,"./localize":839,"./loggers":840,"./make_trace_groups":841,"./matrix":842,"./mod":843,"./nested_property":844,"./noop":845,"./notifier":846,"./push_unique":850,"./regex":852,"./relative_attr":853,"./relink_private":854,"./search":855,"./stats":858,"./throttle":861,"./to_log_range":862,d3:108,"fast-isnumeric":693}],837:[function(t,e,r){"use strict";e.exports=function(t){return window&&window.process&&window.process.versions?"[object Object]"===Object.prototype.toString.call(t):"[object Object]"===Object.prototype.toString.call(t)&&Object.getPrototypeOf(t)===Object.prototype}},{}],838:[function(t,e,r){"use strict";var n=t("./nested_property"),i=/^\w*$/;e.exports=function(t,e,r,a){var o,s,l;r=r||"name",a=a||"value";var u={};e&&e.length?(l=n(t,e),s=l.get()):s=t,e=e||"";var c={};if(s)for(o=0;o2)return u[e]=2|u[e],h.set(t,null);if(f){for(o=e;o1){for(var t=["LOG:"],e=0;e0){for(var t=["WARN:"],e=0;e0){for(var t=["ERROR:"],e=0;ee/2?t-Math.round(t/e)*e:t}}},{}],844:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("./array").isArrayOrTypedArray;e.exports=function(t,e){if(n(e))e=String(e);else if("string"!=typeof e||"[-1]"===e.substr(e.length-4))throw"bad property string";for(var r,a,o,l=0,u=e.split(".");l/g),o=0;oa||u===i||us||e&&l(t))}:function(t,e){var l=t[0],u=t[1];if(l===i||la||u===i||us)return!1;var c,f,h,p,d,m=r.length,g=r[0][0],v=r[0][1],y=0;for(c=1;cMath.max(f,g)||u>Math.max(h,v)))if(uc||Math.abs(n(o,h))>i)return!0;return!1};a.filter=function(t,e){var r=[t[0]],n=0,i=0;function a(a){t.push(a);var s=r.length,l=n;r.splice(i+1);for(var u=l+1;u1&&a(t.pop());return{addPt:a,raw:t,filtered:r}}},{"../constants/numerical":813,"./matrix":842}],849:[function(t,e,r){(function(r){"use strict";var n=t("./show_no_webgl_msg"),i=t("regl");e.exports=function(t,e){var a=t._fullLayout,o=!0;return a._glcanvas.each(function(n){if(!n.regl&&(!n.pick||a._has("parcoords"))){try{n.regl=i({canvas:this,attributes:{antialias:!n.pick,preserveDrawingBuffer:!0},pixelRatio:t._context.plotGlPixelRatio||r.devicePixelRatio,extensions:e||[]})}catch(t){o=!1}o&&this.addEventListener("webglcontextlost",function(e){t&&t.emit&&t.emit("plotly_webglcontextlost",{event:e,layer:n.key})},!1)}}),o||n({container:a._glcontainer.node()}),o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./show_no_webgl_msg":857,regl:1342}],850:[function(t,e,r){"use strict";e.exports=function(t,e){if(e instanceof RegExp){for(var r=e.toString(),n=0;ni.queueLength&&(t.undoQueue.queue.shift(),t.undoQueue.index--))},startSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!0,t.undoQueue.beginSequence=!0},stopSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!1,t.undoQueue.beginSequence=!1},undo:function(t){var e,r;if(t.framework&&t.framework.isPolar)t.framework.undo();else if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r=t.undoQueue.queue.length)){for(e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;re}function u(t,e){return t>=e}r.findBin=function(t,e,r){if(n(e.start))return r?Math.ceil((t-e.start)/e.size-1e-9)-1:Math.floor((t-e.start)/e.size+1e-9);var a,c,f=0,h=e.length,p=0,d=h>1?(e[h-1]-e[0])/(h-1):1;for(c=d>=0?r?o:s:r?u:l,t+=1e-9*d*(r?-1:1)*(d>=0?1:-1);f90&&i.log("Long binary search..."),f-1},r.sorterAsc=function(t,e){return t-e},r.sorterDes=function(t,e){return e-t},r.distinctVals=function(t){var e=t.slice();e.sort(r.sorterAsc);for(var n=e.length-1,i=e[n]-e[0]||1,a=i/(n||1)/1e4,o=[e[0]],s=0;se[s]+a&&(i=Math.min(i,e[s+1]-e[s]),o.push(e[s+1]));return{vals:o,minDiff:i}},r.roundUp=function(t,e,r){for(var n,i=0,a=e.length-1,o=0,s=r?0:1,l=r?1:0,u=r?Math.ceil:Math.floor;i0&&(n=1),r&&n)return t.sort(e)}return n?t:t.reverse()},r.findIndexOfMin=function(t,e){e=e||a;for(var r,n=1/0,i=0;ia.length)&&(o=a.length),n(e)||(e=!1),i(a[0])){for(l=new Array(o),s=0;st.length-1)return t[t.length-1];var r=e%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},{"./array":819,"fast-isnumeric":693}],859:[function(t,e,r){"use strict";var n=t("color-normalize");e.exports=function(t){return t?n(t):[0,0,0,1]}},{"color-normalize":60}],860:[function(t,e,r){"use strict";var n=t("d3"),i=t("../lib"),a=t("../constants/xmlns_namespaces"),o=t("../constants/alignment").LINE_SPACING;function s(t,e){return t.node().getBoundingClientRect()[e]}var l=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;r.convertToTspans=function(t,e,T){var E=t.text(),C=!t.attr("data-notex")&&"undefined"!=typeof MathJax&&E.match(l),L=n.select(t.node().parentNode);if(!L.empty()){var O=t.attr("class")?t.attr("class").split(" ")[0]:"text";return O+="-math",L.selectAll("svg."+O).remove(),L.selectAll("g."+O+"-group").remove(),t.style("display",null).attr({"data-unformatted":E,"data-math":"N"}),C?(e&&e._promises||[]).push(new Promise(function(e){t.style("display","none");var r=parseInt(t.node().style.fontSize,10),a={fontSize:r};!function(t,e,r){var a,o,s,l;MathJax.Hub.Queue(function(){return o=i.extendDeepAll({},MathJax.Hub.config),s=MathJax.Hub.processSectionDelay,void 0!==MathJax.Hub.processSectionDelay&&(MathJax.Hub.processSectionDelay=0),MathJax.Hub.Config({messageStyle:"none",tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]]},displayAlign:"left"})},function(){if("SVG"!==(a=MathJax.Hub.config.menuSettings.renderer))return MathJax.Hub.setRenderer("SVG")},function(){var r="math-output-"+i.randstr({},64);return l=n.select("body").append("div").attr({id:r}).style({visibility:"hidden",position:"absolute"}).style({"font-size":e.fontSize+"px"}).text(t.replace(u,"\\lt ").replace(c,"\\gt ")),MathJax.Hub.Typeset(l.node())},function(){var e=n.select("body").select("#MathJax_SVG_glyphs");if(l.select(".MathJax_SVG").empty()||!l.select("svg").node())i.log("There was an error in the tex syntax.",t),r();else{var o=l.select("svg").node().getBoundingClientRect();r(l.select(".MathJax_SVG"),e,o)}if(l.remove(),"SVG"!==a)return MathJax.Hub.setRenderer(a)},function(){return void 0!==s&&(MathJax.Hub.processSectionDelay=s),MathJax.Hub.Config(o)})}(C[2],a,function(n,i,a){L.selectAll("svg."+O).remove(),L.selectAll("g."+O+"-group").remove();var o=n&&n.select("svg");if(!o||!o.node())return z(),void e();var l=L.append("g").classed(O+"-group",!0).attr({"pointer-events":"none","data-unformatted":E,"data-math":"Y"});l.node().appendChild(o.node()),i&&i.node()&&o.node().insertBefore(i.node().cloneNode(!0),o.node().firstChild),o.attr({class:O,height:a.height,preserveAspectRatio:"xMinYMin meet"}).style({overflow:"visible","pointer-events":"none"});var u=t.node().style.fill||"black";o.select("g").attr({fill:u,stroke:u});var c=s(o,"width"),f=s(o,"height"),h=+t.attr("x")-c*{start:0,middle:.5,end:1}[t.attr("text-anchor")||"start"],p=-(r||s(t,"height"))/4;"y"===O[0]?(l.attr({transform:"rotate("+[-90,+t.attr("x"),+t.attr("y")]+") translate("+[-c/2,p-f/2]+")"}),o.attr({x:+t.attr("x"),y:+t.attr("y")})):"l"===O[0]?o.attr({x:t.attr("x"),y:p-f/2}):"a"===O[0]&&0!==O.indexOf("atitle")?o.attr({x:0,y:p}):o.attr({x:h,y:+t.attr("y")+p-f/2}),T&&T.call(t,l),e(l)})})):z(),t}function z(){L.empty()||(O=t.attr("class")+"-math",L.select("svg."+O).remove()),t.text("").style("white-space","pre"),function(t,e){e=e.replace(g," ");var r,s=!1,l=[],u=-1;function c(){u++;var e=document.createElementNS(a.svg,"tspan");n.select(e).attr({class:"line",dy:u*o+"em"}),t.appendChild(e),r=e;var i=l;if(l=[{node:e}],i.length>1)for(var s=1;s doesnt match end tag <"+t+">. Pretending it did match.",e),r=l[l.length-1].node}else i.log("Ignoring unexpected end tag .",e)}x.test(e)?c():(r=t,l=[{node:t}]);for(var L=e.split(v),O=0;O|>|>)/g;var f={sup:"font-size:70%",sub:"font-size:70%",b:"font-weight:bold",i:"font-style:italic",a:"cursor:pointer",span:"",em:"font-style:italic;font-weight:bold"},h={sub:"0.3em",sup:"-0.6em"},p={sub:"-0.21em",sup:"0.42em"},d="\u200b",m=["http:","https:","mailto:","",void 0,":"],g=/(\r\n?|\n)/g,v=/(<[^<>]*>)/,y=/<(\/?)([^ >]*)(\s+(.*))?>/i,x=//i,b=/(^|[\s"'])style\s*=\s*("([^"]*);?"|'([^']*);?')/i,_=/(^|[\s"'])href\s*=\s*("([^"]*)"|'([^']*)')/i,w=/(^|[\s"'])target\s*=\s*("([^"\s]*)"|'([^'\s]*)')/i,A=/(^|[\s"'])popup\s*=\s*("([\w=,]*)"|'([\w=,]*)')/i;function M(t,e){if(!t)return null;var r=t.match(e),n=r&&(r[3]||r[4]);return n&&S(n)}var k=/(^|;)\s*color:/;r.plainText=function(t,e){for(var r=void 0!==(e=e||{}).len&&-1!==e.len?e.len:1/0,n=void 0!==e.allowedTags?e.allowedTags:["br"],i="...".length,a=t.split(v),o=[],s="",l=0,u=0;ui?o.push(c.substr(0,d-i)+"..."):o.push(c.substr(0,d));break}s=""}}return o.join("")};var T={mu:"\u03bc",amp:"&",lt:"<",gt:">",nbsp:"\xa0",times:"\xd7",plusmn:"\xb1",deg:"\xb0"},E=/&(#\d+|#x[\da-fA-F]+|[a-z]+);/g;function S(t){return t.replace(E,function(t,e){return("#"===e.charAt(0)?function(t){if(t>1114111)return;var e=String.fromCodePoint;if(e)return e(t);var r=String.fromCharCode;return t<=65535?r(t):r(55232+(t>>10),t%1024+56320)}("x"===e.charAt(1)?parseInt(e.substr(2),16):parseInt(e.substr(1),10)):T[e])||t})}function C(t,e,r){var n,i,a,o=r.horizontalAlign,s=r.verticalAlign||"top",l=t.node().getBoundingClientRect(),u=e.node().getBoundingClientRect();return i="bottom"===s?function(){return l.bottom-n.height}:"middle"===s?function(){return l.top+(l.height-n.height)/2}:function(){return l.top},a="right"===o?function(){return l.right-n.width}:"center"===o?function(){return l.left+(l.width-n.width)/2}:function(){return l.left},function(){return n=this.node().getBoundingClientRect(),this.style({top:i()-u.top+"px",left:a()-u.left+"px","z-index":1e3}),this}}r.convertEntities=S,r.lineCount=function(t){return t.selectAll("tspan.line").size()||1},r.positionText=function(t,e,r){return t.each(function(){var t=n.select(this);function i(e,r){return void 0===r?null===(r=t.attr(e))&&(t.attr(e,0),r=0):t.attr(e,r),r}var a=i("x",e),o=i("y",r);"text"===this.nodeName&&t.selectAll("tspan.line").attr({x:a,y:o})})},r.makeEditable=function(t,e){var r=e.gd,i=e.delegate,a=n.dispatch("edit","input","cancel"),o=i||t;if(t.style({"pointer-events":i?"none":"all"}),1!==t.size())throw new Error("boo");function s(){!function(){var i=n.select(r).select(".svg-container"),o=i.append("div"),s=t.node().style,u=parseFloat(s.fontSize||12),c=e.text;void 0===c&&(c=t.attr("data-unformatted"));o.classed("plugin-editable editable",!0).style({position:"absolute","font-family":s.fontFamily||"Arial","font-size":u,color:e.fill||s.fill||"black",opacity:1,"background-color":e.background||"transparent",outline:"#ffffff33 1px solid",margin:[-u/8+1,0,0,-1].join("px ")+"px",padding:"0","box-sizing":"border-box"}).attr({contenteditable:!0}).text(c).call(C(t,i,e)).on("blur",function(){r._editing=!1,t.text(this.textContent).style({opacity:1});var e,i=n.select(this).attr("class");(e=i?"."+i.split(" ")[0]+"-math-group":"[class*=-math-group]")&&n.select(t.node().parentNode).select(e).style({opacity:0});var o=this.textContent;n.select(this).transition().duration(0).remove(),n.select(document).on("mouseup",null),a.edit.call(t,o)}).on("focus",function(){var t=this;r._editing=!0,n.select(document).on("mouseup",function(){if(n.event.target===t)return!1;document.activeElement===o.node()&&o.node().blur()})}).on("keyup",function(){27===n.event.which?(r._editing=!1,t.style({opacity:1}),n.select(this).style({opacity:0}).on("blur",function(){return!1}).transition().remove(),a.cancel.call(t,this.textContent)):(a.input.call(t,this.textContent),n.select(this).call(C(t,i,e)))}).on("keydown",function(){13===n.event.which&&this.blur()}).call(l)}(),t.style({opacity:0});var i,s=o.attr("class");(i=s?"."+s.split(" ")[0]+"-math-group":"[class*=-math-group]")&&n.select(t.node().parentNode).select(i).style({opacity:0})}function l(t){var e=t.node(),r=document.createRange();r.selectNodeContents(e);var n=window.getSelection();n.removeAllRanges(),n.addRange(r),e.focus()}return e.immediate?s():o.on("click",s),n.rebind(t,a,"on")}},{"../constants/alignment":808,"../constants/xmlns_namespaces":814,"../lib":836,d3:108}],861:[function(t,e,r){"use strict";var n={};function i(t){t&&null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}r.throttle=function(t,e,r){var a=n[t],o=Date.now();if(!a){for(var s in n)n[s].tsa.ts+e?l():a.timer=setTimeout(function(){l(),a.timer=null},e)},r.done=function(t){var e=n[t];return e&&e.timer?new Promise(function(t){var r=e.onDone;e.onDone=function(){r&&r(),t(),e.onDone=null}}):Promise.resolve()},r.clear=function(t){if(t)i(n[t]),delete n[t];else for(var e in n)r.clear(e)}},{}],862:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports=function(t,e){if(t>0)return Math.log(t)/Math.LN10;var r=Math.log(Math.min(e[0],e[1]))/Math.LN10;return n(r)||(r=Math.log(Math.max(e[0],e[1]))/Math.LN10-6),r}},{"fast-isnumeric":693}],863:[function(t,e,r){"use strict";var n=e.exports={},i=t("../plots/geo/constants").locationmodeToLayer,a=t("topojson-client").feature;n.getTopojsonName=function(t){return[t.scope.replace(/ /g,"-"),"_",t.resolution.toString(),"m"].join("")},n.getTopojsonPath=function(t,e){return t+e+".json"},n.getTopojsonFeatures=function(t,e){var r=i[t.locationmode],n=e.objects[r];return a(e,n).features}},{"../plots/geo/constants":912,"topojson-client":1379}],864:[function(t,e,r){"use strict";e.exports={moduleType:"locale",name:"en-US",dictionary:{"Click to enter Colorscale title":"Click to enter Colorscale title"},format:{date:"%m/%d/%Y"}}},{}],865:[function(t,e,r){"use strict";e.exports={moduleType:"locale",name:"en",dictionary:{"Click to enter Colorscale title":"Click to enter Colourscale title"},format:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],periods:["AM","PM"],dateTime:"%a %b %e %X %Y",date:"%d/%m/%Y",time:"%H:%M:%S",decimal:".",thousands:",",grouping:[3],currency:["$",""],year:"%Y",month:"%b %Y",dayMonth:"%b %-d",dayMonthYear:"%b %-d, %Y"}}},{}],866:[function(t,e,r){"use strict";var n=t("../registry");e.exports=function(t){for(var e,r,i=n.layoutArrayContainers,a=n.layoutArrayRegexes,o=t.split("[")[0],s=0;s0&&o.log("Clearing previous rejected promises from queue."),t._promises=[]},r.cleanLayout=function(t){var e,n;t||(t={}),t.xaxis1&&(t.xaxis||(t.xaxis=t.xaxis1),delete t.xaxis1),t.yaxis1&&(t.yaxis||(t.yaxis=t.yaxis1),delete t.yaxis1),t.scene1&&(t.scene||(t.scene=t.scene1),delete t.scene1);var a=(s.subplotsRegistry.cartesian||{}).attrRegex,l=(s.subplotsRegistry.polar||{}).attrRegex,c=(s.subplotsRegistry.ternary||{}).attrRegex,d=(s.subplotsRegistry.gl3d||{}).attrRegex,m=Object.keys(t);for(e=0;e3?(O.x=1.02,O.xanchor="left"):O.x<-2&&(O.x=-.02,O.xanchor="right"),O.y>3?(O.y=1.02,O.yanchor="bottom"):O.y<-2&&(O.y=-.02,O.yanchor="top")),p(t),"rotate"===t.dragmode&&(t.dragmode="orbit"),f.clean(t),t.template&&t.template.layout&&r.cleanLayout(t.template.layout),t},r.cleanData=function(t){for(var e=0;e0)return t.substr(0,e)}r.hasParent=function(t,e){for(var r=x(e);r;){if(r in t)return!0;r=x(r)}return!1};var b=["x","y","z"];r.clearAxisTypes=function(t,e,r){for(var n=0;n1&&a.warn("Full array edits are incompatible with other edits",f);var y=r[""][""];if(u(y))e.set(null);else{if(!Array.isArray(y))return a.warn("Unrecognized full array edit value",f,y),!0;e.set(y)}return!m&&(h(g,v),p(t),!0)}var x,b,_,w,A,M,k,T,E=Object.keys(r).map(Number).sort(o),S=e.get(),C=S||[],L=c(v,f).get(),O=[],z=-1,D=C.length;for(x=0;xC.length-(k?0:1))a.warn("index out of range",f,_);else if(void 0!==M)A.length>1&&a.warn("Insertion & removal are incompatible with edits to the same index.",f,_),u(M)?O.push(_):k?("add"===M&&(M={}),C.splice(_,0,M),L&&L.splice(_,0,{})):a.warn("Unrecognized full object edit value",f,_,M),-1===z&&(z=_);else for(b=0;b=0;x--)C.splice(O[x],1),L&&L.splice(O[x],1);if(C.length?S||e.set(C):e.set(null),m)return!1;if(h(g,v),d!==i){var P;if(-1===z)P=E;else{for(D=Math.max(C.length,D),P=[],x=0;x=z);x++)P.push(_);for(x=z;x=t.data.length||i<-t.data.length)throw new Error(r+" must be valid indices for gd.data.");if(e.indexOf(i,n+1)>-1||i>=0&&e.indexOf(-t.data.length+i)>-1||i<0&&e.indexOf(t.data.length+i)>-1)throw new Error("each index in "+r+" must be unique.")}}function I(t,e,r){if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if("undefined"==typeof e)throw new Error("currentIndices is a required argument.");if(Array.isArray(e)||(e=[e]),P(t,e,"currentIndices"),"undefined"==typeof r||Array.isArray(r)||(r=[r]),"undefined"!=typeof r&&P(t,r,"newIndices"),"undefined"!=typeof r&&e.length!==r.length)throw new Error("current and new indices must be of equal length.")}function N(t,e,r,n,a){!function(t,e,r,n){var i=o.isPlainObject(n);if(!Array.isArray(t.data))throw new Error("gd.data must be an array");if(!o.isPlainObject(e))throw new Error("update must be a key:value object");if("undefined"==typeof r)throw new Error("indices must be an integer or array of integers");for(var a in P(t,r,"indices"),e){if(!Array.isArray(e[a])||e[a].length!==r.length)throw new Error("attribute "+a+" must be an array of length equal to indices array length");if(i&&(!(a in n)||!Array.isArray(n[a])||n[a].length!==e[a].length))throw new Error("when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object")}}(t,e,r,n);for(var l=function(t,e,r,n){var a,l,u,c,f,h=o.isPlainObject(n),p=[];for(var d in Array.isArray(r)||(r=[r]),r=D(r,t.data.length-1),e)for(var m=0;m-1?l(r,r.replace("titlefont","title.font")):r.indexOf("titleposition")>-1?l(r,r.replace("titleposition","title.position")):r.indexOf("titleside")>-1?l(r,r.replace("titleside","title.side")):r.indexOf("titleoffset")>-1&&l(r,r.replace("titleoffset","title.offset")):l(r,r.replace("title","title.text"));function l(e,r){t[r]=t[e],delete t[e]}}function H(t,e,r){if(t=o.getGraphDiv(t),M.clearPromiseQueue(t),t.framework&&t.framework.isPolar)return Promise.resolve(t);var n={};if("string"==typeof e)n[e]=r;else{if(!o.isPlainObject(e))return o.warn("Relayout fail.",e,r),Promise.reject();n=o.extendFlat({},e)}Object.keys(n).length&&(t.changed=!0);var i=$(t,n),a=i.flags;a.calc&&(t.calcdata=void 0);var s=[h.previousPromises];a.layoutReplot?s.push(k.layoutReplot):Object.keys(n).length&&(G(t,a,i)||h.supplyDefaults(t),a.legend&&s.push(k.doLegend),a.layoutstyle&&s.push(k.layoutStyles),a.axrange&&W(s,i.rangesAltered),a.ticks&&s.push(k.doTicksRelayout),a.modebar&&s.push(k.doModeBar),a.camera&&s.push(k.doCamera),s.push(C)),s.push(h.rehover),u.add(t,H,[t,i.undoit],H,[t,i.redoit]);var l=o.syncOrAsync(s,t);return l&&l.then||(l=Promise.resolve(t)),l.then(function(){return t.emit("plotly_relayout",i.eventData),t})}function G(t,e,r){var n=t._fullLayout;if(!e.axrange)return!1;for(var i in e)if("axrange"!==i&&e[i])return!1;for(var a in r.rangesAltered){var o=d.id2name(a),s=t.layout[o],l=n[o];if(l.autorange=s.autorange,l.range=s.range.slice(),l.cleanRange(),l._matchGroup)for(var u in l._matchGroup)if(u!==a){var c=n[d.id2name(u)];c.autorange=l.autorange,c.range=l.range.slice(),c._input.range=l.range.slice()}}return!0}function W(t,e){var r=e?function(t){var r=[],n=!0;for(var i in e){var a=d.getFromId(t,i);if(r.push(i),a._matchGroup)for(var o in a._matchGroup)e[o]||r.push(o);a.automargin&&(n=!1)}return d.draw(t,r,{skipTitle:n})}:function(t){return d.draw(t,"redraw")};t.push(function(t){var e=t._fullLayout._zoomlayer;e&&_(e)},k.doAutoRangeAndConstraints,r,k.drawData,k.finalDraw)}r.plot=function(t,e,i,a){var s;if(t=o.getGraphDiv(t),l.init(t),o.isPlainObject(e)){var u=e;e=u.data,i=u.layout,a=u.config,s=u.frames}if(!1===l.triggerHandler(t,"plotly_beforeplot",[e,i,a]))return Promise.reject();e||i||o.isPlotDiv(t)||o.warn("Calling Plotly.plot as if redrawing but this container doesn't yet have a plot.",t),z(t,a),i||(i={}),n.select(t).classed("js-plotly-plot",!0),m.makeTester(),Array.isArray(t._promises)||(t._promises=[]);var f=0===(t.data||[]).length&&Array.isArray(e);if(Array.isArray(e)&&(M.cleanData(e),f?t.data=e:t.data.push.apply(t.data,e),t.empty=!1),t.layout&&!f||(t.layout=M.cleanLayout(i)),t._dragging&&!t._transitioning)return t._replotPending=!0,Promise.reject();t._replotPending=!1,h.supplyDefaults(t);var g=t._fullLayout,x=g._has("cartesian");if(!g._has("polar")&&e&&e[0]&&e[0].r)return o.log("Legacy polar charts are deprecated!"),function(t,e,r){var i=n.select(t).selectAll(".plot-container").data([0]);i.enter().insert("div",":first-child").classed("plot-container plotly",!0);var a=i.selectAll(".svg-container").data([0]);a.enter().append("div").classed("svg-container",!0).style("position","relative"),a.html(""),e&&(t.data=e);r&&(t.layout=r);p.manager.fillLayout(t),a.style({width:t._fullLayout.width+"px",height:t._fullLayout.height+"px"}),t.framework=p.manager.framework(t),t.framework({data:t.data,layout:t.layout},a.node()),t.framework.setUndoPoint();var s=t.framework.svg(),l=1,u=t._fullLayout.title?t._fullLayout.title.text:"";""!==u&&u||(l=0);var c=function(){this.call(b.convertToTspans,t)},f=s.select(".title-group text").call(c);if(t._context.edits.titleText){var d=o._(t,"Click to enter Plot title");u&&u!==d||(l=.2,f.attr({"data-unformatted":d}).text(d).style({opacity:l}).on("mouseover.opacity",function(){n.select(this).transition().duration(100).style("opacity",1)}).on("mouseout.opacity",function(){n.select(this).transition().duration(1e3).style("opacity",0)}));var m=function(){this.call(b.makeEditable,{gd:t}).on("edit",function(e){t.framework({layout:{title:{text:e}}}),this.text(e).call(c),this.call(m)}).on("cancel",function(){var t=this.attr("data-unformatted");this.text(t).call(c)})};f.call(m)}return t._context.setBackground(t,t._fullLayout.paper_bgcolor),h.addLinks(t),Promise.resolve()}(t,e,i);g._replotting=!0,f&<(t),t.framework!==lt&&(t.framework=lt,lt(t)),m.initGradients(t),f&&d.saveShowSpikeInitial(t);var _=!t.calcdata||t.calcdata.length!==(t._fullData||[]).length;_&&h.doCalcdata(t);for(var w=0;w=0&&r=0&&r0&&"string"!=typeof D.parts[I];)I--;var N=D.parts[I],R=D.parts[I-1]+"."+N,F=D.parts.slice(0,I).join("."),V=s(t.layout,F).get(),U=s(l,F).get(),H=D.get();if(void 0!==P){w[z]=P,k[z]="reverse"===N?P:B(H);var G=f.getLayoutValObject(l,D.parts);if(G&&G.impliedEdits&&null!==P)for(var W in G.impliedEdits)S(o.relativeAttr(z,W),G.impliedEdits[W]);if(-1!==["width","height"].indexOf(z))if(P){S("autosize",null);var $="height"===z?"width":"height";S($,l[$])}else l[z]=t._initialAutoSize[z];else if("autosize"===z)S("width",P?null:l.width),S("height",P?null:l.height);else if(R.match(Y))O(R),s(l,F+"._inputRange").set(null);else if(R.match(Z)){O(R),s(l,F+"._inputRange").set(null);var K=s(l,F).get();K._inputDomain&&(K._input.domain=K._inputDomain.slice())}else R.match(X)&&s(l,F+"._inputDomain").set(null);if("type"===N){var Q=V,tt="linear"===U.type&&"log"===P,et="log"===U.type&&"linear"===P;if(tt||et){if(Q&&Q.range)if(U.autorange)tt&&(Q.range=Q.range[1]>Q.range[0]?[1,2]:[2,1]);else{var rt=Q.range[0],nt=Q.range[1];tt?(rt<=0&&nt<=0&&S(F+".autorange",!0),rt<=0?rt=nt/1e6:nt<=0&&(nt=rt/1e6),S(F+".range[0]",Math.log(rt)/Math.LN10),S(F+".range[1]",Math.log(nt)/Math.LN10)):(S(F+".range[0]",Math.pow(10,rt)),S(F+".range[1]",Math.pow(10,nt)))}else S(F+".autorange",!0);Array.isArray(l._subplots.polar)&&l._subplots.polar.length&&l[D.parts[0]]&&"radialaxis"===D.parts[1]&&delete l[D.parts[0]]._subplot.viewInitial["radialaxis.range"],c.getComponentMethod("annotations","convertCoords")(t,U,P,S),c.getComponentMethod("images","convertCoords")(t,U,P,S)}else S(F+".autorange",!0),S(F+".range",null);s(l,F+"._inputRange").set(null)}else if(N.match(E)){var it=s(l,z).get(),at=(P||{}).type;at&&"-"!==at||(at="linear"),c.getComponentMethod("annotations","convertCoords")(t,it,at,S),c.getComponentMethod("images","convertCoords")(t,it,at,S)}var ot=A.containerArrayMatch(z);if(ot){r=ot.array,n=ot.index;var st=ot.property,lt=G||{editType:"calc"};""!==n&&""===st&&(A.isAddVal(P)?k[z]=null:A.isRemoveVal(P)?k[z]=(s(a,r).get()||[])[n]:o.warn("unrecognized full object value",e)),T.update(_,lt),v[r]||(v[r]={});var ut=v[r][n];ut||(ut=v[r][n]={}),ut[st]=P,delete e[z]}else"reverse"===N?(V.range?V.range.reverse():(S(F+".autorange",!0),V.range=[1,0]),U.autorange?_.calc=!0:_.plot=!0):(l._has("scatter-like")&&l._has("regl")&&"dragmode"===z&&("lasso"===P||"select"===P)&&"lasso"!==H&&"select"!==H?_.plot=!0:G?T.update(_,G):_.calc=!0,D.set(P))}}for(r in v){A.applyContainerArrayChanges(t,h(a,r),v[r],_,h)||(_.plot=!0)}var ct=l._axisConstraintGroups||[];for(C in L)for(n=0;n1;)if(n.pop(),void 0!==(r=s(e,n.join(".")+".uirevision").get()))return r;return e.uirevision}function it(t,e){for(var r=0;r=i.length?i[0]:i[t]:i}function l(t){return Array.isArray(a)?t>=a.length?a[0]:a[t]:a}function u(t,e){var r=0;return function(){if(t&&++r===e)return t()}}return void 0===n._frameWaitingCnt&&(n._frameWaitingCnt=0),new Promise(function(a,c){function f(){n._currentFrame&&n._currentFrame.onComplete&&n._currentFrame.onComplete();var e=n._currentFrame=n._frameQueue.shift();if(e){var r=e.name?e.name.toString():null;t._fullLayout._currentFrame=r,n._lastFrameAt=Date.now(),n._timeToNext=e.frameOpts.duration,h.transition(t,e.frame.data,e.frame.layout,M.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then(function(){e.onComplete&&e.onComplete()}),t.emit("plotly_animatingframe",{name:r,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else t.emit("plotly_animated"),window.cancelAnimationFrame(n._animationRaf),n._animationRaf=null}function p(){t.emit("plotly_animating"),n._lastFrameAt=-1/0,n._timeToNext=0,n._runningTransitions=0,n._currentFrame=null;var e=function(){n._animationRaf=window.requestAnimationFrame(e),Date.now()-n._lastFrameAt>n._timeToNext&&f()};e()}var d,m,g=0;function v(t){return Array.isArray(i)?g>=i.length?t.transitionOpts=i[g]:t.transitionOpts=i[0]:t.transitionOpts=i,g++,t}var y=[],x=null==e,b=Array.isArray(e);if(!x&&!b&&o.isPlainObject(e))y.push({type:"object",data:v(o.extendFlat({},e))});else if(x||-1!==["string","number"].indexOf(typeof e))for(d=0;d0&&AA)&&k.push(m);y=k}}y.length>0?function(e){if(0!==e.length){for(var i=0;i=0;n--)if(o.isPlainObject(e[n])){var m=e[n].name,g=(c[m]||d[m]||{}).name,v=e[n].name,y=c[g]||d[g];g&&v&&"number"==typeof v&&y&&S<5&&(S++,o.warn('addFrames: overwriting frame "'+(c[g]||d[g]).name+'" with a frame whose name of type "number" also equates to "'+g+'". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),5===S&&o.warn("addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.")),d[m]={name:m},p.push({frame:h.supplyFrameDefaults(e[n]),index:r&&void 0!==r[n]&&null!==r[n]?r[n]:f+n})}p.sort(function(t,e){return t.index>e.index?-1:t.index=0;n--){if("number"==typeof(i=p[n].frame).name&&o.warn("Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings"),!i.name)for(;c[i.name="frame "+t._transitionData._counter++];);if(c[i.name]){for(a=0;a=0;r--)n=e[r],a.push({type:"delete",index:n}),s.unshift({type:"insert",index:n,value:i[n]});var l=h.modifyFrames,c=h.modifyFrames,f=[t,s],p=[t,a];return u&&u.add(t,l,f,c,p),h.modifyFrames(t,a)},r.purge=function(t){var e=(t=o.getGraphDiv(t))._fullLayout||{},r=t._fullData||[];return h.cleanPlot([],{},r,e),h.purge(t),l.purge(t),e._container&&e._container.remove(),delete t._context,t}},{"../components/color":713,"../components/colorbar/connect":715,"../components/drawing":734,"../constants/xmlns_namespaces":814,"../lib":836,"../lib/events":825,"../lib/queue":851,"../lib/svg_text_utils":860,"../plots/cartesian/axes":884,"../plots/cartesian/constants":890,"../plots/cartesian/graph_interact":893,"../plots/cartesian/select":901,"../plots/plots":946,"../plots/polar/legacy":954,"../registry":965,"./edit_types":867,"./helpers":868,"./manage_arrays":870,"./plot_config":872,"./plot_schema":873,"./subroutines":875,d3:108,"fast-isnumeric":693,"has-hover":413}],872:[function(t,e,r){"use strict";var n={staticPlot:{valType:"boolean",dflt:!1},plotlyServerURL:{valType:"string",dflt:"https://plot.ly"},editable:{valType:"boolean",dflt:!1},edits:{annotationPosition:{valType:"boolean",dflt:!1},annotationTail:{valType:"boolean",dflt:!1},annotationText:{valType:"boolean",dflt:!1},axisTitleText:{valType:"boolean",dflt:!1},colorbarPosition:{valType:"boolean",dflt:!1},colorbarTitleText:{valType:"boolean",dflt:!1},legendPosition:{valType:"boolean",dflt:!1},legendText:{valType:"boolean",dflt:!1},shapePosition:{valType:"boolean",dflt:!1},titleText:{valType:"boolean",dflt:!1}},autosizable:{valType:"boolean",dflt:!1},responsive:{valType:"boolean",dflt:!1},fillFrame:{valType:"boolean",dflt:!1},frameMargins:{valType:"number",dflt:0,min:0,max:.5},scrollZoom:{valType:"flaglist",flags:["cartesian","gl3d","geo","mapbox"],extras:[!0,!1],dflt:"gl3d+geo+mapbox"},doubleClick:{valType:"enumerated",values:[!1,"reset","autosize","reset+autosize"],dflt:"reset+autosize"},showAxisDragHandles:{valType:"boolean",dflt:!0},showAxisRangeEntryBoxes:{valType:"boolean",dflt:!0},showTips:{valType:"boolean",dflt:!0},showLink:{valType:"boolean",dflt:!1},linkText:{valType:"string",dflt:"Edit chart",noBlank:!0},sendData:{valType:"boolean",dflt:!0},showSources:{valType:"any",dflt:!1},displayModeBar:{valType:"enumerated",values:["hover",!0,!1],dflt:"hover"},showSendToCloud:{valType:"boolean",dflt:!1},modeBarButtonsToRemove:{valType:"any",dflt:[]},modeBarButtonsToAdd:{valType:"any",dflt:[]},modeBarButtons:{valType:"any",dflt:!1},toImageButtonOptions:{valType:"any",dflt:{}},displaylogo:{valType:"boolean",dflt:!0},watermark:{valType:"boolean",dflt:!1},plotGlPixelRatio:{valType:"number",dflt:2,min:1,max:4},setBackground:{valType:"any",dflt:"transparent"},topojsonURL:{valType:"string",noBlank:!0,dflt:"https://cdn.plot.ly/"},mapboxAccessToken:{valType:"string",dflt:null},logging:{valType:"boolean",dflt:1},queueLength:{valType:"integer",min:0,dflt:0},globalTransforms:{valType:"any",dflt:[]},locale:{valType:"string",dflt:"en-US"},locales:{valType:"any",dflt:{}}},i={};!function t(e,r){for(var n in e){var i=e[n];i.valType?r[n]=i.dflt:(r[n]||(r[n]={}),t(i,r[n]))}}(n,i),e.exports={configAttributes:n,dfltConfig:i}},{}],873:[function(t,e,r){"use strict";var n=t("../registry"),i=t("../lib"),a=t("../plots/attributes"),o=t("../plots/layout_attributes"),s=t("../plots/frame_attributes"),l=t("../plots/animation_attributes"),u=t("./plot_config").configAttributes,c=t("../plots/polar/legacy/area_attributes"),f=t("../plots/polar/legacy/axis_attributes"),h=t("./edit_types"),p=i.extendFlat,d=i.extendDeepAll,m=i.isPlainObject,g="_isSubplotObj",v="_isLinkedToArray",y=[g,v,"_arrayAttrRegexps","_deprecated"];function x(t,e,r){if(!t)return!1;if(t._isLinkedToArray)if(b(e[r]))r++;else if(r=a.length)return!1;if(2===t.dimensions){if(r++,e.length===r)return t;var o=e[r];if(!b(o))return!1;t=a[i][o]}else t=a[i]}else t=a}}return t}function b(t){return t===Math.round(t)&&t>=0}function _(t){return function(t){r.crawl(t,function(t,e,n){r.isValObject(t)?"data_array"===t.valType?(t.role="data",n[e+"src"]={valType:"string",editType:"none"}):!0===t.arrayOk&&(n[e+"src"]={valType:"string",editType:"none"}):m(t)&&(t.role="object")})}(t),function(t){r.crawl(t,function(t,e,r){if(!t)return;var n=t[v];if(!n)return;delete t[v],r[e]={items:{}},r[e].items[n]=t,r[e].role="object"})}(t),function(t){!function t(e){for(var r in e)if(m(e[r]))t(e[r]);else if(Array.isArray(e[r]))for(var n=0;n=l.length)return!1;i=(r=(n.transformsRegistry[l[u].type]||{}).attributes)&&r[e[2]],s=3}else if("area"===t.type)i=c[o];else{var f=t._module;if(f||(f=(n.modules[t.type||a.type.dflt]||{})._module),!f)return!1;if(!(i=(r=f.attributes)&&r[o])){var h=f.basePlotModule;h&&h.attributes&&(i=h.attributes[o])}i||(i=a[o])}return x(i,e,s)},r.getLayoutValObject=function(t,e){return x(function(t,e){var r,i,a,s,l=t._basePlotModules;if(l){var u;for(r=0;r=i&&(r._input||{})._templateitemname;s&&(o=i);var l,u=e+"["+o+"]";function c(){l={},s&&(l[u]={},l[u][a]=s)}function f(t,e){s?n.nestedProperty(l[u],t).set(e):l[u+"."+t]=e}function h(){var t=l;return c(),t}return c(),{modifyBase:function(t,e){l[t]=e},modifyItem:f,getUpdateObj:h,applyUpdate:function(e,r){e&&f(e,r);var i=h();for(var a in i)n.nestedProperty(t,a).set(i[a])}}}},{"../lib":836,"../plots/attributes":881}],875:[function(t,e,r){"use strict";var n=t("d3"),i=t("../registry"),a=t("../plots/plots"),o=t("../lib"),s=t("../lib/clear_gl_canvases"),l=t("../components/color"),u=t("../components/drawing"),c=t("../components/titles"),f=t("../components/modebar"),h=t("../plots/cartesian/axes"),p=t("../constants/alignment"),d=t("../plots/cartesian/constraints"),m=d.enforce,g=d.clean,v=t("../plots/cartesian/autorange").doAutoRange,y="start",x="middle",b="end";function _(t,e,r){for(var n=0;n=t[1]||i[1]<=t[0])&&(a[0]e[0]))return!0}return!1}function w(t){var e,i,a,s,c,d,m=t._fullLayout,g=m._size,v=g.p,y=h.list(t,"",!0);if(m._paperdiv.style({width:t._context.responsive&&m.autosize&&!t._context._hasZeroWidth&&!t.layout.width?"100%":m.width+"px",height:t._context.responsive&&m.autosize&&!t._context._hasZeroHeight&&!t.layout.height?"100%":m.height+"px"}).selectAll(".main-svg").call(u.setSize,m.width,m.height),t._context.setBackground(t,m.paper_bgcolor),r.drawMainTitle(t),f.manage(t),!m._has("cartesian"))return t._promises.length&&Promise.all(t._promises);function x(t,e,r){var n=t._lw/2;return"x"===t._id.charAt(0)?e?"top"===r?e._offset-v-n:e._offset+e._length+v+n:g.t+g.h*(1-(t.position||0))+n%1:e?"right"===r?e._offset+e._length+v+n:e._offset-v-n:g.l+g.w*(t.position||0)+n%1}for(e=0;eA?c.push({code:"unused",traceType:y,templateCount:w,dataCount:A}):A>w&&c.push({code:"reused",traceType:y,templateCount:w,dataCount:A})}}else c.push({code:"data"});if(function t(e,r){for(var n in e)if("_"!==n.charAt(0)){var a=e[n],o=p(e,n,r);i(a)?(Array.isArray(e)&&!1===a._template&&a.templateitemname&&c.push({code:"missing",path:o,templateitemname:a.templateitemname}),t(a,o)):Array.isArray(a)&&d(a)&&t(a,o)}}({data:g,layout:h},""),c.length)return c.map(m)}},{"../lib":836,"../plots/attributes":881,"../plots/plots":946,"./plot_config":872,"./plot_schema":873,"./plot_template":874}],877:[function(t,e,r){"use strict";var n=t("./plot_api"),i=t("../lib"),a=t("../snapshot/helpers"),o=t("../snapshot/tosvg"),s=t("../snapshot/svgtoimg"),l={format:{valType:"enumerated",values:["png","jpeg","webp","svg"],dflt:"png"},width:{valType:"number",min:1},height:{valType:"number",min:1},scale:{valType:"number",min:0,dflt:1},setBackground:{valType:"any",dflt:!1},imageDataOnly:{valType:"boolean",dflt:!1}},u=/^data:image\/\w+;base64,/;e.exports=function(t,e){var r,c,f;function h(t){return!(t in e)||i.validate(e[t],l[t])}if(e=e||{},i.isPlainObject(t)?(r=t.data||[],c=t.layout||{},f=t.config||{}):(t=i.getGraphDiv(t),r=i.extendDeep([],t.data),c=i.extendDeep({},t.layout),f=t._context),!h("width")||!h("height"))throw new Error("Height and width should be pixel values.");if(!h("format"))throw new Error("Image format is not jpeg, png, svg or webp.");var p={};function d(t,r){return i.coerce(e,p,l,t,r)}var m=d("format"),g=d("width"),v=d("height"),y=d("scale"),x=d("setBackground"),b=d("imageDataOnly"),_=document.createElement("div");_.style.position="absolute",_.style.left="-5000px",document.body.appendChild(_);var w=i.extendFlat({},c);g&&(w.width=g),v&&(w.height=v);var A=i.extendFlat({},f,{_exportedPlot:!0,staticPlot:!0,setBackground:x}),M=a.getRedrawFunc(_);function k(){return new Promise(function(t){setTimeout(t,a.getDelay(_._fullLayout))})}function T(){return new Promise(function(t,e){var r=o(_,m,y),a=_._fullLayout.width,l=_._fullLayout.height;if(n.purge(_),document.body.removeChild(_),"svg"===m)return t(b?r:"data:image/svg+xml,"+encodeURIComponent(r));var u=document.createElement("canvas");u.id=i.randstr(),s({format:m,width:a,height:l,scale:y,canvas:u,svg:r,promise:!0}).then(t).catch(e)})}return new Promise(function(t,e){n.plot(_,r,w,A).then(M).then(k).then(T).then(function(e){t(function(t){return b?t.replace(u,""):t}(e))}).catch(function(t){e(t)})})}},{"../lib":836,"../snapshot/helpers":969,"../snapshot/svgtoimg":971,"../snapshot/tosvg":973,"./plot_api":871}],878:[function(t,e,r){"use strict";var n=t("../lib"),i=t("../plots/plots"),a=t("./plot_schema"),o=t("./plot_config").dfltConfig,s=n.isPlainObject,l=Array.isArray,u=n.isArrayOrTypedArray;function c(t,e,r,i,a,o){o=o||[];for(var f=Object.keys(t),h=0;hx.length&&i.push(p("unused",a,v.concat(x.length)));var M,k,T,E,S,C=x.length,L=Array.isArray(A);if(L&&(C=Math.min(C,A.length)),2===b.dimensions)for(k=0;kx[k].length&&i.push(p("unused",a,v.concat(k,x[k].length)));var O=x[k].length;for(M=0;M<(L?Math.min(O,A[k].length):O);M++)T=L?A[k][M]:A,E=y[k][M],S=x[k][M],n.validate(E,T)?S!==E&&S!==+E&&i.push(p("dynamic",a,v.concat(k,M),E,S)):i.push(p("value",a,v.concat(k,M),E))}else i.push(p("array",a,v.concat(k),y[k]));else for(k=0;k1&&h.push(p("object","layout"))),i.supplyDefaults(d);for(var m=d._fullData,g=r.length,v=0;v0&&((b=k-o(g)-o(v))>T?_/b>E&&(y=g,x=v,E=_/b):_/k>E&&(y={val:g.val,pad:0},x={val:v.val,pad:0},E=_/k));if(h===p){var S=h-1,C=h+1;if(A)if(0===h)a=[0,1];else{var L=(h>0?f:c).reduce(function(t,e){return Math.max(t,o(e))},0),O=h/(1-Math.min(.5,L/k));a=h>0?[0,O]:[O,0]}else a=M?[Math.max(0,S),Math.max(1,C)]:[S,C]}else A?(y.val>=0&&(y={val:0,pad:0}),x.val<=0&&(x={val:0,pad:0})):M&&(y.val-E*o(y)<0&&(y={val:0,pad:0}),x.val<=0&&(x={val:1,pad:0})),E=(x.val-y.val)/(k-o(y)-o(x)),a=[y.val-E*o(y),x.val+E*o(x)];return d&&a.reverse(),i.simpleMap(a,e.l2r||Number)}function l(t){var e=t._length/20;return"domain"===t.constrain&&t._inputDomain&&(e*=(t._inputDomain[1]-t._inputDomain[0])/(t.domain[1]-t.domain[0])),function(t){return t.pad+(t.extrapad?e:0)}}function u(t,e){var r,n,i,a=e._id,o=t._fullData,s=t._fullLayout,l=[],u=[];function h(t,e){for(r=0;r=r&&(u.extrapad||!o)){s=!1;break}i(e,u.val)&&u.pad<=r&&(o||!u.extrapad)&&(t.splice(l,1),l--)}if(s){var c=a&&0===e;t.push({val:e,pad:c?0:r,extrapad:!c&&o})}}function p(t){return n(t)&&Math.abs(t)=e}e.exports={getAutoRange:s,makePadFn:l,doAutoRange:function(t,e){if(e.setScale(),e.autorange){e.range=s(t,e),e._r=e.range.slice(),e._rl=i.simpleMap(e._r,e.r2l);var r=e._input,n={};n[e._attr+".range"]=e.range,n[e._attr+".autorange"]=e.autorange,o.call("_storeDirectGUIEdit",t.layout,t._fullLayout._preGUI,n),r.range=e.range.slice(),r.autorange=e.autorange}var a=e._anchorAxis;if(a&&a.rangeslider){var l=a.rangeslider[e._name];l&&"auto"===l.rangemode&&(l.range=s(t,e)),a._input.rangeslider[e._name]=i.extendFlat({},l)}},findExtremes:function(t,e,r){r||(r={});t._m||t.setScale();var i,o,s,l,u,h,d,m,g,v=[],y=[],x=e.length,b=r.padded||!1,_=r.tozero&&("linear"===t.type||"-"===t.type),w="log"===t.type,A=!1;function M(t){if(Array.isArray(t))return A=!0,function(e){return Math.max(Number(t[e]||0),0)};var e=Math.max(Number(t||0),0);return function(){return e}}var k=M((t._m>0?r.ppadplus:r.ppadminus)||r.ppad||0),T=M((t._m>0?r.ppadminus:r.ppadplus)||r.ppad||0),E=M(r.vpadplus||r.vpad),S=M(r.vpadminus||r.vpad);if(!A){if(m=1/0,g=-1/0,w)for(i=0;i0&&(m=o),o>g&&o-a&&(m=o),o>g&&o=O;i--)L(i);return{min:v,max:y,opts:r}},concatExtremes:u}},{"../../constants/numerical":813,"../../lib":836,"../../registry":965,"fast-isnumeric":693}],884:[function(t,e,r){"use strict";var n=t("d3"),i=t("fast-isnumeric"),a=t("../../plots/plots"),o=t("../../registry"),s=t("../../lib"),l=t("../../lib/svg_text_utils"),u=t("../../components/titles"),c=t("../../components/color"),f=t("../../components/drawing"),h=t("./layout_attributes"),p=t("./clean_ticks"),d=t("../../constants/numerical"),m=d.ONEAVGYEAR,g=d.ONEAVGMONTH,v=d.ONEDAY,y=d.ONEHOUR,x=d.ONEMIN,b=d.ONESEC,_=d.MINUS_SIGN,w=d.BADNUM,A=t("../../constants/alignment").MID_SHIFT,M=t("../../constants/alignment").LINE_SPACING,k=e.exports={};k.setConvert=t("./set_convert");var T=t("./axis_autotype"),E=t("./axis_ids");k.id2name=E.id2name,k.name2id=E.name2id,k.cleanId=E.cleanId,k.list=E.list,k.listIds=E.listIds,k.getFromId=E.getFromId,k.getFromTrace=E.getFromTrace;var S=t("./autorange");k.getAutoRange=S.getAutoRange,k.findExtremes=S.findExtremes,k.coerceRef=function(t,e,r,n,i,a){var o=n.charAt(n.length-1),l=r._fullLayout._subplots[o+"axis"],u=n+"ref",c={};return i||(i=l[0]||a),a||(a=i),c[u]={valType:"enumerated",values:l.concat(a?[a]:[]),dflt:i},s.coerce(t,e,c,u)},k.coercePosition=function(t,e,r,n,i,a){var o,l;if("paper"===n||"pixel"===n)o=s.ensureNumber,l=r(i,a);else{var u=k.getFromId(e,n);l=r(i,a=u.fraction2r(a)),o=u.cleanPos}t[i]=o(l)},k.cleanPosition=function(t,e,r){return("paper"===r||"pixel"===r?s.ensureNumber:k.getFromId(e,r).cleanPos)(t)},k.redrawComponents=function(t,e){e=e||k.listIds(t);var r=t._fullLayout;function n(n,i,a,s){for(var l=o.getComponentMethod(n,i),u={},c=0;c2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},k.saveRangeInitial=function(t,e){for(var r=k.list(t,"",!0),n=!1,i=0;i.3*h||c(n)||c(a))){var p=r.dtick/2;t+=t+p.8){var o=Number(r.substr(1));a.exactYears>.8&&o%12==0?t=k.tickIncrement(t,"M6","reverse")+1.5*v:a.exactMonths>.8?t=k.tickIncrement(t,"M1","reverse")+15.5*v:t-=v/2;var l=k.tickIncrement(t,r);if(l<=n)return l}return t}(x,t,y,u,a)),g=x,0;g<=c;)g=k.tickIncrement(g,y,!1,a),0;return{start:e.c2r(x,0,a),end:e.c2r(g,0,a),size:y,_dataSpan:c-u}},k.prepTicks=function(t){var e=s.simpleMap(t.range,t.r2l);if("auto"===t.tickmode||!t.dtick){var r,n=t.nticks;n||("category"===t.type||"multicategory"===t.type?(r=t.tickfont?1.2*(t.tickfont.size||12):15,n=t._length/r):(r="y"===t._id.charAt(0)?40:80,n=s.constrain(t._length/r,4,9)+1),"radialaxis"===t._name&&(n*=2)),"array"===t.tickmode&&(n*=100),k.autoTicks(t,Math.abs(e[1]-e[0])/n),t._minDtick>0&&t.dtick<2*t._minDtick&&(t.dtick=t._minDtick,t.tick0=t.l2r(t._forceTick0))}t.tick0||(t.tick0="date"===t.type?"2000-01-01":0),"date"===t.type&&t.dtick<.1&&(t.dtick=.1),j(t)},k.calcTicks=function(t){k.prepTicks(t);var e=s.simpleMap(t.range,t.r2l);if("array"===t.tickmode)return function(t){var e=t.tickvals,r=t.ticktext,n=new Array(e.length),i=s.simpleMap(t.range,t.r2l),a=1.0001*i[0]-1e-4*i[1],o=1.0001*i[1]-1e-4*i[0],l=Math.min(a,o),u=Math.max(a,o),c=0;Array.isArray(r)||(r=[]);var f="category"===t.type?t.d2l_noadd:t.d2l;"log"===t.type&&"L"!==String(t.dtick).charAt(0)&&(t.dtick="L"+Math.pow(10,Math.floor(Math.min(t.range[0],t.range[1]))-1));for(var h=0;hl&&p=n:u<=n)&&!(a.length>l||u===o);u=k.tickIncrement(u,t.dtick,i,t.calendar))o=u,a.push(u);rt(t)&&360===Math.abs(e[1]-e[0])&&a.pop(),t._tmax=a[a.length-1],t._prevDateHead="",t._inCalcTicks=!0;for(var c=new Array(a.length),f=0;f10||"01-01"!==n.substr(5)?t._tickround="d":t._tickround=+e.substr(1)%12==0?"y":"m";else if(e>=v&&a<=10||e>=15*v)t._tickround="d";else if(e>=x&&a<=16||e>=y)t._tickround="M";else if(e>=b&&a<=19||e>=x)t._tickround="S";else{var o=t.l2r(r+e).replace(/^-/,"").length;t._tickround=Math.max(a,o)-20,t._tickround<0&&(t._tickround=4)}}else if(i(e)||"L"===e.charAt(0)){var s=t.range.map(t.r2d||Number);i(e)||(e=Number(e.substr(1))),t._tickround=2-Math.floor(Math.log(e)/Math.LN10+.01);var l=Math.max(Math.abs(s[0]),Math.abs(s[1])),u=Math.floor(Math.log(l)/Math.LN10+.01);Math.abs(u)>3&&(q(t.exponentformat)&&!H(u)?t._tickexponent=3*Math.round((u-1)/3):t._tickexponent=u)}else t._tickround=null}function V(t,e,r){var n=t.tickfont||{};return{x:e,dx:0,dy:0,text:r||"",fontSize:n.size,font:n.family,fontColor:n.color}}k.autoTicks=function(t,e){var r;function n(t){return Math.pow(t,Math.floor(Math.log(e)/Math.LN10))}if("date"===t.type){t.tick0=s.dateTick0(t.calendar);var a=2*e;a>m?(e/=m,r=n(10),t.dtick="M"+12*B(e,r,z)):a>g?(e/=g,t.dtick="M"+B(e,1,D)):a>v?(t.dtick=B(e,v,I),t.tick0=s.dateTick0(t.calendar,!0)):a>y?t.dtick=B(e,y,D):a>x?t.dtick=B(e,x,P):a>b?t.dtick=B(e,b,P):(r=n(10),t.dtick=B(e,r,z))}else if("log"===t.type){t.tick0=0;var o=s.simpleMap(t.range,t.r2l);if(e>.7)t.dtick=Math.ceil(e);else if(Math.abs(o[1]-o[0])<1){var l=1.5*Math.abs((o[1]-o[0])/e);e=Math.abs(Math.pow(10,o[1])-Math.pow(10,o[0]))/l,r=n(10),t.dtick="L"+B(e,r,z)}else t.dtick=e>.3?"D2":"D1"}else"category"===t.type||"multicategory"===t.type?(t.tick0=0,t.dtick=Math.ceil(Math.max(e,1))):rt(t)?(t.tick0=0,r=1,t.dtick=B(e,r,F)):(t.tick0=0,r=n(10),t.dtick=B(e,r,z));if(0===t.dtick&&(t.dtick=1),!i(t.dtick)&&"string"!=typeof t.dtick){var u=t.dtick;throw t.dtick=1,"ax.dtick error: "+String(u)}},k.tickIncrement=function(t,e,r,a){var o=r?-1:1;if(i(e))return t+o*e;var l=e.charAt(0),u=o*Number(e.substr(1));if("M"===l)return s.incrementMonth(t,u,a);if("L"===l)return Math.log(Math.pow(10,t)+u)/Math.LN10;if("D"===l){var c="D2"===e?R:N,f=t+.01*o,h=s.roundUp(s.mod(f,1),c,r);return Math.floor(f)+Math.log(n.round(Math.pow(10,h),1))/Math.LN10}throw"unrecognized dtick "+String(e)},k.tickFirst=function(t){var e=t.r2l||Number,r=s.simpleMap(t.range,e),a=r[1]"+l,t._prevDateHead=l));e.text=u}(t,a,r,l):"log"===u?function(t,e,r,n,a){var o=t.dtick,l=e.x,u=t.tickformat,c="string"==typeof o&&o.charAt(0);"never"===a&&(a="");n&&"L"!==c&&(o="L3",c="L");if(u||"L"===c)e.text=G(Math.pow(10,l),t,a,n);else if(i(o)||"D"===c&&s.mod(l+.01,1)<.1){var f=Math.round(l),h=Math.abs(f),p=t.exponentformat;"power"===p||q(p)&&H(f)?(e.text=0===f?1:1===f?"10":"10"+(f>1?"":_)+h+"",e.fontSize*=1.25):("e"===p||"E"===p)&&h>2?e.text="1"+p+(f>0?"+":_)+h:(e.text=G(Math.pow(10,l),t,"","fakehover"),"D1"===o&&"y"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if("D"!==c)throw"unrecognized dtick "+String(o);e.text=String(Math.round(Math.pow(10,s.mod(l,1)))),e.fontSize*=.75}if("D1"===t.dtick){var d=String(e.text).charAt(0);"0"!==d&&"1"!==d||("y"===t._id.charAt(0)?e.dx-=e.fontSize/4:(e.dy+=e.fontSize/2,e.dx+=(t.range[1]>t.range[0]?1:-1)*e.fontSize*(l<0?.5:.25)))}}(t,a,0,l,d):"category"===u?function(t,e){var r=t._categories[Math.round(e.x)];void 0===r&&(r="");e.text=String(r)}(t,a):"multicategory"===u?function(t,e,r){var n=Math.round(e.x),i=t._categories[n]||[],a=void 0===i[1]?"":String(i[1]),o=void 0===i[0]?"":String(i[0]);r?e.text=o+" - "+a:(e.text=a,e.text2=o)}(t,a,r):rt(t)?function(t,e,r,n,i){if("radians"!==t.thetaunit||r)e.text=G(e.x,t,i,n);else{var a=e.x/180;if(0===a)e.text="0";else{var o=function(t){function e(t,e){return Math.abs(t-e)<=1e-6}var r=function(t){var r=1;for(;!e(Math.round(t*r)/r,t);)r*=10;return r}(t),n=t*r,i=Math.abs(function t(r,n){return e(n,0)?r:t(n,r%n)}(n,r));return[Math.round(n/i),Math.round(r/i)]}(a);if(o[1]>=100)e.text=G(s.deg2rad(e.x),t,i,n);else{var l=e.x<0;1===o[1]?1===o[0]?e.text="\u03c0":e.text=o[0]+"\u03c0":e.text=["",o[0],"","\u2044","",o[1],"","\u03c0"].join(""),l&&(e.text=_+e.text)}}}}(t,a,r,l,d):function(t,e,r,n,i){"never"===i?i="":"all"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(i="hide");e.text=G(e.x,t,i,n)}(t,a,0,l,d),t.tickprefix&&!p(t.showtickprefix)&&(a.text=t.tickprefix+a.text),t.ticksuffix&&!p(t.showticksuffix)&&(a.text+=t.ticksuffix),"boundaries"===t.tickson||t.showdividers){var m=function(e){var r=t.l2p(e);return r>=0&&r<=t._length?e:null};a.xbnd=[m(a.x-.5),m(a.x+t.dtick-.5)]}return a},k.hoverLabelText=function(t,e,r){if(r!==w&&r!==e)return k.hoverLabelText(t,e)+" - "+k.hoverLabelText(t,r);var n="log"===t.type&&e<=0,i=k.tickText(t,t.c2l(n?-e:e),"hover").text;return n?0===e?"0":_+i:i};var U=["f","p","n","\u03bc","m","","k","M","G","T"];function q(t){return"SI"===t||"B"===t}function H(t){return t>14||t<-15}function G(t,e,r,n){var a=t<0,o=e._tickround,l=r||e.exponentformat||"B",u=e._tickexponent,c=k.getTickFormat(e),f=e.separatethousands;if(n){var h={exponentformat:l,dtick:"none"===e.showexponent?e.dtick:i(t)&&Math.abs(t)||1,range:"none"===e.showexponent?e.range.map(e.r2d):[0,t||1]};j(h),o=(Number(h._tickround)||0)+4,u=h._tickexponent,e.hoverformat&&(c=e.hoverformat)}if(c)return e._numFormat(c)(t).replace(/-/g,_);var p,d=Math.pow(10,-o)/2;if("none"===l&&(u=0),(t=Math.abs(t))"+p+"":"B"===l&&9===u?t+="B":q(l)&&(t+=U[u/3+5]));return a?_+t:t}function W(t,e){var r=t._id.charAt(0),n=t._tickAngles[e]||0,i=s.deg2rad(n),a=Math.sin(i),o=Math.cos(i),l=0,u=0;return t._selections[e].each(function(){var t=$(this),e=f.bBox(t.node()),r=e.width,n=e.height;l=Math.max(l,o*r,a*n),u=Math.max(u,a*r,o*n)}),{x:u,y:l}[r]}function Y(t){return[t.text,t.x,t.axInfo,t.font,t.fontSize,t.fontColor].join("_")}function Z(t,e){var r,n=t._fullLayout._size,i=e._id.charAt(0),a=e.side;return"free"!==e.anchor?r=E.getFromId(t,e.anchor):"x"===i?r={_offset:n.t+(1-(e.position||0))*n.h,_length:0}:"y"===i&&(r={_offset:n.l+(e.position||0)*n.w,_length:0}),"top"===a||"left"===a?r._offset:"bottom"===a||"right"===a?r._offset+r._length:void 0}function X(t,e){var r=t.l2p(e);return r>1&&r=0,a=c(t,e[1])<=0;return(r||i)&&(n||a)}if(t.tickformatstops&&t.tickformatstops.length>0)switch(t.type){case"date":case"linear":for(e=0;e=o(i)))){r=n;break}break;case"log":for(e=0;e0&&(r[i]+=l),e.title.text!==h._dfltTitle[d]&&(r[i]+=e.title.font.size),"x"===d&&u.width>0){var f=u.right-(e._offset+e._length);f>0&&(r.x=1,r.r=f);var p=e._offset-u.left;p>0&&(r.x=0,r.l=p)}else if("y"===d&&u.height>0){var g=u.bottom-(e._offset+e._length);g>0&&(r.y=0,r.b=g);var v=e._offset-u.top;v>0&&(r.y=1,r.t=v)}}a.autoMargin(t,J(e),r)}),r.skipTitle||tt&&e._boundingBox&&"bottom"===e.side||G.push(function(){return function(t,e){var r,n=t._fullLayout,i=e._id,a=i.charAt(0),o=e.title.font.size;if("multicategory"===e.type)r=e._labelLength;else{r=10+1.5*o+(e.linewidth?e.linewidth-1:0)}var s,l,c,h,p=Z(t,e);"x"===a?(l=e._offset+e._length/2,c="top"===e.side?-r-o*(e.showticklabels?1:0):r+o*(e.showticklabels?1.5:.5),c+=p):(c=e._offset+e._length/2,l="right"===e.side?r+o*(e.showticklabels?1:.5):-r-o*(e.showticklabels?.5:0),l+=p,s={rotate:"-90",offset:0});if("multicategory"!==e.type){var d=e._selections[e._id+"tick"];if(h={selection:d,side:e.side},d&&d.node()&&d.node().parentNode){var m=f.getTranslate(d.node().parentNode);h.offsetLeft=m.x,h.offsetTop=m.y}}return u.draw(t,i+"title",{propContainer:e,propName:e._name+".title.text",placeholder:n._dfltTitle[a],avoid:h,transform:s,attributes:{x:l,y:c,"text-anchor":"middle"}})}(t,e)}),s.syncOrAsync(G)}function et(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.max(t[1],e[1])}},k.getTickSigns=function(t){var e=t._id.charAt(0),r={x:"top",y:"right"}[e],n=t.side===r?1:-1,i=[-1,1,n,-n];return"inside"!==t.ticks==("x"===e)&&(i=i.map(function(t){return-t})),i},k.makeTransFn=function(t){var e=t._id.charAt(0),r=t._offset;return"x"===e?function(e){return"translate("+(r+t.l2p(e.x))+",0)"}:function(e){return"translate(0,"+(r+t.l2p(e.x))+")"}},k.makeTickPath=function(t,e,r,n){n=void 0!==n?n:t.ticklen;var i=t._id.charAt(0),a=(t.linewidth||1)/2;return"x"===i?"M0,"+(e+a*r)+"v"+n*r:"M"+(e+a*r)+",0h"+n*r},k.makeLabelFns=function(t,e,r){var n=t._id.charAt(0),a="boundaries"!==t.tickson&&"outside"===t.ticks,o=0,l=0;if(a&&(o+=t.ticklen),r&&"outside"===t.ticks){var u=s.deg2rad(r);o=t.ticklen*Math.cos(u)+1,l=t.ticklen*Math.sin(u)}t.showticklabels&&(a||t.showline)&&(o+=.2*t.tickfont.size);var c,f,h,p,d={labelStandoff:o+=(t.linewidth||1)/2,labelShift:l};return"x"===n?(p="bottom"===t.side?1:-1,c=l*p,f=e+o*p,h="bottom"===t.side?1:-.2,d.xFn=function(t){return t.dx+c},d.yFn=function(t){return t.dy+f+t.fontSize*h},d.anchorFn=function(t,e){return i(e)&&0!==e&&180!==e?e*p<0?"end":"start":"middle"},d.heightFn=function(e,r,n){return r<-60||r>60?-.5*n:"top"===t.side?-n:0}):"y"===n&&(p="right"===t.side?1:-1,c=o,f=-l*p,h=90===Math.abs(t.tickangle)?.5:0,d.xFn=function(t){return t.dx+e+(c+t.fontSize*h)*p},d.yFn=function(t){return t.dy+f+t.fontSize*A},d.anchorFn=function(e,r){return i(r)&&90===Math.abs(r)?"middle":"right"===t.side?"start":"end"},d.heightFn=function(e,r,n){return(r*="left"===t.side?1:-1)<-30?-n:r<30?-.5*n:0}),d},k.drawTicks=function(t,e,r){r=r||{};var n=e._id+"tick",i=r.layer.selectAll("path."+n).data(e.ticks?r.vals:[],Y);i.exit().remove(),i.enter().append("path").classed(n,1).classed("ticks",1).classed("crisp",!1!==r.crisp).call(c.stroke,e.tickcolor).style("stroke-width",f.crispRound(t,e.tickwidth,1)+"px").attr("d",r.path),i.attr("transform",r.transFn)},k.drawGrid=function(t,e,r){r=r||{};var n=e._id+"grid",i=r.vals,a=r.counterAxis;if(!1===e.showgrid)i=[];else if(a&&k.shouldShowZeroLine(t,e,a))for(var o="array"===e.tickmode,s=0;s1)for(n=1;n2*o}(t,e)?"date":function(t){for(var e=Math.max(1,(t.length-1)/1e3),r=0,n=0,o={},s=0;s2*r}(t)?"category":function(t){if(!t)return!1;for(var e=0;en?1:-1:+(t.substr(1)||1)-+(e.substr(1)||1)},r.getAxisGroup=function(t,e){for(var r=t._axisMatchGroups,n=0;n0;o&&(i="array");var s,l=r("categoryorder",i);"array"===l&&(s=r("categoryarray")),o||"array"!==l||(l=e.categoryorder="trace"),"trace"===l?e._initialCategories=[]:"array"===l?e._initialCategories=s.slice():(s=function(t,e){var r,n,i,a=e.dataAttr||t._id.charAt(0),o={};if(e.axData)r=e.axData;else for(r=[],n=0;nl*x)||A)for(r=0;rD&&NO&&(O=N);p/=(O-L)/(2*z),L=u.l2r(L),O=u.l2r(O),u.range=u._input.range=E=0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function P(t,e,r,n,i){return t.append("path").attr("class","zoombox").style({fill:e>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("transform","translate("+r+", "+n+")").attr("d",i+"Z")}function I(t,e,r){return t.append("path").attr("class","zoombox-corners").style({fill:u.background,stroke:u.defaultLine,"stroke-width":1,opacity:0}).attr("transform","translate("+e+", "+r+")").attr("d","M0,0Z")}function N(t,e,r,n,i,a){t.attr("d",n+"M"+r.l+","+r.t+"v"+r.h+"h"+r.w+"v-"+r.h+"h-"+r.w+"Z"),R(t,e,i,a)}function R(t,e,r,n){r||(t.transition().style("fill",n>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),e.transition().style("opacity",1).duration(200))}function F(t){n.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}function B(t){E&&t.data&&t._context.showTips&&(s.notifier(s._(t,"Double-click to zoom back out"),"long"),E=!1)}function j(t){return"lasso"===t||"select"===t}function V(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,T)/2);return"M"+(t.l-3.5)+","+(t.t-.5+e)+"h3v"+-e+"h"+e+"v-3h-"+(e+3)+"ZM"+(t.r+3.5)+","+(t.t-.5+e)+"h-3v"+-e+"h"+-e+"v-3h"+(e+3)+"ZM"+(t.r+3.5)+","+(t.b+.5-e)+"h-3v"+e+"h"+-e+"v3h"+(e+3)+"ZM"+(t.l-3.5)+","+(t.b+.5-e)+"h3v"+e+"h"+e+"v3h-"+(e+3)+"Z"}function U(t,e,r,n){for(var i,a,o,l,u=!1,c={},f={},h=0;h-1&&w(i,t,Z,X,e.id,Et),a.indexOf("event")>-1&&f.click(t,i,e.id);else if(1===r&&pt){var s=E?G:R,u="s"===E||"w"===S?0:1,c=s._name+".range["+u+"]",h=function(t,e){var r,i=t.range[e],a=Math.abs(i-t.range[1-e]);return"date"===t.type?i:"log"===t.type?(r=Math.ceil(Math.max(0,-Math.log(a)/Math.LN10))+3,n.format("."+r+"g")(Math.pow(10,i))):(r=Math.floor(Math.log(Math.abs(i))/Math.LN10)-Math.floor(Math.log(a)/Math.LN10)+4,n.format("."+String(r)+"g")(i))}(s,u),p="left",d="middle";if(s.fixedrange)return;E?(d="n"===E?"top":"bottom","right"===s.side&&(p="right")):"e"===S&&(p="right"),t._context.showAxisRangeEntryBoxes&&n.select(gt).call(l.makeEditable,{gd:t,immediate:!0,background:t._fullLayout.paper_bgcolor,text:String(h),fill:s.tickfont?s.tickfont.color:"#444",horizontalAlign:p,verticalAlign:d}).on("edit",function(e){var r=s.d2r(e);void 0!==r&&o.call("_guiRelayout",t,c,r)})}}function Lt(e,r){if(t._transitioningWithDuration)return!1;var n=Math.max(0,Math.min(K,e+vt)),i=Math.max(0,Math.min(Q,r+yt)),a=Math.abs(n-vt),o=Math.abs(i-yt);function s(){At="",xt.r=xt.l,xt.t=xt.b,kt.attr("d","M0,0Z")}if(xt.l=Math.min(vt,n),xt.r=Math.max(vt,n),xt.t=Math.min(yt,i),xt.b=Math.max(yt,i),tt.isSubplotConstrained)a>T||o>T?(At="xy",a/K>o/Q?(o=a*Q/K,yt>i?xt.t=yt-o:xt.b=yt+o):(a=o*K/Q,vt>n?xt.l=vt-a:xt.r=vt+a),kt.attr("d",V(xt))):s();else if(et.isSubplotConstrained)if(a>T||o>T){At="xy";var l=Math.min(xt.l/K,(Q-xt.b)/Q),u=Math.max(xt.r/K,(Q-xt.t)/Q);xt.l=l*K,xt.r=u*K,xt.b=(1-l)*Q,xt.t=(1-u)*Q,kt.attr("d",V(xt))}else s();else!nt||om[1]-1/4096&&(e.domain=s),i.noneOrAll(t.domain,e.domain,s)}return r("layer"),e}},{"../../lib":836,"fast-isnumeric":693}],900:[function(t,e,r){"use strict";var n=t("../../constants/alignment").FROM_BL;e.exports=function(t,e,r){void 0===r&&(r=n[t.constraintoward||"center"]);var i=[t.r2l(t.range[0]),t.r2l(t.range[1])],a=i[0]+(i[1]-i[0])*r;t.range=t._input.range=[t.l2r(a+(i[0]-a)*e),t.l2r(a+(i[1]-a)*e)]}},{"../../constants/alignment":808}],901:[function(t,e,r){"use strict";var n=t("polybooljs"),i=t("../../registry"),a=t("../../components/color"),o=t("../../components/fx"),s=t("../../lib/polygon"),l=t("../../lib/throttle"),u=t("../../components/fx/helpers").makeEventData,c=t("./axis_ids").getFromId,f=t("../../lib/clear_gl_canvases"),h=t("../../plot_api/subroutines").redrawReglTraces,p=t("./constants"),d=p.MINSELECT,m=s.filter,g=s.tester;function v(t){return t._id}function y(t,e,r,n,i,a,o){var s,l,u,c,f,h,p,d,m,g=e._hoverdata,v=e._fullLayout.clickmode.indexOf("event")>-1,y=[];if(function(t){return t&&Array.isArray(t)&&!0!==t[0].hoverOnBox}(g)){w(t,e,a);var x=function(t,e){var r,n,i=t[0],a=-1,o=[];for(n=0;n0?function(t,e){var r,n,i,a=[];for(i=0;i0&&a.push(r);if(1===a.length&&a[0]===e.searchInfo&&(n=e.searchInfo.cd[0].trace).selectedpoints.length===e.pointNumbers.length){for(i=0;i1)return!1;if((i+=r.selectedpoints.length)>1)return!1}return 1===i}(s)&&(h=T(x))){for(o&&o.remove(),m=0;m0?"M"+i.join("M")+"Z":"M0,0Z",e.attr("d",n)}function T(t){var e=t.searchInfo.cd[0].trace,r=t.pointNumber,n=t.pointNumbers,i=n.length>0?n[0]:r;return!!e.selectedpoints&&e.selectedpoints.indexOf(i)>-1}function E(t,e,r){var n,a,o,s;for(n=0;n-1&&y(e,T,i.xaxes,i.yaxes,i.subplot,i,H),"event"===r&&T.emit("plotly_selected",void 0);o.click(T,e)})},i.doneFn=function(){W.remove(),l.done(Y).then(function(){l.clear(Y),i.gd.emit("plotly_selected",b),h&&i.selectionDefs&&(h.subtract=q,i.selectionDefs.push(h),i.mergedPolygons.length=0,[].push.apply(i.mergedPolygons,f))})}},clearSelect:C,selectOnClick:y}},{"../../components/color":713,"../../components/fx":752,"../../components/fx/helpers":748,"../../lib/clear_gl_canvases":821,"../../lib/polygon":848,"../../lib/throttle":861,"../../plot_api/subroutines":875,"../../registry":965,"./axis_ids":887,"./constants":890,polybooljs:1308}],902:[function(t,e,r){"use strict";var n=t("d3"),i=t("fast-isnumeric"),a=t("../../lib"),o=a.cleanNumber,s=a.ms2DateTime,l=a.dateTime2ms,u=a.ensureNumber,c=a.isArrayOrTypedArray,f=t("../../constants/numerical"),h=f.FP_SAFE,p=f.BADNUM,d=f.LOG_CLIP,m=t("./constants"),g=t("./axis_ids");function v(t){return Math.pow(10,t)}function y(t){return null!=t}e.exports=function(t,e){e=e||{};var r=t._id||"x",f=r.charAt(0);function x(e,r){if(e>0)return Math.log(e)/Math.LN10;if(e<=0&&r&&t.range&&2===t.range.length){var n=t.range[0],i=t.range[1];return.5*(n+i-2*d*Math.abs(n-i))}return p}function b(e,r,n){var o=l(e,n||t.calendar);if(o===p){if(!i(e))return p;e=+e;var s=Math.floor(10*a.mod(e+.05,1)),u=Math.round(e-s/10);o=l(new Date(u))+s/10}return o}function _(e,r,n){return s(e,r,n||t.calendar)}function w(e){return t._categories[Math.round(e)]}function A(e){if(y(e)){if(void 0===t._categoriesMap&&(t._categoriesMap={}),void 0!==t._categoriesMap[e])return t._categoriesMap[e];t._categories.push(e);var r=t._categories.length-1;return t._categoriesMap[e]=r,r}return p}function M(e){if(t._categoriesMap)return t._categoriesMap[e]}function k(t){var e=M(t);return void 0!==e?e:i(t)?+t:void 0}function T(e){return i(e)?n.round(t._b+t._m*e,2):p}function E(e){return(e-t._b)/t._m}t.c2l="log"===t.type?x:u,t.l2c="log"===t.type?v:u,t.l2p=T,t.p2l=E,t.c2p="log"===t.type?function(t,e){return T(x(t,e))}:T,t.p2c="log"===t.type?function(t){return v(E(t))}:E,-1!==["linear","-"].indexOf(t.type)?(t.d2r=t.r2d=t.d2c=t.r2c=t.d2l=t.r2l=o,t.c2d=t.c2r=t.l2d=t.l2r=u,t.d2p=t.r2p=function(e){return t.l2p(o(e))},t.p2d=t.p2r=E,t.cleanPos=u):"log"===t.type?(t.d2r=t.d2l=function(t,e){return x(o(t),e)},t.r2d=t.r2c=function(t){return v(o(t))},t.d2c=t.r2l=o,t.c2d=t.l2r=u,t.c2r=x,t.l2d=v,t.d2p=function(e,r){return t.l2p(t.d2r(e,r))},t.p2d=function(t){return v(E(t))},t.r2p=function(e){return t.l2p(o(e))},t.p2r=E,t.cleanPos=u):"date"===t.type?(t.d2r=t.r2d=a.identity,t.d2c=t.r2c=t.d2l=t.r2l=b,t.c2d=t.c2r=t.l2d=t.l2r=_,t.d2p=t.r2p=function(e,r,n){return t.l2p(b(e,0,n))},t.p2d=t.p2r=function(t,e,r){return _(E(t),e,r)},t.cleanPos=function(e){return a.cleanDate(e,p,t.calendar)}):"category"===t.type?(t.d2c=t.d2l=A,t.r2d=t.c2d=t.l2d=w,t.d2r=t.d2l_noadd=k,t.r2c=function(e){var r=k(e);return void 0!==r?r:t.fraction2r(.5)},t.l2r=t.c2r=u,t.r2l=k,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return w(E(t))},t.r2p=t.d2p,t.p2r=E,t.cleanPos=function(t){return"string"==typeof t&&""!==t?t:u(t)}):"multicategory"===t.type&&(t.r2d=t.c2d=t.l2d=w,t.d2r=t.d2l_noadd=k,t.r2c=function(e){var r=k(e);return void 0!==r?r:t.fraction2r(.5)},t.r2c_just_indices=M,t.l2r=t.c2r=u,t.r2l=k,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return w(E(t))},t.r2p=t.d2p,t.p2r=E,t.cleanPos=function(t){return Array.isArray(t)||"string"==typeof t&&""!==t?t:u(t)},t.setupMultiCategory=function(n){var i,o,s=t._traceIndices,l=e._axisMatchGroups;if(l&&l.length&&0===t._categories.length)for(i=0;ih&&(s[n]=h),s[0]===s[1]){var u=Math.max(1,Math.abs(1e-6*s[0]));s[0]-=u,s[1]+=u}}else a.nestedProperty(t,e).set(o)},t.setScale=function(r){var n=e._size;if(t.overlaying){var i=g.getFromId({_fullLayout:e},t.overlaying);t.domain=i.domain}var a=r&&t._r?"_r":"range",o=t.calendar;t.cleanRange(a);var s=t.r2l(t[a][0],o),l=t.r2l(t[a][1],o);if("y"===f?(t._offset=n.t+(1-t.domain[1])*n.h,t._length=n.h*(t.domain[1]-t.domain[0]),t._m=t._length/(s-l),t._b=-t._m*l):(t._offset=n.l+t.domain[0]*n.w,t._length=n.w*(t.domain[1]-t.domain[0]),t._m=t._length/(l-s),t._b=-t._m*s),!isFinite(t._m)||!isFinite(t._b)||t._length<0)throw e._replotting=!1,new Error("Something went wrong with axis scaling")},t.makeCalcdata=function(e,r){var n,i,o,s,l=t.type,u="date"===l&&e[r+"calendar"];if(r in e){if(n=e[r],s=e._length||a.minRowLength(n),a.isTypedArray(n)&&("linear"===l||"log"===l)){if(s===n.length)return n;if(n.subarray)return n.subarray(0,s)}if("multicategory"===l)return function(t,e){for(var r=new Array(e),n=0;nr.duration?(function(){for(var r={},n=0;n rect").call(a.setTranslate,0,0).call(a.setScale,1,1),t.plot.call(a.setTranslate,e._offset,r._offset).call(a.setScale,1,1);var n=t.plot.selectAll(".scatterlayer .trace");n.selectAll(".point").call(a.setPointGroupScale,1,1),n.selectAll(".textpoint").call(a.setTextPointsScale,1,1),n.call(a.hideOutsideRangePoints,t)}function m(e,r){var n=e.plotinfo,i=n.xaxis,s=n.yaxis,l=e.xr0,u=e.xr1,c=i._length,f=e.yr0,h=e.yr1,p=s._length,d=!!u,m=!!h,g=[];if(d){var v=l[1]-l[0],y=u[1]-u[0];g[0]=(l[0]*(1-r)+r*u[0]-l[0])/(l[1]-l[0])*c,g[2]=c*(1-r+r*y/v),i.range[0]=l[0]*(1-r)+r*u[0],i.range[1]=l[1]*(1-r)+r*u[1]}else g[0]=0,g[2]=c;if(m){var x=f[1]-f[0],b=h[1]-h[0];g[1]=(f[1]*(1-r)+r*h[1]-f[1])/(f[0]-f[1])*p,g[3]=p*(1-r+r*b/x),s.range[0]=f[0]*(1-r)+r*h[0],s.range[1]=f[1]*(1-r)+r*h[1]}else g[1]=0,g[3]=p;o.drawOne(t,i,{skipTitle:!0}),o.drawOne(t,s,{skipTitle:!0}),o.redrawComponents(t,[i._id,s._id]);var _=d?c/g[2]:1,w=m?p/g[3]:1,A=d?g[0]:0,M=m?g[1]:0,k=d?g[0]/g[2]*c:0,T=m?g[1]/g[3]*p:0,E=i._offset-k,S=s._offset-T;n.clipRect.call(a.setTranslate,A,M).call(a.setScale,1/_,1/w),n.plot.call(a.setTranslate,E,S).call(a.setScale,_,w),a.setPointGroupScale(n.zoomScalePts,1/_,1/w),a.setTextPointsScale(n.zoomScaleTxt,1/_,1/w)}o.redrawComponents(t)}},{"../../components/drawing":734,"../../registry":965,"./axes":884,d3:108}],907:[function(t,e,r){"use strict";var n=t("../../registry").traceIs,i=t("./axis_autotype");function a(t){return{v:"x",h:"y"}[t.orientation||"v"]}function o(t,e){var r=a(t),i=n(t,"box-violin"),o=n(t._fullInput||{},"candlestick");return i&&!o&&e===r&&void 0===t[r]&&void 0===t[r+"0"]}e.exports=function(t,e,r,s){"-"===r("type",(s.splomStash||{}).type)&&(!function(t,e){if("-"!==t.type)return;var r=t._id,s=r.charAt(0);-1!==r.indexOf("scene")&&(r=s);var l=function(t,e,r){for(var n=0;n0&&(i["_"+r+"axes"]||{})[e])return i;if((i[r+"axis"]||r)===e){if(o(i,r))return i;if((i[r]||[]).length||i[r+"0"])return i}}}(e,r,s);if(!l)return;if("histogram"===l.type&&s==={v:"y",h:"x"}[l.orientation||"v"])return void(t.type="linear");var u,c=s+"calendar",f=l[c],h={noMultiCategory:!n(l,"cartesian")||n(l,"noMultiCategory")};if(o(l,s)){var p=a(l),d=[];for(u=0;u0?".":"")+a;i.isPlainObject(o)?l(o,e,s,n+1):e(s,a,o)}})}r.manageCommandObserver=function(t,e,n,o){var s={},l=!0;e&&e._commandObserver&&(s=e._commandObserver),s.cache||(s.cache={}),s.lookupTable={};var u=r.hasSimpleAPICommandBindings(t,n,s.lookupTable);if(e&&e._commandObserver){if(u)return s;if(e._commandObserver.remove)return e._commandObserver.remove(),e._commandObserver=null,s}if(u){a(t,u,s.cache),s.check=function(){if(l){var e=a(t,u,s.cache);return e.changed&&o&&void 0!==s.lookupTable[e.value]&&(s.disable(),Promise.resolve(o({value:e.value,type:u.type,prop:u.prop,traces:u.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var c=["plotly_relayout","plotly_redraw","plotly_restyle","plotly_update","plotly_animatingframe","plotly_afterplot"],f=0;fi*Math.PI/180}return!1},r.getPath=function(){return n.geo.path().projection(r)},r.getBounds=function(t){return r.getPath().bounds(t)},r.fitExtent=function(t,e){var n=t[1][0]-t[0][0],i=t[1][1]-t[0][1],a=r.clipExtent&&r.clipExtent();r.scale(150).translate([0,0]),a&&r.clipExtent(null);var o=r.getBounds(e),s=Math.min(n/(o[1][0]-o[0][0]),i/(o[1][1]-o[0][1])),l=+t[0][0]+(n-s*(o[1][0]+o[0][0]))/2,u=+t[0][1]+(i-s*(o[1][1]+o[0][1]))/2;return a&&r.clipExtent(a),r.scale(150*s).translate([l,u])},r.precision(m.precision),i&&r.clipAngle(i-m.clipPad);return r}(e);c.center([u.lon-l.lon,u.lat-l.lat]).rotate([-l.lon,-l.lat,l.roll]).parallels(s.parallels);var f=[[r.l+r.w*o.x[0],r.t+r.h*(1-o.y[1])],[r.l+r.w*o.x[1],r.t+r.h*(1-o.y[0])]],h=e.lonaxis,p=e.lataxis,d=function(t,e){var r=m.clipPad,n=t[0]+r,i=t[1]-r,a=e[0]+r,o=e[1]-r;n>0&&i<0&&(i+=360);var s=(i-n)/4;return{type:"Polygon",coordinates:[[[n,a],[n,o],[n+s,o],[n+2*s,o],[n+3*s,o],[i,o],[i,a],[i-s,a],[i-2*s,a],[i-3*s,a],[n,a]]]}}(h.range,p.range);c.fitExtent(f,d);var g=this.bounds=c.getBounds(d),v=this.fitScale=c.scale(),y=c.translate();if(!isFinite(g[0][0])||!isFinite(g[0][1])||!isFinite(g[1][0])||!isFinite(g[1][1])||isNaN(y[0])||isNaN(y[0])){for(var x=this.graphDiv,b=["projection.rotation","center","lonaxis.range","lataxis.range"],_="Invalid geo settings, relayout'ing to default view.",w={},A=0;A-1&&p(n.event,a,[r.xaxis],[r.yaxis],r.id,m),u.indexOf("event")>-1&&l.click(a,n.event))})}function g(t){return r.projection.invert([t[0]+r.xaxis._offset,t[1]+r.yaxis._offset])}},x.makeFramework=function(){var t=this,e=t.graphDiv,r=e._fullLayout,i="clip"+r._uid+t.id;t.clipDef=r._clips.append("clipPath").attr("id",i),t.clipRect=t.clipDef.append("rect"),t.framework=n.select(t.container).append("g").attr("class","geo "+t.id).call(s.setClipUrl,i,e),t.project=function(e){var r=t.projection(e);return r?[r[0]-t.xaxis._offset,r[1]-t.yaxis._offset]:[null,null]},t.xaxis={_id:"x",c2p:function(e){return t.project(e)[0]}},t.yaxis={_id:"y",c2p:function(e){return t.project(e)[1]}},t.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},c.setConvert(t.mockAxis,r)},x.saveViewInitial=function(t){var e=t.center||{},r=t.projection,n=r.rotation||{};t._isScoped?this.viewInitial={"center.lon":e.lon,"center.lat":e.lat,"projection.scale":r.scale}:t._isClipped?this.viewInitial={"projection.scale":r.scale,"projection.rotation.lon":n.lon,"projection.rotation.lat":n.lat}:this.viewInitial={"center.lon":e.lon,"center.lat":e.lat,"projection.scale":r.scale,"projection.rotation.lon":n.lon}},x.render=function(){var t,e=this.projection,r=e.getPath();function n(t){var r=e(t.lonlat);return r?"translate("+r[0]+","+r[1]+")":null}function i(t){return e.isLonLatOverEdges(t.lonlat)?"none":null}for(t in this.basePaths)this.basePaths[t].attr("d",r);for(t in this.dataPaths)this.dataPaths[t].attr("d",function(t){return r(t.geojson)});for(t in this.dataPoints)this.dataPoints[t].attr("display",i).attr("transform",n)}},{"../../components/color":713,"../../components/dragelement":731,"../../components/drawing":734,"../../components/fx":752,"../../lib":836,"../../lib/topojson_utils":863,"../../registry":965,"../cartesian/axes":884,"../cartesian/select":901,"../plots":946,"./constants":912,"./projections":918,"./zoom":919,d3:108,"topojson-client":1379}],914:[function(t,e,r){"use strict";var n=t("./geo"),i=t("../../plots/get_data").getSubplotCalcData,a=t("../../lib").counterRegex,o="geo";r.name=o,r.attr=o,r.idRoot=o,r.idRegex=r.attrRegex=a(o),r.attributes=t("./layout/attributes"),r.layoutAttributes=t("./layout/layout_attributes"),r.supplyLayoutDefaults=t("./layout/defaults"),r.plot=function(t){var e=t._fullLayout,r=t.calcdata,a=e._subplots.geo;void 0===window.PlotlyGeoAssets&&(window.PlotlyGeoAssets={topojson:{}});for(var s=0;s0&&A<0&&(A+=360);var M,k,T,E=(w+A)/2;if(!u){var S=c?s.projRotate:[E,0,0];M=r("projection.rotation.lon",S[0]),r("projection.rotation.lat",S[1]),r("projection.rotation.roll",S[2]),r("showcoastlines",!c)&&(r("coastlinecolor"),r("coastlinewidth")),r("showocean")&&r("oceancolor")}(u?(k=-96.6,T=38.7):(k=c?E:M,T=(_[0]+_[1])/2),r("center.lon",k),r("center.lat",T),f)&&r("projection.parallels",s.projParallels||[0,60]);r("projection.scale"),r("showland")&&r("landcolor"),r("showlakes")&&r("lakecolor"),r("showrivers")&&(r("rivercolor"),r("riverwidth")),r("showcountries",c&&"usa"!==a)&&(r("countrycolor"),r("countrywidth")),("usa"===a||"north america"===a&&50===n)&&(r("showsubunits",!0),r("subunitcolor"),r("subunitwidth")),c||r("showframe",!0)&&(r("framecolor"),r("framewidth")),r("bgcolor")}e.exports=function(t,e,r){n(t,e,r,{type:"geo",attributes:a,handleDefaults:s,partition:"y"})}},{"../../subplot_defaults":960,"../constants":912,"./layout_attributes":917}],917:[function(t,e,r){"use strict";var n=t("../../../components/color/attributes"),i=t("../../domain").attributes,a=t("../constants"),o=t("../../../plot_api/edit_types").overrideAll,s={range:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},showgrid:{valType:"boolean",dflt:!1},tick0:{valType:"number"},dtick:{valType:"number"},gridcolor:{valType:"color",dflt:n.lightLine},gridwidth:{valType:"number",min:0,dflt:1}};(e.exports=o({domain:i({name:"geo"},{}),resolution:{valType:"enumerated",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:"enumerated",values:Object.keys(a.scopeDefaults),dflt:"world"},projection:{type:{valType:"enumerated",values:Object.keys(a.projNames)},rotation:{lon:{valType:"number"},lat:{valType:"number"},roll:{valType:"number"}},parallels:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},scale:{valType:"number",min:0,dflt:1}},center:{lon:{valType:"number"},lat:{valType:"number"}},showcoastlines:{valType:"boolean"},coastlinecolor:{valType:"color",dflt:n.defaultLine},coastlinewidth:{valType:"number",min:0,dflt:1},showland:{valType:"boolean",dflt:!1},landcolor:{valType:"color",dflt:a.landColor},showocean:{valType:"boolean",dflt:!1},oceancolor:{valType:"color",dflt:a.waterColor},showlakes:{valType:"boolean",dflt:!1},lakecolor:{valType:"color",dflt:a.waterColor},showrivers:{valType:"boolean",dflt:!1},rivercolor:{valType:"color",dflt:a.waterColor},riverwidth:{valType:"number",min:0,dflt:1},showcountries:{valType:"boolean"},countrycolor:{valType:"color",dflt:n.defaultLine},countrywidth:{valType:"number",min:0,dflt:1},showsubunits:{valType:"boolean"},subunitcolor:{valType:"color",dflt:n.defaultLine},subunitwidth:{valType:"number",min:0,dflt:1},showframe:{valType:"boolean"},framecolor:{valType:"color",dflt:n.defaultLine},framewidth:{valType:"number",min:0,dflt:1},bgcolor:{valType:"color",dflt:n.background},lonaxis:s,lataxis:s},"plot","from-root")).uirevision={valType:"any",editType:"none"}},{"../../../components/color/attributes":712,"../../../plot_api/edit_types":867,"../../domain":909,"../constants":912}],918:[function(t,e,r){"use strict";e.exports=function(t){function e(t,e){return{type:"Feature",id:t.id,properties:t.properties,geometry:r(t.geometry,e)}}function r(e,n){if(!e)return null;if("GeometryCollection"===e.type)return{type:"GeometryCollection",geometries:object.geometries.map(function(t){return r(t,n)})};if(!u.hasOwnProperty(e.type))return null;var i=u[e.type];return t.geo.stream(e,n(i)),i.result()}t.geo.project=function(t,e){var i=e.stream;if(!i)throw new Error("not yet supported");return(t&&n.hasOwnProperty(t.type)?n[t.type]:r)(t,i)};var n={Feature:e,FeatureCollection:function(t,r){return{type:"FeatureCollection",features:t.features.map(function(t){return e(t,r)})}}},i=[],a=[],o={point:function(t,e){i.push([t,e])},result:function(){var t=i.length?i.length<2?{type:"Point",coordinates:i[0]}:{type:"MultiPoint",coordinates:i}:null;return i=[],t}},s={lineStart:c,point:function(t,e){i.push([t,e])},lineEnd:function(){i.length&&(a.push(i),i=[])},result:function(){var t=a.length?a.length<2?{type:"LineString",coordinates:a[0]}:{type:"MultiLineString",coordinates:a}:null;return a=[],t}},l={polygonStart:c,lineStart:c,point:function(t,e){i.push([t,e])},lineEnd:function(){var t=i.length;if(t){do{i.push(i[0].slice())}while(++t<4);a.push(i),i=[]}},polygonEnd:c,result:function(){if(!a.length)return null;var t=[],e=[];return a.forEach(function(r){!function(t){if((e=t.length)<4)return!1;for(var e,r=0,n=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++rn^p>n&&r<(h-u)*(n-c)/(p-c)+u&&(i=!i)}return i}(t[0],r))return t.push(e),!0})||t.push([e])}),a=[],t.length?t.length>1?{type:"MultiPolygon",coordinates:t}:{type:"Polygon",coordinates:t[0]}:null}},u={Point:o,MultiPoint:o,LineString:s,MultiLineString:s,Polygon:l,MultiPolygon:l,Sphere:l};function c(){}var f=1e-6,h=f*f,p=Math.PI,d=p/2,m=(Math.sqrt(p),p/180),g=180/p;function v(t){return t>1?d:t<-1?-d:Math.asin(t)}function y(t){return t>1?0:t<-1?p:Math.acos(t)}var x=t.geo.projection,b=t.geo.projectionMutator;function _(t,e){var r=(2+d)*Math.sin(e);e/=2;for(var n=0,i=1/0;n<10&&Math.abs(i)>f;n++){var a=Math.cos(e);e-=i=(e+Math.sin(e)*(a+2)-r)/(2*a*(1+a))}return[2/Math.sqrt(p*(4+p))*t*(1+Math.cos(e)),2*Math.sqrt(p/(4+p))*Math.sin(e)]}t.geo.interrupt=function(e){var r,n=[[[[-p,0],[0,d],[p,0]]],[[[-p,0],[0,-d],[p,0]]]];function i(t,r){for(var i=r<0?-1:1,a=n[+(r<0)],o=0,s=a.length-1;oa[o][2][0];++o);var l=e(t-a[o][1][0],r);return l[0]+=e(a[o][1][0],i*r>i*a[o][0][1]?a[o][0][1]:r)[0],l}e.invert&&(i.invert=function(t,a){for(var o=r[+(a<0)],s=n[+(a<0)],u=0,c=o.length;u=0;--i){var o=n[1][i],l=180*o[0][0]/p,u=180*o[0][1]/p,c=180*o[1][1]/p,f=180*o[2][0]/p,h=180*o[2][1]/p;r.push(s([[f-e,h-e],[f-e,c+e],[l+e,c+e],[l+e,u-e]],30))}return{type:"Polygon",coordinates:[t.merge(r)]}}(),l)},i},a.lobes=function(t){return arguments.length?(n=t.map(function(t){return t.map(function(t){return[[t[0][0]*p/180,t[0][1]*p/180],[t[1][0]*p/180,t[1][1]*p/180],[t[2][0]*p/180,t[2][1]*p/180]]})}),r=n.map(function(t){return t.map(function(t){var r,n=e(t[0][0],t[0][1])[0],i=e(t[2][0],t[2][1])[0],a=e(t[1][0],t[0][1])[1],o=e(t[1][0],t[1][1])[1];return a>o&&(r=a,a=o,o=r),[[n,a],[i,o]]})}),a):n.map(function(t){return t.map(function(t){return[[180*t[0][0]/p,180*t[0][1]/p],[180*t[1][0]/p,180*t[1][1]/p],[180*t[2][0]/p,180*t[2][1]/p]]})})},a},_.invert=function(t,e){var r=.5*e*Math.sqrt((4+p)/p),n=v(r),i=Math.cos(n);return[t/(2/Math.sqrt(p*(4+p))*(1+i)),v((n+r*(i+2))/(2+d))]},(t.geo.eckert4=function(){return x(_)}).raw=_;var w=t.geo.azimuthalEqualArea.raw;function A(t,e){if(arguments.length<2&&(e=t),1===e)return w;if(e===1/0)return M;function r(r,n){var i=w(r/e,n);return i[0]*=t,i}return r.invert=function(r,n){var i=w.invert(r/t,n);return i[0]*=e,i},r}function M(t,e){return[t*Math.cos(e)/Math.cos(e/=2),2*Math.sin(e)]}function k(t,e){return[3*t/(2*p)*Math.sqrt(p*p/3-e*e),e]}function T(t,e){return[t,1.25*Math.log(Math.tan(p/4+.4*e))]}function E(t){return function(e){var r,n=t*Math.sin(e),i=30;do{e-=r=(e+Math.sin(e)-n)/(1+Math.cos(e))}while(Math.abs(r)>f&&--i>0);return e/2}}M.invert=function(t,e){var r=2*v(e/2);return[t*Math.cos(r/2)/Math.cos(r),r]},(t.geo.hammer=function(){var t=2,e=b(A),r=e(t);return r.coefficient=function(r){return arguments.length?e(t=+r):t},r}).raw=A,k.invert=function(t,e){return[2/3*p*t/Math.sqrt(p*p/3-e*e),e]},(t.geo.kavrayskiy7=function(){return x(k)}).raw=k,T.invert=function(t,e){return[t,2.5*Math.atan(Math.exp(.8*e))-.625*p]},(t.geo.miller=function(){return x(T)}).raw=T,E(p);var S=function(t,e,r){var n=E(r);function i(r,i){return[t*r*Math.cos(i=n(i)),e*Math.sin(i)]}return i.invert=function(n,i){var a=v(i/e);return[n/(t*Math.cos(a)),v((2*a+Math.sin(2*a))/r)]},i}(Math.SQRT2/d,Math.SQRT2,p);function C(t,e){var r=e*e,n=r*r;return[t*(.8707-.131979*r+n*(n*(.003971*r-.001529*n)-.013791)),e*(1.007226+r*(.015085+n*(.028874*r-.044475-.005916*n)))]}(t.geo.mollweide=function(){return x(S)}).raw=S,C.invert=function(t,e){var r,n=e,i=25;do{var a=n*n,o=a*a;n-=r=(n*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(Math.abs(r)>f&&--i>0);return[t/(.8707+(a=n*n)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),n]},(t.geo.naturalEarth=function(){return x(C)}).raw=C;var L=[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];function O(t,e){var r,n=Math.min(18,36*Math.abs(e)/p),i=Math.floor(n),a=n-i,o=(r=L[i])[0],s=r[1],l=(r=L[++i])[0],u=r[1],c=(r=L[Math.min(19,++i)])[0],f=r[1];return[t*(l+a*(c-o)/2+a*a*(c-2*l+o)/2),(e>0?d:-d)*(u+a*(f-s)/2+a*a*(f-2*u+s)/2)]}function z(t,e){return[t*Math.cos(e),e]}function D(t,e){var r,n=Math.cos(e),i=(r=y(n*Math.cos(t/=2)))?r/Math.sin(r):1;return[2*n*Math.sin(t)*i,Math.sin(e)*i]}function P(t,e){var r=D(t,e);return[(r[0]+t/d)/2,(r[1]+e)/2]}L.forEach(function(t){t[1]*=1.0144}),O.invert=function(t,e){var r=e/d,n=90*r,i=Math.min(18,Math.abs(n/5)),a=Math.max(0,Math.floor(i));do{var o=L[a][1],s=L[a+1][1],l=L[Math.min(19,a+2)][1],u=l-o,c=l-2*s+o,f=2*(Math.abs(r)-s)/u,p=c/u,v=f*(1-p*f*(1-2*p*f));if(v>=0||1===a){n=(e>=0?5:-5)*(v+i);var y,x=50;do{v=(i=Math.min(18,Math.abs(n)/5))-(a=Math.floor(i)),o=L[a][1],s=L[a+1][1],l=L[Math.min(19,a+2)][1],n-=(y=(e>=0?d:-d)*(s+v*(l-o)/2+v*v*(l-2*s+o)/2)-e)*g}while(Math.abs(y)>h&&--x>0);break}}while(--a>=0);var b=L[a][0],_=L[a+1][0],w=L[Math.min(19,a+2)][0];return[t/(_+v*(w-b)/2+v*v*(w-2*_+b)/2),n*m]},(t.geo.robinson=function(){return x(O)}).raw=O,z.invert=function(t,e){return[t/Math.cos(e),e]},(t.geo.sinusoidal=function(){return x(z)}).raw=z,D.invert=function(t,e){if(!(t*t+4*e*e>p*p+f)){var r=t,n=e,i=25;do{var a,o=Math.sin(r),s=Math.sin(r/2),l=Math.cos(r/2),u=Math.sin(n),c=Math.cos(n),h=Math.sin(2*n),d=u*u,m=c*c,g=s*s,v=1-m*l*l,x=v?y(c*l)*Math.sqrt(a=1/v):a=0,b=2*x*c*s-t,_=x*u-e,w=a*(m*g+x*c*l*d),A=a*(.5*o*h-2*x*u*s),M=.25*a*(h*s-x*u*m*o),k=a*(d*l+x*g*c),T=A*M-k*w;if(!T)break;var E=(_*A-b*k)/T,S=(b*M-_*w)/T;r-=E,n-=S}while((Math.abs(E)>f||Math.abs(S)>f)&&--i>0);return[r,n]}},(t.geo.aitoff=function(){return x(D)}).raw=D,P.invert=function(t,e){var r=t,n=e,i=25;do{var a,o=Math.cos(n),s=Math.sin(n),l=Math.sin(2*n),u=s*s,c=o*o,h=Math.sin(r),p=Math.cos(r/2),m=Math.sin(r/2),g=m*m,v=1-c*p*p,x=v?y(o*p)*Math.sqrt(a=1/v):a=0,b=.5*(2*x*o*m+r/d)-t,_=.5*(x*s+n)-e,w=.5*a*(c*g+x*o*p*u)+.5/d,A=a*(h*l/4-x*s*m),M=.125*a*(l*m-x*s*c*h),k=.5*a*(u*p+x*g*o)+.5,T=A*M-k*w,E=(_*A-b*k)/T,S=(b*M-_*w)/T;r-=E,n-=S}while((Math.abs(E)>f||Math.abs(S)>f)&&--i>0);return[r,n]},(t.geo.winkel3=function(){return x(P)}).raw=P}},{}],919:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../lib"),a=t("../../registry"),o=Math.PI/180,s=180/Math.PI,l={cursor:"pointer"},u={cursor:"auto"};function c(t,e){return n.behavior.zoom().translate(e.translate()).scale(e.scale())}function f(t,e,r){var n=t.id,o=t.graphDiv,s=o.layout,l=s[n],u=o._fullLayout,c=u[n],f={},h={};function p(t,e){f[n+"."+t]=i.nestedProperty(l,t).get(),a.call("_storeDirectGUIEdit",s,u._preGUI,f);var r=i.nestedProperty(c,t);r.get()!==e&&(r.set(e),i.nestedProperty(l,t).set(e),h[n+"."+t]=e)}r(p),p("projection.scale",e.scale()/t.fitScale),o.emit("plotly_relayout",h)}function h(t,e){var r=c(0,e);function i(r){var n=e.invert(t.midPt);r("center.lon",n[0]),r("center.lat",n[1])}return r.on("zoomstart",function(){n.select(this).style(l)}).on("zoom",function(){e.scale(n.event.scale).translate(n.event.translate),t.render()}).on("zoomend",function(){n.select(this).style(u),f(t,e,i)}),r}function p(t,e){var r,i,a,o,s,h,p,d,m,g=c(0,e),v=2;function y(t){return e.invert(t)}function x(r){var n=e.rotate(),i=e.invert(t.midPt);r("projection.rotation.lon",-n[0]),r("center.lon",i[0]),r("center.lat",i[1])}return g.on("zoomstart",function(){n.select(this).style(l),r=n.mouse(this),i=e.rotate(),a=e.translate(),o=i,s=y(r)}).on("zoom",function(){if(h=n.mouse(this),function(t){var r=y(t);if(!r)return!0;var n=e(r);return Math.abs(n[0]-t[0])>v||Math.abs(n[1]-t[1])>v}(r))return g.scale(e.scale()),void g.translate(e.translate());e.scale(n.event.scale),e.translate([a[0],n.event.translate[1]]),s?y(h)&&(d=y(h),p=[o[0]+(d[0]-s[0]),i[1],i[2]],e.rotate(p),o=p):s=y(r=h),m=!0,t.render()}).on("zoomend",function(){n.select(this).style(u),m&&f(t,e,x)}),g}function d(t,e){var r,i={r:e.rotate(),k:e.scale()},a=c(0,e),h=function(t){var e=0,r=arguments.length,i=[];for(;++ed?(a=(f>0?90:-90)-p,i=0):(a=Math.asin(f/d)*s-p,i=Math.sqrt(d*d-f*f));var m=180-a-2*p,v=(Math.atan2(h,c)-Math.atan2(u,i))*s,x=(Math.atan2(h,c)-Math.atan2(u,-i))*s,b=g(r[0],r[1],a,v),_=g(r[0],r[1],m,x);return b<=_?[a,v,r[2]]:[m,x,r[2]]}(A,r,S);isFinite(M[0])&&isFinite(M[1])&&isFinite(M[2])||(M=S),e.rotate(M),S=M}}else r=m(e,T=b);h.of(this,arguments)({type:"zoom"})}),k=h.of(this,arguments),p++||k({type:"zoomstart"})}).on("zoomend",function(){var r;n.select(this).style(u),d.call(a,"zoom",null),r=h.of(this,arguments),--p||r({type:"zoomend"}),f(t,e,v)}).on("zoom.redraw",function(){t.render()}),n.rebind(a,h,"on")}function m(t,e){var r=t.invert(e);return r&&isFinite(r[0])&&isFinite(r[1])&&function(t){var e=t[0]*o,r=t[1]*o,n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}(r)}function g(t,e,r,n){var i=v(r-t),a=v(n-e);return Math.sqrt(i*i+a*a)}function v(t){return(t%360+540)%360-180}function y(t,e,r){var n=r*o,i=t.slice(),a=0===e?1:0,s=2===e?1:2,l=Math.cos(n),u=Math.sin(n);return i[a]=t[a]*l-t[s]*u,i[s]=t[s]*l+t[a]*u,i}function x(t,e){for(var r=0,n=0,i=t.length;nMath.abs(s)?(u.boxEnd[1]=u.boxStart[1]+Math.abs(a)*_*(s>=0?1:-1),u.boxEnd[1]l[3]&&(u.boxEnd[1]=l[3],u.boxEnd[0]=u.boxStart[0]+(l[3]-u.boxStart[1])/Math.abs(_))):(u.boxEnd[0]=u.boxStart[0]+Math.abs(s)/_*(a>=0?1:-1),u.boxEnd[0]l[2]&&(u.boxEnd[0]=l[2],u.boxEnd[1]=u.boxStart[1]+(l[2]-u.boxStart[0])*Math.abs(_)))}}else u.boxEnabled?(a=u.boxStart[0]!==u.boxEnd[0],s=u.boxStart[1]!==u.boxEnd[1],a||s?(a&&(g(0,u.boxStart[0],u.boxEnd[0]),t.xaxis.autorange=!1),s&&(g(1,u.boxStart[1],u.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),u.boxEnabled=!1,u.boxInited=!1):u.boxInited&&(u.boxInited=!1);break;case"pan":u.boxEnabled=!1,u.boxInited=!1,e?(u.panning||(u.dragStart[0]=n,u.dragStart[1]=i),Math.abs(u.dragStart[0]-n).999&&(g="turntable"):g="turntable")}else g="turntable";r("dragmode",g),r("hovermode",n.getDfltFromLayout("hovermode"))}e.exports=function(t,e,r){var i=e._basePlotModules.length>1;o(t,e,r,{type:c,attributes:l,handleDefaults:f,fullLayout:e,font:e.font,fullData:r,getDfltFromLayout:function(e){if(!i)return n.validate(t[e],l[e])?t[e]:void 0},paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},{"../../../components/color":713,"../../../lib":836,"../../../registry":965,"../../get_data":920,"../../subplot_defaults":960,"./axis_defaults":928,"./layout_attributes":931}],931:[function(t,e,r){"use strict";var n=t("./axis_attributes"),i=t("../../domain").attributes,a=t("../../../lib/extend").extendFlat,o=t("../../../lib").counterRegex;function s(t,e,r){return{x:{valType:"number",dflt:t,editType:"camera"},y:{valType:"number",dflt:e,editType:"camera"},z:{valType:"number",dflt:r,editType:"camera"},editType:"camera"}}e.exports={_arrayAttrRegexps:[o("scene",".annotations",!0)],bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"plot"},camera:{up:a(s(0,0,1),{}),center:a(s(0,0,0),{}),eye:a(s(1.25,1.25,1.25),{}),projection:{type:{valType:"enumerated",values:["perspective","orthographic"],dflt:"perspective",editType:"calc"},editType:"calc"},editType:"camera"},domain:i({name:"scene",editType:"plot"}),aspectmode:{valType:"enumerated",values:["auto","cube","data","manual"],dflt:"auto",editType:"plot",impliedEdits:{"aspectratio.x":void 0,"aspectratio.y":void 0,"aspectratio.z":void 0}},aspectratio:{x:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},y:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},z:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},editType:"plot",impliedEdits:{aspectmode:"manual"}},xaxis:n,yaxis:n,zaxis:n,dragmode:{valType:"enumerated",values:["orbit","turntable","zoom","pan",!1],editType:"plot"},hovermode:{valType:"enumerated",values:["closest",!1],dflt:"closest",editType:"modebar"},uirevision:{valType:"any",editType:"none"},editType:"plot",_deprecated:{cameraposition:{valType:"info_array",editType:"camera"}}}},{"../../../lib":836,"../../../lib/extend":826,"../../domain":909,"./axis_attributes":927}],932:[function(t,e,r){"use strict";var n=t("../../../lib/str2rgbarray"),i=["xaxis","yaxis","zaxis"];function a(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}a.prototype.merge=function(t){for(var e=0;e<3;++e){var r=t[i[e]];r.visible?(this.enabled[e]=r.showspikes,this.colors[e]=n(r.spikecolor),this.drawSides[e]=r.spikesides,this.lineWidth[e]=r.spikethickness):(this.enabled[e]=!1,this.drawSides[e]=!1)}},e.exports=function(t){var e=new a;return e.merge(t),e}},{"../../../lib/str2rgbarray":859}],933:[function(t,e,r){"use strict";e.exports=function(t){for(var e=t.axesOptions,r=t.glplot.axesPixels,s=t.fullSceneLayout,l=[[],[],[]],u=0;u<3;++u){var c=s[a[u]];if(c._length=(r[u].hi-r[u].lo)*r[u].pixelsPerDataUnit/t.dataScale[u],Math.abs(c._length)===1/0||isNaN(c._length))l[u]=[];else{c._input_range=c.range.slice(),c.range[0]=r[u].lo/t.dataScale[u],c.range[1]=r[u].hi/t.dataScale[u],c._m=1/(t.dataScale[u]*r[u].pixelsPerDataUnit),c.range[0]===c.range[1]&&(c.range[0]-=1,c.range[1]+=1);var f=c.tickmode;if("auto"===c.tickmode){c.tickmode="linear";var h=c.nticks||i.constrain(c._length/40,4,9);n.autoTicks(c,Math.abs(c.range[1]-c.range[0])/h)}for(var p=n.calcTicks(c),d=0;d/g," "));l[u]=p,c.tickmode=f}}e.ticks=l;for(var u=0;u<3;++u){o[u]=.5*(t.glplot.bounds[0][u]+t.glplot.bounds[1][u]);for(var d=0;d<2;++d)e.bounds[d][u]=t.glplot.bounds[d][u]}t.contourLevels=function(t){for(var e=new Array(3),r=0;r<3;++r){for(var n=t[r],i=new Array(n.length),a=0;a")):"isosurface"===e.type?(b.valueLabel=f.tickText(t.mockAxis,t.mockAxis.d2l(u.traceCoordinate[3]),"hover").text,M.push("value: "+b.valueLabel),u.textLabel&&M.push(u.textLabel),v=M.join("
")):v=u.textLabel;var k={x:u.traceCoordinate[0],y:u.traceCoordinate[1],z:u.traceCoordinate[2],data:e._input,fullData:e,curveNumber:e.index,pointNumber:x};h.appendArrayPointValue(k,e,x),e._module.eventData&&(k=e._module.eventData(k,u,e,{},x));var T={points:[k]};t.fullSceneLayout.hovermode&&h.loneHover({trace:e,x:(.5+.5*g[0]/g[3])*i,y:(.5-.5*g[1]/g[3])*a,xLabel:b.xLabel,yLabel:b.yLabel,zLabel:b.zLabel,text:v,name:l.name,color:h.castHoverOption(e,x,"bgcolor")||l.color,borderColor:h.castHoverOption(e,x,"bordercolor"),fontFamily:h.castHoverOption(e,x,"font.family"),fontSize:h.castHoverOption(e,x,"font.size"),fontColor:h.castHoverOption(e,x,"font.color"),hovertemplate:c.castOption(e,x,"hovertemplate"),hovertemplateLabels:c.extendFlat({},k,b),eventData:[k]},{container:r,gd:t.graphDiv}),u.buttons&&u.distance<5?t.graphDiv.emit("plotly_click",T):t.graphDiv.emit("plotly_hover",T),o=T}else h.loneUnhover(r),t.graphDiv.emit("plotly_unhover",o);t.drawAnnotations(t)}.bind(null,t),t.traces={},t.make4thDimension(),!0}function b(t,e){var r=document.createElement("div"),n=t.container;this.graphDiv=t.graphDiv;var i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.style.position="absolute",i.style.top=i.style.left="0px",i.style.width=i.style.height="100%",i.style["z-index"]=20,i.style["pointer-events"]="none",r.appendChild(i),this.svgContainer=i,r.id=t.id,r.style.position="absolute",r.style.top=r.style.left="0px",r.style.width=r.style.height="100%",n.appendChild(r),this.fullLayout=e,this.id=t.id||"scene",this.fullSceneLayout=e[this.id],this.plotArgs=[[],{},{}],this.axesOptions=g(e,e[this.id]),this.spikeOptions=v(e[this.id]),this.container=r,this.staticMode=!!t.staticPlot,this.pixelRatio=this.pixelRatio||t.plotGlPixelRatio||2,this.dataScale=[1,1,1],this.contourLevels=[[],[],[]],this.convertAnnotations=u.getComponentMethod("annotations3d","convert"),this.drawAnnotations=u.getComponentMethod("annotations3d","draw"),x(this,e.scene.camera,this.pixelRatio)}var _=b.prototype;_.initializeGLCamera=function(){var t=this.fullSceneLayout.camera,e="orthographic"===t.projection.type;this.camera=a(this.container,{center:[t.center.x,t.center.y,t.center.z],eye:[t.eye.x,t.eye.y,t.eye.z],up:[t.up.x,t.up.y,t.up.z],_ortho:e,zoomMin:.01,zoomMax:100,mode:"orbit"})},_.recoverContext=function(){var t=this,e=this.glplot.gl,r=this.glplot.canvas,n=this.glplot.camera,i=this.glplot.pixelRatio;this.glplot.dispose(),requestAnimationFrame(function a(){e.isContextLost()?requestAnimationFrame(a):x(t,n,i,r,e)?t.plot.apply(t,t.plotArgs):c.error("Catastrophic and unrecoverable WebGL error. Context lost.")})};var w=["xaxis","yaxis","zaxis"];function A(t,e,r){for(var n=t.fullSceneLayout,i=0;i<3;i++){var a=w[i],o=a.charAt(0),s=n[a],l=e[o],u=e[o+"calendar"],f=e["_"+o+"length"];if(c.isArrayOrTypedArray(l))for(var h,p=0;p<(f||l.length);p++)if(c.isArrayOrTypedArray(l[p]))for(var d=0;dm[1][a])m[0][a]=-1,m[1][a]=1;else{var S=m[1][a]-m[0][a];m[0][a]-=S/32,m[1][a]+=S/32}if("reversed"===s.autorange){var C=m[0][a];m[0][a]=m[1][a],m[1][a]=C}}else{var L=s.range;m[0][a]=s.r2l(L[0]),m[1][a]=s.r2l(L[1])}m[0][a]===m[1][a]&&(m[0][a]-=1,m[1][a]+=1),g[a]=m[1][a]-m[0][a],this.glplot.bounds[0][a]=m[0][a]*h[a],this.glplot.bounds[1][a]=m[1][a]*h[a]}var O=[1,1,1];for(a=0;a<3;++a){var z=v[l=(s=u[w[a]]).type];O[a]=Math.pow(z.acc,1/z.count)/h[a]}var D;if("auto"===u.aspectmode)D=Math.max.apply(null,O)/Math.min.apply(null,O)<=4?O:[1,1,1];else if("cube"===u.aspectmode)D=[1,1,1];else if("data"===u.aspectmode)D=O;else{if("manual"!==u.aspectmode)throw new Error("scene.js aspectRatio was not one of the enumerated types");var P=u.aspectratio;D=[P.x,P.y,P.z]}u.aspectratio.x=c.aspectratio.x=D[0],u.aspectratio.y=c.aspectratio.y=D[1],u.aspectratio.z=c.aspectratio.z=D[2],this.glplot.aspect=D;var I=u.domain||null,N=e._size||null;if(I&&N){var R=this.container.style;R.position="absolute",R.left=N.l+I.x[0]*N.w+"px",R.top=N.t+(1-I.y[1])*N.h+"px",R.width=N.w*(I.x[1]-I.x[0])+"px",R.height=N.h*(I.y[1]-I.y[0])+"px"}this.glplot.redraw()}},_.destroy=function(){this.glplot&&(this.camera.mouseListener.enabled=!1,this.container.removeEventListener("wheel",this.camera.wheelListener),this.camera=this.glplot.camera=null,this.glplot.dispose(),this.container.parentNode.removeChild(this.container),this.glplot=null)},_.getCamera=function(){return this.glplot.camera.view.recalcMatrix(this.camera.view.lastT()),M(this.glplot.camera)},_.setCamera=function(t){var e;this.glplot.camera.lookAt.apply(this,[[(e=t).eye.x,e.eye.y,e.eye.z],[e.center.x,e.center.y,e.center.z],[e.up.x,e.up.y,e.up.z]]);var r="orthographic"===t.projection.type;if(r!==this.glplot.camera._ortho){this.glplot.redraw();var n=this.glplot.pixelRatio,i=this.glplot.clearColor;this.glplot.gl.clearColor(i[0],i[1],i[2],i[3]),this.glplot.gl.clear(this.glplot.gl.DEPTH_BUFFER_BIT|this.glplot.gl.COLOR_BUFFER_BIT),this.glplot.dispose(),x(this,t,n),this.glplot.camera._ortho=r}},_.saveCamera=function(t){var e=this.fullLayout,r=this.getCamera(),n=c.nestedProperty(t,this.id+".camera"),i=n.get(),a=!1;function o(t,e,r,n){var i=["up","center","eye"],a=["x","y","z"];return e[i[r]]&&t[i[r]][a[n]]===e[i[r]][a[n]]}if(void 0===i)a=!0;else{for(var s=0;s<3;s++)for(var l=0;l<3;l++)if(!o(r,i,s,l)){a=!0;break}(!i.projection||r.projection&&r.projection.type!==i.projection.type)&&(a=!0)}if(a){var f={};f[this.id+".camera"]=i,u.call("_storeDirectGUIEdit",t,e._preGUI,f),n.set(r),c.nestedProperty(e,this.id+".camera").set(r)}return a},_.updateFx=function(t,e){var r=this.camera;if(r)if("orbit"===t)r.mode="orbit",r.keyBindingMode="rotate";else if("turntable"===t){r.up=[0,0,1],r.mode="turntable",r.keyBindingMode="rotate";var n=this.graphDiv,i=n._fullLayout,a=this.fullSceneLayout.camera,o=a.up.x,s=a.up.y,l=a.up.z;if(l/Math.sqrt(o*o+s*s+l*l)>.999)return;var f=this.id+".camera.up",h={x:0,y:0,z:1},p={};p[f]=h;var d=n.layout;u.call("_storeDirectGUIEdit",d,i._preGUI,p),a.up=h,c.nestedProperty(d,f).set(h)}else r.keyBindingMode=t;this.fullSceneLayout.hovermode=e},_.toImage=function(t){t||(t="png"),this.staticMode&&this.container.appendChild(n),this.glplot.redraw();var e=this.glplot.gl,r=e.drawingBufferWidth,i=e.drawingBufferHeight;e.bindFramebuffer(e.FRAMEBUFFER,null);var a=new Uint8Array(r*i*4);e.readPixels(0,0,r,i,e.RGBA,e.UNSIGNED_BYTE,a);for(var o=0,s=i-1;o0)}function l(t){var e={},r={};switch(t.type){case"circle":n.extendFlat(r,{"circle-radius":t.circle.radius,"circle-color":t.color,"circle-opacity":t.opacity});break;case"line":n.extendFlat(r,{"line-width":t.line.width,"line-color":t.color,"line-opacity":t.opacity,"line-dasharray":t.line.dash});break;case"fill":n.extendFlat(r,{"fill-color":t.color,"fill-outline-color":t.fill.outlinecolor,"fill-opacity":t.opacity});break;case"symbol":var a=t.symbol,o=i(a.textposition,a.iconsize);n.extendFlat(e,{"icon-image":a.icon+"-15","icon-size":a.iconsize/10,"text-field":a.text,"text-size":a.textfont.size,"text-anchor":o.anchor,"text-offset":o.offset,"symbol-placement":a.placement}),n.extendFlat(r,{"icon-color":t.color,"text-color":a.textfont.color,"text-opacity":t.opacity})}return{layout:e,paint:r}}o.update=function(t){this.visible?this.needsNewSource(t)?(this.removeLayer(),this.updateSource(t),this.updateLayer(t)):this.needsNewLayer(t)?this.updateLayer(t):this.updateStyle(t):(this.updateSource(t),this.updateLayer(t)),this.visible=s(t)},o.needsNewSource=function(t){return this.sourceType!==t.sourcetype||this.source!==t.source||this.layerType!==t.type},o.needsNewLayer=function(t){return this.layerType!==t.type||this.below!==t.below},o.updateSource=function(t){var e=this.map;if(e.getSource(this.idSource)&&e.removeSource(this.idSource),this.sourceType=t.sourcetype,this.source=t.source,s(t)){var r=function(t){var e,r=t.sourcetype,n=t.source,i={type:r};"geojson"===r?e="data":"vector"===r&&(e="string"==typeof n?"url":"tiles");return i[e]=n,i}(t);e.addSource(this.idSource,r)}},o.updateLayer=function(t){var e=this.map,r=l(t);this.removeLayer(),this.layerType=t.type,s(t)&&e.addLayer({id:this.idLayer,source:this.idSource,"source-layer":t.sourcelayer||"",type:t.type,minzoom:t.minzoom,maxzoom:t.maxzoom,layout:r.layout,paint:r.paint},t.below)},o.updateStyle=function(t){if(s(t)){var e=l(t);this.mapbox.setOptions(this.idLayer,"setLayoutProperty",e.layout),this.mapbox.setOptions(this.idLayer,"setPaintProperty",e.paint)}},o.removeLayer=function(){var t=this.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer)},o.dispose=function(){var t=this.map;t.removeLayer(this.idLayer),t.removeSource(this.idSource)},e.exports=function(t,e,r){var n=new a(t,e);return n.update(r),n}},{"../../lib":836,"./convert_text_opts":939}],942:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../components/color").defaultLine,a=t("../domain").attributes,o=t("../font_attributes"),s=t("../../traces/scatter/attributes").textposition,l=t("../../plot_api/edit_types").overrideAll,u=t("../../plot_api/plot_template").templatedArray,c=o({});c.family.dflt="Open Sans Regular, Arial Unicode MS Regular",(e.exports=l({_arrayAttrRegexps:[n.counterRegex("mapbox",".layers",!0)],domain:a({name:"mapbox"}),accesstoken:{valType:"string",noBlank:!0,strict:!0},style:{valType:"any",values:["basic","streets","outdoors","light","dark","satellite","satellite-streets"],dflt:"basic"},center:{lon:{valType:"number",dflt:0},lat:{valType:"number",dflt:0}},zoom:{valType:"number",dflt:1},bearing:{valType:"number",dflt:0},pitch:{valType:"number",dflt:0},layers:u("layer",{visible:{valType:"boolean",dflt:!0},sourcetype:{valType:"enumerated",values:["geojson","vector"],dflt:"geojson"},source:{valType:"any"},sourcelayer:{valType:"string",dflt:""},type:{valType:"enumerated",values:["circle","line","fill","symbol"],dflt:"circle"},below:{valType:"string",dflt:""},color:{valType:"color",dflt:i},opacity:{valType:"number",min:0,max:1,dflt:1},minzoom:{valType:"number",min:0,max:24,dflt:0},maxzoom:{valType:"number",min:0,max:24,dflt:24},circle:{radius:{valType:"number",dflt:15}},line:{width:{valType:"number",dflt:2},dash:{valType:"data_array"}},fill:{outlinecolor:{valType:"color",dflt:i}},symbol:{icon:{valType:"string",dflt:"marker"},iconsize:{valType:"number",dflt:10},text:{valType:"string",dflt:""},placement:{valType:"enumerated",values:["point","line","line-center"],dflt:"point"},textfont:c,textposition:n.extendFlat({},s,{arrayOk:!1})}})},"plot","from-root")).uirevision={valType:"any",editType:"none"}},{"../../components/color":713,"../../lib":836,"../../plot_api/edit_types":867,"../../plot_api/plot_template":874,"../../traces/scatter/attributes":1187,"../domain":909,"../font_attributes":910}],943:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../subplot_defaults"),a=t("../array_container_defaults"),o=t("./layout_attributes");function s(t,e,r,n){r("accesstoken",n.accessToken),r("style"),r("center.lon"),r("center.lat"),r("zoom"),r("bearing"),r("pitch"),a(t,e,{name:"layers",handleItemDefaults:l}),e._input=t}function l(t,e){function r(r,i){return n.coerce(t,e,o.layers,r,i)}if(r("visible")){var i=r("sourcetype");r("source"),"vector"===i&&r("sourcelayer");var a=r("type");r("below"),r("color"),r("opacity"),r("minzoom"),r("maxzoom"),"circle"===a&&r("circle.radius"),"line"===a&&(r("line.width"),r("line.dash")),"fill"===a&&r("fill.outlinecolor"),"symbol"===a&&(r("symbol.icon"),r("symbol.iconsize"),r("symbol.text"),n.coerceFont(r,"symbol.textfont"),r("symbol.textposition"),r("symbol.placement"))}}e.exports=function(t,e,r){i(t,e,r,{type:"mapbox",attributes:o,handleDefaults:s,partition:"y",accessToken:e._mapboxAccessToken})}},{"../../lib":836,"../array_container_defaults":880,"../subplot_defaults":960,"./layout_attributes":942}],944:[function(t,e,r){"use strict";var n=t("mapbox-gl"),i=t("../../components/fx"),a=t("../../lib"),o=t("../../registry"),s=t("../../components/dragelement"),l=t("../cartesian/select").prepSelect,u=t("../cartesian/select").selectOnClick,c=t("./constants"),f=t("./layout_attributes"),h=t("./layers");function p(t){this.id=t.id,this.gd=t.gd,this.container=t.container,this.isStatic=t.staticPlot;var e=t.fullLayout;this.uid=e._uid+"-"+this.id,this.div=null,this.xaxis=null,this.yaxis=null,this.createFramework(e),this.map=null,this.accessToken=null,this.styleObj=null,this.traceHash={},this.layerList=[]}var d=p.prototype;function m(t){var e=f.style.values,r=f.style.dflt,n={};return a.isPlainObject(t)?(n.id=t.id,n.style=t):"string"==typeof t?(n.id=t,n.style=-1!==e.indexOf(t)?g(t):t):(n.id=r,n.style=g(r)),n.transition={duration:0,delay:0},n}function g(t){return c.styleUrlPrefix+t+"-"+c.styleUrlSuffix}function v(t){return[t.lon,t.lat]}e.exports=function(t){return new p(t)},d.plot=function(t,e,r){var n,i=this,a=e[i.id];i.map&&a.accesstoken!==i.accessToken&&(i.map.remove(),i.map=null,i.styleObj=null,i.traceHash=[],i.layerList={}),n=i.map?new Promise(function(r,n){i.updateMap(t,e,r,n)}):new Promise(function(r,n){i.createMap(t,e,r,n)}),r.push(n)},d.createMap=function(t,e,r,a){var s=this,l=s.gd,f=e[s.id],h=s.styleObj=m(f.style);s.accessToken=f.accesstoken;var p=s.map=new n.Map({container:s.div,style:h.style,center:v(f.center),zoom:f.zoom,bearing:f.bearing,pitch:f.pitch,interactive:!s.isStatic,preserveDrawingBuffer:s.isStatic,doubleClickZoom:!1,boxZoom:!1}),d=c.controlContainerClassName,g=s.div.getElementsByClassName(d)[0];if(s.div.removeChild(g),p._canvas.style.left="0px",p._canvas.style.top="0px",s.rejectOnError(a),p.once("load",function(){s.updateData(t),s.updateLayout(e),s.resolveOnRender(r)}),!s.isStatic){var y=!1;p.on("moveend",function(t){if(s.map){if(t.originalEvent||y){var e=l._fullLayout[s.id];o.call("_storeDirectGUIEdit",l.layout,l._fullLayout._preGUI,s.getViewEdits(e));var r=s.getView();e._input.center=e.center=r.center,e._input.zoom=e.zoom=r.zoom,e._input.bearing=e.bearing=r.bearing,e._input.pitch=e.pitch=r.pitch,l.emit("plotly_relayout",s.getViewEdits(r))}y=!1}}),p.on("wheel",function(){y=!0}),p.on("mousemove",function(t){var e=s.div.getBoundingClientRect();t.clientX=t.point.x+e.left,t.clientY=t.point.y+e.top,t.target.getBoundingClientRect=function(){return e},s.xaxis.p2c=function(){return t.lngLat.lng},s.yaxis.p2c=function(){return t.lngLat.lat},i.hover(l,t,s.id)}),p.on("dragstart",x),p.on("zoomstart",x),p.on("dblclick",function(){var t=l._fullLayout[s.id];o.call("_storeDirectGUIEdit",l.layout,l._fullLayout._preGUI,s.getViewEdits(t));var e=s.viewInitial;p.setCenter(v(e.center)),p.setZoom(e.zoom),p.setBearing(e.bearing),p.setPitch(e.pitch);var r=s.getView();t._input.center=t.center=r.center,t._input.zoom=t.zoom=r.zoom,t._input.bearing=t.bearing=r.bearing,t._input.pitch=t.pitch=r.pitch,l.emit("plotly_doubleclick",null),l.emit("plotly_relayout",s.getViewEdits(r))}),s.clearSelect=function(){l._fullLayout._zoomlayer.selectAll(".select-outline").remove()},s.onClickInPanFn=function(t){return function(e){var r=l._fullLayout.clickmode;r.indexOf("select")>-1&&u(e.originalEvent,l,[s.xaxis],[s.yaxis],s.id,t),r.indexOf("event")>-1&&i.click(l,e.originalEvent)}}}function x(){i.loneUnhover(e._toppaper)}},d.updateMap=function(t,e,r,n){var i=this,a=i.map,o=e[this.id];i.rejectOnError(n);var s=m(o.style);i.styleObj.id!==s.id?(i.styleObj=s,a.setStyle(s.style),a.once("styledata",function(){i.traceHash={},i.updateData(t),i.updateLayout(e),i.resolveOnRender(r)})):(i.updateData(t),i.updateLayout(e),i.resolveOnRender(r)),this.gd._context._scrollZoom.mapbox?a.scrollZoom.enable():a.scrollZoom.disable()},d.updateData=function(t){var e,r,n,i,a=this.traceHash;for(n=0;n=e.width-20?(a["text-anchor"]="start",a.x=5):(a["text-anchor"]="end",a.x=e._paper.attr("width")-7),r.attr(a);var o=r.select(".js-link-to-tool"),s=r.select(".js-link-spacer"),c=r.select(".js-sourcelinks");t._context.showSources&&t._context.showSources(t),t._context.showLink&&function(t,e){e.text("");var r=e.append("a").attr({"xlink:xlink:href":"#",class:"link--impt link--embedview","font-weight":"bold"}).text(t._context.linkText+" "+String.fromCharCode(187));if(t._context.sendData)r.on("click",function(){g.sendDataToCloud(t)});else{var n=window.location.pathname.split("/"),i=window.location.search;r.attr({"xlink:xlink:show":"new","xlink:xlink:href":"/"+n[2].split(".")[0]+"/"+n[1]+i})}}(t,o),s.text(o.text()&&c.text()?" - ":"")}},g.sendDataToCloud=function(t){t.emit("plotly_beforeexport");var e=(window.PLOTLYENV||{}).BASE_URL||t._context.plotlyServerURL,r=n.select(t).append("div").attr("id","hiddenform").style("display","none"),i=r.append("form").attr({action:e+"/external",method:"post",target:"_blank"});return i.append("input").attr({type:"text",name:"data"}).node().value=g.graphJson(t,!1,"keepdata"),i.node().submit(),r.remove(),t.emit("plotly_afterexport"),!1};var x=["days","shortDays","months","shortMonths","periods","dateTime","date","time","decimal","thousands","grouping","currency"],b=["year","month","dayMonth","dayMonthYear"];function _(t,e){var r=t._context.locale,n=!1,i={};function o(t){for(var r=!0,a=0;a0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push(function(){n=!0}),r.redraw&&t._transitionData._interruptCallbacks.push(function(){return a.call("redraw",t)}),t._transitionData._interruptCallbacks.push(function(){t.emit("plotly_transitioninterrupted",[])});var o=0,s=0;function l(){return o++,function(){var e;s++,n||s!==o||(e=i,t._transitionData&&(function(t){if(t)for(;t.length;)t.shift()}(t._transitionData._interruptCallbacks),Promise.resolve().then(function(){if(r.redraw)return a.call("redraw",t)}).then(function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit("plotly_transitioned",[])}).then(e)))}}r.runFn(l),setTimeout(l())})}],o=l.syncOrAsync(i,t);return o&&o.then||(o=Promise.resolve()),o.then(function(){return t})}function E(t,e){for(var r=0;r1&&z.length>1){for(a.getComponentMethod("grid","sizeDefaults")(u,s),o=0;o15&&z.length>15&&0===s.shapes.length&&0===s.images.length,s._hasCartesian=s._has("cartesian"),s._hasGeo=s._has("geo"),s._hasGL3D=s._has("gl3d"),s._hasGL2D=s._has("gl2d"),s._hasTernary=s._has("ternary"),s._hasPie=s._has("pie"),g.linkSubplots(f,s,c,i),g.cleanPlot(f,s,c,i),d(s,i),s._preGUI||(s._preGUI={}),s._tracePreGUI||(s._tracePreGUI={});var R,F=s._tracePreGUI,B={};for(R in F)B[R]="old";for(o=0;o0){var f=1-2*s;n=Math.round(f*n),a=Math.round(f*a)}}var h=g.layoutAttributes.width.min,p=g.layoutAttributes.height.min;n1,m=!e.height&&Math.abs(r.height-a)>1;(m||d)&&(d&&(r.width=n),m&&(r.height=a)),t._initialAutoSize||(t._initialAutoSize={width:n,height:a}),g.sanitizeMargins(r)},g.supplyLayoutModuleDefaults=function(t,e,r,n){var i,o,s,u=a.componentsRegistry,c=e._basePlotModules,f=a.subplotsRegistry.cartesian;for(i in u)(s=u[i]).includeBasePlot&&s.includeBasePlot(t,e);for(var h in c.length||c.push(f),e._has("cartesian")&&(a.getComponentMethod("grid","contentDefaults")(t,e),f.finalizeSubplots(t,e)),e._subplots)e._subplots[h].sort(l.subplotSort);for(o=0;o.5*n.width&&(r.l=r.r=0),r.b+r.t>.5*n.height&&(r.b=r.t=0);var l=void 0!==r.xl?r.xl:r.x,u=void 0!==r.xr?r.xr:r.x,c=void 0!==r.yt?r.yt:r.y,f=void 0!==r.yb?r.yb:r.y;i[e]={l:{val:l,size:r.l+o},r:{val:u,size:r.r+o},b:{val:f,size:r.b+o},t:{val:c,size:r.t+o}},a[e]=1}else delete i[e],delete a[e];n._replotting||g.doAutoMargin(t)}},g.doAutoMargin=function(t){var e=t._fullLayout;e._size||(e._size={}),k(e);var r=e._size,n=JSON.stringify(r),o=e.margin,s=o.l,l=o.r,u=o.t,c=o.b,f=e.width,h=e.height,p=e._pushmargin,d=e._pushmarginIds;if(!1!==e.margin.autoexpand){for(var m in p)d[m]||delete p[m];for(var g in p.base={l:{val:0,size:s},r:{val:1,size:l},t:{val:1,size:u},b:{val:0,size:c}},p){var v=p[g].l||{},y=p[g].b||{},x=v.val,b=v.size,_=y.val,w=y.size;for(var A in p){if(i(b)&&p[A].r){var M=p[A].r.val,T=p[A].r.size;if(M>x){var E=(b*M+(T-f)*x)/(M-x),S=(T*(1-x)+(b-f)*(1-M))/(M-x);E>=0&&S>=0&&f-(E+S)>0&&E+S>s+l&&(s=E,l=S)}}if(i(w)&&p[A].t){var C=p[A].t.val,L=p[A].t.size;if(C>_){var O=(w*C+(L-h)*_)/(C-_),z=(L*(1-_)+(w-h)*(1-C))/(C-_);O>=0&&z>=0&&h-(z+O)>0&&O+z>c+u&&(c=O,u=z)}}}}}if(r.l=Math.round(s),r.r=Math.round(l),r.t=Math.round(u),r.b=Math.round(c),r.p=Math.round(o.pad),r.w=Math.round(f)-r.l-r.r,r.h=Math.round(h)-r.t-r.b,!e._replotting&&"{}"!==n&&n!==JSON.stringify(e._size))return"_redrawFromAutoMarginCount"in e?e._redrawFromAutoMarginCount++:e._redrawFromAutoMarginCount=1,a.call("plot",t)},g.graphJson=function(t,e,r,n,i){(i&&e&&!t._fullData||i&&!e&&!t._fullLayout)&&g.supplyDefaults(t);var a=i?t._fullData:t.data,o=i?t._fullLayout:t.layout,s=(t._transitionData||{})._frames;function u(t){if("function"==typeof t)return null;if(l.isPlainObject(t)){var e,n,i={};for(e in t)if("function"!=typeof t[e]&&-1===["_","["].indexOf(e.charAt(0))){if("keepdata"===r){if("src"===e.substr(e.length-3))continue}else if("keepstream"===r){if("string"==typeof(n=t[e+"src"])&&n.indexOf(":")>0&&!l.isPlainObject(t.stream))continue}else if("keepall"!==r&&"string"==typeof(n=t[e+"src"])&&n.indexOf(":")>0)continue;i[e]=u(t[e])}return i}return Array.isArray(t)?t.map(u):l.isTypedArray(t)?l.simpleMap(t,l.identity):l.isJSDate(t)?l.ms2DateTimeLocal(+t):t}var c={data:(a||[]).map(function(t){var r=u(t);return e&&delete r.fit,r})};return e||(c.layout=u(o)),t.framework&&t.framework.isPolar&&(c=t.framework.getConfig()),s&&(c.frames=u(s)),"object"===n?c:JSON.stringify(c)},g.modifyFrames=function(t,e){var r,n,i,a=t._transitionData._frames,o=t._transitionData._frameHash;for(r=0;r=0;s--)if(o[s].enabled){r._indexToPoints=o[s]._indexToPoints;break}n&&n.calc&&(a=n.calc(t,r))}Array.isArray(a)&&a[0]||(a=[{x:c,y:c}]),a[0].t||(a[0].t={}),a[0].trace=r,d[e]=a}}for(y&&E(u,h),i=0;i1e-10?t:0}function h(t,e,r){e=e||0,r=r||0;for(var n=t.length,i=new Array(n),a=0;a0?r:1/0}),i=n.mod(r+1,e.length);return[e[r],e[i]]},findIntersectionXY:u,findXYatLength:function(t,e,r,n){var i=-e*r,a=e*e+1,o=2*(e*i-r),s=i*i+r*r-t*t,l=Math.sqrt(o*o-4*a*s),u=(-o+l)/(2*a),c=(-o-l)/(2*a);return[[u,e*u+i+n],[c,e*c+i+n]]},clampTiny:f,pathPolygon:function(t,e,r,n,i,a){return"M"+h(c(t,e,r,n),i,a).join("L")},pathPolygonAnnulus:function(t,e,r,n,i,a,o){var s,l;t=0?h.angularAxis.domain:n.extent(A),S=Math.abs(A[1]-A[0]);k&&!M&&(S=0);var C=E.slice();T&&M&&(C[1]+=S);var L=h.angularAxis.ticksCount||4;L>8&&(L=L/(L/8)+L%8),h.angularAxis.ticksStep&&(L=(C[1]-C[0])/L);var O=h.angularAxis.ticksStep||(C[1]-C[0])/(L*(h.minorTicks+1));w&&(O=Math.max(Math.round(O),1)),C[2]||(C[2]=O);var z=n.range.apply(this,C);if(z=z.map(function(t,e){return parseFloat(t.toPrecision(12))}),s=n.scale.linear().domain(C.slice(0,2)).range("clockwise"===h.direction?[0,360]:[360,0]),c.layout.angularAxis.domain=s.domain(),c.layout.angularAxis.endPadding=T?S:0,"undefined"==typeof(t=n.select(this).select("svg.chart-root"))||t.empty()){var D=(new DOMParser).parseFromString("' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '","application/xml"),P=this.appendChild(this.ownerDocument.importNode(D.documentElement,!0));t=n.select(P)}t.select(".guides-group").style({"pointer-events":"none"}),t.select(".angular.axis-group").style({"pointer-events":"none"}),t.select(".radial.axis-group").style({"pointer-events":"none"});var I,N=t.select(".chart-group"),R={fill:"none",stroke:h.tickColor},F={"font-size":h.font.size,"font-family":h.font.family,fill:h.font.color,"text-shadow":["-1px 0px","1px -1px","-1px 1px","1px 1px"].map(function(t,e){return" "+t+" 0 "+h.font.outlineColor}).join(",")};if(h.showLegend){I=t.select(".legend-group").attr({transform:"translate("+[x,h.margin.top]+")"}).style({display:"block"});var B=p.map(function(t,e){var r=o.util.cloneJson(t);return r.symbol="DotPlot"===t.geometry?t.dotType||"circle":"LinePlot"!=t.geometry?"square":"line",r.visibleInLegend="undefined"==typeof t.visibleInLegend||t.visibleInLegend,r.color="LinePlot"===t.geometry?t.strokeColor:t.color,r});o.Legend().config({data:p.map(function(t,e){return t.name||"Element"+e}),legendConfig:i({},o.Legend.defaultConfig().legendConfig,{container:I,elements:B,reverseOrder:h.legend.reverseOrder})})();var j=I.node().getBBox();x=Math.min(h.width-j.width-h.margin.left-h.margin.right,h.height-h.margin.top-h.margin.bottom)/2,x=Math.max(10,x),_=[h.margin.left+x,h.margin.top+x],r.range([0,x]),c.layout.radialAxis.domain=r.domain(),I.attr("transform","translate("+[_[0]+x,_[1]-x]+")")}else I=t.select(".legend-group").style({display:"none"});t.attr({width:h.width,height:h.height}).style({opacity:h.opacity}),N.attr("transform","translate("+_+")").style({cursor:"crosshair"});var V=[(h.width-(h.margin.left+h.margin.right+2*x+(j?j.width:0)))/2,(h.height-(h.margin.top+h.margin.bottom+2*x))/2];if(V[0]=Math.max(0,V[0]),V[1]=Math.max(0,V[1]),t.select(".outer-group").attr("transform","translate("+V+")"),h.title&&h.title.text){var U=t.select("g.title-group text").style(F).text(h.title.text),q=U.node().getBBox();U.attr({x:_[0]-q.width/2,y:_[1]-x-20})}var H=t.select(".radial.axis-group");if(h.radialAxis.gridLinesVisible){var G=H.selectAll("circle.grid-circle").data(r.ticks(5));G.enter().append("circle").attr({class:"grid-circle"}).style(R),G.attr("r",r),G.exit().remove()}H.select("circle.outside-circle").attr({r:x}).style(R);var W=t.select("circle.background-circle").attr({r:x}).style({fill:h.backgroundColor,stroke:h.stroke});function Y(t,e){return s(t)%360+h.orientation}if(h.radialAxis.visible){var Z=n.svg.axis().scale(r).ticks(5).tickSize(5);H.call(Z).attr({transform:"rotate("+h.radialAxis.orientation+")"}),H.selectAll(".domain").style(R),H.selectAll("g>text").text(function(t,e){return this.textContent+h.radialAxis.ticksSuffix}).style(F).style({"text-anchor":"start"}).attr({x:0,y:0,dx:0,dy:0,transform:function(t,e){return"horizontal"===h.radialAxis.tickOrientation?"rotate("+-h.radialAxis.orientation+") translate("+[0,F["font-size"]]+")":"translate("+[0,F["font-size"]]+")"}}),H.selectAll("g>line").style({stroke:"black"})}var X=t.select(".angular.axis-group").selectAll("g.angular-tick").data(z),$=X.enter().append("g").classed("angular-tick",!0);X.attr({transform:function(t,e){return"rotate("+Y(t)+")"}}).style({display:h.angularAxis.visible?"block":"none"}),X.exit().remove(),$.append("line").classed("grid-line",!0).classed("major",function(t,e){return e%(h.minorTicks+1)==0}).classed("minor",function(t,e){return!(e%(h.minorTicks+1)==0)}).style(R),$.selectAll(".minor").style({stroke:h.minorTickColor}),X.select("line.grid-line").attr({x1:h.tickLength?x-h.tickLength:0,x2:x}).style({display:h.angularAxis.gridLinesVisible?"block":"none"}),$.append("text").classed("axis-text",!0).style(F);var J=X.select("text.axis-text").attr({x:x+h.labelOffset,dy:a+"em",transform:function(t,e){var r=Y(t),n=x+h.labelOffset,i=h.angularAxis.tickOrientation;return"horizontal"==i?"rotate("+-r+" "+n+" 0)":"radial"==i?r<270&&r>90?"rotate(180 "+n+" 0)":null:"rotate("+(r<=180&&r>0?-90:90)+" "+n+" 0)"}}).style({"text-anchor":"middle",display:h.angularAxis.labelsVisible?"block":"none"}).text(function(t,e){return e%(h.minorTicks+1)!=0?"":w?w[t]+h.angularAxis.ticksSuffix:t+h.angularAxis.ticksSuffix}).style(F);h.angularAxis.rewriteTicks&&J.text(function(t,e){return e%(h.minorTicks+1)!=0?"":h.angularAxis.rewriteTicks(this.textContent,e)});var K=n.max(N.selectAll(".angular-tick text")[0].map(function(t,e){return t.getCTM().e+t.getBBox().width}));I.attr({transform:"translate("+[x+K,h.margin.top]+")"});var Q=t.select("g.geometry-group").selectAll("g").size()>0,tt=t.select("g.geometry-group").selectAll("g.geometry").data(p);if(tt.enter().append("g").attr({class:function(t,e){return"geometry geometry"+e}}),tt.exit().remove(),p[0]||Q){var et=[];p.forEach(function(t,e){var n={};n.radialScale=r,n.angularScale=s,n.container=tt.filter(function(t,r){return r==e}),n.geometry=t.geometry,n.orientation=h.orientation,n.direction=h.direction,n.index=e,et.push({data:t,geometryConfig:n})});var rt=n.nest().key(function(t,e){return"undefined"!=typeof t.data.groupId||"unstacked"}).entries(et),nt=[];rt.forEach(function(t,e){"unstacked"===t.key?nt=nt.concat(t.values.map(function(t,e){return[t]})):nt.push(t.values)}),nt.forEach(function(t,e){var r;r=Array.isArray(t)?t[0].geometryConfig.geometry:t.geometryConfig.geometry;var n=t.map(function(t,e){return i(o[r].defaultConfig(),t)});o[r]().config(n)()})}var it,at,ot=t.select(".guides-group"),st=t.select(".tooltips-group"),lt=o.tooltipPanel().config({container:st,fontSize:8})(),ut=o.tooltipPanel().config({container:st,fontSize:8})(),ct=o.tooltipPanel().config({container:st,hasTick:!0})();if(!M){var ft=ot.select("line").attr({x1:0,y1:0,y2:0}).style({stroke:"grey","pointer-events":"none"});N.on("mousemove.angular-guide",function(t,e){var r=o.util.getMousePos(W).angle;ft.attr({x2:-x,transform:"rotate("+r+")"}).style({opacity:.5});var n=(r+180+360-h.orientation)%360;it=s.invert(n);var i=o.util.convertToCartesian(x+12,r+180);lt.text(o.util.round(it)).move([i[0]+_[0],i[1]+_[1]])}).on("mouseout.angular-guide",function(t,e){ot.select("line").style({opacity:0})})}var ht=ot.select("circle").style({stroke:"grey",fill:"none"});N.on("mousemove.radial-guide",function(t,e){var n=o.util.getMousePos(W).radius;ht.attr({r:n}).style({opacity:.5}),at=r.invert(o.util.getMousePos(W).radius);var i=o.util.convertToCartesian(n,h.radialAxis.orientation);ut.text(o.util.round(at)).move([i[0]+_[0],i[1]+_[1]])}).on("mouseout.radial-guide",function(t,e){ht.style({opacity:0}),ct.hide(),lt.hide(),ut.hide()}),t.selectAll(".geometry-group .mark").on("mouseover.tooltip",function(e,r){var i=n.select(this),a=this.style.fill,s="black",l=this.style.opacity||1;if(i.attr({"data-opacity":l}),a&&"none"!==a){i.attr({"data-fill":a}),s=n.hsl(a).darker().toString(),i.style({fill:s,opacity:1});var u={t:o.util.round(e[0]),r:o.util.round(e[1])};M&&(u.t=w[e[0]]);var c="t: "+u.t+", r: "+u.r,f=this.getBoundingClientRect(),h=t.node().getBoundingClientRect(),p=[f.left+f.width/2-V[0]-h.left,f.top+f.height/2-V[1]-h.top];ct.config({color:s}).text(c),ct.move(p)}else a=this.style.stroke||"black",i.attr({"data-stroke":a}),s=n.hsl(a).darker().toString(),i.style({stroke:s,opacity:1})}).on("mousemove.tooltip",function(t,e){if(0!=n.event.which)return!1;n.select(this).attr("data-fill")&&ct.show()}).on("mouseout.tooltip",function(t,e){ct.hide();var r=n.select(this),i=r.attr("data-fill");i?r.style({fill:i,opacity:r.attr("data-opacity")}):r.style({stroke:r.attr("data-stroke"),opacity:r.attr("data-opacity")})})})}(u),this},h.config=function(t){if(!arguments.length)return l;var e=o.util.cloneJson(t);return e.data.forEach(function(t,e){l.data[e]||(l.data[e]={}),i(l.data[e],o.Axis.defaultConfig().data[0]),i(l.data[e],t)}),i(l.layout,o.Axis.defaultConfig().layout),i(l.layout,e.layout),this},h.getLiveConfig=function(){return c},h.getinputConfig=function(){return u},h.radialScale=function(t){return r},h.angularScale=function(t){return s},h.svg=function(){return t},n.rebind(h,f,"on"),h},o.Axis.defaultConfig=function(t,e){return{data:[{t:[1,2,3,4],r:[10,11,12,13],name:"Line1",geometry:"LinePlot",color:null,strokeDash:"solid",strokeColor:null,strokeSize:"1",visibleInLegend:!0,opacity:1}],layout:{defaultColorRange:n.scale.category10().range(),title:null,height:450,width:500,margin:{top:40,right:40,bottom:40,left:40},font:{size:12,color:"gray",outlineColor:"white",family:"Tahoma, sans-serif"},direction:"clockwise",orientation:0,labelOffset:10,radialAxis:{domain:null,orientation:-45,ticksSuffix:"",visible:!0,gridLinesVisible:!0,tickOrientation:"horizontal",rewriteTicks:null},angularAxis:{domain:[0,360],ticksSuffix:"",visible:!0,gridLinesVisible:!0,labelsVisible:!0,tickOrientation:"horizontal",rewriteTicks:null,ticksCount:null,ticksStep:null},minorTicks:0,tickLength:null,tickColor:"silver",minorTickColor:"#eee",backgroundColor:"none",needsEndSpacing:null,showLegend:!0,legend:{reverseOrder:!1},opacity:1}}},o.util={},o.DATAEXTENT="dataExtent",o.AREA="AreaChart",o.LINE="LinePlot",o.DOT="DotPlot",o.BAR="BarChart",o.util._override=function(t,e){for(var r in t)r in e&&(e[r]=t[r])},o.util._extend=function(t,e){for(var r in t)e[r]=t[r]},o.util._rndSnd=function(){return 2*Math.random()-1+(2*Math.random()-1)+(2*Math.random()-1)},o.util.dataFromEquation2=function(t,e){var r=e||6;return n.range(0,360+r,r).map(function(e,r){var n=e*Math.PI/180;return[e,t(n)]})},o.util.dataFromEquation=function(t,e,r){var i=e||6,a=[],o=[];n.range(0,360+i,i).forEach(function(e,r){var n=e*Math.PI/180,i=t(n);a.push(e),o.push(i)});var s={t:a,r:o};return r&&(s.name=r),s},o.util.ensureArray=function(t,e){if("undefined"==typeof t)return null;var r=[].concat(t);return n.range(e).map(function(t,e){return r[e]||r[0]})},o.util.fillArrays=function(t,e,r){return e.forEach(function(e,n){t[e]=o.util.ensureArray(t[e],r)}),t},o.util.cloneJson=function(t){return JSON.parse(JSON.stringify(t))},o.util.validateKeys=function(t,e){"string"==typeof e&&(e=e.split("."));var r=e.shift();return t[r]&&(!e.length||objHasKeys(t[r],e))},o.util.sumArrays=function(t,e){return n.zip(t,e).map(function(t,e){return n.sum(t)})},o.util.arrayLast=function(t){return t[t.length-1]},o.util.arrayEqual=function(t,e){for(var r=Math.max(t.length,e.length,1);r-- >=0&&t[r]===e[r];);return-2===r},o.util.flattenArray=function(t){for(var e=[];!o.util.arrayEqual(e,t);)e=t,t=[].concat.apply([],t);return t},o.util.deduplicate=function(t){return t.filter(function(t,e,r){return r.indexOf(t)==e})},o.util.convertToCartesian=function(t,e){var r=e*Math.PI/180;return[t*Math.cos(r),t*Math.sin(r)]},o.util.round=function(t,e){var r=e||2,n=Math.pow(10,r);return Math.round(t*n)/n},o.util.getMousePos=function(t){var e=n.mouse(t.node()),r=e[0],i=e[1],a={};return a.x=r,a.y=i,a.pos=e,a.angle=180*(Math.atan2(i,r)+Math.PI)/Math.PI,a.radius=Math.sqrt(r*r+i*i),a},o.util.duplicatesCount=function(t){for(var e,r={},n={},i=0,a=t.length;i0)){var l=n.select(this.parentNode).selectAll("path.line").data([0]);l.enter().insert("path"),l.attr({class:"line",d:c(s),transform:function(t,r){return"rotate("+(e.orientation+90)+")"},"pointer-events":"none"}).style({fill:function(t,e){return d.fill(r,i,a)},"fill-opacity":0,stroke:function(t,e){return d.stroke(r,i,a)},"stroke-width":function(t,e){return d["stroke-width"](r,i,a)},"stroke-dasharray":function(t,e){return d["stroke-dasharray"](r,i,a)},opacity:function(t,e){return d.opacity(r,i,a)},display:function(t,e){return d.display(r,i,a)}})}};var f=e.angularScale.range(),h=Math.abs(f[1]-f[0])/o[0].length*Math.PI/180,p=n.svg.arc().startAngle(function(t){return-h/2}).endAngle(function(t){return h/2}).innerRadius(function(t){return e.radialScale(l+(t[2]||0))}).outerRadius(function(t){return e.radialScale(l+(t[2]||0))+e.radialScale(t[1])});u.arc=function(t,r,i){n.select(this).attr({class:"mark arc",d:p,transform:function(t,r){return"rotate("+(e.orientation+s(t[0])+90)+")"}})};var d={fill:function(e,r,n){return t[n].data.color},stroke:function(e,r,n){return t[n].data.strokeColor},"stroke-width":function(e,r,n){return t[n].data.strokeSize+"px"},"stroke-dasharray":function(e,n,i){return r[t[i].data.strokeDash]},opacity:function(e,r,n){return t[n].data.opacity},display:function(e,r,n){return"undefined"==typeof t[n].data.visible||t[n].data.visible?"block":"none"}},m=n.select(this).selectAll("g.layer").data(o);m.enter().append("g").attr({class:"layer"});var g=m.selectAll("path.mark").data(function(t,e){return t});g.enter().append("path").attr({class:"mark"}),g.style(d).each(u[e.geometryType]),g.exit().remove(),m.exit().remove()})}return a.config=function(e){return arguments.length?(e.forEach(function(e,r){t[r]||(t[r]={}),i(t[r],o.PolyChart.defaultConfig()),i(t[r],e)}),this):t},a.getColorScale=function(){},n.rebind(a,e,"on"),a},o.PolyChart.defaultConfig=function(){return{data:{name:"geom1",t:[[1,2,3,4]],r:[[1,2,3,4]],dotType:"circle",dotSize:64,dotVisible:!1,barWidth:20,color:"#ffa500",strokeSize:1,strokeColor:"silver",strokeDash:"solid",opacity:1,index:0,visible:!0,visibleInLegend:!0},geometryConfig:{geometry:"LinePlot",geometryType:"arc",direction:"clockwise",orientation:0,container:"body",radialScale:null,angularScale:null,colorScale:n.scale.category20()}}},o.BarChart=function(){return o.PolyChart()},o.BarChart.defaultConfig=function(){return{geometryConfig:{geometryType:"bar"}}},o.AreaChart=function(){return o.PolyChart()},o.AreaChart.defaultConfig=function(){return{geometryConfig:{geometryType:"arc"}}},o.DotPlot=function(){return o.PolyChart()},o.DotPlot.defaultConfig=function(){return{geometryConfig:{geometryType:"dot",dotType:"circle"}}},o.LinePlot=function(){return o.PolyChart()},o.LinePlot.defaultConfig=function(){return{geometryConfig:{geometryType:"line"}}},o.Legend=function(){var t=o.Legend.defaultConfig(),e=n.dispatch("hover");function r(){var e=t.legendConfig,a=t.data.map(function(t,r){return[].concat(t).map(function(t,n){var a=i({},e.elements[r]);return a.name=t,a.color=[].concat(e.elements[r].color)[n],a})}),o=n.merge(a);o=o.filter(function(t,r){return e.elements[r]&&(e.elements[r].visibleInLegend||"undefined"==typeof e.elements[r].visibleInLegend)}),e.reverseOrder&&(o=o.reverse());var s=e.container;("string"==typeof s||s.nodeName)&&(s=n.select(s));var l=o.map(function(t,e){return t.color}),u=e.fontSize,c=null==e.isContinuous?"number"==typeof o[0]:e.isContinuous,f=c?e.height:u*o.length,h=s.classed("legend-group",!0).selectAll("svg").data([0]),p=h.enter().append("svg").attr({width:300,height:f+u,xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"});p.append("g").classed("legend-axis",!0),p.append("g").classed("legend-marks",!0);var d=n.range(o.length),m=n.scale[c?"linear":"ordinal"]().domain(d).range(l),g=n.scale[c?"linear":"ordinal"]().domain(d)[c?"range":"rangePoints"]([0,f]);if(c){var v=h.select(".legend-marks").append("defs").append("linearGradient").attr({id:"grad1",x1:"0%",y1:"0%",x2:"0%",y2:"100%"}).selectAll("stop").data(l);v.enter().append("stop"),v.attr({offset:function(t,e){return e/(l.length-1)*100+"%"}}).style({"stop-color":function(t,e){return t}}),h.append("rect").classed("legend-mark",!0).attr({height:e.height,width:e.colorBandWidth,fill:"url(#grad1)"})}else{var y=h.select(".legend-marks").selectAll("path.legend-mark").data(o);y.enter().append("path").classed("legend-mark",!0),y.attr({transform:function(t,e){return"translate("+[u/2,g(e)+u/2]+")"},d:function(t,e){var r,i,a,o=t.symbol;return a=3*(i=u),"line"===(r=o)?"M"+[[-i/2,-i/12],[i/2,-i/12],[i/2,i/12],[-i/2,i/12]]+"Z":-1!=n.svg.symbolTypes.indexOf(r)?n.svg.symbol().type(r).size(a)():n.svg.symbol().type("square").size(a)()},fill:function(t,e){return m(e)}}),y.exit().remove()}var x=n.svg.axis().scale(g).orient("right"),b=h.select("g.legend-axis").attr({transform:"translate("+[c?e.colorBandWidth:u,u/2]+")"}).call(x);return b.selectAll(".domain").style({fill:"none",stroke:"none"}),b.selectAll("line").style({fill:"none",stroke:c?e.textColor:"none"}),b.selectAll("text").style({fill:e.textColor,"font-size":e.fontSize}).text(function(t,e){return o[e].name}),r}return r.config=function(e){return arguments.length?(i(t,e),this):t},n.rebind(r,e,"on"),r},o.Legend.defaultConfig=function(t,e){return{data:["a","b","c"],legendConfig:{elements:[{symbol:"line",color:"red"},{symbol:"square",color:"yellow"},{symbol:"diamond",color:"limegreen"}],height:150,colorBandWidth:30,fontSize:12,container:"body",isContinuous:null,textColor:"grey",reverseOrder:!1}}},o.tooltipPanel=function(){var t,e,r,a={container:null,hasTick:!1,fontSize:12,color:"white",padding:5},s="tooltip-"+o.tooltipPanel.uid++,l=10,u=function(){var n=(t=a.container.selectAll("g."+s).data([0])).enter().append("g").classed(s,!0).style({"pointer-events":"none",display:"none"});return r=n.append("path").style({fill:"white","fill-opacity":.9}).attr({d:"M0 0"}),e=n.append("text").attr({dx:a.padding+l,dy:.3*+a.fontSize}),u};return u.text=function(i){var o=n.hsl(a.color).l,s=o>=.5?"#aaa":"white",c=o>=.5?"black":"white",f=i||"";e.style({fill:c,"font-size":a.fontSize+"px"}).text(f);var h=a.padding,p=e.node().getBBox(),d={fill:a.color,stroke:s,"stroke-width":"2px"},m=p.width+2*h+l,g=p.height+2*h;return r.attr({d:"M"+[[l,-g/2],[l,-g/4],[a.hasTick?0:l,0],[l,g/4],[l,g/2],[m,g/2],[m,-g/2]].join("L")+"Z"}).style(d),t.attr({transform:"translate("+[l,-g/2+2*h]+")"}),t.style({display:"block"}),u},u.move=function(e){if(t)return t.attr({transform:"translate("+[e[0],e[1]]+")"}).style({display:"block"}),u},u.hide=function(){if(t)return t.style({display:"none"}),u},u.show=function(){if(t)return t.style({display:"block"}),u},u.config=function(t){return i(a,t),u},u},o.tooltipPanel.uid=1,o.adapter={},o.adapter.plotly=function(){var t={convert:function(t,e){var r={};if(t.data&&(r.data=t.data.map(function(t,r){var n=i({},t);return[[n,["marker","color"],["color"]],[n,["marker","opacity"],["opacity"]],[n,["marker","line","color"],["strokeColor"]],[n,["marker","line","dash"],["strokeDash"]],[n,["marker","line","width"],["strokeSize"]],[n,["marker","symbol"],["dotType"]],[n,["marker","size"],["dotSize"]],[n,["marker","barWidth"],["barWidth"]],[n,["line","interpolation"],["lineInterpolation"]],[n,["showlegend"],["visibleInLegend"]]].forEach(function(t,r){o.util.translator.apply(null,t.concat(e))}),e||delete n.marker,e&&delete n.groupId,e?("LinePlot"===n.geometry?(n.type="scatter",!0===n.dotVisible?(delete n.dotVisible,n.mode="lines+markers"):n.mode="lines"):"DotPlot"===n.geometry?(n.type="scatter",n.mode="markers"):"AreaChart"===n.geometry?n.type="area":"BarChart"===n.geometry&&(n.type="bar"),delete n.geometry):("scatter"===n.type?"lines"===n.mode?n.geometry="LinePlot":"markers"===n.mode?n.geometry="DotPlot":"lines+markers"===n.mode&&(n.geometry="LinePlot",n.dotVisible=!0):"area"===n.type?n.geometry="AreaChart":"bar"===n.type&&(n.geometry="BarChart"),delete n.mode,delete n.type),n}),!e&&t.layout&&"stack"===t.layout.barmode)){var a=o.util.duplicates(r.data.map(function(t,e){return t.geometry}));r.data.forEach(function(t,e){var n=a.indexOf(t.geometry);-1!=n&&(r.data[e].groupId=n)})}if(t.layout){var s=i({},t.layout);if([[s,["plot_bgcolor"],["backgroundColor"]],[s,["showlegend"],["showLegend"]],[s,["radialaxis"],["radialAxis"]],[s,["angularaxis"],["angularAxis"]],[s.angularaxis,["showline"],["gridLinesVisible"]],[s.angularaxis,["showticklabels"],["labelsVisible"]],[s.angularaxis,["nticks"],["ticksCount"]],[s.angularaxis,["tickorientation"],["tickOrientation"]],[s.angularaxis,["ticksuffix"],["ticksSuffix"]],[s.angularaxis,["range"],["domain"]],[s.angularaxis,["endpadding"],["endPadding"]],[s.radialaxis,["showline"],["gridLinesVisible"]],[s.radialaxis,["tickorientation"],["tickOrientation"]],[s.radialaxis,["ticksuffix"],["ticksSuffix"]],[s.radialaxis,["range"],["domain"]],[s.angularAxis,["showline"],["gridLinesVisible"]],[s.angularAxis,["showticklabels"],["labelsVisible"]],[s.angularAxis,["nticks"],["ticksCount"]],[s.angularAxis,["tickorientation"],["tickOrientation"]],[s.angularAxis,["ticksuffix"],["ticksSuffix"]],[s.angularAxis,["range"],["domain"]],[s.angularAxis,["endpadding"],["endPadding"]],[s.radialAxis,["showline"],["gridLinesVisible"]],[s.radialAxis,["tickorientation"],["tickOrientation"]],[s.radialAxis,["ticksuffix"],["ticksSuffix"]],[s.radialAxis,["range"],["domain"]],[s.font,["outlinecolor"],["outlineColor"]],[s.legend,["traceorder"],["reverseOrder"]],[s,["labeloffset"],["labelOffset"]],[s,["defaultcolorrange"],["defaultColorRange"]]].forEach(function(t,r){o.util.translator.apply(null,t.concat(e))}),e?("undefined"!=typeof s.tickLength&&(s.angularaxis.ticklen=s.tickLength,delete s.tickLength),s.tickColor&&(s.angularaxis.tickcolor=s.tickColor,delete s.tickColor)):(s.angularAxis&&"undefined"!=typeof s.angularAxis.ticklen&&(s.tickLength=s.angularAxis.ticklen),s.angularAxis&&"undefined"!=typeof s.angularAxis.tickcolor&&(s.tickColor=s.angularAxis.tickcolor)),s.legend&&"boolean"!=typeof s.legend.reverseOrder&&(s.legend.reverseOrder="normal"!=s.legend.reverseOrder),s.legend&&"boolean"==typeof s.legend.traceorder&&(s.legend.traceorder=s.legend.traceorder?"reversed":"normal",delete s.legend.reverseOrder),s.margin&&"undefined"!=typeof s.margin.t){var l=["t","r","b","l","pad"],u=["top","right","bottom","left","pad"],c={};n.entries(s.margin).forEach(function(t,e){c[u[l.indexOf(t.key)]]=t.value}),s.margin=c}e&&(delete s.needsEndSpacing,delete s.minorTickColor,delete s.minorTicks,delete s.angularaxis.ticksCount,delete s.angularaxis.ticksCount,delete s.angularaxis.ticksStep,delete s.angularaxis.rewriteTicks,delete s.angularaxis.nticks,delete s.radialaxis.ticksCount,delete s.radialaxis.ticksCount,delete s.radialaxis.ticksStep,delete s.radialaxis.rewriteTicks,delete s.radialaxis.nticks),r.layout=s}return r}};return t}},{"../../../constants/alignment":808,"../../../lib":836,d3:108}],956:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../../lib"),a=t("../../../components/color"),o=t("./micropolar"),s=t("./undo_manager"),l=i.extendDeepAll,u=e.exports={};u.framework=function(t){var e,r,i,a,c,f=new s;function h(r,s){return s&&(c=s),n.select(n.select(c).node().parentNode).selectAll(".svg-container>*:not(.chart-root)").remove(),e=e?l(e,r):r,i||(i=o.Axis()),a=o.adapter.plotly().convert(e),i.config(a).render(c),t.data=e.data,t.layout=e.layout,u.fillLayout(t),e}return h.isPolar=!0,h.svg=function(){return i.svg()},h.getConfig=function(){return e},h.getLiveConfig=function(){return o.adapter.plotly().convert(i.getLiveConfig(),!0)},h.getLiveScales=function(){return{t:i.angularScale(),r:i.radialScale()}},h.setUndoPoint=function(){var t,n,i=this,a=o.util.cloneJson(e);t=a,n=r,f.add({undo:function(){n&&i(n)},redo:function(){i(t)}}),r=o.util.cloneJson(a)},h.undo=function(){f.undo()},h.redo=function(){f.redo()},h},u.fillLayout=function(t){var e=n.select(t).selectAll(".plot-container"),r=e.selectAll(".svg-container"),i=t.framework&&t.framework.svg&&t.framework.svg(),o={width:800,height:600,paper_bgcolor:a.background,_container:e,_paperdiv:r,_paper:i};t._fullLayout=l(o,t.layout)}},{"../../../components/color":713,"../../../lib":836,"./micropolar":955,"./undo_manager":957,d3:108}],957:[function(t,e,r){"use strict";e.exports=function(){var t,e=[],r=-1,n=!1;function i(t,e){return t?(n=!0,t[e](),n=!1,this):this}return{add:function(t){return n?this:(e.splice(r+1,e.length-r),e.push(t),r=e.length-1,this)},setCallback:function(e){t=e},undo:function(){var n=e[r];return n?(i(n,"undo"),r-=1,t&&t(n.undo),this):this},redo:function(){var n=e[r+1];return n?(i(n,"redo"),r+=1,t&&t(n.redo),this):this},clear:function(){e=[],r=-1},hasUndo:function(){return-1!==r},hasRedo:function(){return r=90||s>90&&l>=450?1:c<=0&&h<=0?0:Math.max(c,h);e=s<=180&&l>=180||s>180&&l>=540?-1:u>=0&&f>=0?0:Math.min(u,f);r=s<=270&&l>=270||s>270&&l>=630?-1:c>=0&&h>=0?0:Math.min(c,h);n=l>=360?1:u<=0&&f<=0?0:Math.max(u,f);return[e,r,n,i]}(h),x=y[2]-y[0],b=y[3]-y[1],_=f/c,w=Math.abs(b/x);_>w?(p=c,v=(f-(d=c*w))/n.h/2,m=[o[0],o[1]],g=[u[0]+v,u[1]-v]):(d=f,v=(c-(p=f/w))/n.w/2,m=[o[0]+v,o[1]-v],g=[u[0],u[1]]),this.xLength2=p,this.yLength2=d,this.xDomain2=m,this.yDomain2=g;var A=this.xOffset2=n.l+n.w*m[0],M=this.yOffset2=n.t+n.h*(1-g[1]),k=this.radius=p/x,T=this.innerRadius=e.hole*k,E=this.cx=A-k*y[0],L=this.cy=M+k*y[3],O=this.cxx=E-A,z=this.cyy=L-M;this.radialAxis=this.mockAxis(t,e,i,{_id:"x",side:{counterclockwise:"top",clockwise:"bottom"}[i.side],domain:[T/n.w,k/n.w]}),this.angularAxis=this.mockAxis(t,e,a,{side:"right",domain:[0,Math.PI],autorange:!1}),this.doAutoRange(t,e),this.updateAngularAxis(t,e),this.updateRadialAxis(t,e),this.updateRadialAxisTitle(t,e),this.xaxis=this.mockCartesianAxis(t,e,{_id:"x",domain:m}),this.yaxis=this.mockCartesianAxis(t,e,{_id:"y",domain:g});var D=this.pathSubplot();this.clipPaths.forTraces.select("path").attr("d",D).attr("transform",N(O,z)),r.frontplot.attr("transform",N(A,M)).call(l.setClipUrl,this._hasClipOnAxisFalse?null:this.clipIds.forTraces,this.gd),r.bg.attr("d",D).attr("transform",N(E,L)).call(s.fill,e.bgcolor)},z.mockAxis=function(t,e,r,n){var i=o.extendFlat({anchor:"free",position:0},r,n);return h(i,e,t),i},z.mockCartesianAxis=function(t,e,r){var n=this,i=r._id,a=o.extendFlat({type:"linear"},r);f(a,t);var s={x:[0,2],y:[1,3]};return a.setRange=function(){var t=n.sectorBBox,r=s[i],o=n.radialAxis._rl,l=(o[1]-o[0])/(1-e.hole);a.range=[t[r[0]]*l,t[r[1]]*l]},a.isPtWithinRange="x"===i?function(t){return n.isPtInside(t)}:function(){return!0},a.setRange(),a.setScale(),a},z.doAutoRange=function(t,e){var r=this.gd,n=this.radialAxis,i=e.radialaxis;n.setScale(),p(r,n);var a=n.range;i.range=a.slice(),i._input.range=a.slice(),n._rl=[n.r2l(a[0],null,"gregorian"),n.r2l(a[1],null,"gregorian")]},z.updateRadialAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,l=r.innerRadius,u=r.cx,f=r.cy,h=e.radialaxis,p=S(e.sector[0],360),d=r.radialAxis,m=l90&&p<=270&&(d.tickangle=180);var g=function(t){return"translate("+(d.l2p(t.x)+l)+",0)"},v=D(h);if(r.radialTickLayout!==v&&(i["radial-axis"].selectAll(".xtick").remove(),r.radialTickLayout=v),m){d.setScale();var y=c.calcTicks(d),x=c.clipEnds(d,y),b=c.getTickSigns(d)[2];c.drawTicks(n,d,{vals:y,layer:i["radial-axis"],path:c.makeTickPath(d,0,b),transFn:g,crisp:!1}),c.drawGrid(n,d,{vals:x,layer:i["radial-grid"],path:function(t){return r.pathArc(d.r2p(t.x)+l)},transFn:o.noop,crisp:!1}),c.drawLabels(n,d,{vals:y,layer:i["radial-axis"],transFn:g,labelFns:c.makeLabelFns(d,0)})}var _=r.radialAxisAngle=r.vangles?L(P(C(h.angle),r.vangles)):h.angle,w=N(u,f),A=w+R(-_);I(i["radial-axis"],m&&(h.showticklabels||h.ticks),{transform:A}),I(i["radial-grid"],m&&h.showgrid,{transform:w}),I(i["radial-line"].select("line"),m&&h.showline,{x1:l,y1:0,x2:a,y2:0,transform:A}).attr("stroke-width",h.linewidth).call(s.stroke,h.linecolor)},z.updateRadialAxisTitle=function(t,e,r){var n=this.gd,i=this.radius,a=this.cx,o=this.cy,s=e.radialaxis,u=this.id+"title",c=void 0!==r?r:this.radialAxisAngle,f=C(c),h=Math.cos(f),p=Math.sin(f),d=0;if(s.title){var m=l.bBox(this.layers["radial-axis"].node()).height,g=s.title.font.size;d="counterclockwise"===s.side?-m-.4*g:m+.8*g}this.layers["radial-axis-title"]=v.draw(n,u,{propContainer:s,propName:this.id+".radialaxis.title",placeholder:E(n,"Click to enter radial axis title"),attributes:{x:a+i/2*h+d*p,y:o-i/2*p+d*h,"text-anchor":"middle"},transform:{rotate:-c}})},z.updateAngularAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,l=r.innerRadius,u=r.cx,f=r.cy,h=e.angularaxis,p=r.angularAxis;r.fillViewInitialKey("angularaxis.rotation",h.rotation),p.setGeometry(),p.setScale();var d=function(t){return p.t2g(t.x)};"linear"===p.type&&"radians"===p.thetaunit&&(p.tick0=L(p.tick0),p.dtick=L(p.dtick));var m=function(t){return N(u+a*Math.cos(t),f-a*Math.sin(t))},g=c.makeLabelFns(p,0).labelStandoff,v={xFn:function(t){var e=d(t);return Math.cos(e)*g},yFn:function(t){var e=d(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(g+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*M)},anchorFn:function(t){var e=d(t),r=Math.cos(e);return Math.abs(r)<.1?"middle":r>0?"start":"end"},heightFn:function(t,e,r){var n=d(t);return-.5*(1+Math.sin(n))*r}},y=D(h);r.angularTickLayout!==y&&(i["angular-axis"].selectAll("."+p._id+"tick").remove(),r.angularTickLayout=y);var x,b=c.calcTicks(p);if("linear"===e.gridshape?(x=b.map(d),o.angleDelta(x[0],x[1])<0&&(x=x.slice().reverse())):x=null,r.vangles=x,"category"===p.type&&(b=b.filter(function(t){return o.isAngleInsideSector(d(t),r.sectorInRad)})),p.visible){var _="inside"===p.ticks?-1:1,w=(p.linewidth||1)/2;c.drawTicks(n,p,{vals:b,layer:i["angular-axis"],path:"M"+_*w+",0h"+_*p.ticklen,transFn:function(t){var e=d(t);return m(e)+R(-L(e))},crisp:!1}),c.drawGrid(n,p,{vals:b,layer:i["angular-grid"],path:function(t){var e=d(t),r=Math.cos(e),n=Math.sin(e);return"M"+[u+l*r,f-l*n]+"L"+[u+a*r,f-a*n]},transFn:o.noop,crisp:!1}),c.drawLabels(n,p,{vals:b,layer:i["angular-axis"],repositionOnUpdate:!0,transFn:function(t){return m(d(t))},labelFns:v})}I(i["angular-line"].select("path"),h.showline,{d:r.pathSubplot(),transform:N(u,f)}).attr("stroke-width",h.linewidth).call(s.stroke,h.linecolor)},z.updateFx=function(t,e){this.gd._context.staticPlot||(this.updateAngularDrag(t),this.updateRadialDrag(t,e,0),this.updateRadialDrag(t,e,1),this.updateMainDrag(t))},z.updateMainDrag=function(t){var e=this,r=e.gd,o=e.layers,s=t._zoomlayer,l=k.MINZOOM,u=k.OFFEDGE,c=e.radius,f=e.innerRadius,h=e.cx,p=e.cy,v=e.cxx,_=e.cyy,w=e.sectorInRad,A=e.vangles,M=e.radialAxis,E=T.clampTiny,S=T.findXYatLength,C=T.findEnclosingVertexAngles,L=k.cornerHalfWidth,O=k.cornerLen/2,z=d.makeDragger(o,"path","maindrag","crosshair");n.select(z).attr("d",e.pathSubplot()).attr("transform",N(h,p));var D,P,I,R,F,B,j,V,U,q={element:z,gd:r,subplot:e.id,plotinfo:{id:e.id,xaxis:e.xaxis,yaxis:e.yaxis},xaxes:[e.xaxis],yaxes:[e.yaxis]};function H(t,e){return Math.sqrt(t*t+e*e)}function G(t,e){return H(t-v,e-_)}function W(t,e){return Math.atan2(_-e,t-v)}function Y(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function Z(t,r){if(0===t)return e.pathSector(2*L);var n=O/t,i=r-n,a=r+n,o=Math.max(0,Math.min(t,c)),s=o-L,l=o+L;return"M"+Y(s,i)+"A"+[s,s]+" 0,0,0 "+Y(s,a)+"L"+Y(l,a)+"A"+[l,l]+" 0,0,1 "+Y(l,i)+"Z"}function X(t,r,n){if(0===t)return e.pathSector(2*L);var i,a,o=Y(t,r),s=Y(t,n),l=E((o[0]+s[0])/2),u=E((o[1]+s[1])/2);if(l&&u){var c=u/l,f=-1/c,h=S(L,c,l,u);i=S(O,f,h[0][0],h[0][1]),a=S(O,f,h[1][0],h[1][1])}else{var p,d;u?(p=O,d=L):(p=L,d=O),i=[[l-p,u-d],[l+p,u-d]],a=[[l-p,u+d],[l+p,u+d]]}return"M"+i.join("L")+"L"+a.reverse().join("L")+"Z"}function $(t,e){return e=Math.max(Math.min(e,c),f),tl?(t-1&&1===t&&x(n,r,[e.xaxis],[e.yaxis],e.id,q),i.indexOf("event")>-1&&g.click(r,n,e.id)}q.prepFn=function(t,n,a){var o=r._fullLayout.dragmode,l=z.getBoundingClientRect();if(D=n-l.left,P=a-l.top,A){var u=T.findPolygonOffset(c,w[0],w[1],A);D+=v+u[0],P+=_+u[1]}switch(o){case"zoom":q.moveFn=A?tt:K,q.clickFn=rt,q.doneFn=et,function(){I=null,R=null,F=e.pathSubplot(),B=!1;var t=r._fullLayout[e.id];j=i(t.bgcolor).getLuminance(),(V=d.makeZoombox(s,j,h,p,F)).attr("fill-rule","evenodd"),U=d.makeCorners(s,h,p),b(s)}();break;case"select":case"lasso":y(t,n,a,q,o)}},z.onmousemove=function(t){g.hover(r,t,e.id),r._fullLayout._lasthover=z,r._fullLayout._hoversubplot=e.id},z.onmouseout=function(t){r._dragging||m.unhover(r,t)},m.init(q)},z.updateRadialDrag=function(t,e,r){var i=this,s=i.gd,l=i.layers,u=i.radius,c=i.innerRadius,f=i.cx,h=i.cy,p=i.radialAxis,g=k.radialDragBoxSize,v=g/2;if(p.visible){var y,x,_,M=C(i.radialAxisAngle),T=p._rl,E=T[0],S=T[1],O=T[r],z=.75*(T[1]-T[0])/(1-e.hole)/u;r?(y=f+(u+v)*Math.cos(M),x=h-(u+v)*Math.sin(M),_="radialdrag"):(y=f+(c-v)*Math.cos(M),x=h-(c-v)*Math.sin(M),_="radialdrag-inner");var D,F,B,j=d.makeRectDragger(l,_,"crosshair",-v,-v,g,g),V={element:j,gd:s};I(n.select(j),p.visible&&c0==(r?B>E:Bn?function(t){return t<=0}:function(t){return t>=0};t.c2g=function(r){var n=t.c2l(r)-e;return(s(n)?n:0)+o},t.g2c=function(r){return t.l2c(r+e-o)},t.g2p=function(t){return t*a},t.c2p=function(e){return t.g2p(t.c2g(e))}}}(t,e);break;case"angularaxis":!function(t,e){var r=t.type;if("linear"===r){var i=t.d2c,s=t.c2d;t.d2c=function(t,e){return function(t,e){return"degrees"===e?a(t):t}(i(t),e)},t.c2d=function(t,e){return s(function(t,e){return"degrees"===e?o(t):t}(t,e))}}t.makeCalcdata=function(e,i){var a,o,s=e[i],l=e._length,u=function(r){return t.d2c(r,e.thetaunit)};if(s){if(n.isTypedArray(s)&&"linear"===r){if(l===s.length)return s;if(s.subarray)return s.subarray(0,l)}for(a=new Array(l),o=0;o=c&&(p.min=0,m.min=0,g.min=0,t.aaxis&&delete t.aaxis.min,t.baxis&&delete t.baxis.min,t.caxis&&delete t.caxis.min)}function d(t,e,r,n){var i=f[e._name];function o(r,n){return a.coerce(t,e,i,r,n)}o("uirevision",n.uirevision),e.type="linear";var h=o("color"),p=h!==i.color.dflt?h:r.font.color,d=e._name.charAt(0).toUpperCase(),m="Component "+d,g=o("title.text",m);e._hovertitle=g===m?g:d,a.coerceFont(o,"title.font",{family:r.font.family,size:Math.round(1.2*r.font.size),color:p}),o("min"),u(t,e,o,"linear"),s(t,e,o,"linear",{}),l(t,e,o,{outerTicks:!0}),o("showticklabels")&&(a.coerceFont(o,"tickfont",{family:r.font.family,size:r.font.size,color:p}),o("tickangle"),o("tickformat")),c(t,e,o,{dfltColor:h,bgColor:r.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:i}),o("hoverformat"),o("layer")}e.exports=function(t,e,r){o(t,e,r,{type:"ternary",attributes:f,handleDefaults:p,font:e.font,paper_bgcolor:e.paper_bgcolor})}},{"../../components/color":713,"../../lib":836,"../../plot_api/plot_template":874,"../cartesian/line_grid_defaults":898,"../cartesian/tick_label_defaults":903,"../cartesian/tick_mark_defaults":904,"../cartesian/tick_value_defaults":905,"../subplot_defaults":960,"./layout_attributes":962}],964:[function(t,e,r){"use strict";var n=t("d3"),i=t("tinycolor2"),a=t("../../registry"),o=t("../../lib"),s=o._,l=t("../../components/color"),u=t("../../components/drawing"),c=t("../cartesian/set_convert"),f=t("../../lib/extend").extendFlat,h=t("../plots"),p=t("../cartesian/axes"),d=t("../../components/dragelement"),m=t("../../components/fx"),g=t("../../components/titles"),v=t("../cartesian/select").prepSelect,y=t("../cartesian/select").selectOnClick,x=t("../cartesian/select").clearSelect,b=t("../cartesian/constants");function _(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}e.exports=_;var w=_.prototype;w.init=function(t){this.container=t._ternarylayer,this.defs=t._defs,this.layoutId=t._uid,this.traceHash={},this.layers={}},w.plot=function(t,e){var r=e[this.id],n=e._size;this._hasClipOnAxisFalse=!1;for(var i=0;iA*x?i=(a=x)*A:a=(i=y)/A,o=g*i/y,s=v*a/x,r=e.l+e.w*d-i/2,n=e.t+e.h*(1-m)-a/2,h.x0=r,h.y0=n,h.w=i,h.h=a,h.sum=b,h.xaxis={type:"linear",range:[_+2*M-b,b-_-2*w],domain:[d-o/2,d+o/2],_id:"x"},c(h.xaxis,h.graphDiv._fullLayout),h.xaxis.setScale(),h.xaxis.isPtWithinRange=function(t){return t.a>=h.aaxis.range[0]&&t.a<=h.aaxis.range[1]&&t.b>=h.baxis.range[1]&&t.b<=h.baxis.range[0]&&t.c>=h.caxis.range[1]&&t.c<=h.caxis.range[0]},h.yaxis={type:"linear",range:[_,b-w-M],domain:[m-s/2,m+s/2],_id:"y"},c(h.yaxis,h.graphDiv._fullLayout),h.yaxis.setScale(),h.yaxis.isPtWithinRange=function(){return!0};var k=h.yaxis.domain[0],T=h.aaxis=f({},t.aaxis,{range:[_,b-w-M],side:"left",tickangle:(+t.aaxis.tickangle||0)-30,domain:[k,k+s*A],anchor:"free",position:0,_id:"y",_length:i});c(T,h.graphDiv._fullLayout),T.setScale();var E=h.baxis=f({},t.baxis,{range:[b-_-M,w],side:"bottom",domain:h.xaxis.domain,anchor:"free",position:0,_id:"x",_length:i});c(E,h.graphDiv._fullLayout),E.setScale();var S=h.caxis=f({},t.caxis,{range:[b-_-w,M],side:"right",tickangle:(+t.caxis.tickangle||0)+30,domain:[k,k+s*A],anchor:"free",position:0,_id:"y",_length:i});c(S,h.graphDiv._fullLayout),S.setScale();var C="M"+r+","+(n+a)+"h"+i+"l-"+i/2+",-"+a+"Z";h.clipDef.select("path").attr("d",C),h.layers.plotbg.select("path").attr("d",C);var L="M0,"+a+"h"+i+"l-"+i/2+",-"+a+"Z";h.clipDefRelative.select("path").attr("d",L);var O="translate("+r+","+n+")";h.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",O),h.clipDefRelative.select("path").attr("transform",null);var z="translate("+(r-E._offset)+","+(n+a)+")";h.layers.baxis.attr("transform",z),h.layers.bgrid.attr("transform",z);var D="translate("+(r+i/2)+","+n+")rotate(30)translate(0,"+-T._offset+")";h.layers.aaxis.attr("transform",D),h.layers.agrid.attr("transform",D);var P="translate("+(r+i/2)+","+n+")rotate(-30)translate(0,"+-S._offset+")";h.layers.caxis.attr("transform",P),h.layers.cgrid.attr("transform",P),h.drawAxes(!0),h.layers.aline.select("path").attr("d",T.showline?"M"+r+","+(n+a)+"l"+i/2+",-"+a:"M0,0").call(l.stroke,T.linecolor||"#000").style("stroke-width",(T.linewidth||0)+"px"),h.layers.bline.select("path").attr("d",E.showline?"M"+r+","+(n+a)+"h"+i:"M0,0").call(l.stroke,E.linecolor||"#000").style("stroke-width",(E.linewidth||0)+"px"),h.layers.cline.select("path").attr("d",S.showline?"M"+(r+i/2)+","+n+"l"+i/2+","+a:"M0,0").call(l.stroke,S.linecolor||"#000").style("stroke-width",(S.linewidth||0)+"px"),h.graphDiv._context.staticPlot||h.initInteractions(),u.setClipUrl(h.layers.frontplot,h._hasClipOnAxisFalse?null:h.clipId,h.graphDiv)},w.drawAxes=function(t){var e=this.graphDiv,r=this.id.substr(7)+"title",n=this.layers,i=this.aaxis,a=this.baxis,o=this.caxis;if(this.drawAx(i),this.drawAx(a),this.drawAx(o),t){var l=Math.max(i.showticklabels?i.tickfont.size/2:0,(o.showticklabels?.75*o.tickfont.size:0)+("outside"===o.ticks?.87*o.ticklen:0)),u=(a.showticklabels?a.tickfont.size:0)+("outside"===a.ticks?a.ticklen:0)+3;n["a-title"]=g.draw(e,"a"+r,{propContainer:i,propName:this.id+".aaxis.title",placeholder:s(e,"Click to enter Component A title"),attributes:{x:this.x0+this.w/2,y:this.y0-i.title.font.size/3-l,"text-anchor":"middle"}}),n["b-title"]=g.draw(e,"b"+r,{propContainer:a,propName:this.id+".baxis.title",placeholder:s(e,"Click to enter Component B title"),attributes:{x:this.x0-u,y:this.y0+this.h+.83*a.title.font.size+u,"text-anchor":"middle"}}),n["c-title"]=g.draw(e,"c"+r,{propContainer:o,propName:this.id+".caxis.title",placeholder:s(e,"Click to enter Component C title"),attributes:{x:this.x0+this.w+u,y:this.y0+this.h+.83*o.title.font.size+u,"text-anchor":"middle"}})}},w.drawAx=function(t){var e,r=this.graphDiv,n=t._name,i=n.charAt(0),a=t._id,s=this.layers[n],l=i+"tickLayout",u=(e=t).ticks+String(e.ticklen)+String(e.showticklabels);this[l]!==u&&(s.selectAll("."+a+"tick").remove(),this[l]=u),t.setScale();var c=p.calcTicks(t),f=p.clipEnds(t,c),h=p.makeTransFn(t),d=p.getTickSigns(t)[2],m=o.deg2rad(30),g=d*(t.linewidth||1)/2,v=d*t.ticklen,y=this.w,x=this.h,b="b"===i?"M0,"+g+"l"+Math.sin(m)*v+","+Math.cos(m)*v:"M"+g+",0l"+Math.cos(m)*v+","+-Math.sin(m)*v,_={a:"M0,0l"+x+",-"+y/2,b:"M0,0l-"+y/2+",-"+x,c:"M0,0l-"+x+","+y/2}[i];p.drawTicks(r,t,{vals:"inside"===t.ticks?f:c,layer:s,path:b,transFn:h,crisp:!1}),p.drawGrid(r,t,{vals:f,layer:this.layers[i+"grid"],path:_,transFn:h,crisp:!1}),p.drawLabels(r,t,{vals:c,layer:s,transFn:h,labelFns:p.makeLabelFns(t,0,30)})};var M=b.MINZOOM/2+.87,k="m-0.87,.5h"+M+"v3h-"+(M+5.2)+"l"+(M/2+2.6)+",-"+(.87*M+4.5)+"l2.6,1.5l-"+M/2+","+.87*M+"Z",T="m0.87,.5h-"+M+"v3h"+(M+5.2)+"l-"+(M/2+2.6)+",-"+(.87*M+4.5)+"l-2.6,1.5l"+M/2+","+.87*M+"Z",E="m0,1l"+M/2+","+.87*M+"l2.6,-1.5l-"+(M/2+2.6)+",-"+(.87*M+4.5)+"l-"+(M/2+2.6)+","+(.87*M+4.5)+"l2.6,1.5l"+M/2+",-"+.87*M+"Z",S="m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2Z",C=!0;function L(t){n.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}w.initInteractions=function(){var t,e,r,n,c,f,h,p,g,_,w=this,M=w.layers.plotbg.select("path").node(),O=w.graphDiv,z=O._fullLayout._zoomlayer,D={element:M,gd:O,plotinfo:{id:w.id,xaxis:w.xaxis,yaxis:w.yaxis},subplot:w.id,prepFn:function(a,o,s){D.xaxes=[w.xaxis],D.yaxes=[w.yaxis];var u=O._fullLayout.dragmode;D.minDrag="lasso"===u?1:void 0,"zoom"===u?(D.moveFn=B,D.clickFn=I,D.doneFn=j,function(a,o,s){var u=M.getBoundingClientRect();t=o-u.left,e=s-u.top,r={a:w.aaxis.range[0],b:w.baxis.range[1],c:w.caxis.range[1]},c=r,n=w.aaxis.range[1]-r.a,f=i(w.graphDiv._fullLayout[w.id].bgcolor).getLuminance(),h="M0,"+w.h+"L"+w.w/2+", 0L"+w.w+","+w.h+"Z",p=!1,g=z.append("path").attr("class","zoombox").attr("transform","translate("+w.x0+", "+w.y0+")").style({fill:f>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("d",h),_=z.append("path").attr("class","zoombox-corners").attr("transform","translate("+w.x0+", "+w.y0+")").style({fill:l.background,stroke:l.defaultLine,"stroke-width":1,opacity:0}).attr("d","M0,0Z"),x(z)}(0,o,s)):"pan"===u?(D.moveFn=V,D.clickFn=I,D.doneFn=U,r={a:w.aaxis.range[0],b:w.baxis.range[1],c:w.caxis.range[1]},c=r,x(z)):"select"!==u&&"lasso"!==u||v(a,o,s,D,u)}};function P(t){var e={};return e[w.id+".aaxis.min"]=t.a,e[w.id+".baxis.min"]=t.b,e[w.id+".caxis.min"]=t.c,e}function I(t,e){var r=O._fullLayout.clickmode;L(O),2===t&&(O.emit("plotly_doubleclick",null),a.call("_guiRelayout",O,P({a:0,b:0,c:0}))),r.indexOf("select")>-1&&1===t&&y(e,O,[w.xaxis],[w.yaxis],w.id,D),r.indexOf("event")>-1&&m.click(O,e,w.id)}function N(t,e){return 1-e/w.h}function R(t,e){return 1-(t+(w.h-e)/Math.sqrt(3))/w.w}function F(t,e){return(t-(w.h-e)/Math.sqrt(3))/w.w}function B(i,a){var o=t+i,s=e+a,l=Math.max(0,Math.min(1,N(0,e),N(0,s))),u=Math.max(0,Math.min(1,R(t,e),R(o,s))),d=Math.max(0,Math.min(1,F(t,e),F(o,s))),m=(l/2+d)*w.w,v=(1-l/2-u)*w.w,y=(m+v)/2,x=v-m,M=(1-l)*w.h,C=M-x/A;x.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),_.transition().style("opacity",1).duration(200),p=!0)}function j(){L(O),c!==r&&(a.call("_guiRelayout",O,P(c)),C&&O.data&&O._context.showTips&&(o.notifier(s(O,"Double-click to zoom back out"),"long"),C=!1))}function V(t,e){var n=t/w.xaxis._m,i=e/w.yaxis._m,a=[(c={a:r.a-i,b:r.b+(n+i)/2,c:r.c-(n-i)/2}).a,c.b,c.c].sort(),o=a.indexOf(c.a),s=a.indexOf(c.b),l=a.indexOf(c.c);a[0]<0&&(a[1]+a[0]/2<0?(a[2]+=a[0]+a[1],a[0]=a[1]=0):(a[2]+=a[0]/2,a[1]+=a[0]/2,a[0]=0),c={a:a[o],b:a[s],c:a[l]},e=(r.a-c.a)*w.yaxis._m,t=(r.c-c.c-r.b+c.b)*w.xaxis._m);var f="translate("+(w.x0+t)+","+(w.y0+e)+")";w.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",f);var h="translate("+-t+","+-e+")";w.clipDefRelative.select("path").attr("transform",h),w.aaxis.range=[c.a,w.sum-c.b-c.c],w.baxis.range=[w.sum-c.a-c.c,c.b],w.caxis.range=[w.sum-c.a-c.b,c.c],w.drawAxes(!1),w._hasClipOnAxisFalse&&w.plotContainer.select(".scatterlayer").selectAll(".trace").call(u.hideOutsideRangePoints,w)}function U(){a.call("_guiRelayout",O,P(c))}M.onmousemove=function(t){m.hover(O,t,w.id),O._fullLayout._lasthover=M,O._fullLayout._hoversubplot=w.id},M.onmouseout=function(t){O._dragging||d.unhover(O,t)},d.init(D)}},{"../../components/color":713,"../../components/dragelement":731,"../../components/drawing":734,"../../components/fx":752,"../../components/titles":801,"../../lib":836,"../../lib/extend":826,"../../registry":965,"../cartesian/axes":884,"../cartesian/constants":890,"../cartesian/select":901,"../cartesian/set_convert":902,"../plots":946,d3:108,tinycolor2:1376}],965:[function(t,e,r){"use strict";var n=t("./lib/loggers"),i=t("./lib/noop"),a=t("./lib/push_unique"),o=t("./lib/is_plain_object"),s=t("./lib/extend"),l=t("./plots/attributes"),u=t("./plots/layout_attributes"),c=s.extendFlat,f=s.extendDeepAll;function h(t){var e=t.name,i=t.categories,a=t.meta;if(r.modules[e])n.log("Type "+e+" already registered");else{r.subplotsRegistry[t.basePlotModule.name]||function(t){var e=t.name;if(r.subplotsRegistry[e])return void n.log("Plot type "+e+" already registered.");for(var i in g(t),r.subplotsRegistry[e]=t,r.componentsRegistry)x(i,t.name)}(t.basePlotModule);for(var o={},s=0;s-1&&(c[h[r]].title={text:""});for(r=0;rpath, .legendlines>path, .cbfill").each(function(){var t=n.select(this),e=this.style.fill;e&&-1!==e.indexOf("url(")&&t.style("fill",e.replace(l,"TOBESTRIPPED"));var r=this.style.stroke;r&&-1!==r.indexOf("url(")&&t.style("stroke",r.replace(l,"TOBESTRIPPED"))}),"pdf"!==e&&"eps"!==e||h.selectAll("#MathJax_SVG_glyphs path").attr("stroke-width",0),h.node().setAttributeNS(s.xmlns,"xmlns",s.svg),h.node().setAttributeNS(s.xmlns,"xmlns:xlink",s.xlink),"svg"===e&&r&&(h.attr("width",r*d),h.attr("height",r*m),h.attr("viewBox","0 0 "+d+" "+m));var _=(new window.XMLSerializer).serializeToString(h.node());return _=function(t){var e=n.select("body").append("div").style({display:"none"}).html(""),r=t.replace(/(&[^;]*;)/gi,function(t){return"<"===t?"<":"&rt;"===t?">":-1!==t.indexOf("<")||-1!==t.indexOf(">")?"":e.html(t).text()});return e.remove(),r}(_),_=(_=_.replace(/&(?!\w+;|\#[0-9]+;| \#x[0-9A-F]+;)/g,"&")).replace(u,"'"),i.isIE()&&(_=(_=(_=_.replace(/"/gi,"'")).replace(/(\('#)([^']*)('\))/gi,'("#$2")')).replace(/(\\')/gi,'"')),_}},{"../components/color":713,"../components/drawing":734,"../constants/xmlns_namespaces":814,"../lib":836,d3:108}],974:[function(t,e,r){"use strict";var n=t("../../lib").mergeArray;e.exports=function(t,e){for(var r=0;r0&&h.s>0||(c=!1)}l._extremes[e._id]=s.findExtremes(e,u,{tozero:!c,padded:!0})}}function v(t,e,r){for(var n=r.traces,i=0;ih+c||!n(f))}for(var d=0;d0&&w.s>0||(y=!1)}}g._extremes[e._id]=s.findExtremes(e,v,{tozero:!y,padded:b})}}function x(t){return t._id.charAt(0)}e.exports={crossTraceCalc:function(t,e){for(var r=e.xaxis,n=e.yaxis,i=t._fullData,a=t.calcdata,s=[],l=[],u=0;ua))return e}return void 0!==r?r:t.dflt},r.coerceColor=function(t,e,r){return i(e).isValid()?e:void 0!==r?r:t.dflt},r.coerceEnumerated=function(t,e,r){return t.coerceNumber&&(e=+e),-1!==t.values.indexOf(e)?e:void 0!==r?r:t.dflt},r.getValue=function(t,e){var r;return Array.isArray(t)?e.01?C:function(t,e){return Math.abs(t-e)>=2?C(t):t>e?Math.ceil(t):Math.floor(t)};_=S(_,w),w=S(w,_),A=S(A,M),M=S(M,A)}a.ensureSingle(k,"path").style("vector-effect","non-scaling-stroke").attr("d","M"+_+","+A+"V"+M+"H"+w+"V"+A+"Z").call(l.setClipUrl,e.layerClipId,t),function(t,e,r,n,i,s,u,c){var v;function y(e,r,n){var i=a.ensureSingle(e,"text").text(r).attr({class:"bartext bartext-"+v,transform:"","text-anchor":"middle","data-notex":1}).call(l.font,n).call(o.convertToTspans,t);return i}var x=r[0].trace,b=x.orientation,_=function(t,e){var r=p.getValue(t.text,e);return p.coerceString(f,r)}(x,n);if(v=function(t,e){var r=p.getValue(t.textposition,e);return p.coerceEnumerated(h,r)}(x,n),!_||"none"===v)return void e.select("text").remove();var w,A,M,k,T,E,S=t._fullLayout.font,C=d.getBarColor(r[n],x),L=d.getInsideTextFont(x,n,S,C),O=d.getOutsideTextFont(x,n,S),z=t._fullLayout.barmode,D="relative"===z,P="stack"===z||D,I=r[n],N=!P||I._outmost,R=Math.abs(s-i)-2*m,F=Math.abs(c-u)-2*m;"outside"===v&&(N||I.hasB||(v="inside"));if("auto"===v)if(N){v="inside",w=y(e,_,L),A=l.bBox(w.node()),M=A.width,k=A.height;var B=M>0&&k>0,j=M<=R&&k<=F,V=M<=F&&k<=R,U="h"===b?R>=M*(F/k):F>=k*(R/M);B&&(j||V||U)?v="inside":(v="outside",w.remove(),w=null)}else v="inside";if(!w&&(w=y(e,_,"outside"===v?O:L),A=l.bBox(w.node()),M=A.width,k=A.height,M<=0||k<=0))return void w.remove();"outside"===v?(E="both"===x.constraintext||"outside"===x.constraintext,T=function(t,e,r,n,i,a,o){var s,l="h"===a?Math.abs(n-r):Math.abs(e-t);l>2*m&&(s=m);var u=1;o&&(u="h"===a?Math.min(1,l/i.height):Math.min(1,l/i.width));var c,f,h,p,d=(i.left+i.right)/2,v=(i.top+i.bottom)/2;c=u*i.width,f=u*i.height,"h"===a?er?(h=(t+e)/2,p=n+s+f/2):(h=(t+e)/2,p=n-s-f/2);return g(d,v,h,p,u,!1)}(i,s,u,c,A,b,E)):(E="both"===x.constraintext||"inside"===x.constraintext,T=function(t,e,r,n,i,a,o){var s,l,u,c,f,h,p,d=i.width,v=i.height,y=(i.left+i.right)/2,x=(i.top+i.bottom)/2,b=Math.abs(e-t),_=Math.abs(n-r);b>2*m&&_>2*m?(b-=2*(f=m),_-=2*f):f=0;d<=b&&v<=_?(h=!1,p=1):d<=_&&v<=b?(h=!0,p=1):dr?(u=(t+e)/2,c=n-f-l/2):(u=(t+e)/2,c=n+f+l/2);return g(y,x,u,c,p,h)}(i,s,u,c,A,b,E));w.attr("transform",T)}(t,k,r,c,_,w,A,M),e.layerClipId&&l.hideOutsideRangePoint(u,k.select("text"),v,y,b.xcalendar,b.ycalendar)}else k.remove();function C(t){return 0===x.bargap&&0===x.bargroupgap?n.round(Math.round(t)-E,2):t}});var w=!1===c.trace.cliponaxis;l.setClipUrl(u,w?null:e.layerClipId,t)});u.getComponentMethod("errorbars","plot")(t,b,e)}},{"../../components/color":713,"../../components/drawing":734,"../../lib":836,"../../lib/svg_text_utils":860,"../../registry":965,"./attributes":975,"./helpers":980,"./style":988,d3:108,"fast-isnumeric":693}],986:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n=t.cd,i=t.xaxis,a=t.yaxis,o=[];if(!1===e)for(r=0;r1||0===a.bargap&&0===a.bargroupgap&&!t[0].trace.marker.line.width)&&n.select(this).attr("shape-rendering","crispEdges")}),r.selectAll("g.points").each(function(e){p(n.select(this),e[0].trace,t)}),s.getComponentMethod("errorbars","style")(r)},styleOnSelect:function(t,e){var r=e[0].node3,i=e[0].trace;i.selectedpoints?function(t,e,r){a.selectedPointStyle(t.selectAll("path"),e),function(t,e,r){t.each(function(t){var i,s=n.select(this);if(t.selected){i=o.extendFlat({},d(s,t,e,r));var l=e.selected.textfont&&e.selected.textfont.color;l&&(i.color=l),a.font(s,i)}else a.selectedTextStyle(s,e)})}(t.selectAll("text"),e,r)}(r,i,t):p(r,i,t)},getInsideTextFont:g,getOutsideTextFont:v,getBarColor:x}},{"../../components/color":713,"../../components/drawing":734,"../../lib":836,"../../registry":965,"./attributes":975,"./helpers":980,d3:108}],989:[function(t,e,r){"use strict";var n=t("../../components/color"),i=t("../../components/colorscale/helpers").hasColorscale,a=t("../../components/colorscale/defaults");e.exports=function(t,e,r,o,s){r("marker.color",o),i(t,"marker")&&a(t,e,s,r,{prefix:"marker.",cLetter:"c"}),r("marker.line.color",n.defaultLine),i(t,"marker.line")&&a(t,e,s,r,{prefix:"marker.line.",cLetter:"c"}),r("marker.line.width"),r("marker.opacity"),r("selected.marker.color"),r("unselected.marker.color")}},{"../../components/color":713,"../../components/colorscale/defaults":723,"../../components/colorscale/helpers":724}],990:[function(t,e,r){"use strict";var n=t("../../components/fx/hovertemplate_attributes"),i=t("../../lib/extend").extendFlat,a=t("../scatterpolar/attributes"),o=t("../bar/attributes");e.exports={r:a.r,theta:a.theta,r0:a.r0,dr:a.dr,theta0:a.theta0,dtheta:a.dtheta,thetaunit:a.thetaunit,base:i({},o.base,{}),offset:i({},o.offset,{}),width:i({},o.width,{}),text:i({},o.text,{}),hovertext:i({},o.hovertext,{}),marker:o.marker,hoverinfo:a.hoverinfo,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},{"../../components/fx/hovertemplate_attributes":751,"../../lib/extend":826,"../bar/attributes":975,"../scatterpolar/attributes":1249}],991:[function(t,e,r){"use strict";var n=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/calc"),a=t("../bar/arrays_to_calcdata"),o=t("../bar/cross_trace_calc").setGroupPositions,s=t("../scatter/calc_selection"),l=t("../../registry").traceIs,u=t("../../lib").extendFlat;e.exports={calc:function(t,e){for(var r=t._fullLayout,o=e.subplot,l=r[o].radialaxis,u=r[o].angularaxis,c=l.makeCalcdata(e,"r"),f=u.makeCalcdata(e,"theta"),h=e._length,p=new Array(h),d=c,m=f,g=0;gh.range[1]&&(x+=Math.PI);if(n.getClosest(u,function(t){return m(y,x,[t.rp0,t.rp1],[t.thetag0,t.thetag1],d)?g+Math.min(1,Math.abs(t.thetag1-t.thetag0)/v)-1+(t.rp1-y)/(t.rp1-t.rp0)-1:1/0},t),!1!==t.index){var b=u[t.index];t.x0=t.x1=b.ct[0],t.y0=t.y1=b.ct[1];var _=i.extendFlat({},b,{r:b.s,theta:b.p});return o(b,c,t),s(_,c,f,t),t.hovertemplate=c.hovertemplate,t.color=a(c,b),t.xLabelVal=t.yLabelVal=void 0,b.s<0&&(t.idealAlign="left"),[t]}}},{"../../components/fx":752,"../../lib":836,"../../plots/polar/helpers":948,"../bar/hover":981,"../scatter/fill_hover_text":1195,"../scatterpolar/hover":1252}],994:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"barpolar",basePlotModule:t("../../plots/polar"),categories:["polar","bar","showLegend"],attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot"),colorbar:t("../scatter/marker_colorbar"),style:t("../bar/style").style,hoverPoints:t("./hover"),selectPoints:t("../bar/select"),meta:{}}},{"../../plots/polar":949,"../bar/select":986,"../bar/style":988,"../scatter/marker_colorbar":1205,"./attributes":990,"./calc":991,"./defaults":992,"./hover":993,"./layout_attributes":995,"./layout_defaults":996,"./plot":997}],995:[function(t,e,r){"use strict";e.exports={barmode:{valType:"enumerated",values:["stack","overlay"],dflt:"stack",editType:"calc"},bargap:{valType:"number",dflt:.1,min:0,max:1,editType:"calc"}}},{}],996:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./layout_attributes");e.exports=function(t,e,r){var a,o={};function s(r,o){return n.coerce(t[a]||{},e[a],i,r,o)}for(var l=0;l0?(u=o,c=l):(u=l,c=o);var f=s.findEnclosingVertexAngles(u,t.vangles)[0],h=s.findEnclosingVertexAngles(c,t.vangles)[1],p=[f,(u+c)/2,h];return s.pathPolygonAnnulus(n,i,u,c,p,e,r)};return function(t,n,i,o){return a.pathAnnulus(t,n,i,o,e,r)}}(e),p=e.layers.frontplot.select("g.barlayer");a.makeTraceGroups(p,r,"trace bars").each(function(r){var s=r[0].node3=n.select(this),p=a.ensureSingle(s,"g","points").selectAll("g.point").data(a.identity);p.enter().append("g").style("vector-effect","non-scaling-stroke").style("stroke-miterlimit",2).classed("point",!0),p.exit().remove(),p.each(function(t){var e,r=n.select(this),o=t.rp0=c.c2p(t.s0),s=t.rp1=c.c2p(t.s1),p=t.thetag0=f.c2g(t.p0),d=t.thetag1=f.c2g(t.p1);if(i(o)&&i(s)&&i(p)&&i(d)&&o!==s&&p!==d){var m=c.c2g(t.s1),g=(p+d)/2;t.ct=[l.c2p(m*Math.cos(g)),u.c2p(m*Math.sin(g))],e=h(o,s,p,d)}else e="M0,0Z";a.ensureSingle(r,"path").attr("d",e)}),o.setClipUrl(s,e._hasClipOnAxisFalse?e.clipIds.forTraces:null,t)})}},{"../../components/drawing":734,"../../lib":836,"../../plots/polar/helpers":948,d3:108,"fast-isnumeric":693}],998:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),i=t("../bar/attributes"),a=t("../../components/color/attributes"),o=t("../../lib/extend").extendFlat,s=n.marker,l=s.line;e.exports={y:{valType:"data_array",editType:"calc+clearAxisTypes"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},x0:{valType:"any",editType:"calc+clearAxisTypes"},y0:{valType:"any",editType:"calc+clearAxisTypes"},name:{valType:"string",editType:"calc+clearAxisTypes"},text:o({},n.text,{}),hovertext:o({},n.hovertext,{}),whiskerwidth:{valType:"number",min:0,max:1,dflt:.5,editType:"calc"},notched:{valType:"boolean",editType:"calc"},notchwidth:{valType:"number",min:0,max:.5,dflt:.25,editType:"calc"},boxpoints:{valType:"enumerated",values:["all","outliers","suspectedoutliers",!1],dflt:"outliers",editType:"calc"},boxmean:{valType:"enumerated",values:[!0,"sd",!1],dflt:!1,editType:"calc"},jitter:{valType:"number",min:0,max:1,editType:"calc"},pointpos:{valType:"number",min:-2,max:2,editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},width:{valType:"number",min:0,dflt:0,editType:"calc"},marker:{outliercolor:{valType:"color",dflt:"rgba(0, 0, 0, 0)",editType:"style"},symbol:o({},s.symbol,{arrayOk:!1,editType:"plot"}),opacity:o({},s.opacity,{arrayOk:!1,dflt:1,editType:"style"}),size:o({},s.size,{arrayOk:!1,editType:"calc"}),color:o({},s.color,{arrayOk:!1,editType:"style"}),line:{color:o({},l.color,{arrayOk:!1,dflt:a.defaultLine,editType:"style"}),width:o({},l.width,{arrayOk:!1,dflt:0,editType:"style"}),outliercolor:{valType:"color",editType:"style"},outlierwidth:{valType:"number",min:0,dflt:1,editType:"style"},editType:"style"},editType:"plot"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:n.fillcolor,offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup,selected:{marker:n.selected.marker,editType:"style"},unselected:{marker:n.unselected.marker,editType:"style"},hoveron:{valType:"flaglist",flags:["boxes","points"],dflt:"boxes+points",editType:"style"}}},{"../../components/color/attributes":712,"../../lib/extend":826,"../bar/attributes":975,"../scatter/attributes":1187}],999:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib"),a=i._,o=t("../../plots/cartesian/axes");function s(t,e,r){var n={text:"tx",hovertext:"htx"};for(var i in n)Array.isArray(e[i])&&(t[n[i]]=e[i][r])}function l(t,e){return t.v-e.v}function u(t){return t.v}e.exports=function(t,e){var r,c,f,h,p,d=t._fullLayout,m=o.getFromId(t,e.xaxis||"x"),g=o.getFromId(t,e.yaxis||"y"),v=[],y="violin"===e.type?"_numViolins":"_numBoxes";"h"===e.orientation?(c=m,f="x",h=g,p="y"):(c=g,f="y",h=m,p="x");var x,b=c.makeCalcdata(e,f),_=function(t,e,r,a,o){if(e in t)return r.makeCalcdata(t,e);var s;s=e+"0"in t?t[e+"0"]:"name"in t&&("category"===r.type||n(t.name)&&-1!==["linear","log"].indexOf(r.type)||i.isDateTime(t.name)&&"date"===r.type)?t.name:o;var l="multicategory"===r.type?r.r2c_just_indices(s):r.d2c(s,0,t[e+"calendar"]);return a.map(function(){return l})}(e,p,h,b,d[y]),w=i.distinctVals(_),A=w.vals,M=w.minDiff/2,k=function(t,e){for(var r=t.length,n=new Array(r+1),i=0;i=0&&Cx.uf};for(r=0;r0){var z=E[r].sort(l),D=z.map(u),P=D.length;(x={}).pos=A[r],x.pts=z,x.min=D[0],x.max=D[P-1],x.mean=i.mean(D,P),x.sd=i.stdev(D,P,x.mean),x.q1=i.interp(D,.25),x.med=i.interp(D,.5),x.q3=i.interp(D,.75),x.lf=Math.min(x.q1,D[Math.min(i.findBin(2.5*x.q1-1.5*x.q3,D,!0)+1,P-1)]),x.uf=Math.max(x.q3,D[Math.max(i.findBin(2.5*x.q3-1.5*x.q1,D),0)]),x.lo=4*x.q1-3*x.q3,x.uo=4*x.q3-3*x.q1;var I=1.57*(x.q3-x.q1)/Math.sqrt(P);x.ln=x.med-I,x.un=x.med+I,x.pts2=z.filter(O),v.push(x)}!function(t,e){if(i.isArrayOrTypedArray(e.selectedpoints))for(var r=0;r0?(v[0].t={num:d[y],dPos:M,posLetter:p,valLetter:f,labels:{med:a(t,"median:"),min:a(t,"min:"),q1:a(t,"q1:"),q3:a(t,"q3:"),max:a(t,"max:"),mean:"sd"===e.boxmean?a(t,"mean \xb1 \u03c3:"):a(t,"mean:"),lf:a(t,"lower fence:"),uf:a(t,"upper fence:")}},d[y]++,v):[{t:{empty:!0}}]}},{"../../lib":836,"../../plots/cartesian/axes":884,"fast-isnumeric":693}],1000:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),i=t("../../lib"),a=t("../../plots/cartesian/axis_ids").getAxisGroup,o=["v","h"];function s(t,e,r,o){var s,l,u,c=e.calcdata,f=e._fullLayout,h=o._id,p=h.charAt(0),d=[],m=0;for(s=0;s1,b=1-f[t+"gap"],_=1-f[t+"groupgap"];for(s=0;s0){var H=S.pointpos,G=S.jitter,W=S.marker.size/2,Y=0;H+G>=0&&((Y=U*(H+G))>T?(q=!0,j=W,F=Y):Y>N&&(j=W,F=T)),Y<=T&&(F=T);var Z=0;H-G<=0&&((Z=-U*(H-G))>E?(q=!0,V=W,B=Z):Z>R&&(V=W,B=E)),Z<=E&&(B=E)}else F=T,B=E;var X=new Array(u.length);for(l=0;lt.lo&&(_.so=!0)}return a});d.enter().append("path").classed("point",!0),d.exit().remove(),d.call(a.translatePoints,l,u)}function c(t,e,r,a){var o,s,l=e.pos,u=e.val,c=a.bPos,f=a.bPosPxOffset||0,h=r.boxmean||(r.meanline||{}).visible;Array.isArray(a.bdPos)?(o=a.bdPos[0],s=a.bdPos[1]):(o=a.bdPos,s=a.bdPos);var p=t.selectAll("path.mean").data("box"===r.type&&r.boxmean||"violin"===r.type&&r.box.visible&&r.meanline.visible?i.identity:[]);p.enter().append("path").attr("class","mean").style({fill:"none","vector-effect":"non-scaling-stroke"}),p.exit().remove(),p.each(function(t){var e=l.c2p(t.pos+c,!0)+f,i=l.c2p(t.pos+c-o,!0)+f,a=l.c2p(t.pos+c+s,!0)+f,p=u.c2p(t.mean,!0),d=u.c2p(t.mean-t.sd,!0),m=u.c2p(t.mean+t.sd,!0);"h"===r.orientation?n.select(this).attr("d","M"+p+","+i+"V"+a+("sd"===h?"m0,0L"+d+","+e+"L"+p+","+i+"L"+m+","+e+"Z":"")):n.select(this).attr("d","M"+i+","+p+"H"+a+("sd"===h?"m0,0L"+e+","+d+"L"+i+","+p+"L"+e+","+m+"Z":""))})}e.exports={plot:function(t,e,r,a){var o=e.xaxis,s=e.yaxis;i.makeTraceGroups(a,r,"trace boxes").each(function(t){var r,i,a=n.select(this),f=t[0],h=f.t,p=f.trace;e.isRangePlot||(f.node3=a),h.wdPos=h.bdPos*p.whiskerwidth,!0!==p.visible||h.empty?a.remove():("h"===p.orientation?(r=s,i=o):(r=o,i=s),l(a,{pos:r,val:i},p,h),u(a,{x:o,y:s},p,h),c(a,{pos:r,val:i},p,h))})},plotBoxAndWhiskers:l,plotPoints:u,plotBoxMean:c}},{"../../components/drawing":734,"../../lib":836,d3:108}],1008:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n,i=t.cd,a=t.xaxis,o=t.yaxis,s=[];if(!1===e)for(r=0;r=10)return null;var i=1/0;var a=-1/0;var o=e.length;for(var s=0;s0?Math.floor:Math.ceil,z=C>0?Math.ceil:Math.floor,D=C>0?Math.min:Math.max,P=C>0?Math.max:Math.min,I=O(E+L),N=z(S-L),R=[[f=T(E)]];for(a=I;a*C=0;i--)a[c-i]=t[f][i],o[c-i]=e[f][i];for(s.push({x:a,y:o,bicubic:l}),i=f,a=[],o=[];i>=0;i--)a[f-i]=t[i][0],o[f-i]=e[i][0];return s.push({x:a,y:o,bicubic:u}),s}},{}],1022:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),i=t("../../lib/extend").extendFlat;e.exports=function(t,e,r){var a,o,s,l,u,c,f,h,p,d,m,g,v,y,x=t["_"+e],b=t[e+"axis"],_=b._gridlines=[],w=b._minorgridlines=[],A=b._boundarylines=[],M=t["_"+r],k=t[r+"axis"];"array"===b.tickmode&&(b.tickvals=x.slice());var T=t._xctrl,E=t._yctrl,S=T[0].length,C=T.length,L=t._a.length,O=t._b.length;n.prepTicks(b),"array"===b.tickmode&&delete b.tickvals;var z=b.smoothing?3:1;function D(n){var i,a,o,s,l,u,c,f,p,d,m,g,v=[],y=[],x={};if("b"===e)for(a=t.b2j(n),o=Math.floor(Math.max(0,Math.min(O-2,a))),s=a-o,x.length=O,x.crossLength=L,x.xy=function(e){return t.evalxy([],e,a)},x.dxy=function(e,r){return t.dxydi([],e,o,r,s)},i=0;i0&&(p=t.dxydi([],i-1,o,0,s),v.push(l[0]+p[0]/3),y.push(l[1]+p[1]/3),d=t.dxydi([],i-1,o,1,s),v.push(f[0]-d[0]/3),y.push(f[1]-d[1]/3)),v.push(f[0]),y.push(f[1]),l=f;else for(i=t.a2i(n),u=Math.floor(Math.max(0,Math.min(L-2,i))),c=i-u,x.length=L,x.crossLength=O,x.xy=function(e){return t.evalxy([],i,e)},x.dxy=function(e,r){return t.dxydj([],u,e,c,r)},a=0;a0&&(m=t.dxydj([],u,a-1,c,0),v.push(l[0]+m[0]/3),y.push(l[1]+m[1]/3),g=t.dxydj([],u,a-1,c,1),v.push(f[0]-g[0]/3),y.push(f[1]-g[1]/3)),v.push(f[0]),y.push(f[1]),l=f;return x.axisLetter=e,x.axis=b,x.crossAxis=k,x.value=n,x.constvar=r,x.index=h,x.x=v,x.y=y,x.smoothing=k.smoothing,x}function P(n){var i,a,o,s,l,u=[],c=[],f={};if(f.length=x.length,f.crossLength=M.length,"b"===e)for(o=Math.max(0,Math.min(O-2,n)),l=Math.min(1,Math.max(0,n-o)),f.xy=function(e){return t.evalxy([],e,n)},f.dxy=function(e,r){return t.dxydi([],e,o,r,l)},i=0;ix.length-1||_.push(i(P(o),{color:b.gridcolor,width:b.gridwidth}));for(h=c;hx.length-1||m<0||m>x.length-1))for(g=x[s],v=x[m],a=0;ax[x.length-1]||w.push(i(D(d),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline&&A.push(i(P(0),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&A.push(i(P(x.length-1),{color:b.endlinecolor,width:b.endlinewidth}))}else{for(l=5e-15,c=(u=[Math.floor((x[x.length-1]-b.tick0)/b.dtick*(1+l)),Math.ceil((x[0]-b.tick0)/b.dtick/(1+l))].sort(function(t,e){return t-e}))[0],f=u[1],h=c;h<=f;h++)p=b.tick0+b.dtick*h,_.push(i(D(p),{color:b.gridcolor,width:b.gridwidth}));for(h=c-1;hx[x.length-1]||w.push(i(D(d),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline&&A.push(i(D(x[0]),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&A.push(i(D(x[x.length-1]),{color:b.endlinecolor,width:b.endlinewidth}))}}},{"../../lib/extend":826,"../../plots/cartesian/axes":884}],1023:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),i=t("../../lib/extend").extendFlat;e.exports=function(t,e){var r,a,o,s=e._labels=[],l=e._gridlines;for(r=0;re.length&&(t=t.slice(0,e.length)):t=[],i=0;i90&&(p-=180,l=-l),{angle:p,flip:l,p:t.c2p(n,e,r),offsetMultplier:u}}},{}],1037:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../components/drawing"),a=t("./map_1d_array"),o=t("./makepath"),s=t("./orient_text"),l=t("../../lib/svg_text_utils"),u=t("../../lib"),c=t("../../constants/alignment");function f(t,e,r,i,s,l){var u="const-"+s+"-lines",c=r.selectAll("."+u).data(l);c.enter().append("path").classed(u,!0).style("vector-effect","non-scaling-stroke"),c.each(function(r){var i=r,s=i.x,l=i.y,u=a([],s,t.c2p),c=a([],l,e.c2p),f="M"+o(u,c,i.smoothing);n.select(this).attr("d",f).style("stroke-width",i.width).style("stroke",i.color).style("fill","none")}),c.exit().remove()}function h(t,e,r,a,o,u,c,f){var h=u.selectAll("text."+f).data(c);h.enter().append("text").classed(f,!0);var p=0,d={};return h.each(function(o,u){var c;if("auto"===o.axis.tickangle)c=s(a,e,r,o.xy,o.dxy);else{var f=(o.axis.tickangle+180)*Math.PI/180;c=s(a,e,r,o.xy,[Math.cos(f),Math.sin(f)])}u||(d={angle:c.angle,flip:c.flip});var h=(o.endAnchor?-1:1)*c.flip,m=n.select(this).attr({"text-anchor":h>0?"start":"end","data-notex":1}).call(i.font,o.font).text(o.text).call(l.convertToTspans,t),g=i.bBox(this);m.attr("transform","translate("+c.p[0]+","+c.p[1]+") rotate("+c.angle+")translate("+o.axis.labelpadding*h+","+.3*g.height+")"),p=Math.max(p,g.width+o.axis.labelpadding)}),h.exit().remove(),d.maxExtent=p,d}e.exports=function(t,e,r,i){var l=e.xaxis,c=e.yaxis,p=t._fullLayout._clips;u.makeTraceGroups(i,r,"trace").each(function(e){var r=n.select(this),i=e[0],d=i.trace,g=d.aaxis,v=d.baxis,y=u.ensureSingle(r,"g","minorlayer"),x=u.ensureSingle(r,"g","majorlayer"),b=u.ensureSingle(r,"g","boundarylayer"),_=u.ensureSingle(r,"g","labellayer");r.style("opacity",d.opacity),f(l,c,x,g,"a",g._gridlines),f(l,c,x,v,"b",v._gridlines),f(l,c,y,g,"a",g._minorgridlines),f(l,c,y,v,"b",v._minorgridlines),f(l,c,b,g,"a-boundary",g._boundarylines),f(l,c,b,v,"b-boundary",v._boundarylines);var w=h(t,l,c,d,i,_,g._labels,"a-label"),A=h(t,l,c,d,i,_,v._labels,"b-label");!function(t,e,r,n,i,a,o,l){var c,f,h,p;c=.5*(r.a[0]+r.a[r.a.length-1]),f=r.b[0],h=r.ab2xy(c,f,!0),p=r.dxyda_rough(c,f),void 0===o.angle&&u.extendFlat(o,s(r,i,a,h,r.dxydb_rough(c,f)));m(t,e,r,n,h,p,r.aaxis,i,a,o,"a-title"),c=r.a[0],f=.5*(r.b[0]+r.b[r.b.length-1]),h=r.ab2xy(c,f,!0),p=r.dxydb_rough(c,f),void 0===l.angle&&u.extendFlat(l,s(r,i,a,h,r.dxyda_rough(c,f)));m(t,e,r,n,h,p,r.baxis,i,a,l,"b-title")}(t,_,d,i,l,c,w,A),function(t,e,r,n,i){var s,l,c,f,h=r.select("#"+t._clipPathId);h.size()||(h=r.append("clipPath").classed("carpetclip",!0));var p=u.ensureSingle(h,"path","carpetboundary"),d=e.clipsegments,m=[];for(f=0;f90&&g<270,y=n.select(this);y.text(c.title.text).call(l.convertToTspans,t),v&&(x=(-l.lineCount(y)+d)*p*a-x),y.attr("transform","translate("+e.p[0]+","+e.p[1]+") rotate("+e.angle+") translate(0,"+x+")").classed("user-select-none",!0).attr("text-anchor","middle").call(i.font,c.title.font)}),y.exit().remove()}},{"../../components/drawing":734,"../../constants/alignment":808,"../../lib":836,"../../lib/svg_text_utils":860,"./makepath":1034,"./map_1d_array":1035,"./orient_text":1036,d3:108}],1038:[function(t,e,r){"use strict";var n=t("./constants"),i=t("../../lib/search").findBin,a=t("./compute_control_points"),o=t("./create_spline_evaluator"),s=t("./create_i_derivative_evaluator"),l=t("./create_j_derivative_evaluator");e.exports=function(t){var e=t._a,r=t._b,u=e.length,c=r.length,f=t.aaxis,h=t.baxis,p=e[0],d=e[u-1],m=r[0],g=r[c-1],v=e[e.length-1]-e[0],y=r[r.length-1]-r[0],x=v*n.RELATIVE_CULL_TOLERANCE,b=y*n.RELATIVE_CULL_TOLERANCE;p-=x,d+=x,m-=b,g+=b,t.isVisible=function(t,e){return t>p&&tm&&ed||eg},t.setScale=function(){var e=t._x,r=t._y,n=a(t._xctrl,t._yctrl,e,r,f.smoothing,h.smoothing);t._xctrl=n[0],t._yctrl=n[1],t.evalxy=o([t._xctrl,t._yctrl],u,c,f.smoothing,h.smoothing),t.dxydi=s([t._xctrl,t._yctrl],f.smoothing,h.smoothing),t.dxydj=l([t._xctrl,t._yctrl],f.smoothing,h.smoothing)},t.i2a=function(t){var r=Math.max(0,Math.floor(t[0]),u-2),n=t[0]-r;return(1-n)*e[r]+n*e[r+1]},t.j2b=function(t){var e=Math.max(0,Math.floor(t[1]),u-2),n=t[1]-e;return(1-n)*r[e]+n*r[e+1]},t.ij2ab=function(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i=function(t){var r=Math.max(0,Math.min(i(t,e),u-2)),n=e[r],a=e[r+1];return Math.max(0,Math.min(u-1,r+(t-n)/(a-n)))},t.b2j=function(t){var e=Math.max(0,Math.min(i(t,r),c-2)),n=r[e],a=r[e+1];return Math.max(0,Math.min(c-1,e+(t-n)/(a-n)))},t.ab2ij=function(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c=function(e,r){return t.evalxy([],e,r)},t.ab2xy=function(n,i,a){if(!a&&(ne[u-1]|ir[c-1]))return[!1,!1];var o=t.a2i(n),s=t.b2j(i),l=t.evalxy([],o,s);if(a){var f,h,p,d,m=0,g=0,v=[];ne[u-1]?(f=u-2,h=1,m=(n-e[u-1])/(e[u-1]-e[u-2])):h=o-(f=Math.max(0,Math.min(u-2,Math.floor(o)))),ir[c-1]?(p=c-2,d=1,g=(i-r[c-1])/(r[c-1]-r[c-2])):d=s-(p=Math.max(0,Math.min(c-2,Math.floor(s)))),m&&(t.dxydi(v,f,p,h,d),l[0]+=v[0]*m,l[1]+=v[1]*m),g&&(t.dxydj(v,f,p,h,d),l[0]+=v[0]*g,l[1]+=v[1]*g)}return l},t.c2p=function(t,e,r){return[e.c2p(t[0]),r.c2p(t[1])]},t.p2x=function(t,e,r){return[e.p2c(t[0]),r.p2c(t[1])]},t.dadi=function(t){var r=Math.max(0,Math.min(e.length-2,t));return e[r+1]-e[r]},t.dbdj=function(t){var e=Math.max(0,Math.min(r.length-2,t));return r[e+1]-r[e]},t.dxyda=function(e,r,n,i){var a=t.dxydi(null,e,r,n,i),o=t.dadi(e,n);return[a[0]/o,a[1]/o]},t.dxydb=function(e,r,n,i){var a=t.dxydj(null,e,r,n,i),o=t.dbdj(r,i);return[a[0]/o,a[1]/o]},t.dxyda_rough=function(e,r,n){var i=v*(n||.1),a=t.ab2xy(e+i,r,!0),o=t.ab2xy(e-i,r,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dxydb_rough=function(e,r,n){var i=y*(n||.1),a=t.ab2xy(e,r+i,!0),o=t.ab2xy(e,r-i,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dpdx=function(t){return t._m},t.dpdy=function(t){return t._m}}},{"../../lib/search":855,"./compute_control_points":1026,"./constants":1027,"./create_i_derivative_evaluator":1028,"./create_j_derivative_evaluator":1029,"./create_spline_evaluator":1030}],1039:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r){var i,a,o,s=[],l=[],u=t[0].length,c=t.length;function f(e,r){var n,i=0,a=0;return e>0&&void 0!==(n=t[r][e-1])&&(a++,i+=n),e0&&void 0!==(n=t[r-1][e])&&(a++,i+=n),r0&&a0&&i1e-5);return n.log("Smoother converged to",M,"after",k,"iterations"),t}},{"../../lib":836}],1040:[function(t,e,r){"use strict";var n=t("../../lib").isArray1D;e.exports=function(t,e,r){var i=r("x"),a=i&&i.length,o=r("y"),s=o&&o.length;if(!a&&!s)return!1;if(e._cheater=!i,a&&!n(i)||s&&!n(o))e._length=null;else{var l=a?i.length:1/0;s&&(l=Math.min(l,o.length)),e.a&&e.a.length&&(l=Math.min(l,e.a.length)),e.b&&e.b.length&&(l=Math.min(l,e.b.length)),e._length=l}return!0}},{"../../lib":836}],1041:[function(t,e,r){"use strict";var n=t("../../components/fx/hovertemplate_attributes"),i=t("../scattergeo/attributes"),a=t("../../components/colorscale/attributes"),o=t("../../components/colorbar/attributes"),s=t("../../plots/attributes"),l=t("../../lib/extend").extendFlat,u=i.marker.line;e.exports=l({locations:{valType:"data_array",editType:"calc"},locationmode:i.locationmode,z:{valType:"data_array",editType:"calc"},text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),marker:{line:{color:u.color,width:l({},u.width,{dflt:1}),editType:"calc"},opacity:{valType:"number",arrayOk:!0,min:0,max:1,dflt:1,editType:"style"},editType:"calc"},selected:{marker:{opacity:i.selected.marker.opacity,editType:"plot"},editType:"plot"},unselected:{marker:{opacity:i.unselected.marker.opacity,editType:"plot"},editType:"plot"},hoverinfo:l({},s.hoverinfo,{editType:"calc",flags:["location","z","text","name"]}),hovertemplate:n()},a("",{cLetter:"z",editTypeOverride:"calc"}),{colorbar:o})},{"../../components/colorbar/attributes":714,"../../components/colorscale/attributes":720,"../../components/fx/hovertemplate_attributes":751,"../../lib/extend":826,"../../plots/attributes":881,"../scattergeo/attributes":1227}],1042:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../constants/numerical").BADNUM,a=t("../../components/colorscale/calc"),o=t("../scatter/arrays_to_calcdata"),s=t("../scatter/calc_selection");e.exports=function(t,e){for(var r=e._length,l=new Array(r),u=0;u")}(t,f,o,h.mockAxis),[t]}},{"../../plots/cartesian/axes":884,"../scatter/fill_hover_text":1195,"./attributes":1041}],1046:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../heatmap/colorbar"),n.calc=t("./calc"),n.plot=t("./plot"),n.style=t("./style").style,n.styleOnSelect=t("./style").styleOnSelect,n.hoverPoints=t("./hover"),n.eventData=t("./event_data"),n.selectPoints=t("./select"),n.moduleType="trace",n.name="choropleth",n.basePlotModule=t("../../plots/geo"),n.categories=["geo","noOpacity"],n.meta={},e.exports=n},{"../../plots/geo":914,"../heatmap/colorbar":1087,"./attributes":1041,"./calc":1042,"./defaults":1043,"./event_data":1044,"./hover":1045,"./plot":1047,"./select":1048,"./style":1049}],1047:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../lib"),a=t("../../lib/polygon"),o=t("../../lib/topojson_utils").getTopojsonFeatures,s=t("../../lib/geo_location_utils").locationToFeature,l=t("./style").style;function u(t,e){for(var r=t[0].trace,n=t.length,i=o(r,e),a=0;a0&&t[e+1][0]<0)return e;return null}switch(e="RUS"===l||"FJI"===l?function(t){var e;if(null===c(t))e=t;else for(e=new Array(t.length),i=0;ie?r[n++]=[t[i][0]+360,t[i][1]]:i===e?(r[n++]=t[i],r[n++]=[t[i][0],-90]):r[n++]=t[i];var o=a.tester(r);o.pts.pop(),u.push(o)}:function(t){u.push(a.tester(t))},o.type){case"MultiPolygon":for(r=0;r":f.value>h&&(s.prefixBoundary=!0);break;case"<":f.valueh)&&(s.prefixBoundary=!0);break;case"][":a=Math.min.apply(null,f.value),o=Math.max.apply(null,f.value),ah&&(s.prefixBoundary=!0)}}},{}],1058:[function(t,e,r){"use strict";var n=t("../../components/colorbar/draw"),i=t("./make_color_map"),a=t("./end_plus");e.exports=function(t,e){var r=e[0].trace,o="cb"+r.uid;if(t._fullLayout._infolayer.selectAll("."+o).remove(),r.showscale){var s=e[0].t.cb=n(t,o),l=r.contours,u=r.line,c=l.size||1,f=l.coloring,h=i(r,{isColorbar:!0});s.fillgradient("heatmap"===f?r.colorscale:"").zrange("heatmap"===f?[r.zmin,r.zmax]:"").fillcolor("fill"===f?h:"").line({color:"lines"===f?h:u.color,width:!1!==l.showlines?u.width:0,dash:u.dash}).levels({start:l.start,end:a(l),size:c}).options(r.colorbar)()}}},{"../../components/colorbar/draw":718,"./end_plus":1066,"./make_color_map":1071}],1059:[function(t,e,r){"use strict";e.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},{}],1060:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("./label_defaults"),a=t("../../components/color"),o=a.addOpacity,s=a.opacity,l=t("../../constants/filter_ops"),u=l.CONSTRAINT_REDUCTION,c=l.COMPARISON_OPS2;e.exports=function(t,e,r,a,l,f){var h,p,d,m=e.contours,g=r("contours.operation");(m._operation=u[g],function(t,e){var r;-1===c.indexOf(e.operation)?(t("contours.value",[0,1]),Array.isArray(e.value)?e.value.length>2?e.value=e.value.slice(2):0===e.length?e.value=[0,1]:e.length<2?(r=parseFloat(e.value[0]),e.value=[r,r+1]):e.value=[parseFloat(e.value[0]),parseFloat(e.value[1])]:n(e.value)&&(r=parseFloat(e.value),e.value=[r,r+1])):(t("contours.value",0),n(e.value)||(Array.isArray(e.value)?e.value=parseFloat(e.value[0]):e.value=0))}(r,m),"="===g?h=m.showlines=!0:(h=r("contours.showlines"),d=r("fillcolor",o((t.line||{}).color||l,.5))),h)&&(p=r("line.color",d&&s(d)?o(e.fillcolor,1):l),r("line.width",2),r("line.dash"));r("line.smoothing"),i(r,a,p,f)}},{"../../components/color":713,"../../constants/filter_ops":809,"./label_defaults":1070,"fast-isnumeric":693}],1061:[function(t,e,r){"use strict";var n=t("../../constants/filter_ops"),i=t("fast-isnumeric");function a(t,e){var r,a=Array.isArray(e);function o(t){return i(t)?+t:null}return-1!==n.COMPARISON_OPS2.indexOf(t)?r=o(a?e[0]:e):-1!==n.INTERVAL_OPS.indexOf(t)?r=a?[o(e[0]),o(e[1])]:[o(e),o(e)]:-1!==n.SET_OPS.indexOf(t)&&(r=a?e.map(o):[o(e)]),r}function o(t){return function(e){e=a(t,e);var r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return{start:r,end:n,size:n-r}}}function s(t){return function(e){return{start:e=a(t,e),end:1/0,size:1/0}}}e.exports={"[]":o("[]"),"][":o("]["),">":s(">"),"<":s("<"),"=":s("=")}},{"../../constants/filter_ops":809,"fast-isnumeric":693}],1062:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var i=n("contours.start"),a=n("contours.end"),o=!1===i||!1===a,s=r("contours.size");!(o?e.autocontour=!0:r("autocontour",!1))&&s||r("ncontours")}},{}],1063:[function(t,e,r){"use strict";var n=t("../../lib");function i(t){return n.extendFlat({},t,{edgepaths:n.extendDeep([],t.edgepaths),paths:n.extendDeep([],t.paths)})}e.exports=function(t,e){var r,a,o,s=function(t){return t.reverse()},l=function(t){return t};switch(e){case"=":case"<":return t;case">":for(1!==t.length&&n.warn("Contour data invalid for the specified inequality operation."),a=t[0],r=0;r1e3){n.warn("Too many contours, clipping at 1000",t);break}return l}},{"../../lib":836,"./constraint_mapping":1061,"./end_plus":1066}],1066:[function(t,e,r){"use strict";e.exports=function(t){return t.end+t.size/1e6}},{}],1067:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./constants");function a(t,e,r,n){return Math.abs(t[0]-e[0])20&&e?208===t||1114===t?n=0===r[0]?1:-1:a=0===r[1]?1:-1:-1!==i.BOTTOMSTART.indexOf(t)?a=1:-1!==i.LEFTSTART.indexOf(t)?n=1:-1!==i.TOPSTART.indexOf(t)?a=-1:n=-1;return[n,a]}(h,r,e),d=[s(t,e,[-p[0],-p[1]])],m=p.join(","),g=t.z.length,v=t.z[0].length;for(u=0;u<1e4;u++){if(h>20?(h=i.CHOOSESADDLE[h][(p[0]||p[1])<0?0:1],t.crossings[f]=i.SADDLEREMAINDER[h]):delete t.crossings[f],!(p=i.NEWDELTA[h])){n.log("Found bad marching index:",h,e,t.level);break}d.push(s(t,e,p)),e[0]+=p[0],e[1]+=p[1],a(d[d.length-1],d[d.length-2],o,l)&&d.pop(),f=e.join(",");var y=p[0]&&(e[0]<0||e[0]>v-2)||p[1]&&(e[1]<0||e[1]>g-2);if(f===c&&p.join(",")===m||r&&y)break;h=t.crossings[f]}1e4===u&&n.log("Infinite loop in contour?");var x,b,_,w,A,M,k,T,E,S,C,L,O,z,D,P=a(d[0],d[d.length-1],o,l),I=0,N=.2*t.smoothing,R=[],F=0;for(u=1;u=F;u--)if((x=R[u])=F&&x+R[b]T&&E--,t.edgepaths[E]=C.concat(d,S));break}U||(t.edgepaths[T]=d.concat(S))}for(T=0;Tt?0:1)+(e[0][1]>t?0:2)+(e[1][1]>t?0:4)+(e[1][0]>t?0:8);return 5===r||10===r?t>(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5===r?713:1114:5===r?104:208:15===r?0:r}e.exports=function(t){var e,r,a,o,s,l,u,c,f,h=t[0].z,p=h.length,d=h[0].length,m=2===p||2===d;for(r=0;rt.level}return r?"M"+e.join("L")+"Z":""}(t,e),h=0,p=t.edgepaths.map(function(t,e){return e}),d=!0;function m(t){return Math.abs(t[1]-e[2][1])<.01}function g(t){return Math.abs(t[0]-e[0][0])<.01}function v(t){return Math.abs(t[0]-e[2][0])<.01}for(;p.length;){for(u=a.smoothopen(t.edgepaths[h],t.smoothing),f+=d?u:u.replace(/^M/,"L"),p.splice(p.indexOf(h),1),r=t.edgepaths[h][t.edgepaths[h].length-1],s=-1,o=0;o<4;o++){if(!r){i.log("Missing end?",h,t);break}for(c=r,Math.abs(c[1]-e[0][1])<.01&&!v(r)?n=e[1]:g(r)?n=e[0]:m(r)?n=e[3]:v(r)&&(n=e[2]),l=0;l=0&&(n=y,s=l):Math.abs(r[1]-n[1])<.01?Math.abs(r[1]-y[1])<.01&&(y[0]-r[0])*(n[0]-y[0])>=0&&(n=y,s=l):i.log("endpt to newendpt is not vert. or horz.",r,n,y)}if(r=n,s>=0)break;f+="L"+n}if(s===t.edgepaths.length){i.log("unclosed perimeter path");break}h=s,(d=-1===p.indexOf(h))&&(h=p[0],f+="Z")}for(h=0;hn.center?n.right-s:s-n.left)/(c+Math.abs(Math.sin(u)*o)),p=(l>n.middle?n.bottom-l:l-n.top)/(Math.abs(f)+Math.cos(u)*o);if(h<1||p<1)return 1/0;var d=g.EDGECOST*(1/(h-1)+1/(p-1));d+=g.ANGLECOST*u*u;for(var m=s-c,v=l-f,y=s+c,x=l+f,b=0;b2*g.MAXCOST)break;p&&(s/=2),l=(o=u-s/2)+1.5*s}if(h<=g.MAXCOST)return c},r.addLabelData=function(t,e,r,n){var i=e.width/2,a=e.height/2,o=t.x,s=t.y,l=t.theta,u=Math.sin(l),c=Math.cos(l),f=i*c,h=a*u,p=i*u,d=-a*c,m=[[o-f-h,s-p-d],[o+f-h,s+p-d],[o+f+h,s+p+d],[o-f+h,s-p+d]];r.push({text:e.text,x:o,y:s,dy:e.dy,theta:l,level:e.level,width:e.width,height:e.height}),n.push(m)},r.drawLabels=function(t,e,r,a,s){var l=t.selectAll("text").data(e,function(t){return t.text+","+t.x+","+t.y+","+t.theta});if(l.exit().remove(),l.enter().append("text").attr({"data-notex":1,"text-anchor":"middle"}).each(function(t){var e=t.x+Math.sin(t.theta)*t.dy,i=t.y-Math.cos(t.theta)*t.dy;n.select(this).text(t.text).attr({x:e,y:i,transform:"rotate("+180*t.theta/Math.PI+" "+e+" "+i+")"}).call(o.convertToTspans,r)}),s){for(var u="",c=0;ce.end&&(e.start=e.end=(e.start+e.end)/2),t._input.contours||(t._input.contours={}),i.extendFlat(t._input.contours,{start:e.start,end:e.end,size:e.size}),t._input.autocontour=!0}else if("constraint"!==e.type){var l,u=e.start,c=e.end,f=t._input.contours;if(u>c&&(e.start=f.start=c,c=e.end=f.end=u,u=e.start),!(e.size>0))l=u===c?1:a(u,c,t.ncontours).dtick,f.size=e.size=l}}},{"../../lib":836,"../../plots/cartesian/axes":884}],1075:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../components/drawing"),a=t("../heatmap/style"),o=t("./make_color_map");e.exports=function(t){var e=n.select(t).selectAll("g.contour");e.style("opacity",function(t){return t[0].trace.opacity}),e.each(function(t){var e=n.select(this),r=t[0].trace,a=r.contours,s=r.line,l=a.size||1,u=a.start,c="constraint"===a.type,f=!c&&"lines"===a.coloring,h=!c&&"fill"===a.coloring,p=f||h?o(r):null;e.selectAll("g.contourlevel").each(function(t){n.select(this).selectAll("path").call(i.lineGroupStyle,s.width,f?p(t.level):s.color,s.dash)});var d=a.labelfont;if(e.selectAll("g.contourlabels text").each(function(t){i.font(n.select(this),{family:d.family,size:d.size,color:d.color||(f?p(t.level):s.color)})}),c)e.selectAll("g.contourfill path").style("fill",r.fillcolor);else if(h){var m;e.selectAll("g.contourfill path").style("fill",function(t){return void 0===m&&(m=t.level),p(t.level+.5*l)}),void 0===m&&(m=u),e.selectAll("g.contourbg path").style("fill",p(m-.5*l))}}),a(t)}},{"../../components/drawing":734,"../heatmap/style":1096,"./make_color_map":1071,d3:108}],1076:[function(t,e,r){"use strict";var n=t("../../components/colorscale/defaults"),i=t("./label_defaults");e.exports=function(t,e,r,a,o){var s,l=r("contours.coloring"),u="";"fill"===l&&(s=r("contours.showlines")),!1!==s&&("lines"!==l&&(u=r("line.color","#000")),r("line.width",.5),r("line.dash")),"none"!==l&&(!0!==t.showlegend&&(e.showlegend=!1),e._dfltShowLegend=!1,n(t,e,a,r,{prefix:"",cLetter:"z"})),r("line.smoothing"),i(r,a,u,o)}},{"../../components/colorscale/defaults":723,"./label_defaults":1070}],1077:[function(t,e,r){"use strict";var n=t("../heatmap/attributes"),i=t("../contour/attributes"),a=i.contours,o=t("../scatter/attributes"),s=t("../../components/colorscale/attributes"),l=t("../../components/colorbar/attributes"),u=t("../../lib/extend").extendFlat,c=o.line;e.exports=u({carpet:{valType:"string",editType:"calc"},z:n.z,a:n.x,a0:n.x0,da:n.dx,b:n.y,b0:n.y0,db:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,atype:n.xtype,btype:n.ytype,fillcolor:i.fillcolor,autocontour:i.autocontour,ncontours:i.ncontours,contours:{type:a.type,start:a.start,end:a.end,size:a.size,coloring:{valType:"enumerated",values:["fill","lines","none"],dflt:"fill",editType:"calc"},showlines:a.showlines,showlabels:a.showlabels,labelfont:a.labelfont,labelformat:a.labelformat,operation:a.operation,value:a.value,editType:"calc",impliedEdits:{autocontour:!1}},line:{color:u({},c.color,{}),width:c.width,dash:c.dash,smoothing:u({},c.smoothing,{}),editType:"plot"},transforms:void 0},s("",{cLetter:"z",autoColorDflt:!1}),{colorbar:l})},{"../../components/colorbar/attributes":714,"../../components/colorscale/attributes":720,"../../lib/extend":826,"../contour/attributes":1055,"../heatmap/attributes":1084,"../scatter/attributes":1187}],1078:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc"),i=t("../../lib"),a=t("../heatmap/convert_column_xyz"),o=t("../heatmap/clean_2d_array"),s=t("../heatmap/interp2d"),l=t("../heatmap/find_empties"),u=t("../heatmap/make_bound_array"),c=t("./defaults"),f=t("../carpet/lookup_carpetid"),h=t("../contour/set_contours");e.exports=function(t,e){var r=e._carpetTrace=f(t,e);if(r&&r.visible&&"legendonly"!==r.visible){if(!e.a||!e.b){var p=t.data[r.index],d=t.data[e.index];d.a||(d.a=p.a),d.b||(d.b=p.b),c(d,e,e._defaultColor,t._fullLayout)}var m=function(t,e){var r,c,f,h,p,d,m,g=e._carpetTrace,v=g.aaxis,y=g.baxis;v._minDtick=0,y._minDtick=0,i.isArray1D(e.z)&&a(e,v,y,"a","b",["z"]);r=e._a=e._a||e.a,h=e._b=e._b||e.b,r=r?v.makeCalcdata(e,"_a"):[],h=h?y.makeCalcdata(e,"_b"):[],c=e.a0||0,f=e.da||1,p=e.b0||0,d=e.db||1,m=e._z=o(e._z||e.z,e.transpose),e._emptypoints=l(m),s(m,e._emptypoints);var x=i.maxRowLength(m),b="scaled"===e.xtype?"":r,_=u(e,b,c,f,x,v),w="scaled"===e.ytype?"":h,A=u(e,w,p,d,m.length,y),M={a:_,b:A,z:m};"levels"===e.contours.type&&"none"!==e.contours.coloring&&n(t,e,{vals:m,containerStr:"",cLetter:"z"});return[M]}(t,e);return h(e),m}}},{"../../components/colorscale/calc":721,"../../lib":836,"../carpet/lookup_carpetid":1033,"../contour/set_contours":1074,"../heatmap/clean_2d_array":1086,"../heatmap/convert_column_xyz":1088,"../heatmap/find_empties":1090,"../heatmap/interp2d":1093,"../heatmap/make_bound_array":1094,"./defaults":1079}],1079:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../heatmap/xyz_defaults"),a=t("./attributes"),o=t("../contour/constraint_defaults"),s=t("../contour/contours_defaults"),l=t("../contour/style_defaults");e.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,a,r,i)}if(c("carpet"),t.a&&t.b){if(!i(t,e,c,u,"a","b"))return void(e.visible=!1);c("text"),"constraint"===c("contours.type")?o(t,e,c,u,r,{hasHover:!1}):(s(t,e,c,function(r){return n.coerce2(t,e,a,r)}),l(t,e,c,u,{hasHover:!1}))}else e._defaultColor=r,e._length=null}},{"../../lib":836,"../contour/constraint_defaults":1060,"../contour/contours_defaults":1062,"../contour/style_defaults":1076,"../heatmap/xyz_defaults":1098,"./attributes":1077}],1080:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../contour/colorbar"),n.calc=t("./calc"),n.plot=t("./plot"),n.style=t("../contour/style"),n.moduleType="trace",n.name="contourcarpet",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","svg","carpet","contour","symbols","showLegend","hasLines","carpetDependent"],n.meta={},e.exports=n},{"../../plots/cartesian":895,"../contour/colorbar":1058,"../contour/style":1075,"./attributes":1077,"./calc":1078,"./defaults":1079,"./plot":1083}],1081:[function(t,e,r){"use strict";var n=t("../../components/drawing"),i=t("../carpet/axis_aligned_line"),a=t("../../lib");e.exports=function(t,e,r,o,s,l,u,c){var f,h,p,d,m,g,v,y="",x=e.edgepaths.map(function(t,e){return e}),b=!0,_=1e-4*Math.abs(r[0][0]-r[2][0]),w=1e-4*Math.abs(r[0][1]-r[2][1]);function A(t){return Math.abs(t[1]-r[0][1])=0&&(p=C,m=g):Math.abs(h[1]-p[1])=0&&(p=C,m=g):a.log("endpt to newendpt is not vert. or horz.",h,p,C)}if(m>=0)break;y+=E(h,p),h=p}if(m===e.edgepaths.length){a.log("unclosed perimeter path");break}f=m,(b=-1===x.indexOf(f))&&(f=x[0],y+=E(h,p)+"Z",h=null)}for(f=0;f=0;V--)F=E.clipsegments[V],B=i([],F.x,w.c2p),j=i([],F.y,A.c2p),B.reverse(),j.reverse(),q.push(a(B,j,F.bicubic));var H="M"+q.join("L")+"Z";!function(t,e,r,n,o,l){var u,c,f,h,p=s.ensureSingle(t,"g","contourbg").selectAll("path").data("fill"!==l||o?[]:[0]);p.enter().append("path"),p.exit().remove();var d=[];for(h=0;hg&&(n.max=g);n.len=n.max-n.min}(this,r,t,n,u,e.height),!(n.len<(e.width+e.height)*f.LABELMIN)))for(var i=Math.min(Math.ceil(n.len/z),f.LABELMAX),a=0;aL){S("x scale is not linear");break}}if(m.length&&"fast"===T){var O=(m[m.length-1]-m[0])/(m.length-1),z=Math.abs(O/100);for(x=0;xz){S("y scale is not linear");break}}}var D=i.maxRowLength(y),P="scaled"===e.xtype?"":r,I=h(e,P,p,d,D,_),N="scaled"===e.ytype?"":m,R=h(e,N,g,v,y.length,w);k||(e._extremes[_._id]=a.findExtremes(_,I),e._extremes[w._id]=a.findExtremes(w,R));var F={x:I,y:R,z:y,text:e._text||e.text,hovertext:e._hovertext||e.hovertext};if(P&&P.length===I.length-1&&(F.xCenter=P),N&&N.length===R.length-1&&(F.yCenter=N),M&&(F.xRanges=b.xRanges,F.yRanges=b.yRanges,F.pts=b.pts),A&&"constraint"===e.contours.type||s(t,e,{vals:y,containerStr:"",cLetter:"z"}),A&&e.contours&&"heatmap"===e.contours.coloring){var B={type:"contour"===e.type?"heatmap":"histogram2d",xcalendar:e.xcalendar,ycalendar:e.ycalendar};F.xfill=h(B,P,p,d,D,_),F.yfill=h(B,N,g,v,y.length,w)}return[F]}},{"../../components/colorscale/calc":721,"../../lib":836,"../../plots/cartesian/axes":884,"../../registry":965,"../histogram2d/calc":1116,"./clean_2d_array":1086,"./convert_column_xyz":1088,"./find_empties":1090,"./interp2d":1093,"./make_bound_array":1094}],1086:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports=function(t,e){var r,i,a,o,s,l;function u(t){if(n(t))return+t}if(e){for(r=0,s=0;s=0;o--)(s=((f[[(r=(a=h[o])[0])-1,i=a[1]]]||m)[2]+(f[[r+1,i]]||m)[2]+(f[[r,i-1]]||m)[2]+(f[[r,i+1]]||m)[2])/20)&&(l[a]=[r,i,s],h.splice(o,1),u=!0);if(!u)throw"findEmpties iterated with no new neighbors";for(a in l)f[a]=l[a],c.push(l[a])}return c.sort(function(t,e){return e[2]-t[2]})}},{"../../lib":836}],1091:[function(t,e,r){"use strict";var n=t("../../components/fx"),i=t("../../lib"),a=t("../../plots/cartesian/axes");e.exports=function(t,e,r,o,s,l){var u,c,f,h,p=t.cd[0],d=p.trace,m=t.xa,g=t.ya,v=p.x,y=p.y,x=p.z,b=p.xCenter,_=p.yCenter,w=p.zmask,A=[d.zmin,d.zmax],M=d.zhoverformat,k=v,T=y;if(!1!==t.index){try{f=Math.round(t.index[1]),h=Math.round(t.index[0])}catch(e){return void i.error("Error hovering on heatmap, pointNumber must be [row,col], found:",t.index)}if(f<0||f>=x[0].length||h<0||h>x.length)return}else{if(n.inbox(e-v[0],e-v[v.length-1],0)>0||n.inbox(r-y[0],r-y[y.length-1],0)>0)return;if(l){var E;for(k=[2*v[0]-v[1]],E=1;Em&&(v=Math.max(v,Math.abs(t[a][o]-d)/(g-m))))}return v}e.exports=function(t,e){var r,i=1;for(o(t,e),r=0;r.01;r++)i=o(t,e,a(i));return i>.01&&n.log("interp2d didn't converge quickly",i),t}},{"../../lib":836}],1094:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r,a,o,s){var l,u,c,f=[],h=n.traceIs(t,"contour"),p=n.traceIs(t,"histogram"),d=n.traceIs(t,"gl2d");if(i(e)&&e.length>1&&!p&&"category"!==s.type){var m=e.length;if(!(m<=o))return h?e.slice(0,o):e.slice(0,o+1);if(h||d)f=e.slice(0,o);else if(1===o)f=[e[0]-.5,e[0]+.5];else{for(f=[1.5*e[0]-.5*e[1]],c=1;c0;)h=p.c2p(A[y]),y--;for(h0;)v=d.c2p(M[y]),y--;if(v0&&(a=!0);for(var l=0;la){var o=a-r[t];return r[t]=a,o}}return 0},max:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]u?t>o?t>1.1*i?i:t>1.1*a?a:o:t>s?s:t>l?l:u:Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function p(t,e,r,n,a,s){if(n&&t>o){var l=d(e,a,s),u=d(r,a,s),c=t===i?0:1;return l[c]!==u[c]}return Math.floor(r/t)-Math.floor(e/t)>.1}function d(t,e,r){var n=e.c2d(t,i,r).split("-");return""===n[0]&&(n.unshift(),n[0]="-"+n[0]),n}e.exports=function(t,e,r,n,a){var s,l,u=-1.1*e,h=-.1*e,p=t-h,d=r[0],m=r[1],g=Math.min(f(d+h,d+p,n,a),f(m+h,m+p,n,a)),v=Math.min(f(d+u,d+h,n,a),f(m+u,m+h,n,a));if(g>v&&vo){var y=s===i?1:6,x=s===i?"M12":"M1";return function(e,r){var o=n.c2d(e,i,a),s=o.indexOf("-",y);s>0&&(o=o.substr(0,s));var u=n.d2c(o,0,a);if(ur.r2l(O)&&(D=a.tickIncrement(D,_.size,!0,h)),E.start=r.l2r(D),L||i.nestedProperty(e,g+".start").set(E.start)}var P=_.end,I=r.r2l(T.end),N=void 0!==I;if((_.endFound||N)&&I!==r.r2l(P)){var R=N?I:i.aggNums(Math.max,null,p);E.end=r.l2r(R),N||i.nestedProperty(e,g+".start").set(E.end)}var F="autobin"+o;return!1===e._input[F]&&(e._input[g]=i.extendFlat({},e[g]||{}),delete e._input[F],delete e[F]),[E,p]}e.exports=function(t,e){if(!0===e.visible){var r,h,p,d,m=[],g=[],v=a.getFromId(t,"h"===e.orientation?e.yaxis||"y":e.xaxis||"x"),y="h"===e.orientation?"y":"x",x={x:"y",y:"x"}[y],b=e[y+"calendar"],_=e.cumulative,w=f(t,e,v,y),A=w[0],M=w[1],k="string"==typeof A.size,T=[],E=k?T:A,S=[],C=[],L=[],O=0,z=e.histnorm,D=e.histfunc,P=-1!==z.indexOf("density");_.enabled&&P&&(z=z.replace(/ ?density$/,""),P=!1);var I,N="max"===D||"min"===D?null:0,R=s.count,F=l[z],B=!1,j=function(t){return v.r2c(t,0,b)};for(i.isArrayOrTypedArray(e[x])&&"count"!==D&&(I=e[x],B="avg"===D,R=s[D]),r=j(A.start),p=j(A.end)+(r-a.tickIncrement(r,A.size,!1,b))/1e6;r=0&&d=0;n--)s(n);else if("increasing"===e){for(n=1;n=0;n--)t[n]+=t[n+1];"exclude"===r&&(t.push(0),t.shift())}}(g,_.direction,_.currentbin);var Z=Math.min(m.length,g.length),X=[],$=0,J=Z-1;for(r=0;r=$;r--)if(g[r]){J=r;break}for(r=$;r<=J;r++)if(n(m[r])&&n(g[r])){var K={p:m[r],s:g[r],b:0};_.enabled||(K.pts=L[r],q?K.ph0=K.ph1=L[r].length?M[L[r][0]]:m[r]:(K.ph0=V(T[r]),K.ph1=V(T[r+1],!0))),X.push(K)}return 1===X.length&&(X[0].width1=a.tickIncrement(X[0].p,A.size,!1,b)-X[0].p),o(X,e),i.isArrayOrTypedArray(e.selectedpoints)&&i.tagSelected(X,e,W),X}}},{"../../lib":836,"../../plots/cartesian/axes":884,"../bar/arrays_to_calcdata":974,"./average":1103,"./bin_functions":1105,"./bin_label_vals":1106,"./norm_functions":1114,"fast-isnumeric":693}],1108:[function(t,e,r){"use strict";e.exports={eventDataKeys:["binNumber"]}},{}],1109:[function(t,e,r){"use strict";var n=t("../../lib"),i=n.nestedProperty,a=t("../bar/defaults").handleGroupingDefaults,o=t("../../plots/cartesian/axis_ids").getAxisGroup,s=t("./attributes"),l={x:[{aStr:"xbins.start",name:"start"},{aStr:"xbins.end",name:"end"},{aStr:"xbins.size",name:"size"},{aStr:"nbinsx",name:"nbins"}],y:[{aStr:"ybins.start",name:"start"},{aStr:"ybins.end",name:"end"},{aStr:"ybins.size",name:"size"},{aStr:"nbinsy",name:"nbins"}]};e.exports=function(t,e){var r,u,c,f,h,p,d,m=e._histogramBinOpts={},g="overlay"===e.barmode;function v(t){return n.coerce(c._input,c,s,t)}for(r=0;rk&&g.splice(k,g.length-k),y.length>k&&y.splice(k,y.length-k),u(e,"x",g,m,_,A,x),u(e,"y",y,v,w,M,b);var T=[],E=[],S=[],C="string"==typeof e.xbins.size,L="string"==typeof e.ybins.size,O=[],z=[],D=C?O:e.xbins,P=L?z:e.ybins,I=0,N=[],R=[],F=e.histnorm,B=e.histfunc,j=-1!==F.indexOf("density"),V="max"===B||"min"===B?null:0,U=a.count,q=o[F],H=!1,G=[],W=[],Y="z"in e?e.z:"marker"in e&&Array.isArray(e.marker.color)?e.marker.color:"";Y&&"count"!==B&&(H="avg"===B,U=a[B]);var Z=e.xbins,X=_(Z.start),$=_(Z.end)+(X-i.tickIncrement(X,Z.size,!1,x))/1e6;for(r=X;r<$;r=i.tickIncrement(r,Z.size,!1,x))E.push(V),O.push(r),H&&S.push(0);O.push(r);var J=E.length,K=_(e.xbins.start),Q=(r-K)/J,tt=A(K+Q/2);for(X=w((Z=e.ybins).start),$=w(Z.end)+(X-i.tickIncrement(X,Z.size,!1,b))/1e6,r=X;r<$;r=i.tickIncrement(r,Z.size,!1,b)){T.push(E.slice()),z.push(r);var et=new Array(J);for(l=0;l=0&&p=0&&d0?Number(d):p;else if("string"!=typeof d)c.size=p;else{var m=d.charAt(0),g=d.substr(1);((g=n(g)?Number(g):0)<=0||"date"!==l||"M"!==m||g!==Math.round(g))&&(c.size=p)}}e.exports=function(t,e){var r,n,i,a;function c(t){return o.coerce(i._input,i,s,t)}for(r=0;r0;r--){var n=Math.min(e[r],e[r-1]),i=Math.max(e[r],e[r-1]);if(i>n&&n-1}function N(t,e){return null===t?e:t}function R(t,e,r){C();var n=[e],i=[r];if(A>=1)n=[e],i=[r];else if(A>0){var a=function(t,e){var r=t[0],n=t[1],i=t[2],a=function(t,e,r){for(var n=[],i=0;i-1?r[l]:S(u,c,f);s[l]=p>-1?p:O(u,c,f,N(t,h))}z(s[0],s[1],s[2])}}function F(t,e,r,n){var i=t[3];in&&(i=n);for(var a=(t[3]-i)/(t[3]-e[3]+1e-9),o=[],s=0;s<4;s++)o[s]=(1-a)*t[s]+a*e[s];return o}function B(t,e,r){return t>=e&&t<=r}function j(t){var e=.001*(E-T);return t>=T-e&&t<=E+e}function V(e){for(var r=[],n=0;n<4;n++){var i=e[n];r.push([t.x[i],t.y[i],t.z[i],t.value[i]])}return r}var U=3;function q(t,e,r,n,i,a){a||(a=1),r=[-1,-1,-1];var o=!1,s=[B(e[0][3],n,i),B(e[1][3],n,i),B(e[2][3],n,i)];if(!s[0]&&!s[1]&&!s[2])return!1;var l=function(t,e,r){return j(e[0][3])&&j(e[1][3])&&j(e[2][3])?(R(t,e,r),!0):aC?[M,A]:[A,k];tt(e,z[0],z[1])}}var D=[[Math.min(T,k),Math.max(T,k)],[Math.min(M,E),Math.max(M,E)]];["x","y","z"].forEach(function(e){for(var r=[],n=0;n0&&(u.push(x.id),"x"===e?c.push([x.distRatio,0,0]):"y"===e?c.push([0,x.distRatio,0]):c.push([0,0,x.distRatio]))}else l=it(1,"x"===e?m-1:"y"===e?g-1:v-1);u.length>0&&(r[i]="x"===e?et(null,u,a,o,c,r[i]):"y"===e?rt(null,u,a,o,c,r[i]):nt(null,u,a,o,c,r[i]),i++),l.length>0&&(r[i]="x"===e?$(null,l,a,o,r[i]):"y"===e?J(null,l,a,o,r[i]):K(null,l,a,o,r[i]),i++)}var b=t.caps[e];b.show&&b.fill&&(P(b.fill),r[i]="x"===e?$(null,[0,m-1],a,o,r[i]):"y"===e?J(null,[0,g-1],a,o,r[i]):K(null,[0,v-1],a,o,r[i]),i++)}}),0===c&&L(),t._x=x,t._y=b,t._z=_,t._intensity=w,t._Xs=h,t._Ys=p,t._Zs=d}(),t}(t);var s={positions:o(n(r.xaxis,t._x,e.dataScale[0],t.xcalendar),n(r.yaxis,t._y,e.dataScale[1],t.ycalendar),n(r.zaxis,t._z,e.dataScale[2],t.zcalendar)),cells:o(t._i,t._j,t._k),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading};s.vertexIntensity=t._intensity,s.vertexIntensityBounds=[t.cmin,t.cmax],s.colormap=i(t),this.mesh.update(s)},c.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new u(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},{"../../lib":836,"../../lib/gl_format_color":833,"../../lib/str2rgbarray":859,"../../plots/gl3d/zip3":936,"gl-mesh3d":279}],1128:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../lib"),a=t("../../components/colorscale/defaults"),o=t("./attributes");e.exports=function(t,e,r,s){function l(r,n){return i.coerce(t,e,o,r,n)}var u=l("isomin"),c=l("isomax");null!=c&&null!=u&&u>c&&(e.isomin=null,e.isomax=null);var f=l("x"),h=l("y"),p=l("z"),d=l("value");f&&f.length&&h&&h.length&&p&&p.length&&d&&d.length?(n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],s),["x","y","z"].forEach(function(t){var e="caps."+t;l(e+".show")&&l(e+".fill");var r="slices."+t;l(r+".show")&&(l(r+".fill"),l(r+".locations"))}),l("spaceframe.show")&&l("spaceframe.fill"),l("surface.show")&&(l("surface.count"),l("surface.fill"),l("surface.pattern")),l("contour.show")&&(l("contour.color"),l("contour.width")),["text","hovertext","hovertemplate","lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lighting.vertexnormalsepsilon","lighting.facenormalsepsilon","lightposition.x","lightposition.y","lightposition.z","flatshading","opacity"].forEach(function(t){l(t)}),a(t,e,s,l,{prefix:"",cLetter:"c"}),e._length=null):e.visible=!1}},{"../../components/colorscale/defaults":723,"../../lib":836,"../../registry":965,"./attributes":1125}],1129:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.colorbar={min:"cmin",max:"cmax"},n.plot=t("./convert"),n.moduleType="trace",n.name="isosurface",n.basePlotModule=t("../../plots/gl3d"),n.categories=["gl3d"],n.meta={},e.exports=n},{"../../plots/gl3d":925,"./attributes":1125,"./calc":1126,"./convert":1127,"./defaults":1128}],1130:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),i=t("../../components/colorbar/attributes"),a=t("../../components/fx/hovertemplate_attributes"),o=t("../surface/attributes"),s=t("../../plots/attributes"),l=t("../../lib/extend").extendFlat;e.exports=l({x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},i:{valType:"data_array",editType:"calc"},j:{valType:"data_array",editType:"calc"},k:{valType:"data_array",editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertemplate:a({editType:"calc"}),delaunayaxis:{valType:"enumerated",values:["x","y","z"],dflt:"z",editType:"calc"},alphahull:{valType:"number",dflt:-1,editType:"calc"},intensity:{valType:"data_array",editType:"calc"},color:{valType:"color",editType:"calc"},vertexcolor:{valType:"data_array",editType:"calc"},facecolor:{valType:"data_array",editType:"calc"},transforms:void 0},n("",{colorAttr:"`intensity`",showScaleDflt:!0,editTypeOverride:"calc"}),{colorbar:i,opacity:o.opacity,flatshading:{valType:"boolean",dflt:!1,editType:"calc"},contour:{show:l({},o.contours.x.show,{}),color:o.contours.x.color,width:o.contours.x.width,editType:"calc"},lightposition:{x:l({},o.lightposition.x,{dflt:1e5}),y:l({},o.lightposition.y,{dflt:1e5}),z:l({},o.lightposition.z,{dflt:0}),editType:"calc"},lighting:l({vertexnormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-12,editType:"calc"},facenormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-6,editType:"calc"},editType:"calc"},o.lighting),hoverinfo:l({},s.hoverinfo,{editType:"calc"})})},{"../../components/colorbar/attributes":714,"../../components/colorscale/attributes":720,"../../components/fx/hovertemplate_attributes":751,"../../lib/extend":826,"../../plots/attributes":881,"../surface/attributes":1274}],1131:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc");e.exports=function(t,e){e.intensity&&n(t,e,{vals:e.intensity,containerStr:"",cLetter:"c"})}},{"../../components/colorscale/calc":721}],1132:[function(t,e,r){"use strict";var n=t("gl-mesh3d"),i=t("delaunay-triangulate"),a=t("alpha-shape"),o=t("convex-hull"),s=t("../../lib/gl_format_color").parseColorScale,l=t("../../lib/str2rgbarray"),u=t("../../plots/gl3d/zip3");function c(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.color="#fff",this.data=null,this.showContour=!1}var f=c.prototype;function h(t){for(var e=[],r=t.length,n=0;n=e-.5)return!1;return!0}f.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index;t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]];var r=this.data.hovertext||this.data.text;return Array.isArray(r)&&void 0!==r[e]?t.textLabel=r[e]:r&&(t.textLabel=r),!0}},f.update=function(t){var e=this.scene,r=e.fullSceneLayout;this.data=t;var n,c=t.x.length,f=u(p(r.xaxis,t.x,e.dataScale[0],t.xcalendar),p(r.yaxis,t.y,e.dataScale[1],t.ycalendar),p(r.zaxis,t.z,e.dataScale[2],t.zcalendar));if(t.i&&t.j&&t.k){if(t.i.length!==t.j.length||t.j.length!==t.k.length||!m(t.i,c)||!m(t.j,c)||!m(t.k,c))return;n=u(d(t.i),d(t.j),d(t.k))}else n=0===t.alphahull?o(f):t.alphahull>0?a(t.alphahull,f):function(t,e){for(var r=["x","y","z"].indexOf(t),n=[],a=e.length,o=0;og):m=A>b,g=A;var M=l(b,_,w,A);M.pos=x,M.yc=(b+A)/2,M.i=y,M.dir=m?"increasing":"decreasing",p&&(M.tx=e.text[y]),d&&(M.htx=e.hovertext[y]),v.push(M)}else v.push({pos:x,empty:!0})}return e._extremes[s._id]=a.findExtremes(s,n.concat(f,c),{padded:!0}),v.length&&(v[0].t={labels:{open:i(t,"open:")+" ",high:i(t,"high:")+" ",low:i(t,"low:")+" ",close:i(t,"close:")+" "}}),v}e.exports={calc:function(t,e){var r=a.getFromId(t,e.xaxis),i=a.getFromId(t,e.yaxis),o=function(t,e,r){var i=r._minDiff;if(!i){var a,o=t._fullData,s=[];for(i=1/0,a=0;a"+c.labels[x]+n.hoverLabelText(s,b):((y=i.extendFlat({},h)).y0=y.y1=_,y.yLabelVal=b,y.yLabel=c.labels[x]+n.hoverLabelText(s,b),y.name="",f.push(y),g[b]=y)}return f}function f(t,e,r,i){var a=t.cd,o=t.ya,c=a[0].trace,f=a[0].t,h=u(t,e,r,i);if(!h)return[];var p=a[h.index],d=h.index=p.i,m=p.dir;function g(t){return f.labels[t]+n.hoverLabelText(o,c[t][d])}var v=p.hi||c.hoverinfo,y=v.split("+"),x="all"===v,b=x||-1!==y.indexOf("y"),_=x||-1!==y.indexOf("text"),w=b?[g("open"),g("high"),g("low"),g("close")+" "+l[m]]:[];return _&&s(p,c,w),h.extraText=w.join("
"),h.y0=h.y1=o.c2p(p.yc,!0),[h]}e.exports={hoverPoints:function(t,e,r,n){return t.cd[0].trace.hoverlabel.split?c(t,e,r,n):f(t,e,r,n)},hoverSplit:c,hoverOnPoints:f}},{"../../components/color":713,"../../components/fx":752,"../../lib":836,"../../plots/cartesian/axes":884,"../scatter/fill_hover_text":1195}],1139:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"ohlc",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","showLegend"],meta:{},attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc").calc,plot:t("./plot"),style:t("./style"),hoverPoints:t("./hover").hoverPoints,selectPoints:t("./select")}},{"../../plots/cartesian":895,"./attributes":1135,"./calc":1136,"./defaults":1137,"./hover":1138,"./plot":1141,"./select":1142,"./style":1143}],1140:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../lib");e.exports=function(t,e,r,a){var o=r("x"),s=r("open"),l=r("high"),u=r("low"),c=r("close");if(r("hoverlabel.split"),n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x"],a),s&&l&&u&&c){var f=Math.min(s.length,l.length,u.length,c.length);return o&&(f=Math.min(f,i.minRowLength(o))),e._length=f,f}}},{"../../lib":836,"../../registry":965}],1141:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../lib");e.exports=function(t,e,r,a){var o=e.xaxis,s=e.yaxis;i.makeTraceGroups(a,r,"trace ohlc").each(function(t){var r=n.select(this),a=t[0],l=a.t,u=a.trace;if(e.isRangePlot||(a.node3=r),!0!==u.visible||l.empty)r.remove();else{var c=l.tickLen,f=r.selectAll("path").data(i.identity);f.enter().append("path"),f.exit().remove(),f.attr("d",function(t){if(t.empty)return"M0,0Z";var e=o.c2p(t.pos,!0),r=o.c2p(t.pos-c,!0),n=o.c2p(t.pos+c,!0);return"M"+r+","+s.c2p(t.o,!0)+"H"+e+"M"+e+","+s.c2p(t.h,!0)+"V"+s.c2p(t.l,!0)+"M"+n+","+s.c2p(t.c,!0)+"H"+e})}})}},{"../../lib":836,d3:108}],1142:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n=t.cd,i=t.xaxis,a=t.yaxis,o=[],s=n[0].t.bPos||0;if(!1===e)for(r=0;r=t.length)return!1;if(void 0!==e[t[r]])return!1;e[t[r]]=!0}return!0}(t.map(function(t){return t.displayindex})))for(e=0;e0;u&&(o="array");var c=r("categoryorder",o);"array"===c?(r("categoryarray"),r("ticktext")):(delete t.categoryarray,delete t.ticktext),u||"array"!==c||(e.categoryorder="trace")}}e.exports=function(t,e,r,f){function h(r,i){return n.coerce(t,e,l,r,i)}var p=s(t,e,{name:"dimensions",handleItemDefaults:c}),d=function(t,e,r,o,s){s("line.shape"),s("line.hovertemplate");var l=s("line.color",o.colorway[0]);if(i(t,"line")&&n.isArrayOrTypedArray(l)){if(l.length)return s("line.colorscale"),a(t,e,o,s,{prefix:"line.",cLetter:"c"}),l.length;e.line.color=r}return 1/0}(t,e,r,f,h);o(e,f,h),Array.isArray(p)&&p.length||(e.visible=!1),u(e,p,"values",d),h("hoveron"),h("hovertemplate"),h("arrangement"),h("bundlecolors"),h("sortpaths"),h("counts");var m={family:f.font.family,size:Math.round(f.font.size),color:f.font.color};n.coerceFont(h,"labelfont",m);var g={family:f.font.family,size:Math.round(f.font.size/1.2),color:f.font.color};n.coerceFont(h,"tickfont",g)}},{"../../components/colorscale/defaults":723,"../../components/colorscale/helpers":724,"../../lib":836,"../../plots/array_container_defaults":880,"../../plots/domain":909,"../parcoords/merge_length":1159,"./attributes":1144}],1148:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.plot=t("./plot"),n.colorbar={container:"line",min:"cmin",max:"cmax"},n.moduleType="trace",n.name="parcats",n.basePlotModule=t("./base_plot"),n.categories=["noOpacity"],n.meta={},e.exports=n},{"./attributes":1144,"./base_plot":1145,"./calc":1146,"./defaults":1147,"./plot":1150}],1149:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../plot_api/plot_api"),a=t("../../components/fx"),o=t("../../lib"),s=t("../../components/drawing"),l=t("tinycolor2"),u=t("../../lib/svg_text_utils");function c(t,e,r,i){var a=t.map(function(t,e,r){var n,i=r[0],a=e.margin||{l:80,r:80,t:100,b:80},o=i.trace,s=o.domain,l=e.width,u=e.height,c=Math.floor(l*(s.x[1]-s.x[0])),f=Math.floor(u*(s.y[1]-s.y[0])),h=s.x[0]*l+a.l,p=e.height-s.y[1]*e.height+a.t,d=o.line.shape;n="all"===o.hoverinfo?["count","probability"]:(o.hoverinfo||"").split("+");var m={trace:o,key:o.uid,model:i,x:h,y:p,width:c,height:f,hoveron:o.hoveron,hoverinfoItems:n,arrangement:o.arrangement,bundlecolors:o.bundlecolors,sortpaths:o.sortpaths,labelfont:o.labelfont,categorylabelfont:o.tickfont,pathShape:d,dragDimension:null,margin:a,paths:[],dimensions:[],graphDiv:t,traceSelection:null,pathSelection:null,dimensionSelection:null};i.dimensions&&(N(m),I(m));return m}.bind(0,e,r)),l=i.selectAll("g.parcatslayer").data([null]);l.enter().append("g").attr("class","parcatslayer").style("pointer-events","all");var c=l.selectAll("g.trace.parcats").data(a,f),g=c.enter().append("g").attr("class","trace parcats");c.attr("transform",function(t){return"translate("+t.x+", "+t.y+")"}),g.append("g").attr("class","paths");var x=c.select("g.paths").selectAll("path.path").data(function(t){return t.paths},f);x.attr("fill",function(t){return t.model.color});var w=x.enter().append("path").attr("class","path").attr("stroke-opacity",0).attr("fill",function(t){return t.model.color}).attr("fill-opacity",0);y(w),x.attr("d",function(t){return t.svgD}),w.empty()||x.sort(p),x.exit().remove(),x.on("mouseover",d).on("mouseout",m).on("click",v),g.append("g").attr("class","dimensions");var A=c.select("g.dimensions").selectAll("g.dimension").data(function(t){return t.dimensions},f);A.enter().append("g").attr("class","dimension"),A.attr("transform",function(t){return"translate("+t.x+", 0)"}),A.exit().remove();var M=A.selectAll("g.category").data(function(t){return t.categories},f),k=M.enter().append("g").attr("class","category");M.attr("transform",function(t){return"translate(0, "+t.y+")"}),k.append("rect").attr("class","catrect").attr("pointer-events","none"),M.select("rect.catrect").attr("fill","none").attr("width",function(t){return t.width}).attr("height",function(t){return t.height}),b(k);var O=M.selectAll("rect.bandrect").data(function(t){return t.bands},f);O.each(function(){o.raiseToTop(this)}),O.attr("fill",function(t){return t.color});var z=O.enter().append("rect").attr("class","bandrect").attr("stroke-opacity",0).attr("fill",function(t){return t.color}).attr("fill-opacity",0);O.attr("fill",function(t){return t.color}).attr("width",function(t){return t.width}).attr("height",function(t){return t.height}).attr("y",function(t){return t.y}).attr("cursor",function(t){return"fixed"===t.parcatsViewModel.arrangement?"default":"perpendicular"===t.parcatsViewModel.arrangement?"ns-resize":"move"}),_(z),O.exit().remove(),k.append("text").attr("class","catlabel").attr("pointer-events","none");var D=e._fullLayout.paper_bgcolor;M.select("text.catlabel").attr("text-anchor",function(t){return h(t)?"start":"end"}).attr("alignment-baseline","middle").style("text-shadow",D+" -1px 1px 2px, "+D+" 1px 1px 2px, "+D+" 1px -1px 2px, "+D+" -1px -1px 2px").style("fill","rgb(0, 0, 0)").attr("x",function(t){return h(t)?t.width+5:-5}).attr("y",function(t){return t.height/2}).text(function(t){return t.model.categoryLabel}).each(function(t){s.font(n.select(this),t.parcatsViewModel.categorylabelfont),u.convertToTspans(n.select(this),e)}),k.append("text").attr("class","dimlabel"),M.select("text.dimlabel").attr("text-anchor","middle").attr("alignment-baseline","baseline").attr("cursor",function(t){return"fixed"===t.parcatsViewModel.arrangement?"default":"ew-resize"}).attr("x",function(t){return t.width/2}).attr("y",-5).text(function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null}).each(function(t){s.font(n.select(this),t.parcatsViewModel.labelfont)}),M.selectAll("rect.bandrect").on("mouseover",T).on("mouseout",E),M.exit().remove(),A.call(n.behavior.drag().origin(function(t){return{x:t.x,y:0}}).on("dragstart",S).on("drag",C).on("dragend",L)),c.each(function(t){t.traceSelection=n.select(this),t.pathSelection=n.select(this).selectAll("g.paths").selectAll("path.path"),t.dimensionSelection=n.select(this).selectAll("g.dimensions").selectAll("g.dimension")}),c.exit().remove()}function f(t){return t.key}function h(t){var e=t.parcatsViewModel.dimensions.length,r=t.parcatsViewModel.dimensions[e-1].model.dimensionInd;return t.model.dimensionInd===r}function p(t,e){return t.model.rawColor>e.model.rawColor?1:t.model.rawColor"),E=n.mouse(c)[0];a.loneHover({trace:f,x:y-p.left+d.left,y:b-p.top+d.top,text:T,color:t.model.color,borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontSize:10,fontColor:_,idealAlign:E1&&u.displayInd===l.dimensions.length-1?(r=o.left,i="left"):(r=o.left+o.width,i="right");var h=s.model.count,p=s.model.categoryLabel,d=h/s.parcatsViewModel.model.count,m={countLabel:h,categoryLabel:p,probabilityLabel:d.toFixed(3)},g=[];-1!==s.parcatsViewModel.hoverinfoItems.indexOf("count")&&g.push(["Count:",m.countLabel].join(" ")),-1!==s.parcatsViewModel.hoverinfoItems.indexOf("probability")&&g.push(["P("+m.categoryLabel+"):",m.probabilityLabel].join(" "));var v=g.join("
");return{trace:c,x:r-t.left,y:f-t.top,text:v,color:"lightgray",borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontSize:12,fontColor:"black",idealAlign:i,hovertemplate:c.hovertemplate,hovertemplateLabels:m,eventData:[{data:c._input,fullData:c,count:h,category:p,probability:d}]}}function T(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")){if(n.mouse(this)[1]<-1)return;var e,r=t.parcatsViewModel.graphDiv,i=r._fullLayout,s=i._paperdiv.node().getBoundingClientRect(),u=t.parcatsViewModel.hoveron;if("color"===u?(!function(t){var e=n.select(t).datum(),r=w(e);x(r),r.each(function(){o.raiseToTop(this)}),n.select(t.parentNode).selectAll("rect.bandrect").filter(function(t){return t.color===e.color}).each(function(){o.raiseToTop(this),n.select(this).attr("stroke","black").attr("stroke-width",1.5)})}(this),M(this,"plotly_hover",n.event)):(!function(t){n.select(t.parentNode).selectAll("rect.bandrect").each(function(t){var e=w(t);x(e),e.each(function(){o.raiseToTop(this)})}),n.select(t.parentNode).select("rect.catrect").attr("stroke","black").attr("stroke-width",2.5)}(this),A(this,"plotly_hover",n.event)),-1===t.parcatsViewModel.hoverinfoItems.indexOf("none"))"category"===u?e=k(s,this):"color"===u?e=function(t,e){var r,i,a=e.getBoundingClientRect(),o=n.select(e).datum(),s=o.categoryViewModel,u=s.parcatsViewModel,c=u.model.dimensions[s.model.dimensionInd],f=u.trace,h=a.y+a.height/2;u.dimensions.length>1&&c.displayInd===u.dimensions.length-1?(r=a.left,i="left"):(r=a.left+a.width,i="right");var p=s.model.categoryLabel,d=o.parcatsViewModel.model.count,m=0;o.categoryViewModel.bands.forEach(function(t){t.color===o.color&&(m+=t.count)});var g=s.model.count,v=0;u.pathSelection.each(function(t){t.model.color===o.color&&(v+=t.model.count)});var y=m/d,x=m/v,b=m/g,_={countLabel:d,categoryLabel:p,probabilityLabel:y.toFixed(3)},w=[];-1!==s.parcatsViewModel.hoverinfoItems.indexOf("count")&&w.push(["Count:",_.countLabel].join(" ")),-1!==s.parcatsViewModel.hoverinfoItems.indexOf("probability")&&(w.push("P(color \u2229 "+p+"): "+_.probabilityLabel),w.push("P("+p+" | color): "+x.toFixed(3)),w.push("P(color | "+p+"): "+b.toFixed(3)));var A=w.join("
"),M=l.mostReadable(o.color,["black","white"]);return{trace:f,x:r-t.left,y:h-t.top,text:A,color:o.color,borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontColor:M,fontSize:10,idealAlign:i,hovertemplate:f.hovertemplate,hovertemplateLabels:_,eventData:[{data:f._input,fullData:f,category:p,count:d,probability:y,categorycount:g,colorcount:v,bandcolorcount:m}]}}(s,this):"dimension"===u&&(e=function(t,e){var r=[];return n.select(e.parentNode.parentNode).selectAll("g.category").select("rect.catrect").each(function(){r.push(k(t,this))}),r}(s,this)),e&&a.multiHovers(e,{container:i._hoverlayer.node(),outerContainer:i._paper.node(),gd:r})}}function E(t){var e=t.parcatsViewModel;if(!e.dragDimension&&(y(e.pathSelection),b(e.dimensionSelection.selectAll("g.category")),_(e.dimensionSelection.selectAll("g.category").selectAll("rect.bandrect")),a.loneUnhover(e.graphDiv._fullLayout._hoverlayer.node()),e.pathSelection.sort(p),-1===e.hoverinfoItems.indexOf("skip"))){"color"===t.parcatsViewModel.hoveron?M(this,"plotly_unhover",n.event):A(this,"plotly_unhover",n.event)}}function S(t){"fixed"!==t.parcatsViewModel.arrangement&&(t.dragDimensionDisplayInd=t.model.displayInd,t.initialDragDimensionDisplayInds=t.parcatsViewModel.model.dimensions.map(function(t){return t.displayInd}),t.dragHasMoved=!1,t.dragCategoryDisplayInd=null,n.select(this).selectAll("g.category").select("rect.catrect").each(function(e){var r=n.mouse(this)[0],i=n.mouse(this)[1];-2<=r&&r<=e.width+2&&-2<=i&&i<=e.height+2&&(t.dragCategoryDisplayInd=e.model.displayInd,t.initialDragCategoryDisplayInds=t.model.categories.map(function(t){return t.displayInd}),e.model.dragY=e.y,o.raiseToTop(this.parentNode),n.select(this.parentNode).selectAll("rect.bandrect").each(function(e){e.yf.y+f.height/2&&(o.model.displayInd=f.model.displayInd,f.model.displayInd=l),t.dragCategoryDisplayInd=o.model.displayInd}if(null===t.dragCategoryDisplayInd||"freeform"===t.parcatsViewModel.arrangement){a.model.dragX=n.event.x;var h=t.parcatsViewModel.dimensions[r],p=t.parcatsViewModel.dimensions[i];void 0!==h&&a.model.dragXp.x&&(a.model.displayInd=p.model.displayInd,p.model.displayInd=t.dragDimensionDisplayInd),t.dragDimensionDisplayInd=a.model.displayInd}N(t.parcatsViewModel),I(t.parcatsViewModel),D(t.parcatsViewModel),z(t.parcatsViewModel)}}function L(t){if("fixed"!==t.parcatsViewModel.arrangement&&null!==t.dragDimensionDisplayInd){n.select(this).selectAll("text").attr("font-weight","normal");var e={},r=O(t.parcatsViewModel),a=t.parcatsViewModel.model.dimensions.map(function(t){return t.displayInd}),o=t.initialDragDimensionDisplayInds.some(function(t,e){return t!==a[e]});o&&a.forEach(function(r,n){var i=t.parcatsViewModel.model.dimensions[n].containerInd;e["dimensions["+i+"].displayindex"]=r});var s=!1;if(null!==t.dragCategoryDisplayInd){var l=t.model.categories.map(function(t){return t.displayInd});if(s=t.initialDragCategoryDisplayInds.some(function(t,e){return t!==l[e]})){var u=t.model.categories.slice().sort(function(t,e){return t.displayInd-e.displayInd}),c=u.map(function(t){return t.categoryValue}),f=u.map(function(t){return t.categoryLabel});e["dimensions["+t.model.containerInd+"].categoryarray"]=[c],e["dimensions["+t.model.containerInd+"].ticktext"]=[f],e["dimensions["+t.model.containerInd+"].categoryorder"]="array"}}if(-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")&&!t.dragHasMoved&&t.potentialClickBand&&("color"===t.parcatsViewModel.hoveron?M(t.potentialClickBand,"plotly_click",n.event.sourceEvent):A(t.potentialClickBand,"plotly_click",n.event.sourceEvent)),t.model.dragX=null,null!==t.dragCategoryDisplayInd)t.parcatsViewModel.dimensions[t.dragDimensionDisplayInd].categories[t.dragCategoryDisplayInd].model.dragY=null,t.dragCategoryDisplayInd=null;t.dragDimensionDisplayInd=null,t.parcatsViewModel.dragDimension=null,t.dragHasMoved=null,t.potentialClickBand=null,N(t.parcatsViewModel),I(t.parcatsViewModel),n.transition().duration(300).ease("cubic-in-out").each(function(){D(t.parcatsViewModel,!0),z(t.parcatsViewModel,!0)}).each("end",function(){(o||s)&&i.restyle(t.parcatsViewModel.graphDiv,e,[r])})}}function O(t){for(var e,r=t.graphDiv._fullData,n=0;n=0;s--)c+="C"+u[s]+","+(e[s+1]+i)+" "+l[s]+","+(e[s]+i)+" "+(t[s]+r[s])+","+(e[s]+i),c+="l-"+r[s]+",0 ";return c+="Z"}function I(t){var e=t.dimensions,r=t.model,n=e.map(function(t){return t.categories.map(function(t){return t.y})}),i=t.model.dimensions.map(function(t){return t.categories.map(function(t){return t.displayInd})}),a=t.model.dimensions.map(function(t){return t.displayInd}),o=t.dimensions.map(function(t){return t.model.dimensionInd}),s=e.map(function(t){return t.x}),l=e.map(function(t){return t.width}),u=[];for(var c in r.paths)r.paths.hasOwnProperty(c)&&u.push(r.paths[c]);function f(t){var e=t.categoryInds.map(function(t,e){return i[e][t]});return o.map(function(t){return e[t]})}u.sort(function(e,r){var n=f(e),i=f(r);return"backward"===t.sortpaths&&(n.reverse(),i.reverse()),n.push(e.valueInds[0]),i.push(r.valueInds[0]),t.bundlecolors&&(n.unshift(e.rawColor),i.unshift(r.rawColor)),ni?1:0});for(var h=new Array(u.length),p=e[0].model.count,d=e[0].categories.map(function(t){return t.height}).reduce(function(t,e){return t+e}),m=0;m0?d*(v.count/p):0;for(var y,x=new Array(n.length),b=0;b1?(t.width-80-16)/(n-1):0)*i;var a,o,s,l,u,c=[],f=t.model.maxCats,h=e.categories.length,p=e.count,d=t.height-8*(f-1),m=8*(f-h)/2,g=e.categories.map(function(t){return{displayInd:t.displayInd,categoryInd:t.categoryInd}});for(g.sort(function(t,e){return t.displayInd-e.displayInd}),u=0;u0?o.count/p*d:0,s={key:o.valueInds[0],model:o,width:16,height:a,y:null!==o.dragY?o.dragY:m,bands:[],parcatsViewModel:t},m=m+a+8,c.push(s);return{key:e.dimensionInd,x:null!==e.dragX?e.dragX:r,y:0,width:16,model:e,categories:c,parcatsViewModel:t,dragCategoryDisplayInd:null,dragDimensionDisplayInd:null,initialDragDimensionDisplayInds:null,initialDragCategoryDisplayInds:null,dragHasMoved:null,potentialClickBand:null}}e.exports=function(t,e,r,n){c(r,t,n,e)}},{"../../components/drawing":734,"../../components/fx":752,"../../lib":836,"../../lib/svg_text_utils":860,"../../plot_api/plot_api":871,d3:108,tinycolor2:1376}],1150:[function(t,e,r){"use strict";var n=t("./parcats");e.exports=function(t,e,r,i){var a=t._fullLayout,o=a._paper,s=a._size;n(t,o,e,{width:s.w,height:s.h,margin:{t:s.t,r:s.r,b:s.b,l:s.l}},r,i)}},{"./parcats":1149}],1151:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),i=t("../../components/colorbar/attributes"),a=t("../../plots/cartesian/layout_attributes"),o=t("../../plots/font_attributes"),s=t("../../plots/domain").attributes,l=t("../../lib/extend").extendFlat,u=t("../../plot_api/plot_template").templatedArray;e.exports={domain:s({name:"parcoords",trace:!0,editType:"calc"}),hoverlabel:void 0,labelfont:o({editType:"calc"}),tickfont:o({editType:"calc"}),rangefont:o({editType:"calc"}),dimensions:u("dimension",{label:{valType:"string",editType:"calc"},tickvals:l({},a.tickvals,{editType:"calc"}),ticktext:l({},a.ticktext,{editType:"calc"}),tickformat:{valType:"string",dflt:"3s",editType:"calc"},visible:{valType:"boolean",dflt:!0,editType:"calc"},range:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc"},constraintrange:{valType:"info_array",freeLength:!0,dimensions:"1-2",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc"},multiselect:{valType:"boolean",dflt:!0,editType:"calc"},values:{valType:"data_array",editType:"calc"},editType:"calc"}),line:l(n("line",{colorscaleDflt:"Viridis",autoColorDflt:!1,editTypeOverride:"calc"}),{colorbar:i,editType:"calc"})}},{"../../components/colorbar/attributes":714,"../../components/colorscale/attributes":720,"../../lib/extend":826,"../../plot_api/plot_template":874,"../../plots/cartesian/layout_attributes":896,"../../plots/domain":909,"../../plots/font_attributes":910}],1152:[function(t,e,r){"use strict";var n=t("./constants"),i=t("d3"),a=t("../../lib/gup").keyFun,o=t("../../lib/gup").repeat,s=t("../../lib").sorterAsc,l=n.bar.snapRatio;function u(t,e){return t*(1-l)+e*l}var c=n.bar.snapClose;function f(t,e){return t*(1-c)+e*c}function h(t,e,r){if(d(e,r))return e;for(var n=t[0],i=n,a=1;a=0;a--){var o=t[a];if(e>f(n,o))return u(n,i);if(e>o||a===t.length-1)return u(o,n);i=n,n=o}}function d(t,e){for(var r=0;r=e[r][0]&&t<=e[r][1])return!0;return!1}function m(t){t.attr("x",-n.bar.captureWidth/2).attr("width",n.bar.captureWidth)}function g(t){t.attr("visibility","visible").style("visibility","visible").attr("fill","yellow").attr("opacity",0)}function v(t){if(!t.brush.filterSpecified)return"0,"+t.height;for(var e,r,n,i=y(t.brush.filter.getConsolidated(),t.height),a=[0],o=i.length?i[0][0]:null,s=0;se){h=r;break}}if(a=c,isNaN(a)&&(a=isNaN(f)||isNaN(h)?isNaN(f)?h:f:e-u[f][1]t[1]+r||e=.9*t[1]+.1*t[0]?"n":e<=.9*t[0]+.1*t[1]?"s":"ns"}(d,e);m&&(o.interval=l[a],o.intervalPix=d,o.region=m)}}if(t.ordinal&&!o.region){var g=t.unitTickvals,v=t.unitToPaddedPx.invert(e);for(r=0;r=x[0]&&v<=x[1]){o.clickableOrdinalRange=x;break}}}return o}function A(t){t.on("mousemove",function(t){if(i.event.preventDefault(),!t.parent.inBrushDrag){var e=w(t,t.height-i.mouse(this)[1]-2*n.verticalPadding),r="crosshair";e.clickableOrdinalRange?r="pointer":e.region&&(r=e.region+"-resize"),i.select(document.body).style("cursor",r)}}).on("mouseleave",function(t){t.parent.inBrushDrag||x()}).call(i.behavior.drag().on("dragstart",function(t){i.event.sourceEvent.stopPropagation();var e=t.height-i.mouse(this)[1]-2*n.verticalPadding,r=t.unitToPaddedPx.invert(e),a=t.brush,o=w(t,e),s=o.interval,l=a.svgBrush;if(l.wasDragged=!1,l.grabbingBar="ns"===o.region,l.grabbingBar){var u=s.map(t.unitToPaddedPx);l.grabPoint=e-u[0]-n.verticalPadding,l.barLength=u[1]-u[0]}l.clickableOrdinalRange=o.clickableOrdinalRange,l.stayingIntervals=t.multiselect&&a.filterSpecified?a.filter.getConsolidated():[],s&&(l.stayingIntervals=l.stayingIntervals.filter(function(t){return t[0]!==s[0]&&t[1]!==s[1]})),l.startExtent=o.region?s["s"===o.region?1:0]:r,t.parent.inBrushDrag=!0,l.brushStartCallback()}).on("drag",function(t){i.event.sourceEvent.stopPropagation();var e=t.height-i.mouse(this)[1]-2*n.verticalPadding,r=t.brush.svgBrush;r.wasDragged=!0,r.grabbingBar?r.newExtent=[e-r.grabPoint,e+r.barLength-r.grabPoint].map(t.unitToPaddedPx.invert):r.newExtent=[r.startExtent,t.unitToPaddedPx.invert(e)].sort(s);var a=Math.max(0,-r.newExtent[0]),o=Math.max(0,r.newExtent[1]-1);r.newExtent[0]+=a,r.newExtent[1]-=o,r.grabbingBar&&(r.newExtent[1]+=a,r.newExtent[0]-=o),t.brush.filterSpecified=!0,r.extent=r.stayingIntervals.concat([r.newExtent]),r.brushCallback(t),_(this.parentNode)}).on("dragend",function(t){i.event.sourceEvent.stopPropagation();var e=t.brush,r=e.filter,n=e.svgBrush,a=n.grabbingBar;if(n.grabbingBar=!1,n.grabLocation=void 0,t.parent.inBrushDrag=!1,x(),!n.wasDragged)return n.wasDragged=void 0,n.clickableOrdinalRange?e.filterSpecified&&t.multiselect?n.extent.push(n.clickableOrdinalRange):(n.extent=[n.clickableOrdinalRange],e.filterSpecified=!0):a?(n.extent=n.stayingIntervals,0===n.extent.length&&k(e)):k(e),n.brushCallback(t),_(this.parentNode),void n.brushEndCallback(e.filterSpecified?r.getConsolidated():[]);var o=function(){r.set(r.getConsolidated())};if(t.ordinal){var s=t.unitTickvals;s[s.length-1]n.newExtent[0];n.extent=n.stayingIntervals.concat(l?[n.newExtent]:[]),n.extent.length||k(e),n.brushCallback(t),l?_(this.parentNode,o):(o(),_(this.parentNode))}else o();n.brushEndCallback(e.filterSpecified?r.getConsolidated():[])}))}function M(t,e){return t[0]-e[0]}function k(t){t.filterSpecified=!1,t.svgBrush.extent=[[0,1]]}function T(t){for(var e,r=t.slice(),n=[],i=r.shift();i;){for(e=i.slice();(i=r.shift())&&i[0]<=e[1];)e[1]=Math.max(e[1],i[1]);n.push(e)}return n}e.exports={makeBrush:function(t,e,r,n,i,a){var o,l=function(){var t,e,r=[];return{set:function(n){r=n.map(function(t){return t.slice().sort(s)}).sort(M),t=T(r),e=r.reduce(function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]},[1/0,-1/0])},get:function(){return r.slice()},getConsolidated:function(){return t},getBounds:function(){return e}}}();return l.set(r),{filter:l,filterSpecified:e,svgBrush:{extent:[],brushStartCallback:n,brushCallback:(o=i,function(t){var e=t.brush,r=function(t){return t.svgBrush.extent.map(function(t){return t.slice()})}(e).slice();e.filter.set(r),o()}),brushEndCallback:a}}},ensureAxisBrush:function(t){var e=t.selectAll("."+n.cn.axisBrush).data(o,a);e.enter().append("g").classed(n.cn.axisBrush,!0),function(t){var e=t.selectAll(".background").data(o);e.enter().append("rect").classed("background",!0).call(m).call(g).style("pointer-events","auto").attr("transform","translate(0 "+n.verticalPadding+")"),e.call(A).attr("height",function(t){return t.height-n.verticalPadding});var r=t.selectAll(".highlight-shadow").data(o);r.enter().append("line").classed("highlight-shadow",!0).attr("x",-n.bar.width/2).attr("stroke-width",n.bar.width+n.bar.strokeWidth).attr("stroke",n.bar.strokeColor).attr("opacity",n.bar.strokeOpacity).attr("stroke-linecap","butt"),r.attr("y1",function(t){return t.height}).call(b);var i=t.selectAll(".highlight").data(o);i.enter().append("line").classed("highlight",!0).attr("x",-n.bar.width/2).attr("stroke-width",n.bar.width-n.bar.strokeWidth).attr("stroke",n.bar.fillColor).attr("opacity",n.bar.fillOpacity).attr("stroke-linecap","butt"),i.attr("y1",function(t){return t.height}).call(b)}(e)},cleanRanges:function(t,e){if(Array.isArray(t[0])?(t=t.map(function(t){return t.sort(s)}),t=e.multiselect?T(t.sort(M)):[t[0]]):t=[t.sort(s)],e.tickvals){var r=e.tickvals.slice().sort(s);if(!(t=t.map(function(t){var e=[h(r,t[0],[]),p(r,t[1],[])];if(e[1]>e[0])return e}).filter(function(t){return t})).length)return}return t.length>1?t:t[0]}}},{"../../lib":836,"../../lib/gup":834,"./constants":1155,d3:108}],1153:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../plots/get_data").getModuleCalcData,a=t("./plot"),o=t("../../constants/xmlns_namespaces");r.name="parcoords",r.plot=function(t){var e=i(t.calcdata,"parcoords")[0];e.length&&a(t,e)},r.clean=function(t,e,r,n){var i=n._has&&n._has("parcoords"),a=e._has&&e._has("parcoords");i&&!a&&(n._paperdiv.selectAll(".parcoords").remove(),n._glimages.selectAll("*").remove())},r.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(".svg-container");r.filter(function(t,e){return e===r.size()-1}).selectAll(".gl-canvas-context, .gl-canvas-focus").each(function(){var t=this.toDataURL("image/png");e.append("svg:image").attr({xmlns:o.svg,"xlink:href":t,preserveAspectRatio:"none",x:0,y:0,width:this.width,height:this.height})}),window.setTimeout(function(){n.selectAll("#filterBarPattern").attr("id","filterBarPattern")},60)}},{"../../constants/xmlns_namespaces":814,"../../plots/get_data":920,"./plot":1161,d3:108}],1154:[function(t,e,r){"use strict";var n=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/calc"),a=t("../../lib"),o=t("../../lib/gup").wrap;function s(t){return a.isTypedArray(t)?Array.prototype.slice.call(t):t}e.exports=function(t,e){for(var r=0;rc&&(n.log("parcoords traces support up to "+c+" dimensions at the moment"),d.splice(c));var m=s(t,e,{name:"dimensions",handleItemDefaults:h}),g=function(t,e,r,o,s){var l=s("line.color",r);if(i(t,"line")&&n.isArrayOrTypedArray(l)){if(l.length)return s("line.colorscale"),a(t,e,o,s,{prefix:"line.",cLetter:"c"}),l.length;e.line.color=r}return 1/0}(t,e,r,u,p);o(e,u,p),Array.isArray(m)&&m.length||(e.visible=!1),f(e,m,"values",g);var v={family:u.font.family,size:Math.round(u.font.size/1.2),color:u.font.color};n.coerceFont(p,"labelfont",v),n.coerceFont(p,"tickfont",v),n.coerceFont(p,"rangefont",v)}},{"../../components/colorscale/defaults":723,"../../components/colorscale/helpers":724,"../../lib":836,"../../plots/array_container_defaults":880,"../../plots/domain":909,"./attributes":1151,"./axisbrush":1152,"./constants":1155,"./merge_length":1159}],1157:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.plot=t("./plot"),n.colorbar={container:"line",min:"cmin",max:"cmax"},n.moduleType="trace",n.name="parcoords",n.basePlotModule=t("./base_plot"),n.categories=["gl","regl","noOpacity"],n.meta={},e.exports=n},{"./attributes":1151,"./base_plot":1153,"./calc":1154,"./defaults":1156,"./plot":1161}],1158:[function(t,e,r){"use strict";var n=t("glslify"),i=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 p0, p1, p2, p3,\n p4, p5, p6, p7,\n p8, p9, pa, pb,\n pc, pd, pe;\n\nattribute vec4 pf;\n\nuniform mat4 dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D,\n loA, hiA, loB, hiB, loC, hiC, loD, hiD;\n\nuniform vec2 resolution,\n viewBoxPosition,\n viewBoxSize;\n\nuniform sampler2D palette;\nuniform sampler2D mask;\nuniform float maskHeight;\n\nuniform vec2 colorClamp;\n\nvarying vec4 fragColor;\n\nvec4 unit_1 = vec4(1, 1, 1, 1);\n\nfloat val(mat4 p, mat4 v) {\n return dot(matrixCompMult(p, v) * unit_1, unit_1);\n}\n\nfloat axisY(\n float x,\n mat4 d[4],\n mat4 dim1A, mat4 dim2A, mat4 dim1B, mat4 dim2B, mat4 dim1C, mat4 dim2C, mat4 dim1D, mat4 dim2D\n ) {\n\n float y1 = val(d[0], dim1A) + val(d[1], dim1B) + val(d[2], dim1C) + val(d[3], dim1D);\n float y2 = val(d[0], dim2A) + val(d[1], dim2B) + val(d[2], dim2C) + val(d[3], dim2D);\n return y1 * (1.0 - x) + y2 * x;\n}\n\nconst int bitsPerByte = 8;\n\nint mod2(int a) {\n return a - 2 * (a / 2);\n}\n\nint mod8(int a) {\n return a - 8 * (a / 8);\n}\n\nvec4 zero = vec4(0, 0, 0, 0);\nvec4 unit_0 = vec4(1, 1, 1, 1);\nvec2 xyProjection = vec2(1, 1);\n\nmat4 mclamp(mat4 m, mat4 lo, mat4 hi) {\n return mat4(clamp(m[0], lo[0], hi[0]),\n clamp(m[1], lo[1], hi[1]),\n clamp(m[2], lo[2], hi[2]),\n clamp(m[3], lo[3], hi[3]));\n}\n\nbool mshow(mat4 p, mat4 lo, mat4 hi) {\n return mclamp(p, lo, hi) == p;\n}\n\nbool withinBoundingBox(\n mat4 d[4],\n mat4 loA, mat4 hiA, mat4 loB, mat4 hiB, mat4 loC, mat4 hiC, mat4 loD, mat4 hiD\n ) {\n\n return mshow(d[0], loA, hiA) &&\n mshow(d[1], loB, hiB) &&\n mshow(d[2], loC, hiC) &&\n mshow(d[3], loD, hiD);\n}\n\nbool withinRasterMask(mat4 d[4], sampler2D mask, float height) {\n bool result = true;\n int bitInByteStepper;\n float valY, valueY, scaleX;\n int hit, bitmask, valX;\n for(int i = 0; i < 4; i++) {\n for(int j = 0; j < 4; j++) {\n for(int k = 0; k < 4; k++) {\n bitInByteStepper = mod8(j * 4 + k);\n valX = i * 2 + j / 2;\n valY = d[i][j][k];\n valueY = valY * (height - 1.0) + 0.5;\n scaleX = (float(valX) + 0.5) / 8.0;\n hit = int(texture2D(mask, vec2(scaleX, (valueY + 0.5) / height))[3] * 255.0) / int(pow(2.0, float(bitInByteStepper)));\n result = result && mod2(hit) == 1;\n }\n }\n }\n return result;\n}\n\nvec4 position(\n float depth,\n vec2 resolution, vec2 viewBoxPosition, vec2 viewBoxSize,\n mat4 dims[4],\n float signum,\n mat4 dim1A, mat4 dim2A, mat4 dim1B, mat4 dim2B, mat4 dim1C, mat4 dim2C, mat4 dim1D, mat4 dim2D,\n mat4 loA, mat4 hiA, mat4 loB, mat4 hiB, mat4 loC, mat4 hiC, mat4 loD, mat4 hiD,\n sampler2D mask, float maskHeight\n ) {\n\n float x = 0.5 * signum + 0.5;\n float y = axisY(x, dims, dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D);\n\n float show = float(\n withinBoundingBox(dims, loA, hiA, loB, hiB, loC, hiC, loD, hiD)\n && withinRasterMask(dims, mask, maskHeight)\n );\n\n vec2 viewBoxXY = viewBoxPosition + viewBoxSize * vec2(x, y);\n float depthOrHide = depth + 2.0 * (1.0 - show);\n\n return vec4(\n xyProjection * (2.0 * viewBoxXY / resolution - 1.0),\n depthOrHide,\n 1.0\n );\n}\n\nvoid main() {\n\n float prominence = abs(pf[3]);\n\n mat4 p[4];\n p[0] = mat4(p0, p1, p2, p3);\n p[1] = mat4(p4, p5, p6, p7);\n p[2] = mat4(p8, p9, pa, pb);\n p[3] = mat4(pc, pd, pe, abs(pf));\n\n gl_Position = position(\n 1.0 - prominence,\n resolution, viewBoxPosition, viewBoxSize,\n p,\n sign(pf[3]),\n dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D,\n loA, hiA, loB, hiB, loC, hiC, loD, hiD,\n mask, maskHeight\n );\n\n float clampedColorIndex = clamp((prominence - colorClamp[0]) / (colorClamp[1] - colorClamp[0]), 0.0, 1.0);\n fragColor = texture2D(palette, vec2((clampedColorIndex * 255.0 + 0.5) / 256.0, 0.5));\n}\n"]),a=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 p0, p1, p2, p3,\n p4, p5, p6, p7,\n p8, p9, pa, pb,\n pc, pd, pe;\n\nattribute vec4 pf;\n\nuniform mat4 dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D;\n\nuniform vec2 resolution,\n viewBoxPosition,\n viewBoxSize;\n\nuniform sampler2D palette;\n\nuniform vec2 colorClamp;\n\nvarying vec4 fragColor;\n\nvec2 xyProjection = vec2(1, 1);\n\nvec4 unit = vec4(1, 1, 1, 1);\n\nfloat val(mat4 p, mat4 v) {\n return dot(matrixCompMult(p, v) * unit, unit);\n}\n\nfloat axisY(\n float x,\n mat4 d[4],\n mat4 dim1A, mat4 dim2A, mat4 dim1B, mat4 dim2B, mat4 dim1C, mat4 dim2C, mat4 dim1D, mat4 dim2D\n ) {\n\n float y1 = val(d[0], dim1A) + val(d[1], dim1B) + val(d[2], dim1C) + val(d[3], dim1D);\n float y2 = val(d[0], dim2A) + val(d[1], dim2B) + val(d[2], dim2C) + val(d[3], dim2D);\n return y1 * (1.0 - x) + y2 * x;\n}\n\nvec4 position(\n float depth,\n vec2 resolution, vec2 viewBoxPosition, vec2 viewBoxSize,\n mat4 dims[4],\n float signum,\n mat4 dim1A, mat4 dim2A, mat4 dim1B, mat4 dim2B, mat4 dim1C, mat4 dim2C, mat4 dim1D, mat4 dim2D\n ) {\n\n float x = 0.5 * signum + 0.5;\n float y = axisY(x, dims, dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D);\n\n vec2 viewBoxXY = viewBoxPosition + viewBoxSize * vec2(x, y);\n\n return vec4(\n xyProjection * (2.0 * viewBoxXY / resolution - 1.0),\n depth,\n 1.0\n );\n}\n\nvoid main() {\n\n float prominence = abs(pf[3]);\n\n mat4 p[4];\n p[0] = mat4(p0, p1, p2, p3);\n p[1] = mat4(p4, p5, p6, p7);\n p[2] = mat4(p8, p9, pa, pb);\n p[3] = mat4(pc, pd, pe, abs(pf));\n\n gl_Position = position(\n 1.0 - prominence,\n resolution, viewBoxPosition, viewBoxSize,\n p,\n sign(pf[3]),\n dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D\n );\n\n float clampedColorIndex = clamp((prominence - colorClamp[0]) / (colorClamp[1] - colorClamp[0]), 0.0, 1.0);\n fragColor = texture2D(palette, vec2((clampedColorIndex * 255.0 + 0.5) / 256.0, 0.5));\n}\n"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 p0, p1, p2, p3,\n p4, p5, p6, p7,\n p8, p9, pa, pb,\n pc, pd, pe;\n\nattribute vec4 pf;\n\nuniform mat4 dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D,\n loA, hiA, loB, hiB, loC, hiC, loD, hiD;\n\nuniform vec2 resolution,\n viewBoxPosition,\n viewBoxSize;\n\nuniform sampler2D mask;\nuniform float maskHeight;\n\nuniform vec2 colorClamp;\n\nvarying vec4 fragColor;\n\nvec4 unit_1 = vec4(1, 1, 1, 1);\n\nfloat val(mat4 p, mat4 v) {\n return dot(matrixCompMult(p, v) * unit_1, unit_1);\n}\n\nfloat axisY(\n float x,\n mat4 d[4],\n mat4 dim1A, mat4 dim2A, mat4 dim1B, mat4 dim2B, mat4 dim1C, mat4 dim2C, mat4 dim1D, mat4 dim2D\n ) {\n\n float y1 = val(d[0], dim1A) + val(d[1], dim1B) + val(d[2], dim1C) + val(d[3], dim1D);\n float y2 = val(d[0], dim2A) + val(d[1], dim2B) + val(d[2], dim2C) + val(d[3], dim2D);\n return y1 * (1.0 - x) + y2 * x;\n}\n\nconst int bitsPerByte = 8;\n\nint mod2(int a) {\n return a - 2 * (a / 2);\n}\n\nint mod8(int a) {\n return a - 8 * (a / 8);\n}\n\nvec4 zero = vec4(0, 0, 0, 0);\nvec4 unit_0 = vec4(1, 1, 1, 1);\nvec2 xyProjection = vec2(1, 1);\n\nmat4 mclamp(mat4 m, mat4 lo, mat4 hi) {\n return mat4(clamp(m[0], lo[0], hi[0]),\n clamp(m[1], lo[1], hi[1]),\n clamp(m[2], lo[2], hi[2]),\n clamp(m[3], lo[3], hi[3]));\n}\n\nbool mshow(mat4 p, mat4 lo, mat4 hi) {\n return mclamp(p, lo, hi) == p;\n}\n\nbool withinBoundingBox(\n mat4 d[4],\n mat4 loA, mat4 hiA, mat4 loB, mat4 hiB, mat4 loC, mat4 hiC, mat4 loD, mat4 hiD\n ) {\n\n return mshow(d[0], loA, hiA) &&\n mshow(d[1], loB, hiB) &&\n mshow(d[2], loC, hiC) &&\n mshow(d[3], loD, hiD);\n}\n\nbool withinRasterMask(mat4 d[4], sampler2D mask, float height) {\n bool result = true;\n int bitInByteStepper;\n float valY, valueY, scaleX;\n int hit, bitmask, valX;\n for(int i = 0; i < 4; i++) {\n for(int j = 0; j < 4; j++) {\n for(int k = 0; k < 4; k++) {\n bitInByteStepper = mod8(j * 4 + k);\n valX = i * 2 + j / 2;\n valY = d[i][j][k];\n valueY = valY * (height - 1.0) + 0.5;\n scaleX = (float(valX) + 0.5) / 8.0;\n hit = int(texture2D(mask, vec2(scaleX, (valueY + 0.5) / height))[3] * 255.0) / int(pow(2.0, float(bitInByteStepper)));\n result = result && mod2(hit) == 1;\n }\n }\n }\n return result;\n}\n\nvec4 position(\n float depth,\n vec2 resolution, vec2 viewBoxPosition, vec2 viewBoxSize,\n mat4 dims[4],\n float signum,\n mat4 dim1A, mat4 dim2A, mat4 dim1B, mat4 dim2B, mat4 dim1C, mat4 dim2C, mat4 dim1D, mat4 dim2D,\n mat4 loA, mat4 hiA, mat4 loB, mat4 hiB, mat4 loC, mat4 hiC, mat4 loD, mat4 hiD,\n sampler2D mask, float maskHeight\n ) {\n\n float x = 0.5 * signum + 0.5;\n float y = axisY(x, dims, dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D);\n\n float show = float(\n withinBoundingBox(dims, loA, hiA, loB, hiB, loC, hiC, loD, hiD)\n && withinRasterMask(dims, mask, maskHeight)\n );\n\n vec2 viewBoxXY = viewBoxPosition + viewBoxSize * vec2(x, y);\n float depthOrHide = depth + 2.0 * (1.0 - show);\n\n return vec4(\n xyProjection * (2.0 * viewBoxXY / resolution - 1.0),\n depthOrHide,\n 1.0\n );\n}\n\nvoid main() {\n\n float prominence = abs(pf[3]);\n\n mat4 p[4];\n p[0] = mat4(p0, p1, p2, p3);\n p[1] = mat4(p4, p5, p6, p7);\n p[2] = mat4(p8, p9, pa, pb);\n p[3] = mat4(pc, pd, pe, abs(pf));\n\n gl_Position = position(\n 1.0 - prominence,\n resolution, viewBoxPosition, viewBoxSize,\n p,\n sign(pf[3]),\n dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D,\n loA, hiA, loB, hiB, loC, hiC, loD, hiD,\n mask, maskHeight\n );\n\n fragColor = vec4(pf.rgb, 1.0);\n}\n"]),s=n(["precision lowp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n gl_FragColor = fragColor;\n}\n"]),l=t("../../lib"),u=1e-6,c=1e-7,f=2048,h=64,p=2,d=4,m=8,g=h/m,v=[119,119,119],y=new Uint8Array(4),x=new Uint8Array(4),b={shape:[256,1],format:"rgba",type:"uint8",mag:"nearest",min:"nearest"};function _(t,e,r,n,i){var a=t._gl;a.enable(a.SCISSOR_TEST),a.scissor(e,r,n,i),t.clear({color:[0,0,0,0],depth:1})}function w(t,e,r,n,i,a){var o=a.key;r.drawCompleted||(!function(t){t.read({x:0,y:0,width:1,height:1,data:y})}(t),r.drawCompleted=!0),function s(l){var u;u=Math.min(n,i-l*n),a.offset=p*l*n,a.count=p*u,0===l&&(window.cancelAnimationFrame(r.currentRafs[o]),delete r.currentRafs[o],_(t,a.scissorX,a.scissorY,a.scissorWidth,a.viewBoxSize[1])),r.clearOnly||(e(a),l*n+u>>8*e)%256/255}function M(t,e,r){var n,i,a,o=[];for(i=0;i=h-4?A(o,h-2-s):.5);return a}(d,p,i);!function(t,e,r){for(var n=0;n<16;n++)t["p"+n.toString(16)](M(e,r,n))}(C,d,o),L=E.texture(l.extendFlat({data:function(t,e,r){for(var n=[],i=0;i<256;i++){var a=t(i/255);n.push((e?v:a).concat(r))}return n}(r.unitToColor,k,Math.round(255*(k?a:1)))},b))}var D=[0,1];var P=[];function I(t,e,n,i,a,o,s,u,c,f,h){var p,d,m,g,v=[t,e],y=[0,1].map(function(){return[0,1,2,3].map(function(){return new Float32Array(16)})});for(p=0;p<2;p++)for(g=v[p],d=0;d<4;d++)for(m=0;m<16;m++)y[p][d][m]=m+16*d===g?1:0;var x=r.lines.canvasOverdrag,b=r.domain,_=r.canvasWidth,w=r.canvasHeight;return l.extendFlat({key:s,resolution:[_,w],viewBoxPosition:[n+x,i],viewBoxSize:[a,o],i:t,ii:e,dim1A:y[0][0],dim1B:y[0][1],dim1C:y[0][2],dim1D:y[0][3],dim2A:y[1][0],dim2B:y[1][1],dim2C:y[1][2],dim2D:y[1][3],colorClamp:D,scissorX:(u===c?0:n+x)+(r.pad.l-x)+r.layoutWidth*b.x[0],scissorWidth:(u===f?_-n+x:a+.5)+(u===c?n+x:0),scissorY:i+r.pad.b+r.layoutHeight*b.y[0],scissorHeight:o,viewportX:r.pad.l-x+r.layoutWidth*b.x[0],viewportY:r.pad.b+r.layoutHeight*b.y[0],viewportWidth:_,viewportHeight:w},h)}return{setColorDomain:function(t){D[0]=t[0],D[1]=t[1]},render:function(t,e,n){var i,a,o,s=t.length,l=1/0,u=-1/0;for(i=0;iu&&(u=t[i].dim2.canvasX,o=i),t[i].dim1.canvasXa._length&&(M=M.slice(0,a._length));var k,T=a.tickvals;function E(t,e){return{val:t,text:k[e]}}function S(t,e){return t.val-e.val}if(Array.isArray(T)&&T.length){k=a.ticktext,Array.isArray(k)&&k.length?k.length>T.length?k=k.slice(0,T.length):T.length>k.length&&(T=T.slice(0,k.length)):k=T.map(n.format(a.tickformat));for(var C=1;C=r||s>=i)return;var l=t.lineLayer.readPixel(o,i-1-s),u=0!==l[3],c=u?l[2]+256*(l[1]+256*l[0]):null,f={x:o,y:s,clientX:e.clientX,clientY:e.clientY,dataIndex:t.model.key,curveNumber:c};c!==M&&(u?d.hover(f):d.unhover&&d.unhover(f),M=c)}}),A.style("opacity",function(t){return t.pick?.01:1}),e.style("background","rgba(255, 255, 255, 0)");var k=e.selectAll("."+f.cn.parcoords).data(w,l);k.exit().remove(),k.enter().append("g").classed(f.cn.parcoords,!0).style("shape-rendering","crispEdges").style("pointer-events","none"),k.attr("transform",function(t){return"translate("+t.model.translateX+","+t.model.translateY+")"});var T=k.selectAll("."+f.cn.parcoordsControlView).data(u,l);T.enter().append("g").classed(f.cn.parcoordsControlView,!0),T.attr("transform",function(t){return"translate("+t.model.pad.l+","+t.model.pad.t+")"});var E=T.selectAll("."+f.cn.yAxis).data(function(t){return t.dimensions},l);function S(t,e){for(var r=e.panels||(e.panels=[]),n=t.data(),i=n.length-1,a=0;aline").attr("fill","none").attr("stroke","black").attr("stroke-opacity",.25).attr("stroke-width","1px"),L.selectAll("text").style("text-shadow","1px 1px 1px #fff, -1px -1px 1px #fff, 1px -1px 1px #fff, -1px 1px 1px #fff").style("cursor","default").style("user-select","none");var O=C.selectAll("."+f.cn.axisHeading).data(u,l);O.enter().append("g").classed(f.cn.axisHeading,!0);var z=O.selectAll("."+f.cn.axisTitle).data(u,l);z.enter().append("text").classed(f.cn.axisTitle,!0).attr("text-anchor","middle").style("cursor","ew-resize").style("user-select","none").style("pointer-events","auto"),z.attr("transform","translate(0,"+-f.axisTitleOffset+")").text(function(t){return t.label}).each(function(t){a.font(n.select(this),t.model.labelFont)});var D=C.selectAll("."+f.cn.axisExtent).data(u,l);D.enter().append("g").classed(f.cn.axisExtent,!0);var P=D.selectAll("."+f.cn.axisExtentTop).data(u,l);P.enter().append("g").classed(f.cn.axisExtentTop,!0),P.attr("transform","translate(0,"+-f.axisExtentOffset+")");var I=P.selectAll("."+f.cn.axisExtentTopText).data(u,l);function N(t,e){if(t.ordinal)return"";var r=t.domainScale.domain();return n.format(t.tickFormat)(r[e?r.length-1:0])}I.enter().append("text").classed(f.cn.axisExtentTopText,!0).call(x),I.text(function(t){return N(t,!0)}).each(function(t){a.font(n.select(this),t.model.rangeFont)});var R=D.selectAll("."+f.cn.axisExtentBottom).data(u,l);R.enter().append("g").classed(f.cn.axisExtentBottom,!0),R.attr("transform",function(t){return"translate(0,"+(t.model.height+f.axisExtentOffset)+")"});var F=R.selectAll("."+f.cn.axisExtentBottomText).data(u,l);F.enter().append("text").classed(f.cn.axisExtentBottomText,!0).attr("dy","0.75em").call(x),F.text(function(t){return N(t)}).each(function(t){a.font(n.select(this),t.model.rangeFont)}),h.ensureAxisBrush(C)}},{"../../components/colorscale":725,"../../components/drawing":734,"../../lib":836,"../../lib/gup":834,"./axisbrush":1152,"./constants":1155,"./lines":1158,d3:108}],1161:[function(t,e,r){"use strict";var n=t("./parcoords"),i=t("../../lib/prepare_regl");e.exports=function(t,e){var r=t._fullLayout,a=r._toppaper,o=r._paperdiv,s=r._glcontainer;if(i(t)){var l={},u={},c={},f={},h=r._size;e.forEach(function(e,r){var n=e[0].trace;c[r]=n.index;var i=f[r]=n._fullInput.index;l[r]=t.data[i].dimensions,u[r]=t.data[i].dimensions.slice()});n(o,a,s,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{filterChanged:function(e,n,i){var a=u[e][n],o=i.map(function(t){return t.slice()}),s="dimensions["+n+"].constraintrange",l=r._tracePreGUI[t._fullData[c[e]]._fullInput.uid];if(void 0===l[s]){var h=a.constraintrange;l[s]=h||null}var p=t._fullData[c[e]].dimensions[n];o.length?(1===o.length&&(o=o[0]),a.constraintrange=o,p.constraintrange=o.slice(),o=[o]):(delete a.constraintrange,delete p.constraintrange,o=null);var d={};d[s]=o,t.emit("plotly_restyle",[d,[f[e]]])},hover:function(e){t.emit("plotly_hover",e)},unhover:function(e){t.emit("plotly_unhover",e)},axesMoved:function(e,r){function n(t){return!("visible"in t)||t.visible}function i(t,e,r){var n=e.indexOf(r),i=t.indexOf(n);return-1===i&&(i+=e.length),i}var a=function(t){return function(e,n){return i(r,t,e)-i(r,t,n)}}(u[e].filter(n));l[e].sort(a),u[e].filter(function(t){return!n(t)}).sort(function(t){return u[e].indexOf(t)}).forEach(function(t){l[e].splice(l[e].indexOf(t),1),l[e].splice(u[e].indexOf(t),0,t)}),t.emit("plotly_restyle",[{dimensions:[l[e]]},[f[e]]])}})}}},{"../../lib/prepare_regl":849,"./parcoords":1160}],1162:[function(t,e,r){"use strict";var n=t("../../components/color/attributes"),i=t("../../plots/font_attributes"),a=t("../../plots/attributes"),o=t("../../components/fx/hovertemplate_attributes"),s=t("../../plots/domain").attributes,l=t("../../lib/extend").extendFlat,u=i({editType:"calc",arrayOk:!0,colorEditType:"plot"});e.exports={labels:{valType:"data_array",editType:"calc"},label0:{valType:"number",dflt:0,editType:"calc"},dlabel:{valType:"number",dflt:1,editType:"calc"},values:{valType:"data_array",editType:"calc"},marker:{colors:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:n.defaultLine,arrayOk:!0,editType:"style"},width:{valType:"number",min:0,dflt:0,arrayOk:!0,editType:"style"},editType:"calc"},editType:"calc"},text:{valType:"data_array",editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},scalegroup:{valType:"string",dflt:"",editType:"calc"},textinfo:{valType:"flaglist",flags:["label","text","value","percent"],extras:["none"],editType:"calc"},hoverinfo:l({},a.hoverinfo,{flags:["label","text","value","percent","name"]}),hovertemplate:o({},{keys:["label","color","value","percent","text"]}),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"auto",arrayOk:!0,editType:"calc"},textfont:l({},u,{}),insidetextfont:l({},u,{}),outsidetextfont:l({},u,{}),title:{text:{valType:"string",dflt:"",editType:"calc"},font:l({},u,{}),position:{valType:"enumerated",values:["top left","top center","top right","middle center","bottom left","bottom center","bottom right"],editType:"calc"},editType:"calc"},domain:s({name:"pie",trace:!0,editType:"calc"}),hole:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},sort:{valType:"boolean",dflt:!0,editType:"calc"},direction:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"number",min:-360,max:360,dflt:0,editType:"calc"},pull:{valType:"number",min:0,max:1,dflt:0,arrayOk:!0,editType:"calc"},_deprecated:{title:{valType:"string",dflt:"",editType:"calc"},titlefont:l({},u,{}),titleposition:{valType:"enumerated",values:["top left","top center","top right","middle center","bottom left","bottom center","bottom right"],editType:"calc"}}}},{"../../components/color/attributes":712,"../../components/fx/hovertemplate_attributes":751,"../../lib/extend":826,"../../plots/attributes":881,"../../plots/domain":909,"../../plots/font_attributes":910}],1163:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../plots/get_data").getModuleCalcData;r.name="pie",r.plot=function(t){var e=n.getModule("pie"),r=i(t.calcdata,e)[0];r.length&&e.plot(t,r)},r.clean=function(t,e,r,n){var i=n._has&&n._has("pie"),a=e._has&&e._has("pie");i&&!a&&n._pielayer.selectAll("g.trace").remove()}},{"../../plots/get_data":920,"../../registry":965}],1164:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib").isArrayOrTypedArray,a=t("tinycolor2"),o=t("../../components/color"),s=t("./helpers");r.calc=function(t,e){var r,l,u,c,f,h=e.values,p=i(h)&&h.length,d=e.labels,m=e.marker.colors||[],g=[],v=t._fullLayout,y=v._piecolormap,x={},b=0,_=v.hiddenlabels||[];if(e.dlabel)for(d=new Array(h.length),r=0;r")}}return g},r.crossTraceCalc=function(t){var e=t._fullLayout,r=t.calcdata,n=e.piecolorway,i=e._piecolormap;e.extendpiecolors&&(n=function(t){var e,r=JSON.stringify(t),n=l[r];if(!n){for(n=t.slice(),e=0;e0?1:-1)/2,y:a/(1+r*r/(n*n)),outside:!0}}function p(t,e){var r=t.trace,n=e.h*(r.domain.y[1]-r.domain.y[0]);return Math.min(t.titleBox.height,n/2)}function d(t){var e,r=t.pull;if(Array.isArray(r))for(r=0,e=0;er&&(r=t.pull[e]);return r}e.exports=function(t,e){var r=t._fullLayout;!function(t,e){for(var r,n,i=e._fullLayout,a=0;ai.vTotal/2?1:0)}(e),m.attr("stroke-linejoin","round"),m.each(function(){var m=n.select(this).selectAll("g.slice").data(e);m.enter().append("g").classed("slice",!0),m.exit().remove();var y=[[[],[]],[[],[]]],x=!1;m.each(function(e){if(e.hidden)n.select(this).selectAll("path,g").remove();else{e.pointNumber=e.i,e.curveNumber=v.index,y[e.pxmid[1]<0?0:1][e.pxmid[0]<0?0:1].push(e);var p=g.cx,d=g.cy,m=n.select(this),b=m.selectAll("path.surface").data([e]),_=!1,w=!1;if(b.enter().append("path").classed("surface",!0).style({"pointer-events":"all"}),m.select("path.textline").remove(),m.on("mouseover",function(){var a=t._fullLayout,o=t._fullData[v.index];if(!t._dragging&&!1!==a.hovermode){var s=o.hoverinfo;if(Array.isArray(s)&&(s=i.castHoverinfo({hoverinfo:[u.castOption(s,e.pts)],_module:v._module},a,0)),"all"===s&&(s="label+text+value+percent+name"),o.hovertemplate||"none"!==s&&"skip"!==s&&s){var l=f(e,g),h=p+e.pxmid[0]*(1-l),m=d+e.pxmid[1]*(1-l),y=r.separators,x=[];if(s&&-1!==s.indexOf("label")&&x.push(e.label),e.text=u.castOption(o.hovertext||o.text,e.pts),s&&-1!==s.indexOf("text")){var b=e.text;b&&x.push(b)}e.value=e.v,e.valueLabel=u.formatPieValue(e.v,y),s&&-1!==s.indexOf("value")&&x.push(e.valueLabel),e.percent=e.v/g.vTotal,e.percentLabel=u.formatPiePercent(e.percent,y),s&&-1!==s.indexOf("percent")&&x.push(e.percentLabel);var A=v.hoverlabel,M=A.font;i.loneHover({x0:h-l*g.r,x1:h+l*g.r,y:m,text:x.join("
"),name:o.hovertemplate||-1!==s.indexOf("name")?o.name:void 0,idealAlign:e.pxmid[0]<0?"left":"right",color:u.castOption(A.bgcolor,e.pts)||e.color,borderColor:u.castOption(A.bordercolor,e.pts),fontFamily:u.castOption(M.family,e.pts),fontSize:u.castOption(M.size,e.pts),fontColor:u.castOption(M.color,e.pts),trace:o,hovertemplate:u.castOption(o.hovertemplate,e.pts),hovertemplateLabels:e,eventData:[c(e,o)]},{container:a._hoverlayer.node(),outerContainer:a._paper.node(),gd:t}),_=!0}t.emit("plotly_hover",{points:[c(e,o)],event:n.event}),w=!0}}).on("mouseout",function(r){var a=t._fullLayout,o=t._fullData[v.index];w&&(r.originalEvent=n.event,t.emit("plotly_unhover",{points:[c(e,o)],event:n.event}),w=!1),_&&(i.loneUnhover(a._hoverlayer.node()),_=!1)}).on("click",function(){var r=t._fullLayout,a=t._fullData[v.index];t._dragging||!1===r.hovermode||(t._hoverdata=[c(e,a)],i.click(t,n.event))}),v.pull){var A=+u.castOption(v.pull,e.pts)||0;A>0&&(p+=A*e.pxmid[0],d+=A*e.pxmid[1])}e.cxFinal=p,e.cyFinal=d;var M=v.hole;if(e.v===g.vTotal){var k="M"+(p+e.px0[0])+","+(d+e.px0[1])+L(e.px0,e.pxmid,!0,1)+L(e.pxmid,e.px0,!0,1)+"Z";M?b.attr("d","M"+(p+M*e.px0[0])+","+(d+M*e.px0[1])+L(e.px0,e.pxmid,!1,M)+L(e.pxmid,e.px0,!1,M)+"Z"+k):b.attr("d",k)}else{var T=L(e.px0,e.px1,!0,1);if(M){var E=1-M;b.attr("d","M"+(p+M*e.px1[0])+","+(d+M*e.px1[1])+L(e.px1,e.px0,!1,M)+"l"+E*e.px0[0]+","+E*e.px0[1]+T+"Z")}else b.attr("d","M"+p+","+d+"l"+e.px0[0]+","+e.px0[1]+T+"Z")}var S=u.castOption(v.textposition,e.pts),C=m.selectAll("g.slicetext").data(e.text&&"none"!==S?[0]:[]);C.enter().append("g").classed("slicetext",!0),C.exit().remove(),C.each(function(){var r=s.ensureSingle(n.select(this),"text","",function(t){t.attr("data-notex",1)});r.text(e.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(o.font,"outside"===S?function(t,e,r){var n=u.castOption(t.outsidetextfont.color,e.pts)||u.castOption(t.textfont.color,e.pts)||r.color,i=u.castOption(t.outsidetextfont.family,e.pts)||u.castOption(t.textfont.family,e.pts)||r.family,a=u.castOption(t.outsidetextfont.size,e.pts)||u.castOption(t.textfont.size,e.pts)||r.size;return{color:n,family:i,size:a}}(v,e,t._fullLayout.font):function(t,e,r){var n=u.castOption(t.insidetextfont.color,e.pts);!n&&t._input.textfont&&(n=u.castOption(t._input.textfont.color,e.pts));var i=u.castOption(t.insidetextfont.family,e.pts)||u.castOption(t.textfont.family,e.pts)||r.family,o=u.castOption(t.insidetextfont.size,e.pts)||u.castOption(t.textfont.size,e.pts)||r.size;return{color:n||a.contrast(e.color),family:i,size:o}}(v,e,t._fullLayout.font)).call(l.convertToTspans,t);var i,c=o.bBox(r.node());"outside"===S?i=h(c,e):(i=function(t,e,r){var n=Math.sqrt(t.width*t.width+t.height*t.height),i=t.width/t.height,a=Math.PI*Math.min(e.v/r.vTotal,.5),o=1-r.trace.hole,s=f(e,r),l={scale:s*r.r*2/n,rCenter:1-s,rotate:0};if(l.scale>=1)return l;var u=i+1/(2*Math.tan(a)),c=r.r*Math.min(1/(Math.sqrt(u*u+.5)+u),o/(Math.sqrt(i*i+o/2)+i)),h={scale:2*c/t.height,rCenter:Math.cos(c/r.r)-c*i/r.r,rotate:(180/Math.PI*e.midangle+720)%180-90},p=1/i,d=p+1/(2*Math.tan(a)),m=r.r*Math.min(1/(Math.sqrt(d*d+.5)+d),o/(Math.sqrt(p*p+o/2)+p)),g={scale:2*m/t.width,rCenter:Math.cos(m/r.r)-m/i/r.r,rotate:(180/Math.PI*e.midangle+810)%180-90},v=g.scale>h.scale?g:h;return l.scale<1&&v.scale>l.scale?v:l}(c,e,g),"auto"===S&&i.scale<1&&(r.call(o.font,v.outsidetextfont),v.outsidetextfont.family===v.insidetextfont.family&&v.outsidetextfont.size===v.insidetextfont.size||(c=o.bBox(r.node())),i=h(c,e)));var m=p+e.pxmid[0]*i.rCenter+(i.x||0),y=d+e.pxmid[1]*i.rCenter+(i.y||0);i.outside&&(e.yLabelMin=y-c.height/2,e.yLabelMid=y,e.yLabelMax=y+c.height/2,e.labelExtraX=0,e.labelExtraY=0,x=!0),r.attr("transform","translate("+m+","+y+")"+(i.scale<1?"scale("+i.scale+")":"")+(i.rotate?"rotate("+i.rotate+")":"")+"translate("+-(c.left+c.right)/2+","+-(c.top+c.bottom)/2+")")})}function L(t,r,n,i){return"a"+i*g.r+","+i*g.r+" 0 "+e.largeArc+(n?" 1 ":" 0 ")+i*(r[0]-t[0])+","+i*(r[1]-t[1])}});var b=n.select(this).selectAll("g.titletext").data(v.title.text?[0]:[]);b.enter().append("g").classed("titletext",!0),b.exit().remove(),b.each(function(){var e,i=s.ensureSingle(n.select(this),"text","",function(t){t.attr("data-notex",1)}),a=r.meta?s.templateString(v.title.text,{meta:r.meta}):v.title.text;i.text(a).attr({class:"titletext",transform:"","text-anchor":"middle"}).call(o.font,v.title.font).call(l.convertToTspans,t),e="middle center"===v.title.position?function(t){var e=Math.sqrt(t.titleBox.width*t.titleBox.width+t.titleBox.height*t.titleBox.height);return{x:t.cx,y:t.cy,scale:t.trace.hole*t.r*2/e,tx:0,ty:-t.titleBox.height/2+t.trace.title.font.size}}(g):function(t,e){var r,n,i=1,a=1,o=t.trace,s={x:t.cx,y:t.cy},l={tx:0,ty:0};l.ty+=o.title.font.size,n=d(o),-1!==o.title.position.indexOf("top")?(s.y-=(1+n)*t.r,l.ty-=t.titleBox.height):-1!==o.title.position.indexOf("bottom")&&(s.y+=(1+n)*t.r);-1!==o.title.position.indexOf("left")?(r=e.w*(o.domain.x[1]-o.domain.x[0])/2+t.r,s.x-=(1+n)*t.r,l.tx+=t.titleBox.width/2):-1!==o.title.position.indexOf("center")?r=e.w*(o.domain.x[1]-o.domain.x[0]):-1!==o.title.position.indexOf("right")&&(r=e.w*(o.domain.x[1]-o.domain.x[0])/2+t.r,s.x+=(1+n)*t.r,l.tx-=t.titleBox.width/2);return i=r/t.titleBox.width,a=p(t,e)/t.titleBox.height,{x:s.x,y:s.y,scale:Math.min(i,a),tx:l.tx,ty:l.ty}}(g,r._size),i.attr("transform","translate("+e.x+","+e.y+")"+(e.scale<1?"scale("+e.scale+")":"")+"translate("+e.tx+","+e.ty+")")}),x&&function(t,e){var r,n,i,a,o,s,l,c,f,h,p,d,m;function g(t,e){return t.pxmid[1]-e.pxmid[1]}function v(t,e){return e.pxmid[1]-t.pxmid[1]}function y(t,r){r||(r={});var i,c,f,p,d,m,g=r.labelExtraY+(n?r.yLabelMax:r.yLabelMin),v=n?t.yLabelMin:t.yLabelMax,y=n?t.yLabelMax:t.yLabelMin,x=t.cyFinal+o(t.px0[1],t.px1[1]),b=g-v;if(b*l>0&&(t.labelExtraY=b),Array.isArray(e.pull))for(c=0;c=(u.castOption(e.pull,f.pts)||0)||((t.pxmid[1]-f.pxmid[1])*l>0?(p=f.cyFinal+o(f.px0[1],f.px1[1]),(b=p-v-t.labelExtraY)*l>0&&(t.labelExtraY+=b)):(y+t.labelExtraY-x)*l>0&&(i=3*s*Math.abs(c-h.indexOf(t)),d=f.cxFinal+a(f.px0[0],f.px1[0]),(m=d+i-(t.cxFinal+t.pxmid[0])-t.labelExtraX)*s>0&&(t.labelExtraX+=m)))}for(n=0;n<2;n++)for(i=n?g:v,o=n?Math.max:Math.min,l=n?1:-1,r=0;r<2;r++){for(a=r?Math.max:Math.min,s=r?1:-1,(c=t[n][r]).sort(i),f=t[1-n][r],h=f.concat(c),d=[],p=0;pMath.abs(u)?o+="l"+u*t.pxmid[0]/t.pxmid[1]+","+u+"H"+(i+t.labelExtraX+s):o+="l"+t.labelExtraX+","+l+"v"+(u-l)+"h"+s}else o+="V"+(t.yLabelMid+t.labelExtraY)+"h"+s;e.append("path").classed("textline",!0).call(a.stroke,v.outsidetextfont.color).attr({"stroke-width":Math.min(2,v.outsidetextfont.size/8),d:o,fill:"none"})}})})});setTimeout(function(){m.selectAll("tspan").each(function(){var t=n.select(this);t.attr("dy")&&t.attr("dy",t.attr("dy"))})},0)}},{"../../components/color":713,"../../components/drawing":734,"../../components/fx":752,"../../lib":836,"../../lib/svg_text_utils":860,"./event_data":1166,"./helpers":1167,d3:108}],1172:[function(t,e,r){"use strict";var n=t("d3"),i=t("./style_one");e.exports=function(t){t._fullLayout._pielayer.selectAll(".trace").each(function(t){var e=t[0].trace,r=n.select(this);r.style({opacity:e.opacity}),r.selectAll("path.surface").each(function(t){n.select(this).call(i,t,e)})})}},{"./style_one":1173,d3:108}],1173:[function(t,e,r){"use strict";var n=t("../../components/color"),i=t("./helpers").castOption;e.exports=function(t,e,r){var a=r.marker.line,o=i(a.color,e.pts)||n.defaultLine,s=i(a.width,e.pts)||0;t.style({"stroke-width":s}).call(n.fill,e.color).call(n.stroke,o)}},{"../../components/color":713,"./helpers":1167}],1174:[function(t,e,r){"use strict";var n=t("../scatter/attributes");e.exports={x:n.x,y:n.y,xy:{valType:"data_array",editType:"calc"},indices:{valType:"data_array",editType:"calc"},xbounds:{valType:"data_array",editType:"calc"},ybounds:{valType:"data_array",editType:"calc"},text:n.text,marker:{color:{valType:"color",arrayOk:!1,editType:"calc"},opacity:{valType:"number",min:0,max:1,dflt:1,arrayOk:!1,editType:"calc"},blend:{valType:"boolean",dflt:null,editType:"calc"},sizemin:{valType:"number",min:.1,max:2,dflt:.5,editType:"calc"},sizemax:{valType:"number",min:.1,dflt:20,editType:"calc"},border:{color:{valType:"color",arrayOk:!1,editType:"calc"},arearatio:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},editType:"calc"},editType:"calc"},transforms:void 0}},{"../scatter/attributes":1187}],1175:[function(t,e,r){"use strict";var n=t("gl-pointcloud2d"),i=t("../../lib/str2rgbarray"),a=t("../../plots/cartesian/autorange").findExtremes,o=t("../scatter/get_trace_color");function s(t,e){this.scene=t,this.uid=e,this.type="pointcloud",this.pickXData=[],this.pickYData=[],this.xData=[],this.yData=[],this.textLabels=[],this.color="rgb(0, 0, 0)",this.name="",this.hoverinfo="all",this.idToIndex=new Int32Array(0),this.bounds=[0,0,0,0],this.pointcloudOptions={positions:new Float32Array(0),idToIndex:this.idToIndex,sizemin:.5,sizemax:12,color:[0,0,0,1],areaRatio:1,borderColor:[0,0,0,1]},this.pointcloud=n(t.glplot,this.pointcloudOptions),this.pointcloud._trace=this}var l=s.prototype;l.handlePick=function(t){var e=this.idToIndex[t.pointId];return{trace:this,dataCoord:t.dataCoord,traceCoord:this.pickXYData?[this.pickXYData[2*e],this.pickXYData[2*e+1]]:[this.pickXData[e],this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},l.update=function(t){this.index=t.index,this.textLabels=t.text,this.name=t.name,this.hoverinfo=t.hoverinfo,this.bounds=[1/0,1/0,-1/0,-1/0],this.updateFast(t),this.color=o(t,{})},l.updateFast=function(t){var e,r,n,o,s,l,u=this.xData=this.pickXData=t.x,c=this.yData=this.pickYData=t.y,f=this.pickXYData=t.xy,h=t.xbounds&&t.ybounds,p=t.indices,d=this.bounds;if(f){if(n=f,e=f.length>>>1,h)d[0]=t.xbounds[0],d[2]=t.xbounds[1],d[1]=t.ybounds[0],d[3]=t.ybounds[1];else for(l=0;ld[2]&&(d[2]=o),sd[3]&&(d[3]=s);if(p)r=p;else for(r=new Int32Array(e),l=0;ld[2]&&(d[2]=o),sd[3]&&(d[3]=s);this.idToIndex=r,this.pointcloudOptions.idToIndex=r,this.pointcloudOptions.positions=n;var m=i(t.marker.color),g=i(t.marker.border.color),v=t.opacity*t.marker.opacity;m[3]*=v,this.pointcloudOptions.color=m;var y=t.marker.blend;if(null===y){y=u.length<100||c.length<100}this.pointcloudOptions.blend=y,g[3]*=v,this.pointcloudOptions.borderColor=g;var x=t.marker.sizemin,b=Math.max(t.marker.sizemax,t.marker.sizemin);this.pointcloudOptions.sizeMin=x,this.pointcloudOptions.sizeMax=b,this.pointcloudOptions.areaRatio=t.marker.border.arearatio,this.pointcloud.update(this.pointcloudOptions);var _=this.scene.xaxis,w=this.scene.yaxis,A=b/2||.5;t._extremes[_._id]=a(_,[d[0],d[2]],{ppad:A}),t._extremes[w._id]=a(w,[d[1],d[3]],{ppad:A})},l.dispose=function(){this.pointcloud.dispose()},e.exports=function(t,e){var r=new s(t,e.uid);return r.update(e),r}},{"../../lib/str2rgbarray":859,"../../plots/cartesian/autorange":883,"../scatter/get_trace_color":1197,"gl-pointcloud2d":292}],1176:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./attributes");e.exports=function(t,e,r){function a(r,a){return n.coerce(t,e,i,r,a)}a("x"),a("y"),a("xbounds"),a("ybounds"),t.xy&&t.xy instanceof Float32Array&&(e.xy=t.xy),t.indices&&t.indices instanceof Int32Array&&(e.indices=t.indices),a("text"),a("marker.color",r),a("marker.opacity"),a("marker.blend"),a("marker.sizemin"),a("marker.sizemax"),a("marker.border.color",r),a("marker.border.arearatio"),e._length=null}},{"../../lib":836,"./attributes":1174}],1177:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("../scatter3d/calc"),n.plot=t("./convert"),n.moduleType="trace",n.name="pointcloud",n.basePlotModule=t("../../plots/gl2d"),n.categories=["gl","gl2d","showLegend"],n.meta={},e.exports=n},{"../../plots/gl2d":923,"../scatter3d/calc":1215,"./attributes":1174,"./convert":1175,"./defaults":1176}],1178:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),i=t("../../plots/attributes"),a=t("../../components/color/attributes"),o=t("../../components/fx/attributes"),s=t("../../plots/domain").attributes,l=t("../../components/fx/hovertemplate_attributes"),u=t("../../components/colorscale/attributes"),c=t("../../plot_api/plot_template").templatedArray,f=t("../../lib/extend").extendFlat,h=t("../../plot_api/edit_types").overrideAll;(e.exports=h({hoverinfo:f({},i.hoverinfo,{flags:[],arrayOk:!1}),hoverlabel:o.hoverlabel,domain:s({name:"sankey",trace:!0}),orientation:{valType:"enumerated",values:["v","h"],dflt:"h"},valueformat:{valType:"string",dflt:".3s"},valuesuffix:{valType:"string",dflt:""},arrangement:{valType:"enumerated",values:["snap","perpendicular","freeform","fixed"],dflt:"snap"},textfont:n({}),node:{label:{valType:"data_array",dflt:[]},groups:{valType:"info_array",dimensions:2,freeLength:!0,dflt:[],items:{valType:"number",editType:"calc"}},color:{valType:"color",arrayOk:!0},line:{color:{valType:"color",dflt:a.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:.5,arrayOk:!0}},pad:{valType:"number",arrayOk:!1,min:0,dflt:20},thickness:{valType:"number",arrayOk:!1,min:1,dflt:20},hoverinfo:{valType:"enumerated",values:["all","none","skip"],dflt:"all"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:["value","label"]})},link:{label:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},line:{color:{valType:"color",dflt:a.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:0,arrayOk:!0}},source:{valType:"data_array",dflt:[]},target:{valType:"data_array",dflt:[]},value:{valType:"data_array",dflt:[]},hoverinfo:{valType:"enumerated",values:["all","none","skip"],dflt:"all"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:["value","label"]}),colorscales:c("concentrationscales",{editType:"calc",label:{valType:"string",editType:"calc",dflt:""},cmax:{valType:"number",editType:"calc",dflt:1},cmin:{valType:"number",editType:"calc",dflt:0},colorscale:f(u().colorscale,{dflt:[[0,"white"],[1,"black"]]})})}},"calc","nested")).transforms=void 0},{"../../components/color/attributes":712,"../../components/colorscale/attributes":720,"../../components/fx/attributes":743,"../../components/fx/hovertemplate_attributes":751,"../../lib/extend":826,"../../plot_api/edit_types":867,"../../plot_api/plot_template":874,"../../plots/attributes":881,"../../plots/domain":909,"../../plots/font_attributes":910}],1179:[function(t,e,r){"use strict";var n=t("../../plot_api/edit_types").overrideAll,i=t("../../plots/get_data").getModuleCalcData,a=t("./plot"),o=t("../../components/fx/layout_attributes");r.name="sankey",r.baseLayoutAttrOverrides=n({hoverlabel:o.hoverlabel},"plot","nested"),r.plot=function(t){var e=i(t.calcdata,"sankey")[0];a(t,e)},r.clean=function(t,e,r,n){var i=n._has&&n._has("sankey"),a=e._has&&e._has("sankey");i&&!a&&n._paperdiv.selectAll(".sankey").remove()}},{"../../components/fx/layout_attributes":753,"../../plot_api/edit_types":867,"../../plots/get_data":920,"./plot":1184}],1180:[function(t,e,r){"use strict";var n=t("strongly-connected-components"),i=t("../../lib"),a=t("../../lib/gup").wrap,o=i.isArrayOrTypedArray,s=i.isIndex,l=t("../../components/colorscale");function u(t){var e,r=t.node,a=t.link,u=[],c=o(a.color),f={},h={},p=a.colorscales.length;for(e=0;ev&&(v=a.source[e]),a.target[e]>v&&(v=a.target[e]);var y,x=v+1,b=t.node.groups,_={};for(e=0;e0&&s(E,x)&&s(S,x)&&(!_.hasOwnProperty(E)||!_.hasOwnProperty(S)||_[E]!==_[S])){_.hasOwnProperty(S)&&(S=_[S]),_.hasOwnProperty(E)&&(E=_[E]),S=+S,f[E=+E]=f[S]=!0;var C="";a.label&&a.label[e]&&(C=a.label[e]);var L=null;C&&h.hasOwnProperty(C)&&(L=h[C]),u.push({pointNumber:e,label:C,color:c?a.color[e]:a.color,concentrationscale:L,source:E,target:S,value:+T}),k.source.push(E),k.target.push(S)}}var O=x+b.length,z=o(r.color),D=[];for(e=0;ex-1,childrenNodes:[],pointNumber:e,label:P,color:z?r.color[e]:r.color})}var I=!1;return function(t,e,r){for(var a=i.init2dArray(t,0),o=0;o1})}(O,k.source,k.target)&&(I=!0),{circular:I,links:u,nodes:D,groups:b,groupLookup:_}}e.exports=function(t,e){var r=u(e);return a({circular:r.circular,_nodes:r.nodes,_links:r.links,_groups:r.groups,_groupLookup:r.groupLookup})}},{"../../components/colorscale":725,"../../lib":836,"../../lib/gup":834,"strongly-connected-components":1369}],1181:[function(t,e,r){"use strict";e.exports={nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:"linear",cn:{sankey:"sankey",sankeyLinks:"sankey-links",sankeyLink:"sankey-link",sankeyNodeSet:"sankey-node-set",sankeyNode:"sankey-node",nodeRect:"node-rect",nodeCapture:"node-capture",nodeCentered:"node-entered",nodeLabelGuide:"node-label-guide",nodeLabel:"node-label",nodeLabelTextPath:"node-label-text-path"}}},{}],1182:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./attributes"),a=t("../../components/color"),o=t("tinycolor2"),s=t("../../plots/domain").defaults,l=t("../../components/fx/hoverlabel_defaults"),u=t("../../plot_api/plot_template"),c=t("../../plots/array_container_defaults");function f(t,e){function r(r,a){return n.coerce(t,e,i.link.colorscales,r,a)}r("label"),r("cmin"),r("cmax"),r("colorscale")}e.exports=function(t,e,r,h){function p(r,a){return n.coerce(t,e,i,r,a)}var d=n.extendDeep(h.hoverlabel,t.hoverlabel),m=t.node,g=u.newContainer(e,"node");function v(t,e){return n.coerce(m,g,i.node,t,e)}v("label"),v("groups"),v("pad"),v("thickness"),v("line.color"),v("line.width"),v("hoverinfo",t.hoverinfo),l(m,g,v,d),v("hovertemplate");var y=h.colorway;v("color",g.label.map(function(t,e){return a.addOpacity(function(t){return y[t%y.length]}(e),.8)}));var x=t.link||{},b=u.newContainer(e,"link");function _(t,e){return n.coerce(x,b,i.link,t,e)}_("label"),_("source"),_("target"),_("value"),_("line.color"),_("line.width"),_("hoverinfo",t.hoverinfo),l(x,b,_,d),_("hovertemplate");var w=o(h.paper_bgcolor).getLuminance()<.333?"rgba(255, 255, 255, 0.6)":"rgba(0, 0, 0, 0.2)";_("color",n.repeat(w,b.value.length)),c(x,b,{name:"colorscales",handleItemDefaults:f}),s(e,h,p),p("orientation"),p("valueformat"),p("valuesuffix"),p("arrangement"),n.coerceFont(p,"textfont",n.extendFlat({},h.font)),e._length=null}},{"../../components/color":713,"../../components/fx/hoverlabel_defaults":750,"../../lib":836,"../../plot_api/plot_template":874,"../../plots/array_container_defaults":880,"../../plots/domain":909,"./attributes":1178,tinycolor2:1376}],1183:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.plot=t("./plot"),n.moduleType="trace",n.name="sankey",n.basePlotModule=t("./base_plot"),n.categories=["noOpacity"],n.meta={},e.exports=n},{"./attributes":1178,"./base_plot":1179,"./calc":1180,"./defaults":1182,"./plot":1184}],1184:[function(t,e,r){"use strict";var n=t("d3"),i=t("./render"),a=t("../../components/fx"),o=t("../../components/color"),s=t("../../lib"),l=t("./constants").cn,u=s._;function c(t){return""!==t}function f(t,e){return t.filter(function(t){return t.key===e.traceId})}function h(t,e){n.select(t).select("path").style("fill-opacity",e),n.select(t).select("rect").style("fill-opacity",e)}function p(t){n.select(t).select("text.name").style("fill","black")}function d(t){return function(e){return-1!==t.node.sourceLinks.indexOf(e.link)||-1!==t.node.targetLinks.indexOf(e.link)}}function m(t){return function(e){return-1!==e.node.sourceLinks.indexOf(t.link)||-1!==e.node.targetLinks.indexOf(t.link)}}function g(t,e,r){e&&r&&f(r,e).selectAll("."+l.sankeyLink).filter(d(e)).call(y.bind(0,e,r,!1))}function v(t,e,r){e&&r&&f(r,e).selectAll("."+l.sankeyLink).filter(d(e)).call(x.bind(0,e,r,!1))}function y(t,e,r,n){var i=n.datum().link.label;n.style("fill-opacity",function(t){if(!t.link.concentrationscale)return.4}),i&&f(e,t).selectAll("."+l.sankeyLink).filter(function(t){return t.link.label===i}).style("fill-opacity",function(t){if(!t.link.concentrationscale)return.4}),r&&f(e,t).selectAll("."+l.sankeyNode).filter(m(t)).call(g)}function x(t,e,r,n){var i=n.datum().link.label;n.style("fill-opacity",function(t){return t.tinyColorAlpha}),i&&f(e,t).selectAll("."+l.sankeyLink).filter(function(t){return t.link.label===i}).style("fill-opacity",function(t){return t.tinyColorAlpha}),r&&f(e,t).selectAll(l.sankeyNode).filter(m(t)).call(v)}function b(t,e){var r=t.hoverlabel||{},n=s.nestedProperty(r,e).get();return!Array.isArray(n)&&n}e.exports=function(t,e){var r=t._fullLayout,s=r._paper,f=r._size,d=u(t,"source:")+" ",m=u(t,"target:")+" ",_=u(t,"concentration:")+" ",w=u(t,"incoming flow count:")+" ",A=u(t,"outgoing flow count:")+" ";i(t,s,e,{width:f.w,height:f.h,margin:{t:f.t,r:f.r,b:f.b,l:f.l}},{linkEvents:{hover:function(e,r,i){!1!==t._fullLayout.hovermode&&(n.select(e).call(y.bind(0,r,i,!0)),"skip"!==r.link.trace.link.hoverinfo&&(r.link.fullData=r.link.trace,t.emit("plotly_hover",{event:n.event,points:[r.link]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var s=i.link.trace.link;if("none"!==s.hoverinfo&&"skip"!==s.hoverinfo){var l,u,f=t._fullLayout._paperdiv.node().getBoundingClientRect();if(i.link.circular)l=(i.link.circularPathData.leftInnerExtent+i.link.circularPathData.rightInnerExtent)/2+i.parent.translateX,u=i.link.circularPathData.verticalFullExtent+i.parent.translateY;else{var g=e.getBoundingClientRect();l=g.left+g.width/2-f.left,u=g.top+g.height/2-f.top}var v={valueLabel:n.format(i.valueFormat)(i.link.value)+i.valueSuffix};i.link.fullData=i.link.trace;var y=a.loneHover({x:l,y:u,name:v.valueLabel,text:[i.link.label||"",d+i.link.source.label,m+i.link.target.label,i.link.concentrationscale?_+n.format("%0.2f")(i.link.flow.labelConcentration):""].filter(c).join("
"),color:b(s,"bgcolor")||o.addOpacity(i.tinyColorHue,1),borderColor:b(s,"bordercolor"),fontFamily:b(s,"font.family"),fontSize:b(s,"font.size"),fontColor:b(s,"font.color"),idealAlign:n.event.x"),color:b(o,"bgcolor")||i.tinyColorHue,borderColor:b(o,"bordercolor"),fontFamily:b(o,"font.family"),fontSize:b(o,"font.size"),fontColor:b(o,"font.color"),idealAlign:"left",hovertemplate:o.hovertemplate,hovertemplateLabels:v,eventData:[i.node]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t});h(y,.85),p(y)}}},unhover:function(e,i,o){!1!==t._fullLayout.hovermode&&(n.select(e).call(v,i,o),"skip"!==i.node.trace.node.hoverinfo&&(i.node.fullData=i.node.trace,t.emit("plotly_unhover",{event:n.event,points:[i.node]})),a.loneUnhover(r._hoverlayer.node()))},select:function(e,r,i){var o=r.node;o.originalEvent=n.event,t._hoverdata=[o],n.select(e).call(v,r,i),a.click(t,{target:!0})}}})}},{"../../components/color":713,"../../components/fx":752,"../../lib":836,"./constants":1181,"./render":1185,d3:108}],1185:[function(t,e,r){"use strict";var n=t("./constants"),i=t("d3"),a=t("tinycolor2"),o=t("../../components/color"),s=t("../../components/drawing"),l=t("@plotly/d3-sankey"),u=t("d3-sankey-circular"),c=t("d3-force"),f=t("../../lib"),h=t("../../lib/gup"),p=h.keyFun,d=h.repeat,m=h.unwrap,g=t("d3-interpolate").interpolateNumber;function v(){var t=.5;return function(e){if(e.link.circular)return r=e.link,n=r.width/2,i=r.circularPathData,"top"===r.circularLinkType?"M "+i.targetX+" "+(i.targetY+n)+" L"+i.rightInnerExtent+" "+(i.targetY+n)+"A"+(i.rightLargeArcRadius+n)+" "+(i.rightSmallArcRadius+n)+" 0 0 1 "+(i.rightFullExtent-n)+" "+(i.targetY-i.rightSmallArcRadius)+"L"+(i.rightFullExtent-n)+" "+i.verticalRightInnerExtent+"A"+(i.rightLargeArcRadius+n)+" "+(i.rightLargeArcRadius+n)+" 0 0 1 "+i.rightInnerExtent+" "+(i.verticalFullExtent-n)+"L"+i.leftInnerExtent+" "+(i.verticalFullExtent-n)+"A"+(i.leftLargeArcRadius+n)+" "+(i.leftLargeArcRadius+n)+" 0 0 1 "+(i.leftFullExtent+n)+" "+i.verticalLeftInnerExtent+"L"+(i.leftFullExtent+n)+" "+(i.sourceY-i.leftSmallArcRadius)+"A"+(i.leftLargeArcRadius+n)+" "+(i.leftSmallArcRadius+n)+" 0 0 1 "+i.leftInnerExtent+" "+(i.sourceY+n)+"L"+i.sourceX+" "+(i.sourceY+n)+"L"+i.sourceX+" "+(i.sourceY-n)+"L"+i.leftInnerExtent+" "+(i.sourceY-n)+"A"+(i.leftLargeArcRadius-n)+" "+(i.leftSmallArcRadius-n)+" 0 0 0 "+(i.leftFullExtent-n)+" "+(i.sourceY-i.leftSmallArcRadius)+"L"+(i.leftFullExtent-n)+" "+i.verticalLeftInnerExtent+"A"+(i.leftLargeArcRadius-n)+" "+(i.leftLargeArcRadius-n)+" 0 0 0 "+i.leftInnerExtent+" "+(i.verticalFullExtent+n)+"L"+i.rightInnerExtent+" "+(i.verticalFullExtent+n)+"A"+(i.rightLargeArcRadius-n)+" "+(i.rightLargeArcRadius-n)+" 0 0 0 "+(i.rightFullExtent+n)+" "+i.verticalRightInnerExtent+"L"+(i.rightFullExtent+n)+" "+(i.targetY-i.rightSmallArcRadius)+"A"+(i.rightLargeArcRadius-n)+" "+(i.rightSmallArcRadius-n)+" 0 0 0 "+i.rightInnerExtent+" "+(i.targetY-n)+"L"+i.targetX+" "+(i.targetY-n)+"Z":"M "+i.targetX+" "+(i.targetY-n)+" L"+i.rightInnerExtent+" "+(i.targetY-n)+"A"+(i.rightLargeArcRadius+n)+" "+(i.rightSmallArcRadius+n)+" 0 0 0 "+(i.rightFullExtent-n)+" "+(i.targetY+i.rightSmallArcRadius)+"L"+(i.rightFullExtent-n)+" "+i.verticalRightInnerExtent+"A"+(i.rightLargeArcRadius+n)+" "+(i.rightLargeArcRadius+n)+" 0 0 0 "+i.rightInnerExtent+" "+(i.verticalFullExtent+n)+"L"+i.leftInnerExtent+" "+(i.verticalFullExtent+n)+"A"+(i.leftLargeArcRadius+n)+" "+(i.leftLargeArcRadius+n)+" 0 0 0 "+(i.leftFullExtent+n)+" "+i.verticalLeftInnerExtent+"L"+(i.leftFullExtent+n)+" "+(i.sourceY+i.leftSmallArcRadius)+"A"+(i.leftLargeArcRadius+n)+" "+(i.leftSmallArcRadius+n)+" 0 0 0 "+i.leftInnerExtent+" "+(i.sourceY-n)+"L"+i.sourceX+" "+(i.sourceY-n)+"L"+i.sourceX+" "+(i.sourceY+n)+"L"+i.leftInnerExtent+" "+(i.sourceY+n)+"A"+(i.leftLargeArcRadius-n)+" "+(i.leftSmallArcRadius-n)+" 0 0 1 "+(i.leftFullExtent-n)+" "+(i.sourceY+i.leftSmallArcRadius)+"L"+(i.leftFullExtent-n)+" "+i.verticalLeftInnerExtent+"A"+(i.leftLargeArcRadius-n)+" "+(i.leftLargeArcRadius-n)+" 0 0 1 "+i.leftInnerExtent+" "+(i.verticalFullExtent-n)+"L"+i.rightInnerExtent+" "+(i.verticalFullExtent-n)+"A"+(i.rightLargeArcRadius-n)+" "+(i.rightLargeArcRadius-n)+" 0 0 1 "+(i.rightFullExtent+n)+" "+i.verticalRightInnerExtent+"L"+(i.rightFullExtent+n)+" "+(i.targetY+i.rightSmallArcRadius)+"A"+(i.rightLargeArcRadius-n)+" "+(i.rightSmallArcRadius-n)+" 0 0 1 "+i.rightInnerExtent+" "+(i.targetY+n)+"L"+i.targetX+" "+(i.targetY+n)+"Z";var r,n,i,a=e.link.source.x1,o=e.link.target.x0,s=g(a,o),l=s(t),u=s(1-t),c=e.link.y0-e.link.width/2,f=e.link.y0+e.link.width/2,h=e.link.y1-e.link.width/2,p=e.link.y1+e.link.width/2;return"M"+a+","+c+"C"+l+","+c+" "+u+","+h+" "+o+","+h+"L"+o+","+p+"C"+u+","+p+" "+l+","+f+" "+a+","+f+"Z"}}function y(t){t.attr("transform",function(t){return"translate("+t.node.x0.toFixed(3)+", "+t.node.y0.toFixed(3)+")"})}function x(t){t.call(y)}function b(t,e){t.call(x),e.attr("d",v())}function _(t){t.attr("width",function(t){return t.node.x1-t.node.x0}).attr("height",function(t){return t.visibleHeight})}function w(t){return t.link.width>1||t.linkLineWidth>0}function A(t){return"translate("+t.translateX+","+t.translateY+")"+(t.horizontal?"matrix(1 0 0 1 0 0)":"matrix(0 1 1 0 0 0)")}function M(t){return"translate("+(t.horizontal?0:t.labelY)+" "+(t.horizontal?t.labelY:0)+")"}function k(t){return i.svg.line()([[t.horizontal?t.left?-t.sizeAcross:t.visibleWidth+n.nodeTextOffsetHorizontal:n.nodeTextOffsetHorizontal,0],[t.horizontal?t.left?-n.nodeTextOffsetHorizontal:t.sizeAcross:t.visibleHeight-n.nodeTextOffsetHorizontal,0]])}function T(t){return t.horizontal?"matrix(1 0 0 1 0 0)":"matrix(0 1 1 0 0 0)"}function E(t){return t.horizontal?"scale(1 1)":"scale(-1 1)"}function S(t){return t.darkBackground&&!t.horizontal?"rgb(255,255,255)":"rgb(0,0,0)"}function C(t){return t.horizontal&&t.left?"100%":"0%"}function L(t,e,r){t.on(".basic",null).on("mouseover.basic",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.hover(this,t,e),t.interactionState.hovered=[this,t])}).on("mousemove.basic",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.follow(this,t),t.interactionState.hovered=[this,t])}).on("mouseout.basic",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.unhover(this,t,e),t.interactionState.hovered=!1)}).on("click.basic",function(t){t.interactionState.hovered&&(r.unhover(this,t,e),t.interactionState.hovered=!1),t.interactionState.dragInProgress||t.partOfGroup||r.select(this,t,e)})}function O(t,e,r){var a=i.behavior.drag().origin(function(t){return{x:t.node.x0+t.visibleWidth/2,y:t.node.y0+t.visibleHeight/2}}).on("dragstart",function(i){if("fixed"!==i.arrangement&&(f.raiseToTop(this),i.interactionState.dragInProgress=i.node,z(i.node),i.interactionState.hovered&&(r.nodeEvents.unhover.apply(0,i.interactionState.hovered),i.interactionState.hovered=!1),"snap"===i.arrangement)){var a=i.traceId+"|"+i.key;i.forceLayouts[a]?i.forceLayouts[a].alpha(1):function(t,e,r){!function(t){for(var e=0;e0&&i.forceLayouts[e].alpha(0)}}(0,e,i,r)).stop()}(0,a,i),function(t,e,r,i){window.requestAnimationFrame(function a(){var o;for(o=0;o0&&window.requestAnimationFrame(a)})}(t,e,i,a)}}).on("drag",function(r){if("fixed"!==r.arrangement){var n=i.event.x,a=i.event.y;"snap"===r.arrangement?(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2,r.node.y0=a-r.visibleHeight/2,r.node.y1=a+r.visibleHeight/2):("freeform"===r.arrangement&&(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2),r.node.y0=Math.max(0,Math.min(r.size-r.visibleHeight,a)),r.node.y1=r.node.y0+r.visibleHeight),z(r.node),"snap"!==r.arrangement&&(r.sankey.update(r.graph),b(t.filter(D(r)),e))}}).on("dragend",function(t){t.interactionState.dragInProgress=!1;for(var e=0;e5?t.node.label:""}).attr("text-anchor",function(t){return t.horizontal&&t.left?"end":"start"}),j.transition().ease(n.ease).duration(n.duration).attr("startOffset",C).style("fill",S)}},{"../../components/color":713,"../../components/drawing":734,"../../lib":836,"../../lib/gup":834,"./constants":1181,"@plotly/d3-sankey":2,d3:108,"d3-force":99,"d3-interpolate":100,"d3-sankey-circular":103,tinycolor2:1376}],1186:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){for(var r=0;rs&&k[g].gap;)g--;for(y=k[g].s,d=k.length-1;d>g;d--)k[d].s=y;for(;sT[c]&&c=0;i--){var a=t[i];if("scatter"===a.type&&a.xaxis===r.xaxis&&a.yaxis===r.yaxis){a.opacity=void 0;break}}}}}},{}],1194:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../registry"),a=t("./attributes"),o=t("./constants"),s=t("./subtypes"),l=t("./xy_defaults"),u=t("./stack_defaults"),c=t("./marker_defaults"),f=t("./line_defaults"),h=t("./line_shape_defaults"),p=t("./text_defaults"),d=t("./fillcolor_defaults");e.exports=function(t,e,r,m){function g(r,i){return n.coerce(t,e,a,r,i)}var v=l(t,e,m,g);if(v||(e.visible=!1),e.visible){var y=u(t,e,m,g),x=!y&&vG!=(R=z[L][1])>=G&&(P=z[L-1][0],I=z[L][0],R-N&&(D=P+(I-P)*(G-N)/(R-N),V=Math.min(V,D),U=Math.max(U,D)));V=Math.max(V,0),U=Math.min(U,h._length);var W=s.defaultLine;return s.opacity(f.fillcolor)?W=f.fillcolor:s.opacity((f.line||{}).color)&&(W=f.line.color),n.extendFlat(t,{distance:t.maxHoverDistance,x0:V,x1:U,y0:G,y1:G,color:W,hovertemplate:"%{name}"}),delete t.index,f.text&&!Array.isArray(f.text)?t.text=String(f.text):t.text=f.name,[t]}}}},{"../../components/color":713,"../../components/fx":752,"../../lib":836,"../../registry":965,"./fill_hover_text":1195,"./get_trace_color":1197}],1199:[function(t,e,r){"use strict";var n={},i=t("./subtypes");n.hasLines=i.hasLines,n.hasMarkers=i.hasMarkers,n.hasText=i.hasText,n.isBubble=i.isBubble,n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.crossTraceDefaults=t("./cross_trace_defaults"),n.calc=t("./calc").calc,n.crossTraceCalc=t("./cross_trace_calc"),n.arraysToCalcdata=t("./arrays_to_calcdata"),n.plot=t("./plot"),n.colorbar=t("./marker_colorbar"),n.style=t("./style").style,n.styleOnSelect=t("./style").styleOnSelect,n.hoverPoints=t("./hover"),n.selectPoints=t("./select"),n.animatable=!0,n.moduleType="trace",n.name="scatter",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","svg","symbols","errorBarsOK","showLegend","scatter-like","zoomScale"],n.meta={},e.exports=n},{"../../plots/cartesian":895,"./arrays_to_calcdata":1186,"./attributes":1187,"./calc":1188,"./cross_trace_calc":1192,"./cross_trace_defaults":1193,"./defaults":1194,"./hover":1198,"./marker_colorbar":1205,"./plot":1207,"./select":1208,"./style":1210,"./subtypes":1211}],1200:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray,i=t("../../components/colorscale/helpers").hasColorscale,a=t("../../components/colorscale/defaults");e.exports=function(t,e,r,o,s,l){var u=(t.marker||{}).color;(s("line.color",r),i(t,"line"))?a(t,e,o,s,{prefix:"line.",cLetter:"c"}):s("line.color",!n(u)&&u||r);s("line.width"),(l||{}).noDash||s("line.dash")}},{"../../components/colorscale/defaults":723,"../../components/colorscale/helpers":724,"../../lib":836}],1201:[function(t,e,r){"use strict";var n=t("../../constants/numerical"),i=n.BADNUM,a=n.LOG_CLIP,o=a+.5,s=a-.5,l=t("../../lib"),u=l.segmentsIntersect,c=l.constrain,f=t("./constants");e.exports=function(t,e){var r,n,a,h,p,d,m,g,v,y,x,b,_,w,A,M,k,T,E=e.xaxis,S=e.yaxis,C="log"===E.type,L="log"===S.type,O=E._length,z=S._length,D=e.connectGaps,P=e.baseTolerance,I=e.shape,N="linear"===I,R=[],F=f.minTolerance,B=new Array(t.length),j=0;function V(e){var r=t[e];if(!r)return!1;var n=E.c2p(r.x),a=S.c2p(r.y);if(n===i){if(C&&(n=E.c2p(r.x,!0)),n===i)return!1;L&&a===i&&(n*=Math.abs(E._m*z*(E._m>0?o:s)/(S._m*O*(S._m>0?o:s)))),n*=1e3}if(a===i){if(L&&(a=S.c2p(r.y,!0)),a===i)return!1;a*=1e3}return[n,a]}function U(t,e,r,n){var i=r-t,a=n-e,o=.5-t,s=.5-e,l=i*i+a*a,u=i*o+a*s;if(u>0&&utt||t[1]rt)return[c(t[0],Q,tt),c(t[1],et,rt)]}function at(t,e){return t[0]===e[0]&&(t[0]===Q||t[0]===tt)||(t[1]===e[1]&&(t[1]===et||t[1]===rt)||void 0)}function ot(t,e,r){return function(n,i){var a=it(n),o=it(i),s=[];if(a&&o&&at(a,o))return s;a&&s.push(a),o&&s.push(o);var u=2*l.constrain((n[t]+i[t])/2,e,r)-((a||n)[t]+(o||i)[t]);u&&((a&&o?u>0==a[t]>o[t]?a:o:a||o)[t]+=u);return s}}function st(t){var e=t[0],r=t[1],n=e===B[j-1][0],i=r===B[j-1][1];if(!n||!i)if(j>1){var a=e===B[j-2][0],o=r===B[j-2][1];n&&(e===Q||e===tt)&&a?o?j--:B[j-1]=t:i&&(r===et||r===rt)&&o?a?j--:B[j-1]=t:B[j++]=t}else B[j++]=t}function lt(t){B[j-1][0]!==t[0]&&B[j-1][1]!==t[1]&&st([Y,Z]),st(t),X=null,Y=Z=0}function ut(t){if(k=t[0]/O,T=t[1]/z,G=t[0]tt?tt:0,W=t[1]rt?rt:0,G||W){if(j)if(X){var e=J(X,t);e.length>1&&(lt(e[0]),B[j++]=e[1])}else $=J(B[j-1],t)[0],B[j++]=$;else B[j++]=[G||t[0],W||t[1]];var r=B[j-1];G&&W&&(r[0]!==G||r[1]!==W)?(X&&(Y!==G&&Z!==W?st(Y&&Z?(n=X,a=(i=t)[0]-n[0],o=(i[1]-n[1])/a,(n[1]*i[0]-i[1]*n[0])/a>0?[o>0?Q:tt,rt]:[o>0?tt:Q,et]):[Y||G,Z||W]):Y&&Z&&st([Y,Z])),st([G,W])):Y-G&&Z-W&&st([G||Y,W||Z]),X=t,Y=G,Z=W}else X&<(J(X,t)[0]),B[j++]=t;var n,i,a,o}for("linear"===I||"spline"===I?J=function(t,e){for(var r=[],n=0,i=0;i<4;i++){var a=nt[i],o=u(t[0],t[1],e[0],e[1],a[0],a[1],a[2],a[3]);o&&(!n||Math.abs(o.x-r[0][0])>1||Math.abs(o.y-r[0][1])>1)&&(o=[o.x,o.y],n&&H(o,t)q(d,ct))break;a=d,(_=v[0]*g[0]+v[1]*g[1])>x?(x=_,h=d,m=!1):_=t.length||!d)break;ut(d),n=d}}else ut(h)}X&&st([Y||X[0],Z||X[1]]),R.push(B.slice(0,j))}return R}},{"../../constants/numerical":813,"../../lib":836,"./constants":1191}],1202:[function(t,e,r){"use strict";e.exports=function(t,e,r){"spline"===r("line.shape")&&r("line.smoothing")}},{}],1203:[function(t,e,r){"use strict";var n={tonextx:1,tonexty:1,tonext:1};e.exports=function(t,e,r){var i,a,o,s,l,u={},c=!1,f=-1,h=0,p=-1;for(a=0;a=0?l=p:(l=p=h,h++),l0?Math.max(e,i):0}}},{"fast-isnumeric":693}],1205:[function(t,e,r){"use strict";e.exports={container:"marker",min:"cmin",max:"cmax"}},{}],1206:[function(t,e,r){"use strict";var n=t("../../components/color"),i=t("../../components/colorscale/helpers").hasColorscale,a=t("../../components/colorscale/defaults"),o=t("./subtypes");e.exports=function(t,e,r,s,l,u){var c=o.isBubble(t),f=(t.line||{}).color;(u=u||{},f&&(r=f),l("marker.symbol"),l("marker.opacity",c?.7:1),l("marker.size"),l("marker.color",r),i(t,"marker")&&a(t,e,s,l,{prefix:"marker.",cLetter:"c"}),u.noSelect||(l("selected.marker.color"),l("unselected.marker.color"),l("selected.marker.size"),l("unselected.marker.size")),u.noLine||(l("marker.line.color",f&&!Array.isArray(f)&&e.marker.color!==f?f:c?n.background:n.defaultLine),i(t,"marker.line")&&a(t,e,s,l,{prefix:"marker.line.",cLetter:"c"}),l("marker.line.width",c?1:0)),c&&(l("marker.sizeref"),l("marker.sizemin"),l("marker.sizemode")),u.gradient)&&("none"!==l("marker.gradient.type")&&l("marker.gradient.color"))}},{"../../components/color":713,"../../components/colorscale/defaults":723,"../../components/colorscale/helpers":724,"./subtypes":1211}],1207:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../registry"),a=t("../../lib"),o=a.ensureSingle,s=a.identity,l=t("../../components/drawing"),u=t("./subtypes"),c=t("./line_points"),f=t("./link_traces"),h=t("../../lib/polygon").tester;function p(t,e,r,f,p,d,m){var g;!function(t,e,r,i,o){var s=r.xaxis,l=r.yaxis,c=n.extent(a.simpleMap(s.range,s.r2c)),f=n.extent(a.simpleMap(l.range,l.r2c)),h=i[0].trace;if(!u.hasMarkers(h))return;var p=h.marker.maxdisplayed;if(0===p)return;var d=i.filter(function(t){return t.x>=c[0]&&t.x<=c[1]&&t.y>=f[0]&&t.y<=f[1]}),m=Math.ceil(d.length/p),g=0;o.forEach(function(t,r){var n=t[0].trace;u.hasMarkers(n)&&n.marker.maxdisplayed>0&&r0;function y(t){return v?t.transition():t}var x=r.xaxis,b=r.yaxis,_=f[0].trace,w=_.line,A=n.select(d),M=o(A,"g","errorbars"),k=o(A,"g","lines"),T=o(A,"g","points"),E=o(A,"g","text");if(i.getComponentMethod("errorbars","plot")(t,M,r,m),!0===_.visible){var S,C;y(A).style("opacity",_.opacity);var L=_.fill.charAt(_.fill.length-1);"x"!==L&&"y"!==L&&(L=""),r.isRangePlot||(f[0].node3=A);var O,z,D="",P=[],I=_._prevtrace;I&&(D=I._prevRevpath||"",C=I._nextFill,P=I._polygons);var N,R,F,B,j,V,U,q="",H="",G=[],W=a.noop;if(S=_._ownFill,u.hasLines(_)||"none"!==_.fill){for(C&&C.datum(f),-1!==["hv","vh","hvh","vhv"].indexOf(w.shape)?(N=l.steps(w.shape),R=l.steps(w.shape.split("").reverse().join(""))):N=R="spline"===w.shape?function(t){var e=t[t.length-1];return t.length>1&&t[0][0]===e[0]&&t[0][1]===e[1]?l.smoothclosed(t.slice(1),w.smoothing):l.smoothopen(t,w.smoothing)}:function(t){return"M"+t.join("L")},F=function(t){return R(t.reverse())},G=c(f,{xaxis:x,yaxis:b,connectGaps:_.connectgaps,baseTolerance:Math.max(w.width||1,3)/4,shape:w.shape,simplify:w.simplify}),U=_._polygons=new Array(G.length),g=0;g1){var r=n.select(this);if(r.datum(f),t)y(r.style("opacity",0).attr("d",O).call(l.lineGroupStyle)).style("opacity",1);else{var i=y(r);i.attr("d",O),l.singleLineStyle(f,i)}}}}}var Y=k.selectAll(".js-line").data(G);y(Y.exit()).style("opacity",0).remove(),Y.each(W(!1)),Y.enter().append("path").classed("js-line",!0).style("vector-effect","non-scaling-stroke").call(l.lineGroupStyle).each(W(!0)),l.setClipUrl(Y,r.layerClipId,t),G.length?(S?(S.datum(f),B&&V&&(L?("y"===L?B[1]=V[1]=b.c2p(0,!0):"x"===L&&(B[0]=V[0]=x.c2p(0,!0)),y(S).attr("d","M"+V+"L"+B+"L"+q.substr(1)).call(l.singleFillStyle)):y(S).attr("d",q+"Z").call(l.singleFillStyle))):C&&("tonext"===_.fill.substr(0,6)&&q&&D?("tonext"===_.fill?y(C).attr("d",q+"Z"+D+"Z").call(l.singleFillStyle):y(C).attr("d",q+"L"+D.substr(1)+"Z").call(l.singleFillStyle),_._polygons=_._polygons.concat(P)):(X(C),_._polygons=null)),_._prevRevpath=H,_._prevPolygons=U):(S?X(S):C&&X(C),_._polygons=_._prevRevpath=_._prevPolygons=null),T.datum(f),E.datum(f),function(e,i,a){var o,c=a[0].trace,f=u.hasMarkers(c),h=u.hasText(c),p=tt(c),d=et,m=et;if(f||h){var g=s,_=c.stackgroup,w=_&&"infer zero"===t._fullLayout._scatterStackOpts[x._id+b._id][_].stackgaps;c.marker.maxdisplayed||c._needsCull?g=w?J:$:_&&!w&&(g=K),f&&(d=g),h&&(m=g)}var A,M=(o=e.selectAll("path.point").data(d,p)).enter().append("path").classed("point",!0);v&&M.call(l.pointStyle,c,t).call(l.translatePoints,x,b).style("opacity",0).transition().style("opacity",1),o.order(),f&&(A=l.makePointStyleFns(c)),o.each(function(e){var i=n.select(this),a=y(i);l.translatePoint(e,a,x,b)?(l.singlePointStyle(e,a,c,A,t),r.layerClipId&&l.hideOutsideRangePoint(e,a,x,b,c.xcalendar,c.ycalendar),c.customdata&&i.classed("plotly-customdata",null!==e.data&&void 0!==e.data)):a.remove()}),v?o.exit().transition().style("opacity",0).remove():o.exit().remove(),(o=i.selectAll("g").data(m,p)).enter().append("g").classed("textpoint",!0).append("text"),o.order(),o.each(function(t){var e=n.select(this),i=y(e.select("text"));l.translatePoint(t,i,x,b)?r.layerClipId&&l.hideOutsideRangePoint(t,e,x,b,c.xcalendar,c.ycalendar):e.remove()}),o.selectAll("text").call(l.textPointStyle,c,t).each(function(t){var e=x.c2p(t.x),r=b.c2p(t.y);n.select(this).selectAll("tspan.line").each(function(){y(n.select(this)).attr({x:e,y:r})})}),o.exit().remove()}(T,E,f);var Z=!1===_.cliponaxis?null:r.layerClipId;l.setClipUrl(T,Z,t),l.setClipUrl(E,Z,t)}function X(t){y(t).attr("d","M0,0Z")}function $(t){return t.filter(function(t){return!t.gap&&t.vis})}function J(t){return t.filter(function(t){return t.vis})}function K(t){return t.filter(function(t){return!t.gap})}function Q(t){return t.id}function tt(t){if(t.ids)return Q}function et(){return!1}}e.exports=function(t,e,r,i,a,u){var c,h,d=!a,m=!!a&&a.duration>0,g=f(t,e,r);((c=i.selectAll("g.trace").data(g,function(t){return t[0].trace.uid})).enter().append("g").attr("class",function(t){return"trace scatter trace"+t[0].trace.uid}).style("stroke-miterlimit",2),c.order(),function(t,e,r){e.each(function(e){var i=o(n.select(this),"g","fills");l.setClipUrl(i,r.layerClipId,t);var a=e[0].trace,u=[];a._ownfill&&u.push("_ownFill"),a._nexttrace&&u.push("_nextFill");var c=i.selectAll("g").data(u,s);c.enter().append("g"),c.exit().each(function(t){a[t]=null}).remove(),c.order().each(function(t){a[t]=o(n.select(this),"path","js-fill")})})}(t,c,e),m)?(u&&(h=u()),n.transition().duration(a.duration).ease(a.easing).each("end",function(){h&&h()}).each("interrupt",function(){h&&h()}).each(function(){i.selectAll("g.trace").each(function(r,n){p(t,n,e,r,g,this,a)})})):c.each(function(r,n){p(t,n,e,r,g,this,a)});d&&c.exit().remove(),i.selectAll("path:not([d])").remove()}},{"../../components/drawing":734,"../../lib":836,"../../lib/polygon":848,"../../registry":965,"./line_points":1201,"./link_traces":1203,"./subtypes":1211,d3:108}],1208:[function(t,e,r){"use strict";var n=t("./subtypes");e.exports=function(t,e){var r,i,a,o,s=t.cd,l=t.xaxis,u=t.yaxis,c=[],f=s[0].trace;if(!n.hasMarkers(f)&&!n.hasText(f))return[];if(!1===e)for(r=0;r0){var h=i.c2l(c);i._lowerLogErrorBound||(i._lowerLogErrorBound=h),i._lowerErrorBound=Math.min(i._lowerLogErrorBound,h)}}else o[s]=[-l[0]*r,l[1]*r]}return o}e.exports=function(t,e,r){var n=[i(t.x,t.error_x,e[0],r.xaxis),i(t.y,t.error_y,e[1],r.yaxis),i(t.z,t.error_z,e[2],r.zaxis)],a=function(t){for(var e=0;e-1?-1:t.indexOf("right")>-1?1:0}function y(t){return null==t?0:t.indexOf("top")>-1?-1:t.indexOf("bottom")>-1?1:0}function x(t,e){return e(4*t)}function b(t){return p[t]}function _(t,e,r,n,i){var a=null;if(l.isArrayOrTypedArray(t)){a=[];for(var o=0;o=0){var m=function(t,e,r){var n,i=(r+1)%3,a=(r+2)%3,o=[],l=[];for(n=0;n=0&&f("surfacecolor",h||p);for(var d=["x","y","z"],m=0;m<3;++m){var g="projection."+d[m];f(g+".show")&&(f(g+".opacity"),f(g+".scale"))}var v=n.getComponentMethod("errorbars","supplyDefaults");v(t,e,h||p||r,{axis:"z"}),v(t,e,h||p||r,{axis:"y",inherit:"z"}),v(t,e,h||p||r,{axis:"x",inherit:"z"})}else e.visible=!1}},{"../../lib":836,"../../registry":965,"../scatter/line_defaults":1200,"../scatter/marker_defaults":1206,"../scatter/subtypes":1211,"../scatter/text_defaults":1212,"./attributes":1214}],1219:[function(t,e,r){"use strict";var n={};n.plot=t("./convert"),n.attributes=t("./attributes"),n.markerSymbols=t("../../constants/gl3d_markers"),n.supplyDefaults=t("./defaults"),n.colorbar=[{container:"marker",min:"cmin",max:"cmax"},{container:"line",min:"cmin",max:"cmax"}],n.calc=t("./calc"),n.moduleType="trace",n.name="scatter3d",n.basePlotModule=t("../../plots/gl3d"),n.categories=["gl3d","symbols","showLegend"],n.meta={},e.exports=n},{"../../constants/gl3d_markers":811,"../../plots/gl3d":925,"./attributes":1214,"./calc":1215,"./convert":1217,"./defaults":1218}],1220:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),i=t("../../plots/attributes"),a=t("../../components/fx/hovertemplate_attributes"),o=t("../../components/colorscale/attributes"),s=t("../../components/colorbar/attributes"),l=t("../../lib/extend").extendFlat,u=n.marker,c=n.line,f=u.line;e.exports={carpet:{valType:"string",editType:"calc"},a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},mode:l({},n.mode,{dflt:"markers"}),text:l({},n.text,{}),hovertext:l({},n.hovertext,{}),line:{color:c.color,width:c.width,dash:c.dash,shape:l({},c.shape,{values:["linear","spline"]}),smoothing:c.smoothing,editType:"calc"},connectgaps:n.connectgaps,fill:l({},n.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:n.fillcolor,marker:l({symbol:u.symbol,opacity:u.opacity,maxdisplayed:u.maxdisplayed,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,line:l({width:f.width,editType:"calc"},o("marker.line")),gradient:u.gradient,editType:"calc"},o("marker"),{colorbar:s}),textfont:n.textfont,textposition:n.textposition,selected:n.selected,unselected:n.unselected,hoverinfo:l({},i.hoverinfo,{flags:["a","b","text","name"]}),hoveron:n.hoveron,hovertemplate:a()}},{"../../components/colorbar/attributes":714,"../../components/colorscale/attributes":720,"../../components/fx/hovertemplate_attributes":751,"../../lib/extend":826,"../../plots/attributes":881,"../scatter/attributes":1187}],1221:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../scatter/colorscale_calc"),a=t("../scatter/arrays_to_calcdata"),o=t("../scatter/calc_selection"),s=t("../scatter/calc").calcMarkerSize,l=t("../carpet/lookup_carpetid");e.exports=function(t,e){var r=e._carpetTrace=l(t,e);if(r&&r.visible&&"legendonly"!==r.visible){var u;e.xaxis=r.xaxis,e.yaxis=r.yaxis;var c,f,h=e._length,p=new Array(h),d=!1;for(u=0;u")}return o}function A(t,e){var r;r=t.labelprefix&&t.labelprefix.length>0?t.labelprefix.replace(/ = $/,""):t._hovertitle,_.push(r+": "+e.toFixed(3)+t.labelsuffix)}}},{"../scatter/fill_hover_text":1195,"../scatter/hover":1198}],1225:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../scatter/marker_colorbar"),n.calc=t("./calc"),n.plot=t("./plot"),n.style=t("../scatter/style").style,n.styleOnSelect=t("../scatter/style").styleOnSelect,n.hoverPoints=t("./hover"),n.selectPoints=t("../scatter/select"),n.eventData=t("./event_data"),n.moduleType="trace",n.name="scattercarpet",n.basePlotModule=t("../../plots/cartesian"),n.categories=["svg","carpet","symbols","showLegend","carpetDependent","zoomScale"],n.meta={},e.exports=n},{"../../plots/cartesian":895,"../scatter/marker_colorbar":1205,"../scatter/select":1208,"../scatter/style":1210,"./attributes":1220,"./calc":1221,"./defaults":1222,"./event_data":1223,"./hover":1224,"./plot":1226}],1226:[function(t,e,r){"use strict";var n=t("../scatter/plot"),i=t("../../plots/cartesian/axes"),a=t("../../components/drawing");e.exports=function(t,e,r,o){var s,l,u,c=r[0][0].carpet,f={xaxis:i.getFromId(t,c.xaxis||"x"),yaxis:i.getFromId(t,c.yaxis||"y"),plot:e.plot};for(n(t,f,r,o),s=0;s")}(c,g,p.mockAxis,u[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}}},{"../../components/fx":752,"../../constants/numerical":813,"../../plots/cartesian/axes":884,"../scatter/fill_hover_text":1195,"../scatter/get_trace_color":1197,"./attributes":1227}],1232:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../scatter/marker_colorbar"),n.calc=t("./calc"),n.plot=t("./plot"),n.style=t("./style"),n.styleOnSelect=t("../scatter/style").styleOnSelect,n.hoverPoints=t("./hover"),n.eventData=t("./event_data"),n.selectPoints=t("./select"),n.moduleType="trace",n.name="scattergeo",n.basePlotModule=t("../../plots/geo"),n.categories=["geo","symbols","showLegend","scatter-like"],n.meta={},e.exports=n},{"../../plots/geo":914,"../scatter/marker_colorbar":1205,"../scatter/style":1210,"./attributes":1227,"./calc":1228,"./defaults":1229,"./event_data":1230,"./hover":1231,"./plot":1233,"./select":1234,"./style":1235}],1233:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../lib"),a=t("../../constants/numerical").BADNUM,o=t("../../lib/topojson_utils").getTopojsonFeatures,s=t("../../lib/geo_location_utils").locationToFeature,l=t("../../lib/geojson_utils"),u=t("../scatter/subtypes"),c=t("./style");function f(t,e){var r=t[0].trace;if(Array.isArray(r.locations))for(var n=o(r,e),i=r.locationmode,l=0;lp.TOO_MANY_POINTS?"rect":f.hasMarkers(e)?"rect":"round";if(u&&e.connectgaps){var h=n[0],d=n[1];for(i=0;i1?l[i]:l[0]:l,d=Array.isArray(u)?u.length>1?u[i]:u[0]:u,g=m[p],v=m[d],y=c?c/.8+1:0,x=-v*y-.5*v;o.offset[i]=[g*y/h,x/h]}}return o}}},{"../../components/drawing":734,"../../constants/interactions":812,"../../lib":836,"../../lib/gl_format_color":833,"../../plots/cartesian/axis_ids":887,"../../registry":965,"../scatter/make_bubble_size_func":1204,"../scatter/subtypes":1211,"./constants":1237,"color-normalize":60,"fast-isnumeric":693,"svg-path-sdf":1373}],1239:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../registry"),a=t("./attributes"),o=t("../scatter/constants"),s=t("../scatter/subtypes"),l=t("../scatter/xy_defaults"),u=t("../scatter/marker_defaults"),c=t("../scatter/line_defaults"),f=t("../scatter/fillcolor_defaults"),h=t("../scatter/text_defaults");e.exports=function(t,e,r,p){function d(r,i){return n.coerce(t,e,a,r,i)}var m=!!t.marker&&/-open/.test(t.marker.symbol),g=s.isBubble(t),v=l(t,e,p,d);if(v){var y=v=T,d=2*f,m={},g=s.makeCalcdata(e,"x"),_=l.makeCalcdata(e,"y"),w=new Array(d);for(r=0;r1&&c.extendFlat(o.line,M.linePositions(t,r,n)),o.errorX||o.errorY){var s=M.errorBarPositions(t,r,n,i,a);o.errorX&&c.extendFlat(o.errorX,s.x),o.errorY&&c.extendFlat(o.errorY,s.y)}return o.text&&(c.extendFlat(o.text,{positions:n},M.textPosition(t,r,o.text,o.marker)),c.extendFlat(o.textSel,{positions:n},M.textPosition(t,r,o.text,o.markerSel)),c.extendFlat(o.textUnsel,{positions:n},M.textPosition(t,r,o.text,o.markerUnsel))),o}(t,0,e,w,g,_),O=C(0,u);return x(a,e),p?L.marker&&(E=2*(L.marker.sizeAvg||Math.max(L.marker.size,3))):E=v(e,f),y(t,e,s,l,g,_,E),L.errorX&&S(e,s,L.errorX),L.errorY&&S(e,l,L.errorY),L.fill&&!O.fill2d&&(O.fill2d=!0),L.marker&&!O.scatter2d&&(O.scatter2d=!0),L.line&&!O.line2d&&(O.line2d=!0),!L.errorX&&!L.errorY||O.error2d||(O.error2d=!0),L.text&&!O.glText&&(O.glText=!0),L.marker&&(L.marker.snap=m.tree||T),O.lineOptions.push(L.line),O.errorXOptions.push(L.errorX),O.errorYOptions.push(L.errorY),O.fillOptions.push(L.fill),O.markerOptions.push(L.marker),O.markerSelectedOptions.push(L.markerSel),O.markerUnselectedOptions.push(L.markerUnsel),O.textOptions.push(L.text),O.textSelectedOptions.push(L.textSel),O.textUnselectedOptions.push(L.textUnsel),m._scene=O,m.index=O.count,m.x=g,m.y=_,m.positions=w,O.count++,[{x:!1,y:!1,t:m,trace:e}]},plot:function(t,e,r){if(r.length){var o,s,u=t._fullLayout,h=e._scene,p=e.xaxis,d=e.yaxis;if(h)if(f(t,["ANGLE_instanced_arrays","OES_element_index_uint"])){var g=u._glcanvas.data()[0].regl;if(_(t,e,r),h.dirty){if(!0===h.error2d&&(h.error2d=a(g)),!0===h.line2d&&(h.line2d=i(g)),!0===h.scatter2d&&(h.scatter2d=n(g)),!0===h.fill2d&&(h.fill2d=i(g)),!0===h.glText)for(h.glText=new Array(h.count),o=0;oh.glText.length){var v=h.count-h.glText.length;for(o=0;or&&(isNaN(e[n])||isNaN(e[n+1]));)n-=2;t.positions=e.slice(r,n+2)}return t}),h.line2d.update(h.lineOptions)),h.error2d){var x=(h.errorXOptions||[]).concat(h.errorYOptions||[]);h.error2d.update(x)}h.scatter2d&&h.scatter2d.update(h.markerOptions),h.fillOrder=c.repeat(null,h.count),h.fill2d&&(h.fillOptions=h.fillOptions.map(function(t,e){var n=r[e];if(t&&n&&n[0]&&n[0].trace){var i,a,o=n[0],s=o.trace,l=o.t,u=h.lineOptions[e],c=[];s._ownfill&&c.push(e),s._nexttrace&&c.push(e+1),c.length&&(h.fillOrder[e]=c);var f,p,d=[],m=u&&u.positions||l.positions;if("tozeroy"===s.fill){for(f=0;ff&&isNaN(m[p+1]);)p-=2;0!==m[f+1]&&(d=[m[f],0]),d=d.concat(m.slice(f,p+2)),0!==m[p+1]&&(d=d.concat([m[p],0]))}else if("tozerox"===s.fill){for(f=0;ff&&isNaN(m[p]);)p-=2;0!==m[f]&&(d=[0,m[f+1]]),d=d.concat(m.slice(f,p+2)),0!==m[p]&&(d=d.concat([0,m[p+1]]))}else if("toself"===s.fill||"tonext"===s.fill){for(d=[],i=0,a=0;a-1;for(o=0;o=0?Math.floor((e+180)/360):Math.ceil((e-180)/360)),d=e-p;if(n.getClosest(l,function(t){var e=t.lonlat;if(e[0]===s)return 1/0;var n=i.modHalf(e[0],360),a=e[1],o=h.project([n,a]),l=o.x-c.c2p([d,a]),u=o.y-f.c2p([n,r]),p=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(l*l+u*u)-p,1-3/p)},t),!1!==t.index){var m=l[t.index],g=m.lonlat,v=[i.modHalf(g[0],360)+p,g[1]],y=c.c2p(v),x=f.c2p(v),b=m.mrc||1;return t.x0=y-b,t.x1=y+b,t.y0=x-b,t.y1=x+b,t.color=a(u,m),t.extraText=function(t,e,r){if(t.hovertemplate)return;var n=(e.hi||t.hoverinfo).split("+"),i=-1!==n.indexOf("all"),a=-1!==n.indexOf("lon"),s=-1!==n.indexOf("lat"),l=e.lonlat,u=[];function c(t){return t+"\xb0"}i||a&&s?u.push("("+c(l[0])+", "+c(l[1])+")"):a?u.push(r.lon+c(l[0])):s&&u.push(r.lat+c(l[1]));(i||-1!==n.indexOf("text"))&&o(e,t,u);return u.join("
")}(u,m,l[0].t.labels),t.hovertemplate=u.hovertemplate,[t]}}},{"../../components/fx":752,"../../constants/numerical":813,"../../lib":836,"../scatter/fill_hover_text":1195,"../scatter/get_trace_color":1197}],1246:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../scatter/marker_colorbar"),n.calc=t("../scattergeo/calc"),n.plot=t("./plot"),n.hoverPoints=t("./hover"),n.eventData=t("./event_data"),n.selectPoints=t("./select"),n.style=function(t,e){e&&e[0].trace._glTrace.update(e)},n.moduleType="trace",n.name="scattermapbox",n.basePlotModule=t("../../plots/mapbox"),n.categories=["mapbox","gl","symbols","showLegend","scatterlike"],n.meta={},e.exports=n},{"../../plots/mapbox":940,"../scatter/marker_colorbar":1205,"../scattergeo/calc":1228,"./attributes":1241,"./defaults":1243,"./event_data":1244,"./hover":1245,"./plot":1247,"./select":1248}],1247:[function(t,e,r){"use strict";var n=t("./convert");function i(t,e){this.subplot=t,this.uid=e,this.sourceIds={fill:e+"-source-fill",line:e+"-source-line",circle:e+"-source-circle",symbol:e+"-source-symbol"},this.layerIds={fill:e+"-layer-fill",line:e+"-layer-line",circle:e+"-layer-circle",symbol:e+"-layer-symbol"},this.order=["fill","line","circle","symbol"]}var a=i.prototype;a.addSource=function(t,e){this.subplot.map.addSource(this.sourceIds[t],{type:"geojson",data:e.geojson})},a.setSourceData=function(t,e){this.subplot.map.getSource(this.sourceIds[t]).setData(e.geojson)},a.addLayer=function(t,e){this.subplot.map.addLayer({type:t,id:this.layerIds[t],source:this.sourceIds[t],layout:e.layout,paint:e.paint})},a.update=function(t){for(var e=this.subplot,r=n(t),i=0;i")}}e.exports={hoverPoints:function(t,e,r,i){var a=n(t,e,r,i);if(a&&!1!==a[0].index){var s=a[0];if(void 0===s.index)return a;var l=t.subplot,u=s.cd[s.index],c=s.trace;if(l.isPtInside(u))return s.xLabelVal=void 0,s.yLabelVal=void 0,o(u,c,l,s),s.hovertemplate=c.hovertemplate,a}},makeHoverPointText:o}},{"../../lib":836,"../../plots/cartesian/axes":884,"../scatter/hover":1198}],1253:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"scatterpolar",basePlotModule:t("../../plots/polar"),categories:["polar","symbols","showLegend","scatter-like"],attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,colorbar:t("../scatter/marker_colorbar"),calc:t("./calc"),plot:t("./plot"),style:t("../scatter/style").style,hoverPoints:t("./hover").hoverPoints,selectPoints:t("../scatter/select"),meta:{}}},{"../../plots/polar":949,"../scatter/marker_colorbar":1205,"../scatter/select":1208,"../scatter/style":1210,"./attributes":1249,"./calc":1250,"./defaults":1251,"./hover":1252,"./plot":1254}],1254:[function(t,e,r){"use strict";var n=t("../scatter/plot"),i=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r){for(var a=e.layers.frontplot.select("g.scatterlayer"),o={xaxis:e.xaxis,yaxis:e.yaxis,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},s=e.radialAxis,l=e.angularAxis,u=0;u=h&&(y.marker.cluster=d.tree),y.marker&&(y.markerSel.positions=y.markerUnsel.positions=y.marker.positions=_),y.line&&_.length>1&&u.extendFlat(y.line,l.linePositions(t,p,_)),y.text&&(u.extendFlat(y.text,{positions:_},l.textPosition(t,p,y.text,y.marker)),u.extendFlat(y.textSel,{positions:_},l.textPosition(t,p,y.text,y.markerSel)),u.extendFlat(y.textUnsel,{positions:_},l.textPosition(t,p,y.text,y.markerUnsel))),y.fill&&!c.fill2d&&(c.fill2d=!0),y.marker&&!c.scatter2d&&(c.scatter2d=!0),y.line&&!c.line2d&&(c.line2d=!0),y.text&&!c.glText&&(c.glText=!0),c.lineOptions.push(y.line),c.fillOptions.push(y.fill),c.markerOptions.push(y.marker),c.markerSelectedOptions.push(y.markerSel),c.markerUnselectedOptions.push(y.markerUnsel),c.textOptions.push(y.text),c.textSelectedOptions.push(y.textSel),c.textUnselectedOptions.push(y.textUnsel),d.x=w,d.y=A,d.rawx=w,d.rawy=A,d.r=g,d.theta=v,d.positions=_,d._scene=c,d.index=c.count,c.count++}}),a.plot(t,e,r)}},hoverPoints:function(t,e,r,n){var i=t.cd[0].t,o=i.r,s=i.theta,l=a.hoverPoints(t,e,r,n);if(l&&!1!==l[0].index){var u=l[0];if(void 0===u.index)return l;var c=t.subplot,h=u.cd[u.index],p=u.trace;if(h.r=o[u.index],h.theta=s[u.index],c.isPtInside(h))return u.xLabelVal=void 0,u.yLabelVal=void 0,f(h,p,c,u),l}},selectPoints:a.selectPoints,meta:{}}},{"../../lib":836,"../../plots/cartesian/axes":884,"../../plots/polar":949,"../scatter/calc":1188,"../scatter/colorscale_calc":1190,"../scatter/marker_colorbar":1205,"../scattergl":1240,"../scattergl/constants":1237,"../scattergl/convert":1238,"../scatterpolar/hover":1252,"./attributes":1255,"./defaults":1256,"fast-isnumeric":693,"point-cluster":1304}],1258:[function(t,e,r){"use strict";var n=t("../../components/fx/hovertemplate_attributes"),i=t("../scatter/attributes"),a=t("../../plots/attributes"),o=t("../../components/colorscale/attributes"),s=t("../../components/colorbar/attributes"),l=t("../../components/drawing/attributes").dash,u=t("../../lib/extend").extendFlat,c=i.marker,f=i.line,h=c.line;e.exports={a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},c:{valType:"data_array",editType:"calc"},sum:{valType:"number",dflt:0,min:0,editType:"calc"},mode:u({},i.mode,{dflt:"markers"}),text:u({},i.text,{}),hovertext:u({},i.hovertext,{}),line:{color:f.color,width:f.width,dash:l,shape:u({},f.shape,{values:["linear","spline"]}),smoothing:f.smoothing,editType:"calc"},connectgaps:i.connectgaps,cliponaxis:i.cliponaxis,fill:u({},i.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:i.fillcolor,marker:u({symbol:c.symbol,opacity:c.opacity,maxdisplayed:c.maxdisplayed,size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,line:u({width:h.width,editType:"calc"},o("marker.line")),gradient:c.gradient,editType:"calc"},o("marker"),{colorbar:s}),textfont:i.textfont,textposition:i.textposition,selected:i.selected,unselected:i.unselected,hoverinfo:u({},a.hoverinfo,{flags:["a","b","c","text","name"]}),hoveron:i.hoveron,hovertemplate:n()}},{"../../components/colorbar/attributes":714,"../../components/colorscale/attributes":720,"../../components/drawing/attributes":733,"../../components/fx/hovertemplate_attributes":751,"../../lib/extend":826,"../../plots/attributes":881,"../scatter/attributes":1187}],1259:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../scatter/colorscale_calc"),a=t("../scatter/arrays_to_calcdata"),o=t("../scatter/calc_selection"),s=t("../scatter/calc").calcMarkerSize,l=["a","b","c"],u={a:["b","c"],b:["a","c"],c:["a","b"]};e.exports=function(t,e){var r,c,f,h,p,d,m=t._fullLayout[e.subplot].sum,g=e.sum||m,v={a:e.a,b:e.b,c:e.c};for(r=0;r"),s.hovertemplate=p.hovertemplate,o}function y(t,e){g.push(t._hovertitle+": "+i.tickText(t,e,"hover").text)}}},{"../../plots/cartesian/axes":884,"../scatter/hover":1198}],1263:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../scatter/marker_colorbar"),n.calc=t("./calc"),n.plot=t("./plot"),n.style=t("../scatter/style").style,n.styleOnSelect=t("../scatter/style").styleOnSelect,n.hoverPoints=t("./hover"),n.selectPoints=t("../scatter/select"),n.eventData=t("./event_data"),n.moduleType="trace",n.name="scatterternary",n.basePlotModule=t("../../plots/ternary"),n.categories=["ternary","symbols","showLegend","scatter-like"],n.meta={},e.exports=n},{"../../plots/ternary":961,"../scatter/marker_colorbar":1205,"../scatter/select":1208,"../scatter/style":1210,"./attributes":1258,"./calc":1259,"./defaults":1260,"./event_data":1261,"./hover":1262,"./plot":1264}],1264:[function(t,e,r){"use strict";var n=t("../scatter/plot");e.exports=function(t,e,r){var i=e.plotContainer;i.select(".scatterlayer").selectAll("*").remove();var a={xaxis:e.xaxis,yaxis:e.yaxis,plot:i,layerClipId:e._hasClipOnAxisFalse?e.clipIdRelative:null},o=e.layers.frontplot.select("g.scatterlayer");n(t,a,r,o)}},{"../scatter/plot":1207}],1265:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),i=t("../../components/colorscale/attributes"),a=t("../../components/fx/hovertemplate_attributes"),o=t("../scattergl/attributes"),s=t("../../plots/cartesian/constants").idRegex,l=t("../../plot_api/plot_template").templatedArray,u=t("../../lib/extend").extendFlat,c=n.marker,f=c.line,h=u(i("marker.line",{editTypeOverride:"calc"}),{width:u({},f.width,{editType:"calc"}),editType:"calc"}),p=u(i("marker"),{symbol:c.symbol,size:u({},c.size,{editType:"markerSize"}),sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,opacity:c.opacity,colorbar:c.colorbar,line:h,editType:"calc"});function d(t){return{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"subplotid",regex:s[t],editType:"plot"}}}p.color.editType=p.cmin.editType=p.cmax.editType="style",e.exports={dimensions:l("dimension",{visible:{valType:"boolean",dflt:!0,editType:"calc"},label:{valType:"string",editType:"calc"},values:{valType:"data_array",editType:"calc+clearAxisTypes"},axis:{type:{valType:"enumerated",values:["linear","log","date","category"],editType:"calc+clearAxisTypes"},matches:{valType:"boolean",dflt:!1,editType:"calc"},editType:"calc+clearAxisTypes"},editType:"calc+clearAxisTypes"}),text:u({},o.text,{}),hovertext:u({},o.hovertext,{}),hovertemplate:a(),marker:p,xaxes:d("x"),yaxes:d("y"),diagonal:{visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"},showupperhalf:{valType:"boolean",dflt:!0,editType:"calc"},showlowerhalf:{valType:"boolean",dflt:!0,editType:"calc"},selected:{marker:o.selected.marker,editType:"calc"},unselected:{marker:o.unselected.marker,editType:"calc"},opacity:o.opacity}},{"../../components/colorscale/attributes":720,"../../components/fx/hovertemplate_attributes":751,"../../lib/extend":826,"../../plot_api/plot_template":874,"../../plots/cartesian/constants":890,"../scatter/attributes":1187,"../scattergl/attributes":1236}],1266:[function(t,e,r){"use strict";var n=t("regl-line2d"),i=t("../../registry"),a=t("../../lib/prepare_regl"),o=t("../../plots/get_data").getModuleCalcData,s=t("../../plots/cartesian"),l=t("../../plots/cartesian/axis_ids").getFromId,u=t("../../plots/cartesian/axes").shouldShowZeroLine,c="splom";function f(t,e,r){for(var n=r.matrixOptions.data.length,i=e._visibleDims,a=r.viewOpts.ranges=new Array(n),o=0;oa&&l?r._splomSubplots[E]=1:i-1,k="lasso"===y||"select"===y||!!h.selectedpoints||M;if(d.selectBatch=null,d.unselectBatch=null,k){var T=h._length;if(d.selectBatch||(d.selectBatch=[],d.unselectBatch=[]),h.selectedpoints){d.selectBatch=h.selectedpoints;var E=h.selectedpoints,S={};for(a=0;av?2*(x.sizeAvg||Math.max(x.size,3)):c(e,y),n=0;n2?t.slice(1,e-1):2===e?[(t[0]+t[1])/2]:t}function p(t){var e=t.length;return 1===e?[.5,.5]:[t[1]-t[0],t[e-1]-t[e-2]]}function d(t,e){var r=t.fullSceneLayout,i=t.dataScale,u=e._len,c={};function d(t,e){var n=r[e],o=i[l[e]];return a.simpleMap(t,function(t){return n.d2l(t)*o})}c.vectors=s(d(e.u,"xaxis"),d(e.v,"yaxis"),d(e.w,"zaxis"),u);var m=f(e.x.slice(0,u)),g=f(e.y.slice(0,u)),v=f(e.z.slice(0,u));if(m.length*g.length*v.length>u)return{positions:[],cells:[]};var y=d(m,"xaxis"),x=d(g,"yaxis"),b=d(v,"zaxis");if(c.meshgrid=[y,x,b],e.starts){var _=e._slen;c.startingPositions=s(d(e.starts.x.slice(0,_),"xaxis"),d(e.starts.y.slice(0,_),"yaxis"),d(e.starts.z.slice(0,_),"zaxis"))}else{for(var w=x[0],A=h(y),M=h(b),k=new Array(A.length*M.length),T=0,E=0;E0){r=h[n];break}return r}function g(t,e){if(!(t<1||e<1)){for(var r=d(t),n=d(e),i=1,a=0;ax;)r--,r/=m(r),++r1?n:1},f.refineCoords=function(t){for(var e=this.dataScaleX,r=this.dataScaleY,n=t[0].shape[0],o=t[0].shape[1],s=0|Math.floor(t[0].shape[0]*e+1),l=0|Math.floor(t[0].shape[1]*r+1),u=1+n+1,c=1+o+1,f=i(new Float32Array(u*c),[u,c]),h=0;ha&&(this.minValues[e]=a),this.maxValues[e]",maxDimensionCount:60,overdrag:45,releaseTransitionDuration:120,releaseTransitionEase:"cubic-out",scrollbarCaptureWidth:18,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,scrollbarOffset:5,scrollbarWidth:8,transitionDuration:100,transitionEase:"cubic-out",uplift:5,wrapSpacer:" ",wrapSplitCharacter:" ",cn:{table:"table",tableControlView:"table-control-view",scrollBackground:"scroll-background",yColumn:"y-column",columnBlock:"column-block",scrollAreaClip:"scroll-area-clip",scrollAreaClipRect:"scroll-area-clip-rect",columnBoundary:"column-boundary",columnBoundaryClippath:"column-boundary-clippath",columnBoundaryRect:"column-boundary-rect",columnCells:"column-cells",columnCell:"column-cell",cellRect:"cell-rect",cellText:"cell-text",cellTextHolder:"cell-text-holder",scrollbarKit:"scrollbar-kit",scrollbar:"scrollbar",scrollbarSlider:"scrollbar-slider",scrollbarGlyph:"scrollbar-glyph",scrollbarCaptureZone:"scrollbar-capture-zone"}}},{}],1283:[function(t,e,r){"use strict";var n=t("./constants"),i=t("../../lib/extend").extendFlat,a=t("fast-isnumeric");function o(t){if(Array.isArray(t)){for(var e=0,r=0;r=e||u===t.length-1)&&(n[i]=o,o.key=l++,o.firstRowIndex=s,o.lastRowIndex=u,o={firstRowIndex:null,lastRowIndex:null,rows:[]},i+=a,s=u+1,a=0);return n}e.exports=function(t,e){var r=l(e.cells.values),p=function(t){return t.slice(e.header.values.length,t.length)},d=l(e.header.values);d.length&&!d[0].length&&(d[0]=[""],d=l(d));var m=d.concat(p(r).map(function(){return u((d[0]||[""]).length)})),g=e.domain,v=Math.floor(t._fullLayout._size.w*(g.x[1]-g.x[0])),y=Math.floor(t._fullLayout._size.h*(g.y[1]-g.y[0])),x=e.header.values.length?m[0].map(function(){return e.header.height}):[n.emptyHeaderHeight],b=r.length?r[0].map(function(){return e.cells.height}):[],_=x.reduce(s,0),w=h(b,y-_+n.uplift),A=f(h(x,_),[]),M=f(w,A),k={},T=e._fullInput.columnorder.concat(p(r.map(function(t,e){return e}))),E=m.map(function(t,r){var n=Array.isArray(e.columnwidth)?e.columnwidth[Math.min(r,e.columnwidth.length-1)]:e.columnwidth;return a(n)?Number(n):1}),S=E.reduce(s,0);E=E.map(function(t){return t/S*v});var C=Math.max(o(e.header.line.width),o(e.cells.line.width)),L={key:e.uid+t._context.staticPlot,translateX:g.x[0]*t._fullLayout._size.w,translateY:t._fullLayout._size.h*(1-g.y[1]),size:t._fullLayout._size,width:v,maxLineWidth:C,height:y,columnOrder:T,groupHeight:y,rowBlocks:M,headerRowBlocks:A,scrollY:0,cells:i({},e.cells,{values:r}),headerCells:i({},e.header,{values:m}),gdColumns:m.map(function(t){return t[0]}),gdColumnsOriginalOrder:m.map(function(t){return t[0]}),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:m.map(function(t,e){var r=k[t];return k[t]=(r||0)+1,{key:t+"__"+k[t],label:t,specIndex:e,xIndex:T[e],xScale:c,x:void 0,calcdata:void 0,columnWidth:E[e]}})};return L.columns.forEach(function(t){t.calcdata=L,t.x=c(t)}),L}},{"../../lib/extend":826,"./constants":1282,"fast-isnumeric":693}],1284:[function(t,e,r){"use strict";var n=t("../../lib/extend").extendFlat;r.splitToPanels=function(t){var e=[0,0],r=n({},t,{key:"header",type:"header",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!0,values:t.calcdata.headerCells.values[t.specIndex],rowBlocks:t.calcdata.headerRowBlocks,calcdata:n({},t.calcdata,{cells:t.calcdata.headerCells})});return[n({},t,{key:"cells1",type:"cells",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),n({},t,{key:"cells2",type:"cells",page:1,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),r]},r.splitToCells=function(t){var e=function(t){var e=t.rowBlocks[t.page],r=e?e.rows[0].rowIndex:0,n=e?r+e.rows.length:0;return[r,n]}(t);return(t.values||[]).slice(e[0],e[1]).map(function(r,n){return{keyWithinBlock:n+("string"==typeof r&&r.match(/[<$&> ]/)?"_keybuster_"+Math.random():""),key:e[0]+n,column:t,calcdata:t.calcdata,page:t.page,rowBlocks:t.rowBlocks,value:r}})}},{"../../lib/extend":826}],1285:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./attributes"),a=t("../../plots/domain").defaults;e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}a(e,o,s),s("columnwidth"),s("header.values"),s("header.format"),s("header.align"),s("header.prefix"),s("header.suffix"),s("header.height"),s("header.line.width"),s("header.line.color"),s("header.fill.color"),n.coerceFont(s,"header.font",n.extendFlat({},o.font)),function(t,e){for(var r=t.columnorder||[],n=t.header.values.length,i=r.slice(0,n),a=i.slice().sort(function(t,e){return t-e}),o=i.map(function(t){return a.indexOf(t)}),s=o.length;s/i),l=!o||s;t.mayHaveMarkup=o&&a.match(/[<&>]/);var u,c="string"==typeof(u=a)&&u.match(n.latexCheck);t.latex=c;var f,h,p=c?"":_(t.calcdata.cells.prefix,e,r)||"",d=c?"":_(t.calcdata.cells.suffix,e,r)||"",m=c?null:_(t.calcdata.cells.format,e,r)||null,g=p+(m?i.format(m)(t.value):t.value)+d;if(t.wrappingNeeded=!t.wrapped&&!l&&!c&&(f=b(g)),t.cellHeightMayIncrease=s||c||t.mayHaveMarkup||(void 0===f?b(g):f),t.needsConvertToTspans=t.mayHaveMarkup||t.wrappingNeeded||t.latex,t.wrappingNeeded){var v=(" "===n.wrapSplitCharacter?g.replace(/
i&&n.push(a),i+=l}return n}(i,l,s);1===u.length&&(u[0]===i.length-1?u.unshift(u[0]-1):u.push(u[0]+1)),u[0]%2&&u.reverse(),e.each(function(t,e){t.page=u[e],t.scrollY=l}),e.attr("transform",function(t){return"translate(0 "+(D(t.rowBlocks,t.page)-t.scrollY)+")"}),t&&(S(t,r,e,u,n.prevPages,n,0),S(t,r,e,u,n.prevPages,n,1),v(r,t))}}function E(t,e,r,a){return function(o){var s=o.calcdata?o.calcdata:o,l=e.filter(function(t){return s.key===t.key}),u=r||s.scrollbarState.dragMultiplier,c=s.scrollY;s.scrollY=void 0===a?s.scrollY+u*i.event.dy:a;var f=l.selectAll("."+n.cn.yColumn).selectAll("."+n.cn.columnBlock).filter(A);return T(t,f,l),s.scrollY===c}}function S(t,e,r,n,i,a,o){n[o]!==i[o]&&(clearTimeout(a.currentRepaint[o]),a.currentRepaint[o]=setTimeout(function(){var a=r.filter(function(t,e){return e===o&&n[e]!==i[e]});y(t,e,a,r),i[o]=n[o]}))}function C(t,e,r,a){return function(){var o=i.select(e.parentNode);o.each(function(t){var e=t.fragments;o.selectAll("tspan.line").each(function(t,r){e[r].width=this.getComputedTextLength()});var r,i,a=e[e.length-1].width,s=e.slice(0,-1),l=[],u=0,c=t.column.columnWidth-2*n.cellPad;for(t.value="";s.length;)u+(i=(r=s.shift()).width+a)>c&&(t.value+=l.join(n.wrapSpacer)+n.lineBreaker,l=[],u=0),l.push(r.text),u+=i;u&&(t.value+=l.join(n.wrapSpacer)),t.wrapped=!0}),o.selectAll("tspan.line").remove(),x(o.select("."+n.cn.cellText),r,t,a),i.select(e.parentNode.parentNode).call(z)}}function L(t,e,r,a,o){return function(){if(!o.settledY){var s=i.select(e.parentNode),l=N(o),u=o.key-l.firstRowIndex,c=l.rows[u].rowHeight,f=o.cellHeightMayIncrease?e.parentNode.getBoundingClientRect().height+2*n.cellPad:c,h=Math.max(f,c);h-l.rows[u].rowHeight&&(l.rows[u].rowHeight=h,t.selectAll("."+n.cn.columnCell).call(z),T(null,t.filter(A),0),v(r,a,!0)),s.attr("transform",function(){var t=this.parentNode.getBoundingClientRect(),e=i.select(this.parentNode).select("."+n.cn.cellRect).node().getBoundingClientRect(),r=this.transform.baseVal.consolidate(),a=e.top-t.top+(r?r.matrix.f:n.cellPad);return"translate("+O(o,i.select(this.parentNode).select("."+n.cn.cellTextHolder).node().getBoundingClientRect().width)+" "+a+")"}),o.settledY=!0}}}function O(t,e){switch(t.align){case"left":return n.cellPad;case"right":return t.column.columnWidth-(e||0)-n.cellPad;case"center":return(t.column.columnWidth-(e||0))/2;default:return n.cellPad}}function z(t){t.attr("transform",function(t){var e=t.rowBlocks[0].auxiliaryBlocks.reduce(function(t,e){return t+P(e,1/0)},0);return"translate(0 "+(P(N(t),t.key)+e)+")"}).selectAll("."+n.cn.cellRect).attr("height",function(t){return(e=N(t),r=t.key,e.rows[r-e.firstRowIndex]).rowHeight;var e,r})}function D(t,e){for(var r=0,n=e-1;n>=0;n--)r+=I(t[n]);return r}function P(t,e){for(var r=0,n=0;n0){var y,x,b,_,w,A=t.xa,M=t.ya;"h"===h.orientation?(w=e,y="y",b=M,x="x",_=A):(w=r,y="x",b=A,x="y",_=M);var k=f[t.index];if(w>=k.span[0]&&w<=k.span[1]){var T=n.extendFlat({},t),E=_.c2p(w,!0),S=o.getKdeValue(k,h,w),C=o.getPositionOnKdePath(k,h,E),L=b._offset,O=b._length;T[y+"0"]=C[0],T[y+"1"]=C[1],T[x+"0"]=T[x+"1"]=E,T[x+"Label"]=x+": "+i.hoverLabelText(_,w)+", "+f[0].t.labels.kde+" "+S.toFixed(3),T.spikeDistance=v[0].spikeDistance;var z=y+"Spike";T[z]=v[0][z],v[0].spikeDistance=void 0,v[0][z]=void 0,g.push(T),(c={stroke:t.color})[y+"1"]=n.constrain(L+C[0],L,L+O),c[y+"2"]=n.constrain(L+C[1],L,L+O),c[x+"1"]=c[x+"2"]=_._offset+E}}}-1!==p.indexOf("points")&&(u=a.hoverOnPoints(t,e,r));var D=l.selectAll(".violinline-"+h.uid).data(c?[0]:[]);return D.enter().append("line").classed("violinline-"+h.uid,!0).attr("stroke-width",1.5),D.exit().remove(),D.attr(c),"closest"===s?u?[u]:g:u?(g.push(u),g):g}},{"../../lib":836,"../../plots/cartesian/axes":884,"../box/hover":1003,"./helpers":1292}],1294:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("../box/defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc"),plot:t("./plot"),style:t("./style"),styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("../box/select"),moduleType:"trace",name:"violin",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","violinLayout","zoomScale"],meta:{}}},{"../../plots/cartesian":895,"../box/defaults":1001,"../box/select":1008,"../scatter/style":1210,"./attributes":1288,"./calc":1289,"./cross_trace_calc":1290,"./defaults":1291,"./hover":1293,"./layout_attributes":1295,"./layout_defaults":1296,"./plot":1297,"./style":1298}],1295:[function(t,e,r){"use strict";var n=t("../box/layout_attributes"),i=t("../../lib").extendFlat;e.exports={violinmode:i({},n.boxmode,{}),violingap:i({},n.boxgap,{}),violingroupgap:i({},n.boxgroupgap,{})}},{"../../lib":836,"../box/layout_attributes":1005}],1296:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./layout_attributes"),a=t("../box/layout_defaults");e.exports=function(t,e,r){a._supply(t,e,r,function(r,a){return n.coerce(t,e,i,r,a)},"violin")}},{"../../lib":836,"../box/layout_defaults":1006,"./layout_attributes":1295}],1297:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../lib"),a=t("../../components/drawing"),o=t("../box/plot"),s=t("../scatter/line_points"),l=t("./helpers");e.exports=function(t,e,r,u){var c=t._fullLayout,f=e.xaxis,h=e.yaxis;function p(t){var e=s(t,{xaxis:f,yaxis:h,connectGaps:!0,baseTolerance:.75,shape:"spline",simplify:!0});return a.smoothopen(e[0],1)}i.makeTraceGroups(u,r,"trace violins").each(function(t){var r=n.select(this),a=t[0],s=a.t,u=a.trace;if(e.isRangePlot||(a.node3=r),!0!==u.visible||s.empty)r.remove();else{var d=s.bPos,m=s.bdPos,g=e[s.valLetter+"axis"],v=e[s.posLetter+"axis"],y="both"===u.side,x=y||"positive"===u.side,b=y||"negative"===u.side,_=r.selectAll("path.violin").data(i.identity);_.enter().append("path").style("vector-effect","non-scaling-stroke").attr("class","violin"),_.exit().remove(),_.each(function(t){var e,r,i,a,o,l,f,h,_=n.select(this),w=t.density,A=w.length,M=t.pos+d,k=v.c2p(M);if(u.width)e=s.maxKDE/m;else{var T=c._violinScaleGroupStats[u.scalegroup];e="count"===u.scalemode?T.maxKDE/m*(T.maxCount/t.pts.length):T.maxKDE/m}if(x){for(f=new Array(A),o=0;oa&&(a=c,o=u)}}return a?i(o):s};case"rms":return function(t,e){for(var r=0,a=0,o=0;o":return function(t){return h(t)>s};case">=":return function(t){return h(t)>=s};case"[]":return function(t){var e=h(t);return e>=s[0]&&e<=s[1]};case"()":return function(t){var e=h(t);return e>s[0]&&e=s[0]&&es[0]&&e<=s[1]};case"][":return function(t){var e=h(t);return e<=s[0]||e>=s[1]};case")(":return function(t){var e=h(t);return es[1]};case"](":return function(t){var e=h(t);return e<=s[0]||e>s[1]};case")[":return function(t){var e=h(t);return e=s[1]};case"{}":return function(t){return-1!==s.indexOf(h(t))};case"}{":return function(t){return-1===s.indexOf(h(t))}}}(r,a.getDataToCoordFunc(t,e,s,i),h),x={},b={},_=0;d?(g=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set(new Array(f))},v=function(t,e){var r=x[t.astr][e];t.get()[e]=r}):(g=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set([])},v=function(t,e){var r=x[t.astr][e];t.get().push(r)}),M(g);for(var w=o(e.transforms,r),A=0;A1?"%{group} (%{trace})":"%{group}");var l=t.styles,u=o.styles=[];if(l)for(a=0;a>>1;e.dtype||(e.dtype="array"),"string"==typeof e.dtype?d=new(f(e.dtype))(g):e.dtype&&(d=e.dtype,Array.isArray(d)&&(d.length=g));for(var v=0;vr){for(var h=0;hl||k>u||T=C||o===s)){var c=y[a];void 0===s&&(s=c.length);for(var f=o;f=m&&p<=v&&d>=g&&d<=w&&O.push(h)}var b=x[a],_=b[4*o+0],A=b[4*o+1],S=b[4*o+2],L=b[4*o+3],z=function(t,e){for(var r=null,n=0;null===r;)if(r=t[4*e+n],++n>t.length)return null;return r}(b,o+1),D=.5*i,P=a+1;e(r,n,D,P,_,A||S||L||z),e(r,n+D,D,P,A,S||L||z),e(r+D,n,D,P,S,L||z),e(r+D,n+D,D,P,L,z)}}}(0,0,1,0,0,1),O},d;function S(t,e,r){for(var n=1,i=.5,a=.5,o=.5,s=0;s0&&e[i]===r[0]))return 1;a=t[i-1]}for(var s=1;a;){var l=a.key,u=n(r,l[0],l[1]);if(l[0][0]0))return 0;s=-1,a=a.right}else if(u>0)a=a.left;else{if(!(u<0))return 0;s=1,a=a.right}}return s}}(v.slabs,v.coordinates);return 0===a.length?y:function(t,e){return function(r){return t(r[0],r[1])?0:e(r)}}(l(a),y)};var n=t("robust-orientation")[3],i=t("slab-decomposition"),a=t("interval-tree-1d"),o=t("binary-search-bounds");function s(){return!0}function l(t){for(var e={},r=0;r=-t},pointBetween:function(e,r,n){var i=e[1]-r[1],a=n[0]-r[0],o=e[0]-r[0],s=n[1]-r[1],l=o*a+i*s;return!(l-t)},pointsSameX:function(e,r){return Math.abs(e[0]-r[0])t!=o-i>t&&(a-u)*(i-c)/(o-c)+u-n>t&&(s=!s),a=u,o=c}return s}};return e}},{}],1311:[function(t,e,r){var n={toPolygon:function(t,e){function r(e){if(e.length<=0)return t.segments({inverted:!1,regions:[]});function r(e){var r=e.slice(0,e.length-1);return t.segments({inverted:!1,regions:[r]})}for(var n=r(e[0]),i=1;i0})}function c(t,n){var i=t.seg,a=n.seg,o=i.start,s=i.end,u=a.start,c=a.end;r&&r.checkIntersection(i,a);var f=e.linesIntersect(o,s,u,c);if(!1===f){if(!e.pointsCollinear(o,s,u))return!1;if(e.pointsSame(o,c)||e.pointsSame(s,u))return!1;var h=e.pointsSame(o,u),p=e.pointsSame(s,c);if(h&&p)return n;var d=!h&&e.pointBetween(o,u,c),m=!p&&e.pointBetween(s,u,c);if(h)return m?l(n,s):l(t,c),n;d&&(p||(m?l(n,s):l(t,c)),l(n,o))}else 0===f.alongA&&(-1===f.alongB?l(t,u):0===f.alongB?l(t,f.pt):1===f.alongB&&l(t,c)),0===f.alongB&&(-1===f.alongA?l(n,o):0===f.alongA?l(n,f.pt):1===f.alongA&&l(n,s));return!1}for(var f=[];!a.isEmpty();){var h=a.getHead();if(r&&r.vert(h.pt[0]),h.isStart){r&&r.segmentNew(h.seg,h.primary);var p=u(h),d=p.before?p.before.ev:null,m=p.after?p.after.ev:null;function g(){if(d){var t=c(h,d);if(t)return t}return!!m&&c(h,m)}r&&r.tempStatus(h.seg,!!d&&d.seg,!!m&&m.seg);var v,y,x=g();if(x)t?(y=null===h.seg.myFill.below||h.seg.myFill.above!==h.seg.myFill.below)&&(x.seg.myFill.above=!x.seg.myFill.above):x.seg.otherFill=h.seg.myFill,r&&r.segmentUpdate(x.seg),h.other.remove(),h.remove();if(a.getHead()!==h){r&&r.rewind(h.seg);continue}t?(y=null===h.seg.myFill.below||h.seg.myFill.above!==h.seg.myFill.below,h.seg.myFill.below=m?m.seg.myFill.above:i,h.seg.myFill.above=y?!h.seg.myFill.below:h.seg.myFill.below):null===h.seg.otherFill&&(v=m?h.primary===m.primary?m.seg.otherFill.above:m.seg.myFill.above:h.primary?o:i,h.seg.otherFill={above:v,below:v}),r&&r.status(h.seg,!!d&&d.seg,!!m&&m.seg),h.other.status=p.insert(n.node({ev:h}))}else{var b=h.status;if(null===b)throw new Error("PolyBool: Zero-length segment detected; your epsilon is probably too small or too large");if(s.exists(b.prev)&&s.exists(b.next)&&c(b.prev.ev,b.next.ev),r&&r.statusRemove(b.ev.seg),b.remove(),!h.primary){var _=h.seg.myFill;h.seg.myFill=h.seg.otherFill,h.seg.otherFill=_}f.push(h.seg)}a.getHead().remove()}return r&&r.done(),f}return t?{addRegion:function(t){for(var n,i,a,o=t[t.length-1],l=0;l=u?(M=1,y=u+2*h+d):y=h*(M=-h/u)+d):(M=0,p>=0?(k=0,y=d):-p>=f?(k=1,y=f+2*p+d):y=p*(k=-p/f)+d);else if(k<0)k=0,h>=0?(M=0,y=d):-h>=u?(M=1,y=u+2*h+d):y=h*(M=-h/u)+d;else{var T=1/A;y=(M*=T)*(u*M+c*(k*=T)+2*h)+k*(c*M+f*k+2*p)+d}else M<0?(b=f+p)>(x=c+h)?(_=b-x)>=(w=u-2*c+f)?(M=1,k=0,y=u+2*h+d):y=(M=_/w)*(u*M+c*(k=1-M)+2*h)+k*(c*M+f*k+2*p)+d:(M=0,b<=0?(k=1,y=f+2*p+d):p>=0?(k=0,y=d):y=p*(k=-p/f)+d):k<0?(b=u+h)>(x=c+p)?(_=b-x)>=(w=u-2*c+f)?(k=1,M=0,y=f+2*p+d):y=(M=1-(k=_/w))*(u*M+c*k+2*h)+k*(c*M+f*k+2*p)+d:(k=0,b<=0?(M=1,y=u+2*h+d):h>=0?(M=0,y=d):y=h*(M=-h/u)+d):(_=f+p-c-h)<=0?(M=0,k=1,y=f+2*p+d):_>=(w=u-2*c+f)?(M=1,k=0,y=u+2*h+d):y=(M=_/w)*(u*M+c*(k=1-M)+2*h)+k*(c*M+f*k+2*p)+d;var E=1-M-k;for(l=0;l1)for(var r=1;r0){var u=t[r-1];if(0===n(s,u)&&a(u)!==l){r-=1;continue}}t[r++]=s}}return t.length=r,t}},{"cell-orientation":52,"compare-cell":70,"compare-oriented-cell":71}],1325:[function(t,e,r){"use strict";var n=t("array-bounds"),i=t("color-normalize"),a=t("update-diff"),o=t("pick-by-alias"),s=t("object-assign"),l=t("flatten-vertex-data"),u=t("to-float32"),c=u.float32,f=u.fract32;e.exports=function(t,e){"function"==typeof t?(e||(e={}),e.regl=t):e=t;e.length&&(e.positions=e);if(!(t=e.regl).hasExtension("ANGLE_instanced_arrays"))throw Error("regl-error2d: `ANGLE_instanced_arrays` extension should be enabled");var r,u,p,d,m,g,v=t._gl,y={color:"black",capSize:5,lineWidth:1,opacity:1,viewport:null,range:null,offset:0,count:0,bounds:null,positions:[],errors:[]},x=[];return d=t.buffer({usage:"dynamic",type:"uint8",data:new Uint8Array(0)}),u=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),p=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),m=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),g=t.buffer({usage:"static",type:"float",data:h}),A(e),r=t({vert:"\n\t\tprecision highp float;\n\n\t\tattribute vec2 position, positionFract;\n\t\tattribute vec4 error;\n\t\tattribute vec4 color;\n\n\t\tattribute vec2 direction, lineOffset, capOffset;\n\n\t\tuniform vec4 viewport;\n\t\tuniform float lineWidth, capSize;\n\t\tuniform vec2 scale, scaleFract, translate, translateFract;\n\n\t\tvarying vec4 fragColor;\n\n\t\tvoid main() {\n\t\t\tfragColor = color / 255.;\n\n\t\t\tvec2 pixelOffset = lineWidth * lineOffset + (capSize + lineWidth) * capOffset;\n\n\t\t\tvec2 dxy = -step(.5, direction.xy) * error.xz + step(direction.xy, vec2(-.5)) * error.yw;\n\n\t\t\tvec2 position = position + dxy;\n\n\t\t\tvec2 pos = (position + translate) * scale\n\t\t\t\t+ (positionFract + translateFract) * scale\n\t\t\t\t+ (position + translate) * scaleFract\n\t\t\t\t+ (positionFract + translateFract) * scaleFract;\n\n\t\t\tpos += pixelOffset / viewport.zw;\n\n\t\t\tgl_Position = vec4(pos * 2. - 1., 0, 1);\n\t\t}\n\t\t",frag:"\n\t\tprecision mediump float;\n\n\t\tvarying vec4 fragColor;\n\n\t\tuniform float opacity;\n\n\t\tvoid main() {\n\t\t\tgl_FragColor = fragColor;\n\t\t\tgl_FragColor.a *= opacity;\n\t\t}\n\t\t",uniforms:{range:t.prop("range"),lineWidth:t.prop("lineWidth"),capSize:t.prop("capSize"),opacity:t.prop("opacity"),scale:t.prop("scale"),translate:t.prop("translate"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{color:{buffer:d,offset:function(t,e){return 4*e.offset},divisor:1},position:{buffer:u,offset:function(t,e){return 8*e.offset},divisor:1},positionFract:{buffer:p,offset:function(t,e){return 8*e.offset},divisor:1},error:{buffer:m,offset:function(t,e){return 16*e.offset},divisor:1},direction:{buffer:g,stride:24,offset:0},lineOffset:{buffer:g,stride:24,offset:8},capOffset:{buffer:g,stride:24,offset:16}},primitive:"triangles",blend:{enable:!0,color:[0,0,0,0],equation:{rgb:"add",alpha:"add"},func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},depth:{enable:!1},scissor:{enable:!0,box:t.prop("viewport")},viewport:t.prop("viewport"),stencil:!1,instances:t.prop("count"),count:h.length}),s(b,{update:A,draw:_,destroy:M,regl:t,gl:v,canvas:v.canvas,groups:x}),b;function b(t){t?A(t):null===t&&M(),_()}function _(e){if("number"==typeof e)return w(e);e&&!Array.isArray(e)&&(e=[e]),t._refresh(),x.forEach(function(t,r){t&&(e&&(e[r]?t.draw=!0:t.draw=!1),t.draw?w(r):t.draw=!0)})}function w(t){"number"==typeof t&&(t=x[t]),null!=t&&t&&t.count&&t.color&&t.opacity&&t.positions&&t.positions.length>1&&(t.scaleRatio=[t.scale[0]*t.viewport.width,t.scale[1]*t.viewport.height],r(t),t.after&&t.after(t))}function A(t){if(t){null!=t.length?"number"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var e=0,r=0;if(b.groups=x=t.map(function(t,u){var c=x[u];return t?("function"==typeof t?t={after:t}:"number"==typeof t[0]&&(t={positions:t}),t=o(t,{color:"color colors fill",capSize:"capSize cap capsize cap-size",lineWidth:"lineWidth line-width width line thickness",opacity:"opacity alpha",range:"range dataBox",viewport:"viewport viewBox",errors:"errors error",positions:"positions position data points"}),c||(x[u]=c={id:u,scale:null,translate:null,scaleFract:null,translateFract:null,draw:!0},t=s({},y,t)),a(c,t,[{lineWidth:function(t){return.5*+t},capSize:function(t){return.5*+t},opacity:parseFloat,errors:function(t){return t=l(t),r+=t.length,t},positions:function(t,r){return t=l(t,"float64"),r.count=Math.floor(t.length/2),r.bounds=n(t,2),r.offset=e,e+=r.count,t}},{color:function(t,e){var r=e.count;if(t||(t="transparent"),!Array.isArray(t)||"number"==typeof t[0]){var n=t;t=Array(r);for(var a=0;a 0. && baClipping < length(normalWidth * endBotJoin)) {\n\t\t//handle miter clipping\n\t\tbTopCoord -= normalWidth * endTopJoin;\n\t\tbTopCoord += normalize(endTopJoin * normalWidth) * baClipping;\n\t}\n\n\tif (nextReverse) {\n\t\t//make join rectangular\n\t\tvec2 miterShift = normalWidth * endJoinDirection * miterLimit * .5;\n\t\tfloat normalAdjust = 1. - min(miterLimit / endMiterRatio, 1.);\n\t\tbBotCoord = bCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\n\t\tbTopCoord = bCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\n\t}\n\telse if (!prevReverse && abClipping > 0. && abClipping < length(normalWidth * startBotJoin)) {\n\t\t//handle miter clipping\n\t\taBotCoord -= normalWidth * startBotJoin;\n\t\taBotCoord += normalize(startBotJoin * normalWidth) * abClipping;\n\t}\n\n\tvec2 aTopPosition = (aTopCoord) * adjustedScale + translate;\n\tvec2 aBotPosition = (aBotCoord) * adjustedScale + translate;\n\n\tvec2 bTopPosition = (bTopCoord) * adjustedScale + translate;\n\tvec2 bBotPosition = (bBotCoord) * adjustedScale + translate;\n\n\t//position is normalized 0..1 coord on the screen\n\tvec2 position = (aTopPosition * lineTop + aBotPosition * lineBot) * lineStart + (bTopPosition * lineTop + bBotPosition * lineBot) * lineEnd;\n\n\tstartCoord = aCoord * scaleRatio + translate * viewport.zw + viewport.xy;\n\tendCoord = bCoord * scaleRatio + translate * viewport.zw + viewport.xy;\n\n\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\n\n\tenableStartMiter = step(dot(currTangent, prevTangent), .5);\n\tenableEndMiter = step(dot(currTangent, nextTangent), .5);\n\n\t//bevel miter cutoffs\n\tif (miterMode == 1.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * miterLimit * .5;\n\t\t\tstartCutoff = vec4(aCoord, aCoord);\n\t\t\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\n\t\t\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tstartCutoff += viewport.xyxy;\n\t\t\tstartCutoff += startMiterWidth.xyxy;\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * miterLimit * .5;\n\t\t\tendCutoff = vec4(bCoord, bCoord);\n\t\t\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x) / scaleRatio;\n\t\t\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tendCutoff += viewport.xyxy;\n\t\t\tendCutoff += endMiterWidth.xyxy;\n\t\t}\n\t}\n\n\t//round miter cutoffs\n\telse if (miterMode == 2.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * abs(dot(startJoinDirection, currNormal)) * .5;\n\t\t\tstartCutoff = vec4(aCoord, aCoord);\n\t\t\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\n\t\t\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tstartCutoff += viewport.xyxy;\n\t\t\tstartCutoff += startMiterWidth.xyxy;\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * abs(dot(endJoinDirection, currNormal)) * .5;\n\t\t\tendCutoff = vec4(bCoord, bCoord);\n\t\t\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x) / scaleRatio;\n\t\t\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tendCutoff += viewport.xyxy;\n\t\t\tendCutoff += endMiterWidth.xyxy;\n\t\t}\n\t}\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D dashPattern;\nuniform float dashSize, pixelRatio, thickness, opacity, id, miterMode;\n\nvarying vec4 fragColor;\nvarying vec2 tangent;\nvarying vec4 startCutoff, endCutoff;\nvarying vec2 startCoord, endCoord;\nvarying float enableStartMiter, enableEndMiter;\n\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\n\tvec2 diff = b - a;\n\tvec2 perp = normalize(vec2(-diff.y, diff.x));\n\treturn dot(p - a, perp);\n}\n\nvoid main() {\n\tfloat alpha = 1., distToStart, distToEnd;\n\tfloat cutoff = thickness * .5;\n\n\t//bevel miter\n\tif (miterMode == 1.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\n\t\t\tif (distToStart < -1.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\talpha *= min(max(distToStart + 1., 0.), 1.);\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\n\t\t\tif (distToEnd < -1.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\talpha *= min(max(distToEnd + 1., 0.), 1.);\n\t\t}\n\t}\n\n\t// round miter\n\telse if (miterMode == 2.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\n\t\t\tif (distToStart < 0.) {\n\t\t\t\tfloat radius = length(gl_FragCoord.xy - startCoord);\n\n\t\t\t\tif(radius > cutoff + .5) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\n\t\t\t}\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\n\t\t\tif (distToEnd < 0.) {\n\t\t\t\tfloat radius = length(gl_FragCoord.xy - endCoord);\n\n\t\t\t\tif(radius > cutoff + .5) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\n\t\t\t}\n\t\t}\n\t}\n\n\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\n\tfloat dash = texture2D(dashPattern, vec2(t, .5)).r;\n\n\tgl_FragColor = fragColor;\n\tgl_FragColor.a *= alpha * opacity * dash;\n}\n"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aColor:{buffer:t.prop("colorBuffer"),stride:4,offset:0,divisor:1},bColor:{buffer:t.prop("colorBuffer"),stride:4,offset:4,divisor:1},prevCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:0,divisor:1},aCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:16,divisor:1},nextCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:24,divisor:1}}},n))}catch(t){e=i}return{fill:t({primitive:"triangle",elements:function(t,e){return e.triangles},offset:0,vert:o(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 position, positionFract;\n\nuniform vec4 color;\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float pixelRatio, id;\nuniform vec4 viewport;\nuniform float opacity;\n\nvarying vec4 fragColor;\n\nconst float MAX_LINES = 256.;\n\nvoid main() {\n\tfloat depth = (MAX_LINES - 4. - id) / (MAX_LINES);\n\n\tvec2 position = position * scale + translate\n + positionFract * scale + translateFract\n + position * scaleFract\n + positionFract * scaleFract;\n\n\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\n\n\tfragColor = color / 255.;\n\tfragColor.a *= opacity;\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n\tgl_FragColor = fragColor;\n}\n"]),uniforms:{scale:t.prop("scale"),color:t.prop("fill"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),translate:t.prop("translate"),opacity:t.prop("opacity"),pixelRatio:t.context("pixelRatio"),id:t.prop("id"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{position:{buffer:t.prop("positionBuffer"),stride:8,offset:8},positionFract:{buffer:t.prop("positionFractBuffer"),stride:8,offset:8}},blend:n.blend,depth:{enable:!1},scissor:n.scissor,stencil:n.stencil,viewport:n.viewport}),rect:i,miter:e}},g.defaults={dashes:null,join:"miter",miterLimit:1,thickness:10,cap:"square",color:"black",opacity:1,overlay:!1,viewport:null,range:null,close:!1,fill:null},g.prototype.render=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];e.length&&(t=this).update.apply(t,e),this.draw()},g.prototype.draw=function(){for(var t=this,e=[],r=arguments.length;r--;)e[r]=arguments[r];return(e.length?e:this.passes).forEach(function(e,r){if(e&&Array.isArray(e))return(n=t).draw.apply(n,e);var n;("number"==typeof e&&(e=t.passes[e]),e&&e.count>1&&e.opacity)&&(t.regl._refresh(),e.fill&&e.triangles&&e.triangles.length>2&&t.shaders.fill(e),e.thickness&&(e.scale[0]*e.viewport.width>g.precisionThreshold||e.scale[1]*e.viewport.height>g.precisionThreshold?t.shaders.rect(e):"rect"===e.join||!e.join&&(e.thickness<=2||e.count>=g.maxPoints)?t.shaders.rect(e):t.shaders.miter(e)))}),this},g.prototype.update=function(t){var e=this;if(t){null!=t.length?"number"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var r=this.regl,o=this.gl;if(t.forEach(function(t,f){var d=e.passes[f];if(void 0!==t)if(null!==t){if("number"==typeof t[0]&&(t={positions:t}),t=s(t,{positions:"positions points data coords",thickness:"thickness lineWidth lineWidths line-width linewidth width stroke-width strokewidth strokeWidth",join:"lineJoin linejoin join type mode",miterLimit:"miterlimit miterLimit",dashes:"dash dashes dasharray dash-array dashArray",color:"color colour stroke colors colours stroke-color strokeColor",fill:"fill fill-color fillColor",opacity:"alpha opacity",overlay:"overlay crease overlap intersect",close:"closed close closed-path closePath",range:"range dataBox",viewport:"viewport viewBox",hole:"holes hole hollow"}),d||(e.passes[f]=d={id:f,scale:null,scaleFract:null,translate:null,translateFract:null,count:0,hole:[],depth:0,dashLength:1,dashTexture:r.texture({channels:1,data:new Uint8Array([255]),width:1,height:1,mag:"linear",min:"linear"}),colorBuffer:r.buffer({usage:"dynamic",type:"uint8",data:new Uint8Array}),positionBuffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array}),positionFractBuffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array})},t=a({},g.defaults,t)),null!=t.thickness&&(d.thickness=parseFloat(t.thickness)),null!=t.opacity&&(d.opacity=parseFloat(t.opacity)),null!=t.miterLimit&&(d.miterLimit=parseFloat(t.miterLimit)),null!=t.overlay&&(d.overlay=!!t.overlay,f 1.0 + delta) {\n\t\tdiscard;\n\t}\n\n\talpha -= smoothstep(1.0 - delta, 1.0 + delta, radius);\n\n\tfloat borderRadius = fragBorderRadius;\n\tfloat ratio = smoothstep(borderRadius - delta, borderRadius + delta, radius);\n\tvec4 color = mix(fragColor, fragBorderColor, ratio);\n\tcolor.a *= alpha * opacity;\n\tgl_FragColor = color;\n}\n"]),l.vert=c(["precision highp float;\n#define GLSLIFY 1\n\nattribute float x, y, xFract, yFract;\nattribute float size, borderSize;\nattribute vec4 colorId, borderColorId;\nattribute float isActive;\n\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float pixelRatio;\nuniform sampler2D palette;\nuniform vec2 paletteSize;\n\nconst float maxSize = 100.;\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragBorderRadius, fragWidth;\n\nbool isDirect = (paletteSize.x < 1.);\n\nvec4 getColor(vec4 id) {\n return isDirect ? id / 255. : texture2D(palette,\n vec2(\n (id.x + .5) / paletteSize.x,\n (id.y + .5) / paletteSize.y\n )\n );\n}\n\nvoid main() {\n // ignore inactive points\n if (isActive == 0.) return;\n\n vec2 position = vec2(x, y);\n vec2 positionFract = vec2(xFract, yFract);\n\n vec4 color = getColor(colorId);\n vec4 borderColor = getColor(borderColorId);\n\n float size = size * maxSize / 255.;\n float borderSize = borderSize * maxSize / 255.;\n\n gl_PointSize = (size + borderSize) * pixelRatio;\n\n vec2 pos = (position + translate) * scale\n + (positionFract + translateFract) * scale\n + (position + translate) * scaleFract\n + (positionFract + translateFract) * scaleFract;\n\n gl_Position = vec4(pos * 2. - 1., 0, 1);\n\n fragBorderRadius = 1. - 2. * borderSize / (size + borderSize);\n fragColor = color;\n fragBorderColor = borderColor.a == 0. || borderSize == 0. ? vec4(color.rgb, 0.) : borderColor;\n fragWidth = 1. / gl_PointSize;\n}\n"]),d&&(l.frag=l.frag.replace("smoothstep","smoothStep"),s.frag=s.frag.replace("smoothstep","smoothStep")),this.drawCircle=t(l)}y.defaults={color:"black",borderColor:"transparent",borderSize:0,size:12,opacity:1,marker:void 0,viewport:null,range:null,pixelSize:null,count:0,offset:0,bounds:null,positions:[],snap:1e4},y.prototype.render=function(){return arguments.length&&this.update.apply(this,arguments),this.draw(),this},y.prototype.draw=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;nn)?e.tree=l(t,{bounds:f}):n&&n.length&&(e.tree=n),e.tree){var h={primitive:"points",usage:"static",data:e.tree,type:"uint32"};e.elements?e.elements(h):e.elements=s.elements(h)}return i({data:m.float(t),usage:"dynamic"}),a({data:m.fract(t),usage:"dynamic"}),u({data:new Uint8Array(c),type:"uint8",usage:"stream"}),t}},{marker:function(e,r,n){var i=r.activation;if(i.forEach(function(t){return t&&t.destroy&&t.destroy()}),i.length=0,e&&"number"!=typeof e[0]){for(var a=[],o=0,l=Math.min(e.length,r.count);o=0)return a;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)e=t;else{e=new Uint8Array(t.length);for(var o=0,s=t.length;o4*n&&(this.tooManyColors=!0),this.updatePalette(r),1===i.length?i[0]:i},y.prototype.updatePalette=function(t){if(!this.tooManyColors){var e=this.maxColors,r=this.paletteTexture,n=Math.ceil(.25*t.length/e);if(n>1)for(var i=.25*(t=t.slice()).length%e;i2?(s[0],s[2],n=s[1],i=s[3]):s.length?(n=s[0],i=s[1]):(s.x,n=s.y,s.x+s.width,i=s.y+s.height),l.length>2?(a=l[0],o=l[2],l[1],l[3]):l.length?(a=l[0],o=l[1]):(a=l.x,l.y,o=l.x+l.width,l.y+l.height),[a,n,o,i]}function p(t){if("number"==typeof t)return[t,t,t,t];if(2===t.length)return[t[0],t[1],t[0],t[1]];var e=l(t);return[e.x,e.y,e.x+e.width,e.y+e.height]}e.exports=c,c.prototype.render=function(){for(var t,e=this,r=[],n=arguments.length;n--;)r[n]=arguments[n];return r.length&&(t=this).update.apply(t,r),this.regl.attributes.preserveDrawingBuffer?this.draw():(this.dirty?null==this.planned&&(this.planned=o(function(){e.draw(),e.dirty=!0,e.planned=null})):(this.draw(),this.dirty=!0,o(function(){e.dirty=!1})),this)},c.prototype.update=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=0;nM))&&(s.lower||!(A1&&(t=arguments);"string"==typeof t&&(t=t.split(/\s/).map(parseFloat));t.length&&"number"==typeof t[0]?e=2===t.length?{width:t[0],height:t[1],x:0,y:0}:{x:t[0],y:t[1],width:t[2]-t[0]||0,height:t[3]-t[1]||0}:t&&(t=n(t,{left:"x l left Left",top:"y t top Top",width:"w width",height:"h height",bottom:"b bottom",right:"r right"}),e={x:t.left||0,y:t.top||0},null==t.width?t.right?e.width=t.right-e.x:e.width=0:e.width=t.width,null==t.height?t.bottom?e.height=t.bottom-e.y:e.height=0:e.height=t.height);return e}},{"pick-by-alias":645}],1339:[function(t,e,r){"use strict";e.exports=t("./quad")},{"./quad":1341}],1340:[function(t,e,r){arguments[4][639][0].apply(r,arguments)},{dup:639,"pick-by-alias":645}],1341:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),i=t("clamp"),a=t("parse-rect"),o=t("array-bounds"),s=t("pick-by-alias"),l=t("defined"),u=t("flatten-vertex-data"),c=t("is-obj"),f=t("dtype"),h=t("math-log2");function p(t,e){for(var r=e[0],n=e[1],a=1/(e[2]-r),o=1/(e[3]-n),s=new Array(t.length),l=0,u=t.length/2;l>>1;e.dtype||(e.dtype="array"),"string"==typeof e.dtype?d=new(f(e.dtype))(g):e.dtype&&(d=e.dtype,Array.isArray(d)&&(d.length=g));for(var v=0;vr){for(var h=0;hl||k>u||T=C||o===s)){var c=y[a];void 0===s&&(s=c.length);for(var f=o;f=m&&p<=v&&d>=g&&d<=w&&O.push(h)}var b=x[a],_=b[4*o+0],A=b[4*o+1],S=b[4*o+2],L=b[4*o+3],z=function(t,e){for(var r=null,n=0;null===r;)if(r=t[4*e+n],++n>t.length)return null;return r}(b,o+1),D=.5*i,P=a+1;e(r,n,D,P,_,A||S||L||z),e(r,n+D,D,P,A,S||L||z),e(r+D,n,D,P,S,L||z),e(r+D,n+D,D,P,L,z)}}}(0,0,1,0,0,1),O},d;function S(t,e,r){for(var n=1,i=.5,a=.5,o=.5,s=0;s>>=e))<<3,(e|=r=(15<(t>>>=r))<<2)|(r=(3<(t>>>=r))<<1)|t>>>r>>1}function s(){function t(t){t:{for(var e=16;268435456>=e;e*=16)if(t<=e){t=e;break t}t=0}return 0<(e=r[o(t)>>2]).length?e.pop():new ArrayBuffer(t)}function e(t){r[o(t.byteLength)>>2].push(t)}var r=a(8,function(){return[]});return{alloc:t,free:e,allocType:function(e,r){var n=null;switch(e){case 5120:n=new Int8Array(t(r),0,r);break;case 5121:n=new Uint8Array(t(r),0,r);break;case 5122:n=new Int16Array(t(2*r),0,r);break;case 5123:n=new Uint16Array(t(2*r),0,r);break;case 5124:n=new Int32Array(t(4*r),0,r);break;case 5125:n=new Uint32Array(t(4*r),0,r);break;case 5126:n=new Float32Array(t(4*r),0,r);break;default:return null}return n.length!==r?n.subarray(0,r):n},freeType:function(t){e(t.buffer)}}}function l(t){return!!t&&"object"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&"number"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||Y(t.data))}function u(t,e,r,n,i,a){for(var o=0;o(i=s)&&(i=n.buffer.byteLength,5123===f?i>>=1:5125===f&&(i>>=2)),n.vertCount=i,i=o,0>o&&(i=4,1===(o=n.buffer.dimension)&&(i=0),2===o&&(i=1),3===o&&(i=4)),n.primType=i}function o(t){n.elementsCount--,delete s[t.id],t.buffer.destroy(),t.buffer=null}var s={},u=0,c={uint8:5121,uint16:5123};e.oes_element_index_uint&&(c.uint32=5125),i.prototype.bind=function(){this.buffer.bind()};var f=[];return{create:function(t,e){function s(t){if(t)if("number"==typeof t)u(t),f.primType=4,f.vertCount=0|t,f.type=5121;else{var e=null,r=35044,n=-1,i=-1,o=0,h=0;Array.isArray(t)||Y(t)||l(t)?e=t:("data"in t&&(e=t.data),"usage"in t&&(r=K[t.usage]),"primitive"in t&&(n=rt[t.primitive]),"count"in t&&(i=0|t.count),"type"in t&&(h=c[t.type]),"length"in t?o=0|t.length:(o=i,5123===h||5122===h?o*=2:5125!==h&&5124!==h||(o*=4))),a(f,e,r,n,i,o,h)}else u(),f.primType=4,f.vertCount=0,f.type=5121;return s}var u=r.create(null,34963,!0),f=new i(u._buffer);return n.elementsCount++,s(t),s._reglType="elements",s._elements=f,s.subdata=function(t,e){return u.subdata(t,e),s},s.destroy=function(){o(f)},s},createStream:function(t){var e=f.pop();return e||(e=new i(r.create(null,34963,!0,!1)._buffer)),a(e,t,35040,-1,-1,0,0),e},destroyStream:function(t){f.push(t)},getElements:function(t){return"function"==typeof t&&t._elements instanceof i?t._elements:null},clear:function(){Z(s).forEach(o)}}}function m(t){for(var e=G.allocType(5123,t.length),r=0;r>>31<<15,i=(a<<1>>>24)-127,a=a>>13&1023;e[r]=-24>i?n:-14>i?n+(a+1024>>-14-i):15>=i,r.height>>=i,p(r,n[i]),t.mipmask|=1<e;++e)t.images[e]=null;return t}function L(t){for(var e=t.images,r=0;re){for(var r=0;r=--this.refCount&&R(this)}}),o.profile&&(a.getTotalTextureSize=function(){var t=0;return Object.keys(vt).forEach(function(e){t+=vt[e].stats.size}),t}),{create2D:function(e,r){function n(t,e){var r=i.texInfo;O.call(r);var a=C();return"number"==typeof t?T(a,0|t,"number"==typeof e?0|e:0|t):t?(z(r,t),E(a,t)):T(a,1,1),r.genMipmaps&&(a.mipmask=(a.width<<1)-1),i.mipmask=a.mipmask,u(i,a),i.internalformat=a.internalformat,n.width=a.width,n.height=a.height,I(i),S(a,3553),D(r,3553),N(),L(a),o.profile&&(i.stats.size=A(i.internalformat,i.type,a.width,a.height,r.genMipmaps,!1)),n.format=tt[i.internalformat],n.type=et[i.type],n.mag=rt[r.magFilter],n.min=nt[r.minFilter],n.wrapS=it[r.wrapS],n.wrapT=it[r.wrapT],n}var i=new P(3553);return vt[i.id]=i,a.textureCount++,n(e,r),n.subimage=function(t,e,r,a){e|=0,r|=0,a|=0;var o=v();return u(o,i),o.width=0,o.height=0,p(o,t),o.width=o.width||(i.width>>a)-e,o.height=o.height||(i.height>>a)-r,I(i),d(o,3553,e,r,a),N(),M(o),n},n.resize=function(e,r){var a=0|e,s=0|r||a;if(a===i.width&&s===i.height)return n;n.width=i.width=a,n.height=i.height=s,I(i);for(var l,u=i.channels,c=i.type,f=0;i.mipmask>>f;++f){var h=a>>f,p=s>>f;if(!h||!p)break;l=G.zero.allocType(c,h*p*u),t.texImage2D(3553,f,i.format,h,p,0,i.format,i.type,l),l&&G.zero.freeType(l)}return N(),o.profile&&(i.stats.size=A(i.internalformat,i.type,a,s,!1,!1)),n},n._reglType="texture2d",n._texture=i,o.profile&&(n.stats=i.stats),n.destroy=function(){i.decRef()},n},createCube:function(e,r,n,i,s,l){function f(t,e,r,n,i,a){var s,l=h.texInfo;for(O.call(l),s=0;6>s;++s)m[s]=C();if("number"!=typeof t&&t){if("object"==typeof t)if(e)E(m[0],t),E(m[1],e),E(m[2],r),E(m[3],n),E(m[4],i),E(m[5],a);else if(z(l,t),c(h,t),"faces"in t)for(t=t.faces,s=0;6>s;++s)u(m[s],h),E(m[s],t[s]);else for(s=0;6>s;++s)E(m[s],t)}else for(t=0|t||1,s=0;6>s;++s)T(m[s],t,t);for(u(h,m[0]),h.mipmask=l.genMipmaps?(m[0].width<<1)-1:m[0].mipmask,h.internalformat=m[0].internalformat,f.width=m[0].width,f.height=m[0].height,I(h),s=0;6>s;++s)S(m[s],34069+s);for(D(l,34067),N(),o.profile&&(h.stats.size=A(h.internalformat,h.type,f.width,f.height,l.genMipmaps,!0)),f.format=tt[h.internalformat],f.type=et[h.type],f.mag=rt[l.magFilter],f.min=nt[l.minFilter],f.wrapS=it[l.wrapS],f.wrapT=it[l.wrapT],s=0;6>s;++s)L(m[s]);return f}var h=new P(34067);vt[h.id]=h,a.cubeCount++;var m=Array(6);return f(e,r,n,i,s,l),f.subimage=function(t,e,r,n,i){r|=0,n|=0,i|=0;var a=v();return u(a,h),a.width=0,a.height=0,p(a,e),a.width=a.width||(h.width>>i)-r,a.height=a.height||(h.height>>i)-n,I(h),d(a,34069+t,r,n,i),N(),M(a),f},f.resize=function(e){if((e|=0)!==h.width){f.width=h.width=e,f.height=h.height=e,I(h);for(var r=0;6>r;++r)for(var n=0;h.mipmask>>n;++n)t.texImage2D(34069+r,n,h.format,e>>n,e>>n,0,h.format,h.type,null);return N(),o.profile&&(h.stats.size=A(h.internalformat,h.type,f.width,f.height,!1,!0)),f}},f._reglType="textureCube",f._texture=h,o.profile&&(f.stats=h.stats),f.destroy=function(){h.decRef()},f},clear:function(){for(var e=0;er;++r)if(0!=(e.mipmask&1<>r,e.height>>r,0,e.internalformat,e.type,null);else for(var n=0;6>n;++n)t.texImage2D(34069+n,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);D(e.texInfo,e.target)})}}}function k(t,e,r,n,i,a){function o(t,e,r){this.target=t,this.texture=e,this.renderbuffer=r;var n=t=0;e?(t=e.width,n=e.height):r&&(t=r.width,n=r.height),this.width=t,this.height=n}function s(t){t&&(t.texture&&t.texture._texture.decRef(),t.renderbuffer&&t.renderbuffer._renderbuffer.decRef())}function l(t,e,r){t&&(t.texture?t.texture._texture.refCount+=1:t.renderbuffer._renderbuffer.refCount+=1)}function u(e,r){r&&(r.texture?t.framebufferTexture2D(36160,e,r.target,r.texture._texture.texture,0):t.framebufferRenderbuffer(36160,e,36161,r.renderbuffer._renderbuffer.renderbuffer))}function c(t){var e=3553,r=null,n=null,i=t;return"object"==typeof t&&(i=t.data,"target"in t&&(e=0|t.target)),"texture2d"===(t=i._reglType)?r=i:"textureCube"===t?r=i:"renderbuffer"===t&&(n=i,e=36161),new o(e,r,n)}function f(t,e,r,a,s){return r?((t=n.create2D({width:t,height:e,format:a,type:s}))._texture.refCount=0,new o(3553,t,null)):((t=i.create({width:t,height:e,format:a}))._renderbuffer.refCount=0,new o(36161,null,t))}function h(t){return t&&(t.texture||t.renderbuffer)}function p(t,e,r){t&&(t.texture?t.texture.resize(e,r):t.renderbuffer&&t.renderbuffer.resize(e,r),t.width=e,t.height=r)}function d(){this.id=A++,M[this.id]=this,this.framebuffer=t.createFramebuffer(),this.height=this.width=0,this.colorAttachments=[],this.depthStencilAttachment=this.stencilAttachment=this.depthAttachment=null}function m(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function g(e){t.deleteFramebuffer(e.framebuffer),e.framebuffer=null,a.framebufferCount--,delete M[e.id]}function v(e){var n;t.bindFramebuffer(36160,e.framebuffer);var i=e.colorAttachments;for(n=0;ni;++i){for(u=0;ut;++t)r[t].resize(n);return e.width=e.height=n,e},_reglType:"framebufferCube",destroy:function(){r.forEach(function(t){t.destroy()})}})},clear:function(){Z(M).forEach(g)},restore:function(){x.cur=null,x.next=null,x.dirty=!0,Z(M).forEach(function(e){e.framebuffer=t.createFramebuffer(),v(e)})}})}function T(){this.w=this.z=this.y=this.x=this.state=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=5126,this.divisor=this.stride=this.offset=0}function E(t,e,r,n){function i(t,e,r,n){this.name=t,this.id=e,this.location=r,this.info=n}function a(t,e){for(var r=0;rt&&(t=e.stats.uniformsCount)}),t},r.getMaxAttributesCount=function(){var t=0;return h.forEach(function(e){e.stats.attributesCount>t&&(t=e.stats.attributesCount)}),t}),{clear:function(){var e=t.deleteShader.bind(t);Z(u).forEach(e),u={},Z(c).forEach(e),c={},h.forEach(function(e){t.deleteProgram(e.program)}),h.length=0,f={},r.shaderCount=0},program:function(t,e,n){var i=f[e];i||(i=f[e]={});var a=i[t];return a||(a=new s(e,t),r.shaderCount++,l(a),i[t]=a,h.push(a)),a},restore:function(){u={},c={};for(var t=0;t"+e+"?"+i+".constant["+e+"]:0;"}).join(""),"}}else{","if(",o,"(",i,".buffer)){",c,"=",s,".createStream(",34962,",",i,".buffer);","}else{",c,"=",s,".getBuffer(",i,".buffer);","}",f,'="type" in ',i,"?",a.glTypes,"[",i,".type]:",c,".dtype;",l.normalized,"=!!",i,".normalized;"),n("size"),n("offset"),n("stride"),n("divisor"),r("}}"),r.exit("if(",l.isStream,"){",s,".destroyStream(",c,");","}"),l})}),o}function k(t,e,r,n,i){var o=_(t),s=function(t,e,r){function n(t){if(t in i){var r=i[t];t=!0;var n,o,s=0|r.x,l=0|r.y;return"width"in r?n=0|r.width:t=!1,"height"in r?o=0|r.height:t=!1,new P(!t&&e&&e.thisDep,!t&&e&&e.contextDep,!t&&e&&e.propDep,function(t,e){var i=t.shared.context,a=n;"width"in r||(a=e.def(i,".","framebufferWidth","-",s));var u=o;return"height"in r||(u=e.def(i,".","framebufferHeight","-",l)),[s,l,a,u]})}if(t in a){var u=a[t];return t=R(u,function(t,e){var r=t.invoke(e,u),n=t.shared.context,i=e.def(r,".x|0"),a=e.def(r,".y|0");return[i,a,e.def('"width" in ',r,"?",r,".width|0:","(",n,".","framebufferWidth","-",i,")"),r=e.def('"height" in ',r,"?",r,".height|0:","(",n,".","framebufferHeight","-",a,")")]}),e&&(t.thisDep=t.thisDep||e.thisDep,t.contextDep=t.contextDep||e.contextDep,t.propDep=t.propDep||e.propDep),t}return e?new P(e.thisDep,e.contextDep,e.propDep,function(t,e){var r=t.shared.context;return[0,0,e.def(r,".","framebufferWidth"),e.def(r,".","framebufferHeight")]}):null}var i=t.static,a=t.dynamic;if(t=n("viewport")){var o=t;t=new P(t.thisDep,t.contextDep,t.propDep,function(t,e){var r=o.append(t,e),n=t.shared.context;return e.set(n,".viewportWidth",r[2]),e.set(n,".viewportHeight",r[3]),r})}return{viewport:t,scissor_box:n("scissor.box")}}(t,o),l=A(t),u=function(t,e){var r=t.static,n=t.dynamic,i={};return nt.forEach(function(t){function e(e,a){if(t in r){var s=e(r[t]);i[o]=N(function(){return s})}else if(t in n){var l=n[t];i[o]=R(l,function(t,e){return a(t,e,t.invoke(e,l))})}}var o=v(t);switch(t){case"cull.enable":case"blend.enable":case"dither":case"stencil.enable":case"depth.enable":case"scissor.enable":case"polygonOffset.enable":case"sample.alpha":case"sample.enable":case"depth.mask":return e(function(t){return t},function(t,e,r){return r});case"depth.func":return e(function(t){return At[t]},function(t,e,r){return e.def(t.constants.compareFuncs,"[",r,"]")});case"depth.range":return e(function(t){return t},function(t,e,r){return[e.def("+",r,"[0]"),e=e.def("+",r,"[1]")]});case"blend.func":return e(function(t){return[wt["srcRGB"in t?t.srcRGB:t.src],wt["dstRGB"in t?t.dstRGB:t.dst],wt["srcAlpha"in t?t.srcAlpha:t.src],wt["dstAlpha"in t?t.dstAlpha:t.dst]]},function(t,e,r){function n(t,n){return e.def('"',t,n,'" in ',r,"?",r,".",t,n,":",r,".",t)}t=t.constants.blendFuncs;var i=n("src","RGB"),a=n("dst","RGB"),o=(i=e.def(t,"[",i,"]"),e.def(t,"[",n("src","Alpha"),"]"));return[i,a=e.def(t,"[",a,"]"),o,t=e.def(t,"[",n("dst","Alpha"),"]")]});case"blend.equation":return e(function(t){return"string"==typeof t?[$[t],$[t]]:"object"==typeof t?[$[t.rgb],$[t.alpha]]:void 0},function(t,e,r){var n=t.constants.blendEquations,i=e.def(),a=e.def();return(t=t.cond("typeof ",r,'==="string"')).then(i,"=",a,"=",n,"[",r,"];"),t.else(i,"=",n,"[",r,".rgb];",a,"=",n,"[",r,".alpha];"),e(t),[i,a]});case"blend.color":return e(function(t){return a(4,function(e){return+t[e]})},function(t,e,r){return a(4,function(t){return e.def("+",r,"[",t,"]")})});case"stencil.mask":return e(function(t){return 0|t},function(t,e,r){return e.def(r,"|0")});case"stencil.func":return e(function(t){return[At[t.cmp||"keep"],t.ref||0,"mask"in t?t.mask:-1]},function(t,e,r){return[t=e.def('"cmp" in ',r,"?",t.constants.compareFuncs,"[",r,".cmp]",":",7680),e.def(r,".ref|0"),e=e.def('"mask" in ',r,"?",r,".mask|0:-1")]});case"stencil.opFront":case"stencil.opBack":return e(function(e){return["stencil.opBack"===t?1029:1028,Mt[e.fail||"keep"],Mt[e.zfail||"keep"],Mt[e.zpass||"keep"]]},function(e,r,n){function i(t){return r.def('"',t,'" in ',n,"?",a,"[",n,".",t,"]:",7680)}var a=e.constants.stencilOps;return["stencil.opBack"===t?1029:1028,i("fail"),i("zfail"),i("zpass")]});case"polygonOffset.offset":return e(function(t){return[0|t.factor,0|t.units]},function(t,e,r){return[e.def(r,".factor|0"),e=e.def(r,".units|0")]});case"cull.face":return e(function(t){var e=0;return"front"===t?e=1028:"back"===t&&(e=1029),e},function(t,e,r){return e.def(r,'==="front"?',1028,":",1029)});case"lineWidth":return e(function(t){return t},function(t,e,r){return r});case"frontFace":return e(function(t){return kt[t]},function(t,e,r){return e.def(r+'==="cw"?2304:2305')});case"colorMask":return e(function(t){return t.map(function(t){return!!t})},function(t,e,r){return a(4,function(t){return"!!"+r+"["+t+"]"})});case"sample.coverage":return e(function(t){return["value"in t?t.value:1,!!t.invert]},function(t,e,r){return[e.def('"value" in ',r,"?+",r,".value:1"),e=e.def("!!",r,".invert")]})}}),i}(t),c=w(t),f=s.viewport;return f&&(u.viewport=f),(s=s[f=v("scissor.box")])&&(u[f]=s),(o={framebuffer:o,draw:l,shader:c,state:u,dirty:s=0>1)",s],");")}function e(){r(l,".drawArraysInstancedANGLE(",[d,m,g,s],");")}p?y?t():(r("if(",p,"){"),t(),r("}else{"),e(),r("}")):e()}function o(){function t(){r(c+".drawElements("+[d,g,v,m+"<<(("+v+"-5121)>>1)"]+");")}function e(){r(c+".drawArrays("+[d,m,g]+");")}p?y?t():(r("if(",p,"){"),t(),r("}else{"),e(),r("}")):e()}var s,l,u=t.shared,c=u.gl,f=u.draw,h=n.draw,p=function(){var i=h.elements,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a)):i=a.def(f,".","elements"),i&&a("if("+i+")"+c+".bindBuffer(34963,"+i+".buffer.buffer);"),i}(),d=i("primitive"),m=i("offset"),g=function(){var i=h.count,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a)):i=a.def(f,".","count"),i}();if("number"==typeof g){if(0===g)return}else r("if(",g,"){"),r.exit("}");K&&(s=i("instances"),l=t.instancing);var v=p+".type",y=h.elements&&I(h.elements);K&&("number"!=typeof s||0<=s)?"string"==typeof s?(r("if(",s,">0){"),a(),r("}else if(",s,"<0){"),o(),r("}")):a():o()}function q(t,e,r,n,i){return i=(e=b()).proc("body",i),K&&(e.instancing=i.def(e.shared.extensions,".angle_instanced_arrays")),t(e,i,r,n),e.compile().body}function H(t,e,r,n){L(t,e),B(t,e,r,n.attributes,function(){return!0}),j(t,e,r,n.uniforms,function(){return!0}),V(t,e,e,r)}function G(t,e,r,n){function i(){return!0}t.batchId="a1",L(t,e),B(t,e,r,n.attributes,i),j(t,e,r,n.uniforms,i),V(t,e,e,r)}function W(t,e,r,n){function i(t){return t.contextDep&&o||t.propDep}function a(t){return!i(t)}L(t,e);var o=r.contextDep,s=e.def(),l=e.def();t.shared.props=l,t.batchId=s;var u=t.scope(),c=t.scope();e(u.entry,"for(",s,"=0;",s,"<","a1",";++",s,"){",l,"=","a0","[",s,"];",c,"}",u.exit),r.needsContext&&T(t,c,r.context),r.needsFramebuffer&&E(t,c,r.framebuffer),C(t,c,r.state,i),r.profile&&i(r.profile)&&F(t,c,r,!1,!0),n?(B(t,u,r,n.attributes,a),B(t,c,r,n.attributes,i),j(t,u,r,n.uniforms,a),j(t,c,r,n.uniforms,i),V(t,u,c,r)):(e=t.global.def("{}"),n=r.shader.progVar.append(t,c),l=c.def(n,".id"),u=c.def(e,"[",l,"]"),c(t.shared.gl,".useProgram(",n,".program);","if(!",u,"){",u,"=",e,"[",l,"]=",t.link(function(e){return q(G,t,r,e,2)}),"(",n,");}",u,".call(this,a0[",s,"],",s,");"))}function Y(t,r){function n(e){var n=r.shader[e];n&&i.set(a.shader,"."+e,n.append(t,i))}var i=t.proc("scope",3);t.batchId="a2";var a=t.shared,o=a.current;T(t,i,r.context),r.framebuffer&&r.framebuffer.append(t,i),D(Object.keys(r.state)).forEach(function(e){var n=r.state[e].append(t,i);g(n)?n.forEach(function(r,n){i.set(t.next[e],"["+n+"]",r)}):i.set(a.next,"."+e,n)}),F(t,i,r,!0,!0),["elements","offset","count","instances","primitive"].forEach(function(e){var n=r.draw[e];n&&i.set(a.draw,"."+e,""+n.append(t,i))}),Object.keys(r.uniforms).forEach(function(n){i.set(a.uniforms,"["+e.id(n)+"]",r.uniforms[n].append(t,i))}),Object.keys(r.attributes).forEach(function(e){var n=r.attributes[e].append(t,i),a=t.scopeAttrib(e);Object.keys(new X).forEach(function(t){i.set(a,"."+t,n[t])})}),n("vert"),n("frag"),0=--this.refCount&&o(this)},i.profile&&(n.getTotalRenderbufferSize=function(){var t=0;return Object.keys(c).forEach(function(e){t+=c[e].stats.size}),t}),{create:function(e,r){function o(e,r){var n=0,a=0,c=32854;if("object"==typeof e&&e?("shape"in e?(n=0|(a=e.shape)[0],a=0|a[1]):("radius"in e&&(n=a=0|e.radius),"width"in e&&(n=0|e.width),"height"in e&&(a=0|e.height)),"format"in e&&(c=s[e.format])):"number"==typeof e?(n=0|e,a="number"==typeof r?0|r:n):e||(n=a=1),n!==u.width||a!==u.height||c!==u.format)return o.width=u.width=n,o.height=u.height=a,u.format=c,t.bindRenderbuffer(36161,u.renderbuffer),t.renderbufferStorage(36161,c,n,a),i.profile&&(u.stats.size=gt[u.format]*u.width*u.height),o.format=l[u.format],o}var u=new a(t.createRenderbuffer());return c[u.id]=u,n.renderbufferCount++,o(e,r),o.resize=function(e,r){var n=0|e,a=0|r||n;return n===u.width&&a===u.height?o:(o.width=u.width=n,o.height=u.height=a,t.bindRenderbuffer(36161,u.renderbuffer),t.renderbufferStorage(36161,u.format,n,a),i.profile&&(u.stats.size=gt[u.format]*u.width*u.height),o)},o._reglType="renderbuffer",o._renderbuffer=u,i.profile&&(o.stats=u.stats),o.destroy=function(){u.decRef()},o},clear:function(){Z(c).forEach(o)},restore:function(){Z(c).forEach(function(e){e.renderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,e.renderbuffer),t.renderbufferStorage(36161,e.format,e.width,e.height)}),t.bindRenderbuffer(36161,null)}}},yt=[];yt[6408]=4,yt[6407]=3;var xt=[];xt[5121]=1,xt[5126]=4,xt[36193]=2;var bt=["x","y","z","w"],_t="blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset".split(" "),wt={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},At={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},Mt={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},kt={cw:2304,ccw:2305},Tt=new P(!1,!1,!1,function(){});return function(t){function e(){if(0===X.length)w&&w.update(),Q=null;else{Q=q.next(e),f();for(var t=X.length-1;0<=t;--t){var r=X[t];r&&r(O,null,0)}g.flush(),w&&w.update()}}function r(){!Q&&0=X.length&&n()}}}}function c(){var t=Y.viewport,e=Y.scissor_box;t[0]=t[1]=e[0]=e[1]=0,O.viewportWidth=O.framebufferWidth=O.drawingBufferWidth=t[2]=e[2]=g.drawingBufferWidth,O.viewportHeight=O.framebufferHeight=O.drawingBufferHeight=t[3]=e[3]=g.drawingBufferHeight}function f(){O.tick+=1,O.time=m(),c(),G.procs.poll()}function h(){c(),G.procs.refresh(),w&&w.update()}function m(){return(H()-A)/1e3}if(!(t=i(t)))return null;var g=t.gl,v=g.getContextAttributes();g.isContextLost();var y=function(t,e){function r(e){var r;e=e.toLowerCase();try{r=n[e]=t.getExtension(e)}catch(t){}return!!r}for(var n={},i=0;ie;++e)tt(j({framebuffer:t.framebuffer.faces[e]},t),l);else tt(t,l);else l(0,t)},prop:U.define.bind(null,1),context:U.define.bind(null,2),this:U.define.bind(null,3),draw:s({}),buffer:function(t){return D.create(t,34962,!1,!1)},elements:function(t){return P.create(t,!1)},texture:N.create2D,cube:N.createCube,renderbuffer:R.create,framebuffer:V.create,framebufferCube:V.createCube,attributes:v,frame:u,on:function(t,e){var r;switch(t){case"frame":return u(e);case"lost":r=$;break;case"restore":r=J;break;case"destroy":r=K}return r.push(e),{cancel:function(){for(var t=0;t=r)return i.substr(0,r);for(;r>i.length&&e>1;)1&e&&(i+=t),e>>=1,t+=t;return i=(i+=t).substr(0,r)}},{}],1344:[function(t,e,r){(function(t){e.exports=t.performance&&t.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],1345:[function(t,e,r){"use strict";e.exports=function(t){for(var e=t.length,r=t[t.length-1],n=e,i=e-2;i>=0;--i){var a=r,o=t[i],s=(r=a+o)-a,l=o-s;l&&(t[--n]=r,r=l)}for(var u=0,i=n;i>1;return["sum(",t(e.slice(0,r)),",",t(e.slice(r)),")"].join("")}(e);var n}function c(t){return new Function("sum","scale","prod","compress",["function robustDeterminant",t,"(m){return compress(",u(function(t){for(var e=new Array(t),r=0;r>1;return["sum(",u(t.slice(0,e)),",",u(t.slice(e)),")"].join("")}function c(t,e){if("m"===t.charAt(0)){if("w"===e.charAt(0)){var r=t.split("[");return["w",e.substr(1),"m",r[0].substr(1)].join("")}return["prod(",t,",",e,")"].join("")}return c(e,t)}function f(t){if(2===t.length)return[["diff(",c(t[0][0],t[1][1]),",",c(t[1][0],t[0][1]),")"].join("")];for(var e=[],r=0;r0&&r.push(","),r.push("[");for(var o=0;o0&&r.push(","),o===i?r.push("+b[",a,"]"):r.push("+A[",a,"][",o,"]");r.push("]")}r.push("]),")}r.push("det(A)]}return ",e);var s=new Function("det",r.join(""));return s(t<6?n[t]:n)}var o=[function(){return[0]},function(t,e){return[[e[0]],[t[0][0]]]}];!function(){for(;o.length>1;return["sum(",u(t.slice(0,e)),",",u(t.slice(e)),")"].join("")}function c(t){if(2===t.length)return[["sum(prod(",t[0][0],",",t[1][1],"),prod(-",t[0][1],",",t[1][0],"))"].join("")];for(var e=[],r=0;r0){if(a<=0)return o;n=i+a}else{if(!(i<0))return o;if(a>=0)return o;n=-(i+a)}var s=3.3306690738754716e-16*n;return o>=s||o<=-s?o:h(t,e,r)},function(t,e,r,n){var i=t[0]-n[0],a=e[0]-n[0],o=r[0]-n[0],s=t[1]-n[1],l=e[1]-n[1],u=r[1]-n[1],c=t[2]-n[2],f=e[2]-n[2],h=r[2]-n[2],d=a*u,m=o*l,g=o*s,v=i*u,y=i*l,x=a*s,b=c*(d-m)+f*(g-v)+h*(y-x),_=7.771561172376103e-16*((Math.abs(d)+Math.abs(m))*Math.abs(c)+(Math.abs(g)+Math.abs(v))*Math.abs(f)+(Math.abs(y)+Math.abs(x))*Math.abs(h));return b>_||-b>_?b:p(t,e,r,n)}];!function(){for(;d.length<=s;)d.push(f(d.length));for(var t=[],r=["slow"],n=0;n<=s;++n)t.push("a"+n),r.push("o"+n);var i=["function getOrientation(",t.join(),"){switch(arguments.length){case 0:case 1:return 0;"];for(n=2;n<=s;++n)i.push("case ",n,":return o",n,"(",t.slice(0,n).join(),");");i.push("}var s=new Array(arguments.length);for(var i=0;i0&&o>0||a<0&&o<0)return!1;var s=n(r,t,e),l=n(i,t,e);if(s>0&&l>0||s<0&&l<0)return!1;if(0===a&&0===o&&0===s&&0===l)return function(t,e,r,n){for(var i=0;i<2;++i){var a=t[i],o=e[i],s=Math.min(a,o),l=Math.max(a,o),u=r[i],c=n[i],f=Math.min(u,c),h=Math.max(u,c);if(h=n?(i=f,(l+=1)=n?(i=f,(l+=1)>1,v=E[2*m+1];","if(v===b){return m}","if(b0&&l.push(","),l.push("[");for(var n=0;n0&&l.push(","),l.push("B(C,E,c[",i[0],"],c[",i[1],"])")}l.push("]")}l.push(");")}}for(var a=t+1;a>1;--a){a>1,s=a(t[o],e);s<=0?(0===s&&(i=o),r=o+1):s>0&&(n=o-1)}return i}function c(t,e){for(var r=new Array(t.length),i=0,o=r.length;i=t.length||0!==a(t[g],s)););}return r}function f(t,e){if(e<0)return[];for(var r=[],i=(1<>>c&1&&u.push(i[c]);e.push(u)}return s(e)},r.skeleton=f,r.boundary=function(t){for(var e=[],r=0,n=t.length;r>1:(t>>1)-1}function x(t){for(var e=v(t);;){var r=e,n=2*t+1,i=2*(t+1),a=t;if(n0;){var r=y(t);if(r>=0){var n=v(r);if(e0){var t=M[0];return g(0,E-1),E-=1,x(0),t}return-1}function w(t,e){var r=M[t];return u[r]===e?t:(u[r]=-1/0,b(t),_(),u[r]=e,b((E+=1)-1))}function A(t){if(!c[t]){c[t]=!0;var e=s[t],r=l[t];s[r]>=0&&(s[r]=e),l[e]>=0&&(l[e]=r),k[e]>=0&&w(k[e],m(e)),k[r]>=0&&w(k[r],m(r))}}for(var M=[],k=new Array(a),f=0;f>1;f>=0;--f)x(f);for(;;){var S=_();if(S<0||u[S]>r)break;A(S)}for(var C=[],f=0;f=0&&r>=0&&e!==r){var n=k[e],i=k[r];n!==i&&O.push([n,i])}}),i.unique(i.normalize(O)),{positions:C,edges:O}};var n=t("robust-orientation"),i=t("simplicial-complex")},{"robust-orientation":1350,"simplicial-complex":1361}],1364:[function(t,e,r){"use strict";e.exports=function(t,e){var r,a,o,s;if(e[0][0]e[1][0]))return i(e,t);r=e[1],a=e[0]}if(t[0][0]t[1][0]))return-i(t,e);o=t[1],s=t[0]}var l=n(r,a,s),u=n(r,a,o);if(l<0){if(u<=0)return l}else if(l>0){if(u>=0)return l}else if(u)return u;if(l=n(s,o,a),u=n(s,o,r),l<0){if(u<=0)return l}else if(l>0){if(u>=0)return l}else if(u)return u;return a[0]-s[0]};var n=t("robust-orientation");function i(t,e){var r,i,a,o;if(e[0][0]e[1][0])){var s=Math.min(t[0][1],t[1][1]),l=Math.max(t[0][1],t[1][1]),u=Math.min(e[0][1],e[1][1]),c=Math.max(e[0][1],e[1][1]);return lc?s-c:l-c}r=e[1],i=e[0]}t[0][1]0)if(e[0]!==o[1][0])r=t,t=t.right;else{if(l=u(t.right,e))return l;t=t.left}else{if(e[0]!==o[1][0])return t;var l;if(l=u(t.right,e))return l;t=t.left}}return r}function c(t,e,r,n){this.y=t,this.index=e,this.start=r,this.closed=n}function f(t,e,r,n){this.x=t,this.segment=e,this.create=r,this.index=n}s.prototype.castUp=function(t){var e=n.le(this.coordinates,t[0]);if(e<0)return-1;this.slabs[e];var r=u(this.slabs[e],t),i=-1;if(r&&(i=r.value),this.coordinates[e]===t[0]){var s=null;if(r&&(s=r.key),e>0){var c=u(this.slabs[e-1],t);c&&(s?o(c.key,s)>0&&(s=c.key,i=c.value):(i=c.value,s=c.key))}var f=this.horizontal[e];if(f.length>0){var h=n.ge(f,t[1],l);if(h=f.length)return i;p=f[h]}}if(p.start)if(s){var d=a(s[0],s[1],[t[0],p.y]);s[0][0]>s[1][0]&&(d=-d),d>0&&(i=p.index)}else i=p.index;else p.y!==t[1]&&(i=p.index)}}}return i}},{"./lib/order-segments":1364,"binary-search-bounds":1365,"functional-red-black-tree":184,"robust-orientation":1350}],1367:[function(t,e,r){"use strict";var n=t("robust-dot-product"),i=t("robust-sum");function a(t,e){var r=i(n(t,e),[e[e.length-1]]);return r[r.length-1]}function o(t,e,r,n){var i=-e/(n-e);i<0?i=0:i>1&&(i=1);for(var a=1-i,o=t.length,s=new Array(o),l=0;l0||i>0&&c<0){var f=o(s,c,l,i);r.push(f),n.push(f.slice())}c<0?n.push(l.slice()):c>0?r.push(l.slice()):(r.push(l.slice()),n.push(l.slice())),i=c}return{positive:r,negative:n}},e.exports.positive=function(t,e){for(var r=[],n=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l0||n>0&&u<0)&&r.push(o(i,u,s,n)),u>=0&&r.push(s.slice()),n=u}return r},e.exports.negative=function(t,e){for(var r=[],n=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l0||n>0&&u<0)&&r.push(o(i,u,s,n)),u<=0&&r.push(s.slice()),n=u}return r}},{"robust-dot-product":1347,"robust-sum":1355}],1368:[function(t,e,r){"use strict";var n=t("parenthesis");e.exports=function(t,e,r){if(null==t)throw Error("First argument should be a string");if(null==e)throw Error("Separator should be a string or a RegExp");r?("string"==typeof r||Array.isArray(r))&&(r={ignore:r}):r={},null==r.escape&&(r.escape=!0),null==r.ignore?r.ignore=["[]","()","{}","<>",'""',"''","``","\u201c\u201d","\xab\xbb"]:("string"==typeof r.ignore&&(r.ignore=[r.ignore]),r.ignore=r.ignore.map(function(t){return 1===t.length&&(t+=t),t}));var i=n.parse(t,{flat:!0,brackets:r.ignore}),a=i[0].split(e);if(r.escape){for(var o=[],s=0;s0;){e=u[u.length-1];var p=t[e];if(a[e]=0&&s[e].push(o[m])}a[e]=d}else{if(n[e]===r[e]){for(var g=[],v=[],y=0,d=l.length-1;d>=0;--d){var x=l[d];if(i[x]=!1,g.push(x),v.push(s[x]),y+=s[x].length,o[x]=f.length,x===e){l.length=d;break}}f.push(g);for(var b=new Array(y),d=0;d c)|0 },"),"generic"===e&&a.push("getters:[0],");for(var s=[],l=[],u=0;u>>7){");for(var u=0;u<1<<(1<128&&u%128==0){f.length>0&&h.push("}}");var p="vExtra"+f.length;a.push("case ",u>>>7,":",p,"(m&0x7f,",l.join(),");break;"),h=["function ",p,"(m,",l.join(),"){switch(m){"],f.push(h)}h.push("case ",127&u,":");for(var d=new Array(r),m=new Array(r),g=new Array(r),v=new Array(r),y=0,x=0;xx)&&!(u&1<<_)!=!(u&1<0&&(k="+"+g[b]+"*c");var T=d[b].length/y*.5,E=.5+v[b]/y*.5;M.push("d"+b+"-"+E+"-"+T+"*("+d[b].join("+")+k+")/("+m[b].join("+")+")")}h.push("a.push([",M.join(),"]);","break;")}a.push("}},"),f.length>0&&h.push("}}");for(var S=[],u=0;u<1<1&&(a=1),a<-1&&(a=-1),i*Math.acos(a)};r.default=function(t){var e=t.px,r=t.py,l=t.cx,u=t.cy,c=t.rx,f=t.ry,h=t.xAxisRotation,p=void 0===h?0:h,d=t.largeArcFlag,m=void 0===d?0:d,g=t.sweepFlag,v=void 0===g?0:g,y=[];if(0===c||0===f)return[];var x=Math.sin(p*i/360),b=Math.cos(p*i/360),_=b*(e-l)/2+x*(r-u)/2,w=-x*(e-l)/2+b*(r-u)/2;if(0===_&&0===w)return[];c=Math.abs(c),f=Math.abs(f);var A=Math.pow(_,2)/Math.pow(c,2)+Math.pow(w,2)/Math.pow(f,2);A>1&&(c*=Math.sqrt(A),f*=Math.sqrt(A));var M=function(t,e,r,n,a,o,l,u,c,f,h,p){var d=Math.pow(a,2),m=Math.pow(o,2),g=Math.pow(h,2),v=Math.pow(p,2),y=d*m-d*v-m*g;y<0&&(y=0),y/=d*v+m*g;var x=(y=Math.sqrt(y)*(l===u?-1:1))*a/o*p,b=y*-o/a*h,_=f*x-c*b+(t+r)/2,w=c*x+f*b+(e+n)/2,A=(h-x)/a,M=(p-b)/o,k=(-h-x)/a,T=(-p-b)/o,E=s(1,0,A,M),S=s(A,M,k,T);return 0===u&&S>0&&(S-=i),1===u&&S<0&&(S+=i),[_,w,E,S]}(e,r,l,u,c,f,m,v,x,b,_,w),k=n(M,4),T=k[0],E=k[1],S=k[2],C=k[3],L=Math.max(Math.ceil(Math.abs(C)/(i/4)),1);C/=L;for(var O=0;Oe[2]&&(e[2]=u[c+0]),u[c+1]>e[3]&&(e[3]=u[c+1]);return e}},{"abs-svg-path":4,assert:12,"is-svg-path":428,"normalize-svg-path":632,"parse-svg-path":640}],1373:[function(t,e,r){"use strict";var n,i=t("svg-path-bounds"),a=t("parse-svg-path"),o=t("draw-svg-path"),s=t("is-svg-path"),l=t("bitmap-sdf"),u=document.createElement("canvas"),c=u.getContext("2d");e.exports=function(t,e){if(!s(t))throw Error("Argument should be valid svg path string");e||(e={});var r,f;e.shape?(r=e.shape[0],f=e.shape[1]):(r=u.width=e.w||e.width||200,f=u.height=e.h||e.height||200);var h=Math.min(r,f),p=e.stroke||0,d=e.viewbox||e.viewBox||i(t),m=[r/(d[2]-d[0]),f/(d[3]-d[1])],g=Math.min(m[0]||0,m[1]||0)/2;c.fillStyle="black",c.fillRect(0,0,r,f),c.fillStyle="white",p&&("number"!=typeof p&&(p=1),c.strokeStyle=p>0?"white":"black",c.lineWidth=Math.abs(p));if(c.translate(.5*r,.5*f),c.scale(g,g),function(){if(null!=n)return n;var t=document.createElement("canvas").getContext("2d");if(t.canvas.width=t.canvas.height=1,!window.Path2D)return n=!1;var e=new Path2D("M0,0h1v1h-1v-1Z");t.fillStyle="black",t.fill(e);var r=t.getImageData(0,0,1,1);return n=r&&r.data&&255===r.data[3]}()){var v=new Path2D(t);c.fill(v),p&&c.stroke(v)}else{var y=a(t);o(c,y),c.fill(),p&&c.stroke()}return c.setTransform(1,0,0,1,0,0),l(c,{cutoff:null!=e.cutoff?e.cutoff:.5,radius:null!=e.radius?e.radius:.5*h})}},{"bitmap-sdf":34,"draw-svg-path":114,"is-svg-path":428,"parse-svg-path":640,"svg-path-bounds":1372}],1374:[function(t,e,r){(function(r){"use strict";e.exports=function t(e,r,i){var i=i||{};var o=a[e];o||(o=a[e]={" ":{data:new Float32Array(0),shape:.2}});var s=o[r];if(!s)if(r.length<=1||!/\d/.test(r))s=o[r]=function(t){for(var e=t.cells,r=t.positions,n=new Float32Array(6*e.length),i=0,a=0,o=0;o0&&(f+=.02);for(var p=new Float32Array(c),d=0,m=-.5*f,h=0;h1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}if(t=L(t,360),e=L(e,100),r=L(r,100),0===e)n=i=a=r;else{var s=r<.5?r*(1+e):r+e-r*e,l=2*r-s;n=o(l,s,t+1/3),i=o(l,s,t),a=o(l,s,t-1/3)}return{r:255*n,g:255*i,b:255*a}}(e.h,l,c),f=!0,h="hsl"),e.hasOwnProperty("a")&&(a=e.a));var p,d,m;return a=C(a),{ok:f,format:e.format||h,r:o(255,s(i.r,0)),g:o(255,s(i.g,0)),b:o(255,s(i.b,0)),a:a}}(e);this._originalInput=e,this._r=c.r,this._g=c.g,this._b=c.b,this._a=c.a,this._roundA=a(100*this._a)/100,this._format=l.format||c.format,this._gradientType=l.gradientType,this._r<1&&(this._r=a(this._r)),this._g<1&&(this._g=a(this._g)),this._b<1&&(this._b=a(this._b)),this._ok=c.ok,this._tc_id=i++}function c(t,e,r){t=L(t,255),e=L(e,255),r=L(r,255);var n,i,a=s(t,e,r),l=o(t,e,r),u=(a+l)/2;if(a==l)n=i=0;else{var c=a-l;switch(i=u>.5?c/(2-a-l):c/(a+l),a){case t:n=(e-r)/c+(e>1)+720)%360;--e;)n.h=(n.h+i)%360,a.push(u(n));return a}function T(t,e){e=e||6;for(var r=u(t).toHsv(),n=r.h,i=r.s,a=r.v,o=[],s=1/e;e--;)o.push(u({h:n,s:i,v:a})),a=(a+s)%1;return o}u.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var e,r,n,i=this.toRgb();return e=i.r/255,r=i.g/255,n=i.b/255,.2126*(e<=.03928?e/12.92:t.pow((e+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:t.pow((r+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:t.pow((n+.055)/1.055,2.4))},setAlpha:function(t){return this._a=C(t),this._roundA=a(100*this._a)/100,this},toHsv:function(){var t=f(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=f(this._r,this._g,this._b),e=a(360*t.h),r=a(100*t.s),n=a(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+n+"%)":"hsva("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var t=c(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=c(this._r,this._g,this._b),e=a(360*t.h),r=a(100*t.s),n=a(100*t.l);return 1==this._a?"hsl("+e+", "+r+"%, "+n+"%)":"hsla("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHex:function(t){return h(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return function(t,e,r,n,i){var o=[D(a(t).toString(16)),D(a(e).toString(16)),D(a(r).toString(16)),D(I(n))];if(i&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join("")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:a(this._r),g:a(this._g),b:a(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+a(this._r)+", "+a(this._g)+", "+a(this._b)+")":"rgba("+a(this._r)+", "+a(this._g)+", "+a(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:a(100*L(this._r,255))+"%",g:a(100*L(this._g,255))+"%",b:a(100*L(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+a(100*L(this._r,255))+"%, "+a(100*L(this._g,255))+"%, "+a(100*L(this._b,255))+"%)":"rgba("+a(100*L(this._r,255))+"%, "+a(100*L(this._g,255))+"%, "+a(100*L(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(S[h(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+p(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";if(t){var i=u(t);r="#"+p(i._r,i._g,i._b,i._a)}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex4"===t&&(r=this.toHex8String(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return u(this.toString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(v,arguments)},brighten:function(){return this._applyModification(y,arguments)},darken:function(){return this._applyModification(x,arguments)},desaturate:function(){return this._applyModification(d,arguments)},saturate:function(){return this._applyModification(m,arguments)},greyscale:function(){return this._applyModification(g,arguments)},spin:function(){return this._applyModification(b,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(k,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(T,arguments)},splitcomplement:function(){return this._applyCombination(M,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(A,arguments)}},u.fromRatio=function(t,e){if("object"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]="a"===n?t[n]:P(t[n]));t=r}return u(t,e)},u.equals=function(t,e){return!(!t||!e)&&u(t).toRgbString()==u(e).toRgbString()},u.random=function(){return u.fromRatio({r:l(),g:l(),b:l()})},u.mix=function(t,e,r){r=0===r?0:r||50;var n=u(t).toRgb(),i=u(e).toRgb(),a=r/100;return u({r:(i.r-n.r)*a+n.r,g:(i.g-n.g)*a+n.g,b:(i.b-n.b)*a+n.b,a:(i.a-n.a)*a+n.a})},u.readability=function(e,r){var n=u(e),i=u(r);return(t.max(n.getLuminance(),i.getLuminance())+.05)/(t.min(n.getLuminance(),i.getLuminance())+.05)},u.isReadable=function(t,e,r){var n,i,a=u.readability(t,e);switch(i=!1,(n=function(t){var e,r;e=((t=t||{level:"AA",size:"small"}).level||"AA").toUpperCase(),r=(t.size||"small").toLowerCase(),"AA"!==e&&"AAA"!==e&&(e="AA");"small"!==r&&"large"!==r&&(r="small");return{level:e,size:r}}(r)).level+n.size){case"AAsmall":case"AAAlarge":i=a>=4.5;break;case"AAlarge":i=a>=3;break;case"AAAsmall":i=a>=7}return i},u.mostReadable=function(t,e,r){var n,i,a,o,s=null,l=0;i=(r=r||{}).includeFallbackColors,a=r.level,o=r.size;for(var c=0;cl&&(l=n,s=u(e[c]));return u.isReadable(t,s,{level:a,size:o})||!i?s:(r.includeFallbackColors=!1,u.mostReadable(t,["#fff","#000"],r))};var E=u.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},S=u.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(E);function C(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function L(e,r){(function(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)})(e)&&(e="100%");var n=function(t){return"string"==typeof t&&-1!=t.indexOf("%")}(e);return e=o(r,s(0,parseFloat(e))),n&&(e=parseInt(e*r,10)/100),t.abs(e-r)<1e-6?1:e%r/parseFloat(r)}function O(t){return o(1,s(0,t))}function z(t){return parseInt(t,16)}function D(t){return 1==t.length?"0"+t:""+t}function P(t){return t<=1&&(t=100*t+"%"),t}function I(e){return t.round(255*parseFloat(e)).toString(16)}function N(t){return z(t)/255}var R,F,B,j=(F="[\\s|\\(]+("+(R="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+R+")[,|\\s]+("+R+")\\s*\\)?",B="[\\s|\\(]+("+R+")[,|\\s]+("+R+")[,|\\s]+("+R+")[,|\\s]+("+R+")\\s*\\)?",{CSS_UNIT:new RegExp(R),rgb:new RegExp("rgb"+F),rgba:new RegExp("rgba"+B),hsl:new RegExp("hsl"+F),hsla:new RegExp("hsla"+B),hsv:new RegExp("hsv"+F),hsva:new RegExp("hsva"+B),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function V(t){return!!j.CSS_UNIT.exec(t)}"undefined"!=typeof e&&e.exports?e.exports=u:window.tinycolor=u}(Math)},{}],1377:[function(t,e,r){"use strict";function n(t){if(t instanceof Float32Array)return t;if("number"==typeof t)return new Float32Array([t])[0];var e=new Float32Array(t);return e.set(t),e}e.exports=n,e.exports.float32=e.exports.float=n,e.exports.fract32=e.exports.fract=function(t){if("number"==typeof t)return n(t-n(t));for(var e=n(t),r=0,i=e.length;rf&&(f=l[0]),l[1]h&&(h=l[1])}function i(t){switch(t.type){case"GeometryCollection":t.geometries.forEach(i);break;case"Point":n(t.coordinates);break;case"MultiPoint":t.coordinates.forEach(n)}}if(!e){var a,o,s=r(t),l=new Array(2),u=1/0,c=u,f=-u,h=-u;for(o in t.arcs.forEach(function(t){for(var e=-1,r=t.length;++ef&&(f=l[0]),l[1]h&&(h=l[1])}),t.objects)i(t.objects[o]);e=t.bbox=[u,c,f,h]}return e},i=function(t,e){for(var r,n=t.length,i=n-e;i<--n;)r=t[i],t[i++]=t[n],t[n]=r};function a(t,e){var r=e.id,n=e.bbox,i=null==e.properties?{}:e.properties,a=o(t,e);return null==r&&null==n?{type:"Feature",properties:i,geometry:a}:null==n?{type:"Feature",id:r,properties:i,geometry:a}:{type:"Feature",id:r,bbox:n,properties:i,geometry:a}}function o(t,e){var n=r(t),a=t.arcs;function o(t,e){e.length&&e.pop();for(var r=a[t<0?~t:t],o=0,s=r.length;o1)n=function(t,e,r){var n,i=[],a=[];function o(t){var e=t<0?~t:t;(a[e]||(a[e]=[])).push({i:t,g:n})}function s(t){t.forEach(o)}function l(t){t.forEach(s)}return function t(e){switch(n=e,e.type){case"GeometryCollection":e.geometries.forEach(t);break;case"LineString":s(e.arcs);break;case"MultiLineString":case"Polygon":l(e.arcs);break;case"MultiPolygon":e.arcs.forEach(l)}}(e),a.forEach(null==r?function(t){i.push(t[0].i)}:function(t){r(t[0].g,t[t.length-1].g)&&i.push(t[0].i)}),i}(0,e,r);else for(i=0,n=new Array(a=t.arcs.length);i1)for(var a,o,u=1,c=l(i[0]);uc&&(o=i[0],i[0]=i[u],i[u]=o,c=a);return i})}}var c=function(t,e){for(var r=0,n=t.length;r>>1;t[i]=2))throw new Error("n must be \u22652");if(t.transform)throw new Error("already quantized");var r,i=n(t),a=i[0],o=(i[2]-a)/(e-1)||1,s=i[1],l=(i[3]-s)/(e-1)||1;function u(t){t[0]=Math.round((t[0]-a)/o),t[1]=Math.round((t[1]-s)/l)}function c(t){switch(t.type){case"GeometryCollection":t.geometries.forEach(c);break;case"Point":u(t.coordinates);break;case"MultiPoint":t.coordinates.forEach(u)}}for(r in t.arcs.forEach(function(t){for(var e,r,n,i=1,u=1,c=t.length,f=t[0],h=f[0]=Math.round((f[0]-a)/o),p=f[1]=Math.round((f[1]-s)/l);iMath.max(r,n)?i[2]=1:r>Math.max(e,n)?i[0]=1:i[1]=1;for(var a=0,o=0,l=0;l<3;++l)a+=t[l]*t[l],o+=i[l]*t[l];for(l=0;l<3;++l)i[l]-=o/a*t[l];return s(i,i),i}function h(t,e,r,i,a,o,s,l){this.center=n(r),this.up=n(i),this.right=n(a),this.radius=n([o]),this.angle=n([s,l]),this.angle.bounds=[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(t,e),this.computedCenter=this.center.curve(0),this.computedUp=this.up.curve(0),this.computedRight=this.right.curve(0),this.computedRadius=this.radius.curve(0),this.computedAngle=this.angle.curve(0),this.computedToward=[0,0,0],this.computedEye=[0,0,0],this.computedMatrix=new Array(16);for(var u=0;u<16;++u)this.computedMatrix[u]=.5;this.recalcMatrix(0)}var p=h.prototype;p.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},p.getDistanceLimits=function(t){var e=this.radius.bounds[0];return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},p.recalcMatrix=function(t){this.center.curve(t),this.up.curve(t),this.right.curve(t),this.radius.curve(t),this.angle.curve(t);for(var e=this.computedUp,r=this.computedRight,n=0,i=0,a=0;a<3;++a)i+=e[a]*r[a],n+=e[a]*e[a];var l=Math.sqrt(n),c=0;for(a=0;a<3;++a)r[a]-=e[a]*i/n,c+=r[a]*r[a],e[a]/=l;var f=Math.sqrt(c);for(a=0;a<3;++a)r[a]/=f;var h=this.computedToward;o(h,e,r),s(h,h);var p=Math.exp(this.computedRadius[0]),d=this.computedAngle[0],m=this.computedAngle[1],g=Math.cos(d),v=Math.sin(d),y=Math.cos(m),x=Math.sin(m),b=this.computedCenter,_=g*y,w=v*y,A=x,M=-g*x,k=-v*x,T=y,E=this.computedEye,S=this.computedMatrix;for(a=0;a<3;++a){var C=_*r[a]+w*h[a]+A*e[a];S[4*a+1]=M*r[a]+k*h[a]+T*e[a],S[4*a+2]=C,S[4*a+3]=0}var L=S[1],O=S[5],z=S[9],D=S[2],P=S[6],I=S[10],N=O*I-z*P,R=z*D-L*I,F=L*P-O*D,B=u(N,R,F);N/=B,R/=B,F/=B,S[0]=N,S[4]=R,S[8]=F;for(a=0;a<3;++a)E[a]=b[a]+S[2+4*a]*p;for(a=0;a<3;++a){c=0;for(var j=0;j<3;++j)c+=S[a+4*j]*E[j];S[12+a]=-c}S[15]=1},p.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r};var d=[0,0,0];p.rotate=function(t,e,r,n){if(this.angle.move(t,e,r),n){this.recalcMatrix(t);var i=this.computedMatrix;d[0]=i[2],d[1]=i[6],d[2]=i[10];for(var o=this.computedUp,s=this.computedRight,l=this.computedToward,u=0;u<3;++u)i[4*u]=o[u],i[4*u+1]=s[u],i[4*u+2]=l[u];a(i,i,n,d);for(u=0;u<3;++u)o[u]=i[4*u],s[u]=i[4*u+1];this.up.set(t,o[0],o[1],o[2]),this.right.set(t,s[0],s[1],s[2])}},p.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var i=this.computedMatrix,a=(Math.exp(this.computedRadius[0]),i[1]),o=i[5],s=i[9],l=u(a,o,s);a/=l,o/=l,s/=l;var c=i[0],f=i[4],h=i[8],p=c*a+f*o+h*s,d=u(c-=a*p,f-=o*p,h-=s*p),m=(c/=d)*e+a*r,g=(f/=d)*e+o*r,v=(h/=d)*e+s*r;this.center.move(t,m,g,v);var y=Math.exp(this.computedRadius[0]);y=Math.max(1e-4,y+n),this.radius.set(t,Math.log(y))},p.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},p.setMatrix=function(t,e,r,n){var a=1;"number"==typeof r&&(a=0|r),(a<0||a>3)&&(a=1);var o=(a+2)%3;e||(this.recalcMatrix(t),e=this.computedMatrix);var s=e[a],l=e[a+4],f=e[a+8];if(n){var h=Math.abs(s),p=Math.abs(l),d=Math.abs(f),m=Math.max(h,p,d);h===m?(s=s<0?-1:1,l=f=0):d===m?(f=f<0?-1:1,s=l=0):(l=l<0?-1:1,s=f=0)}else{var g=u(s,l,f);s/=g,l/=g,f/=g}var v,y,x=e[o],b=e[o+4],_=e[o+8],w=x*s+b*l+_*f,A=u(x-=s*w,b-=l*w,_-=f*w),M=l*(_/=A)-f*(b/=A),k=f*(x/=A)-s*_,T=s*b-l*x,E=u(M,k,T);if(M/=E,k/=E,T/=E,this.center.jump(t,H,G,W),this.radius.idle(t),this.up.jump(t,s,l,f),this.right.jump(t,x,b,_),2===a){var S=e[1],C=e[5],L=e[9],O=S*x+C*b+L*_,z=S*M+C*k+L*T;v=N<0?-Math.PI/2:Math.PI/2,y=Math.atan2(z,O)}else{var D=e[2],P=e[6],I=e[10],N=D*s+P*l+I*f,R=D*x+P*b+I*_,F=D*M+P*k+I*T;v=Math.asin(c(N)),y=Math.atan2(F,R)}this.angle.jump(t,y,v),this.recalcMatrix(t);var B=e[2],j=e[6],V=e[10],U=this.computedMatrix;i(U,e);var q=U[15],H=U[12]/q,G=U[13]/q,W=U[14]/q,Y=Math.exp(this.computedRadius[0]);this.center.jump(t,H-B*Y,G-j*Y,W-V*Y)},p.lastT=function(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},p.idle=function(t){this.center.idle(t),this.up.idle(t),this.right.idle(t),this.radius.idle(t),this.angle.idle(t)},p.flush=function(t){this.center.flush(t),this.up.flush(t),this.right.flush(t),this.radius.flush(t),this.angle.flush(t)},p.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},p.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||this.computedCenter;var i=(n=n||this.computedUp)[0],a=n[1],o=n[2],s=u(i,a,o);if(!(s<1e-6)){i/=s,a/=s,o/=s;var l=e[0]-r[0],f=e[1]-r[1],h=e[2]-r[2],p=u(l,f,h);if(!(p<1e-6)){l/=p,f/=p,h/=p;var d=this.computedRight,m=d[0],g=d[1],v=d[2],y=i*m+a*g+o*v,x=u(m-=y*i,g-=y*a,v-=y*o);if(!(x<.01&&(x=u(m=a*h-o*f,g=o*l-i*h,v=i*f-a*l))<1e-6)){m/=x,g/=x,v/=x,this.up.set(t,i,a,o),this.right.set(t,m,g,v),this.center.set(t,r[0],r[1],r[2]),this.radius.set(t,Math.log(p));var b=a*v-o*g,_=o*m-i*v,w=i*g-a*m,A=u(b,_,w),M=i*l+a*f+o*h,k=m*l+g*f+v*h,T=(b/=A)*l+(_/=A)*f+(w/=A)*h,E=Math.asin(c(M)),S=Math.atan2(T,k),C=this.angle._state,L=C[C.length-1],O=C[C.length-2];L%=2*Math.PI;var z=Math.abs(L+2*Math.PI-S),D=Math.abs(L-S),P=Math.abs(L-2*Math.PI-S);zr&&!f?"Unexpected type of argument in function "+l+" (expected: "+s.join(" or ")+", actual: "+o+", index: "+r+")":"Too few arguments in function "+l+" (expected: "+s.join(" or ")+", index: "+r+")":"Too many arguments in function "+l+" (expected: "+r+", actual: "+e+")";var p=new TypeError(a);return p.data=h,p}function i(t){this.name=t||"refs",this.categories={}}function a(t,e){if("string"==typeof t){var r=t.trim(),n="..."===r.substr(0,3);if(n&&(r=r.substr(3)),""===r)this.types=["any"];else{this.types=r.split("|");for(var i=0;ie&&(e=n)}return e}(l));f.push("function "+h+"("+p.join(", ")+") {"),f.push(' "use strict";'),f.push(" var name = "+JSON.stringify(t||"")+";"),f.push(u.toCode(r," ",!1)),f.push("}");var d=[r.toCode(),"return "+f.join("\n")].join("\n"),m=new Function(r.name,"createError",d)(r,n);return m.signatures=function(t){for(var e={},r=0;r0},a.prototype.contains=function(t){for(var e=0;ee.params.length)return 1;if(t.params.lengtho)return 1;if(i "+i+") {"),n.push(r+" var varArgs = [];"),n.push(r+" for (var i = "+i+"; i < arguments.length; i++) {"),n.push(r+" varArgs.push(arguments[i]);"),n.push(r+" }"),n.push(this.signature.toCode(t,r+" ")),n.push(r+"}");else{for(var s=function(r,n){for(var i=[],a=0;a "+r+") {",e+" throw createError(name, arguments.length, "+r+", arguments["+r+"]);",e+"}"].join("\n");for(var n={},i=[],a=0;a0?r.pop():new ArrayBuffer(t)}function h(t){return new Uint8Array(f(t),0,t)}function p(t){return new Uint16Array(f(2*t),0,t)}function d(t){return new Uint32Array(f(4*t),0,t)}function m(t){return new Int8Array(f(t),0,t)}function g(t){return new Int16Array(f(2*t),0,t)}function v(t){return new Int32Array(f(4*t),0,t)}function y(t){return new Float32Array(f(4*t),0,t)}function x(t){return new Float64Array(f(8*t),0,t)}function b(t){return o?new Uint8ClampedArray(f(t),0,t):h(t)}function _(t){return new DataView(f(t),0,t)}function w(t){t=i.nextPow2(t);var e=i.log2(t),r=u[e];return r.length>0?r.pop():new n(t)}r.free=function(t){if(n.isBuffer(t))u[i.log2(t.length)].push(t);else{if("[object ArrayBuffer]"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|i.log2(e);l[r].push(t)}},r.freeUint8=r.freeUint16=r.freeUint32=r.freeInt8=r.freeInt16=r.freeInt32=r.freeFloat32=r.freeFloat=r.freeFloat64=r.freeDouble=r.freeUint8Clamped=r.freeDataView=function(t){c(t.buffer)},r.freeArrayBuffer=c,r.freeBuffer=function(t){u[i.log2(t.length)].push(t)},r.malloc=function(t,e){if(void 0===e||"arraybuffer"===e)return f(t);switch(e){case"uint8":return h(t);case"uint16":return p(t);case"uint32":return d(t);case"int8":return m(t);case"int16":return g(t);case"int32":return v(t);case"float":case"float32":return y(t);case"double":case"float64":return x(t);case"uint8_clamped":return b(t);case"buffer":return w(t);case"data":case"dataview":return _(t);default:return null}return null},r.mallocArrayBuffer=f,r.mallocUint8=h,r.mallocUint16=p,r.mallocUint32=d,r.mallocInt8=m,r.mallocInt16=g,r.mallocInt32=v,r.mallocFloat32=r.mallocFloat=y,r.mallocFloat64=r.mallocDouble=x,r.mallocUint8Clamped=b,r.mallocDataView=_,r.mallocBuffer=w,r.clearCache=function(){for(var t=0;t<32;++t)s.UINT8[t].length=0,s.UINT16[t].length=0,s.UINT32[t].length=0,s.INT8[t].length=0,s.INT16[t].length=0,s.INT32[t].length=0,s.FLOAT[t].length=0,s.DOUBLE[t].length=0,s.UINT8C[t].length=0,l[t].length=0,u[t].length=0}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},t("buffer").Buffer)},{"bit-twiddle":33,buffer:46,dup:117}],1386:[function(t,e,r){"use strict";function n(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e=a)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}}),l=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),d(e)?n.showHidden=e:e&&r._extend(n,e),y(n.showHidden)&&(n.showHidden=!1),y(n.depth)&&(n.depth=2),y(n.colors)&&(n.colors=!1),y(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),c(n,t,n.depth)}function l(t,e){var r=s.styles[e];return r?"\x1b["+s.colors[r][0]+"m"+t+"\x1b["+s.colors[r][1]+"m":t}function u(t,e){return t}function c(t,e,n){if(t.customInspect&&e&&A(e.inspect)&&e.inspect!==r.inspect&&(!e.constructor||e.constructor.prototype!==e)){var i=e.inspect(n,t);return v(i)||(i=c(t,i,n)),i}var a=function(t,e){if(y(e))return t.stylize("undefined","undefined");if(v(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}if(g(e))return t.stylize(""+e,"number");if(d(e))return t.stylize(""+e,"boolean");if(m(e))return t.stylize("null","null")}(t,e);if(a)return a;var o=Object.keys(e),s=function(t){var e={};return t.forEach(function(t,r){e[t]=!0}),e}(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(e)),w(e)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return f(e);if(0===o.length){if(A(e)){var l=e.name?": "+e.name:"";return t.stylize("[Function"+l+"]","special")}if(x(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(_(e))return t.stylize(Date.prototype.toString.call(e),"date");if(w(e))return f(e)}var u,b="",M=!1,k=["{","}"];(p(e)&&(M=!0,k=["[","]"]),A(e))&&(b=" [Function"+(e.name?": "+e.name:"")+"]");return x(e)&&(b=" "+RegExp.prototype.toString.call(e)),_(e)&&(b=" "+Date.prototype.toUTCString.call(e)),w(e)&&(b=" "+f(e)),0!==o.length||M&&0!=e.length?n<0?x(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special"):(t.seen.push(e),u=M?function(t,e,r,n,i){for(var a=[],o=0,s=e.length;o=0&&0,t+e.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60)return r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1];return r[0]+e+" "+t.join(", ")+" "+r[1]}(u,b,k)):k[0]+b+k[1]}function f(t){return"["+Error.prototype.toString.call(t)+"]"}function h(t,e,r,n,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?s=l.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):l.set&&(s=t.stylize("[Setter]","special")),E(n,i)||(o="["+i+"]"),s||(t.seen.indexOf(l.value)<0?(s=m(r)?c(t,l.value,null):c(t,l.value,r-1)).indexOf("\n")>-1&&(s=a?s.split("\n").map(function(t){return" "+t}).join("\n").substr(2):"\n"+s.split("\n").map(function(t){return" "+t}).join("\n")):s=t.stylize("[Circular]","special")),y(o)){if(a&&i.match(/^\d+$/))return s;(o=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=t.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=t.stylize(o,"string"))}return o+": "+s}function p(t){return Array.isArray(t)}function d(t){return"boolean"==typeof t}function m(t){return null===t}function g(t){return"number"==typeof t}function v(t){return"string"==typeof t}function y(t){return void 0===t}function x(t){return b(t)&&"[object RegExp]"===M(t)}function b(t){return"object"==typeof t&&null!==t}function _(t){return b(t)&&"[object Date]"===M(t)}function w(t){return b(t)&&("[object Error]"===M(t)||t instanceof Error)}function A(t){return"function"==typeof t}function M(t){return Object.prototype.toString.call(t)}function k(t){return t<10?"0"+t.toString(10):t.toString(10)}r.debuglog=function(t){if(y(a)&&(a=e.env.NODE_DEBUG||""),t=t.toUpperCase(),!o[t])if(new RegExp("\\b"+t+"\\b","i").test(a)){var n=e.pid;o[t]=function(){var e=r.format.apply(r,arguments);console.error("%s %d: %s",t,n,e)}}else o[t]=function(){};return o[t]},r.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=p,r.isBoolean=d,r.isNull=m,r.isNullOrUndefined=function(t){return null==t},r.isNumber=g,r.isString=v,r.isSymbol=function(t){return"symbol"==typeof t},r.isUndefined=y,r.isRegExp=x,r.isObject=b,r.isDate=_,r.isError=w,r.isFunction=A,r.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||"undefined"==typeof t},r.isBuffer=t("./support/isBuffer");var T=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function E(t,e){return Object.prototype.hasOwnProperty.call(t,e)}r.log=function(){var t,e;console.log("%s - %s",(t=new Date,e=[k(t.getHours()),k(t.getMinutes()),k(t.getSeconds())].join(":"),[t.getDate(),T[t.getMonth()],e].join(" ")),r.format.apply(r,arguments))},r.inherits=t("inherits"),r._extend=function(t,e){if(!e||!b(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":1391,_process:1317,inherits:1390}],1393:[function(t,e,r){"use strict";e.exports=function(t,e){"object"==typeof e&&null!==e||(e={});return n(t,e.canvas||i,e.context||a,e)};var n=t("./lib/vtext"),i=null,a=null;"undefined"!=typeof document&&((i=document.createElement("canvas")).width=8192,i.height=1024,a=i.getContext("2d"))},{"./lib/vtext":1394}],1394:[function(t,e,r){e.exports=function(t,e,r,n){var a=64,o=1.25,s={breaklines:!1,bolds:!1,italics:!1,subscripts:!1,superscripts:!1};n&&(n.size&&n.size>0&&(a=n.size),n.lineSpacing&&n.lineSpacing>0&&(o=n.lineSpacing),n.styletags&&n.styletags.breaklines&&(s.breaklines=!!n.styletags.breaklines),n.styletags&&n.styletags.bolds&&(s.bolds=!!n.styletags.bolds),n.styletags&&n.styletags.italics&&(s.italics=!!n.styletags.italics),n.styletags&&n.styletags.subscripts&&(s.subscripts=!!n.styletags.subscripts),n.styletags&&n.styletags.superscripts&&(s.superscripts=!!n.styletags.superscripts));return r.font=[n.fontStyle,n.fontVariant,n.fontWeight,a+"px",n.font].filter(function(t){return t}).join(" "),r.textAlign="start",r.textBaseline="alphabetic",r.direction="ltr",w(function(t,e,r,n,a,o){r=r.replace(/\n/g,""),r=!0===o.breaklines?r.replace(/\/g,"\n"):r.replace(/\/g," ");var s="",l=[];for(A=0;A-1?parseInt(t[1+i]):0,l=a>-1?parseInt(r[1+a]):0;s!==l&&(n=n.replace(R(),"?px "),T*=Math.pow(.75,l-s),n=n.replace("?px ",R())),k+=.25*C*(l-s)}if(!0===o.superscripts){var u=t.indexOf(d),f=r.indexOf(d),p=u>-1?parseInt(t[1+u]):0,m=f>-1?parseInt(r[1+f]):0;p!==m&&(n=n.replace(R(),"?px "),T*=Math.pow(.75,m-p),n=n.replace("?px ",R())),k-=.25*C*(m-p)}if(!0===o.bolds){var g=t.indexOf(c)>-1,y=r.indexOf(c)>-1;!g&&y&&(n=x?n.replace("italic ","italic bold "):"bold "+n),g&&!y&&(n=n.replace("bold ",""))}if(!0===o.italics){var x=t.indexOf(h)>-1,b=r.indexOf(h)>-1;!x&&b&&(n="italic "+n),x&&!b&&(n=n.replace("italic ",""))}e.font=n}for(w=0;w",a="",o=i.length,s=a.length,l=e[0]===d||e[0]===v,u=0,c=-s;u>-1&&-1!==(u=r.indexOf(i,u))&&-1!==(c=r.indexOf(a,u+o))&&!(c<=u);){for(var f=u;f=c)n[f]=null,r=r.substr(0,f)+" "+r.substr(f+1);else if(null!==n[f]){var h=n[f].indexOf(e[0]);-1===h?n[f]+=e:l&&(n[f]=n[f].substr(0,h+1)+(1+parseInt(n[f][h+1]))+n[f].substr(h+2))}var p=u+o,m=r.substr(p,c-p).indexOf(i);u=-1!==m?m:c+s}return n}function b(t,e){var r=n(t,128);return e?a(r.cells,r.positions,.25):{edges:r.cells,positions:r.positions}}function _(t,e,r,n){var i=b(t,n),a=function(t,e,r){for(var n=e.textAlign||"start",i=e.textBaseline||"alphabetic",a=[1<<30,1<<30],o=[0,0],s=t.length,l=0;l=0?e[a]:i})},has___:{value:x(function(e){var n=y(e);return n?r in n:t.indexOf(e)>=0})},set___:{value:x(function(n,i){var a,o=y(n);return o?o[r]=i:(a=t.indexOf(n))>=0?e[a]=i:(a=t.length,e[a]=i,t[a]=n),this})},delete___:{value:x(function(n){var i,a,o=y(n);return o?r in o&&delete o[r]:!((i=t.indexOf(n))<0||(a=t.length-1,t[i]=void 0,e[i]=e[a],t[i]=t[a],t.length=a,e.length=a,0))})}})};m.prototype=Object.create(Object.prototype,{get:{value:function(t,e){return this.get___(t,e)},writable:!0,configurable:!0},has:{value:function(t){return this.has___(t)},writable:!0,configurable:!0},set:{value:function(t,e){return this.set___(t,e)},writable:!0,configurable:!0},delete:{value:function(t){return this.delete___(t)},writable:!0,configurable:!0}}),"function"==typeof r?function(){function n(){this instanceof m||b();var e,n=new r,i=void 0,a=!1;return e=t?function(t,e){return n.set(t,e),n.has(t)||(i||(i=new m),i.set(t,e)),this}:function(t,e){if(a)try{n.set(t,e)}catch(r){i||(i=new m),i.set___(t,e)}else n.set(t,e);return this},Object.create(m.prototype,{get___:{value:x(function(t,e){return i?n.has(t)?n.get(t):i.get___(t,e):n.get(t,e)})},has___:{value:x(function(t){return n.has(t)||!!i&&i.has___(t)})},set___:{value:x(e)},delete___:{value:x(function(t){var e=!!n.delete(t);return i&&i.delete___(t)||e})},permitHostObjects___:{value:x(function(t){if(t!==g)throw new Error("bogus call to permitHostObjects___");a=!0})}})}t&&"undefined"!=typeof Proxy&&(Proxy=void 0),n.prototype=m.prototype,e.exports=n,Object.defineProperty(WeakMap.prototype,"constructor",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})}():("undefined"!=typeof Proxy&&(Proxy=void 0),e.exports=m)}function g(t){t.permitHostObjects___&&t.permitHostObjects___(g)}function v(t){return!(t.substr(0,l.length)==l&&"___"===t.substr(t.length-3))}function y(t){if(t!==Object(t))throw new TypeError("Not an object: "+t);var e=t[u];if(e&&e.key===t)return e;if(s(t)){e={key:t};try{return o(t,u,{value:e,writable:!1,enumerable:!1,configurable:!1}),e}catch(t){return}}}function x(t){return t.prototype=null,Object.freeze(t)}function b(){p||"undefined"==typeof console||(p=!0,console.warn("WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future."))}}()},{}],1396:[function(t,e,r){var n=t("./hidden-store.js");e.exports=function(){var t={};return function(e){if(("object"!=typeof e||null===e)&&"function"!=typeof e)throw new Error("Weakmap-shim: Key must be object");var r=e.valueOf(t);return r&&r.identity===t?r:n(e,t)}}},{"./hidden-store.js":1397}],1397:[function(t,e,r){e.exports=function(t,e){var r={identity:e},n=t.valueOf;return Object.defineProperty(t,"valueOf",{value:function(t){return t!==e?n.apply(this,arguments):r},writable:!0}),r}},{}],1398:[function(t,e,r){var n=t("./create-store.js");e.exports=function(){var t=n();return{get:function(e,r){var n=t(e);return n.hasOwnProperty("value")?n.value:r},set:function(e,r){return t(e).value=r,this},has:function(e){return"value"in t(e)},delete:function(e){return delete t(e).value}}}},{"./create-store.js":1396}],1399:[function(t,e,r){var n=t("get-canvas-context");e.exports=function(t){return n("webgl",t)}},{"get-canvas-context":186}],1400:[function(t,e,r){var n=t("../main"),i=t("object-assign"),a=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,i(o.prototype,{name:"Chinese",jdEpoch:1721425.5,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{"":{name:"Chinese",epochs:["BEC","EC"],monthNumbers:function(t,e){if("string"==typeof t){var r=t.match(l);return r?r[0]:""}var n=this._validateYear(t),i=t.month(),a=""+this.toChineseMonth(n,i);return e&&a.length<2&&(a="0"+a),this.isIntercalaryMonth(n,i)&&(a+="i"),a},monthNames:function(t){if("string"==typeof t){var e=t.match(u);return e?e[0]:""}var r=this._validateYear(t),n=t.month(),i=["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(i="\u95f0"+i),i},monthNamesShort:function(t){if("string"==typeof t){var e=t.match(c);return e?e[0]:""}var r=this._validateYear(t),n=t.month(),i=["\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u5341\u4e00","\u5341\u4e8c"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(i="\u95f0"+i),i},parseMonth:function(t,e){t=this._validateYear(t);var r,n=parseInt(e);if(isNaN(n))"\u95f0"===e[0]&&(r=!0,e=e.substring(1)),"\u6708"===e[e.length-1]&&(e=e.substring(0,e.length-1)),n=1+["\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u5341\u4e00","\u5341\u4e8c"].indexOf(e);else{var i=e[e.length-1];r="i"===i||"I"===i}return this.toMonthIndex(t,n,r)},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},_validateYear:function(t,e){if(t.year&&(t=t.year()),"number"!=typeof t||t<1888||t>2111)throw e.replace(/\{0\}/,this.local.name);return t},toMonthIndex:function(t,e,r){var i=this.intercalaryMonth(t);if(r&&e!==i||e<1||e>12)throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return i?!r&&e<=i?e-1:e:e-1},toChineseMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);if(e<0||e>(r?12:11))throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return r?e>13},isIntercalaryMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);return!!r&&r===e},leapYear:function(t){return 0!==this.intercalaryMonth(t)},weekOfYear:function(t,e,r){var i,o=this._validateYear(t,n.local.invalidyear),s=h[o-h[0]],l=s>>9&4095,u=s>>5&15,c=31&s;(i=a.newDate(l,u,c)).add(4-(i.dayOfWeek()||7),"d");var f=this.toJD(t,e,r)-i.toJD();return 1+Math.floor(f/7)},monthsInYear:function(t){return this.leapYear(t)?13:12},daysInMonth:function(t,e){t.year&&(e=t.month(),t=t.year()),t=this._validateYear(t);var r=f[t-f[0]];if(e>(r>>13?12:11))throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return r&1<<12-e?30:29},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,s,r,n.local.invalidDate);t=this._validateYear(i.year()),e=i.month(),r=i.day();var o=this.isIntercalaryMonth(t,e),s=this.toChineseMonth(t,e),l=function(t,e,r,n,i){var a,o,s;if("object"==typeof t)o=t,a=e||{};else{var l="number"==typeof t&&t>=1888&&t<=2111;if(!l)throw new Error("Lunar year outside range 1888-2111");var u="number"==typeof e&&e>=1&&e<=12;if(!u)throw new Error("Lunar month outside range 1 - 12");var c,p="number"==typeof r&&r>=1&&r<=30;if(!p)throw new Error("Lunar day outside range 1 - 30");"object"==typeof n?(c=!1,a=n):(c=!!n,a=i||{}),o={year:t,month:e,day:r,isIntercalary:c}}s=o.day-1;var d,m=f[o.year-f[0]],g=m>>13;d=g?o.month>g?o.month:o.isIntercalary?o.month:o.month-1:o.month-1;for(var v=0;v>9&4095,(x>>5&15)-1,(31&x)+s);return a.year=b.getFullYear(),a.month=1+b.getMonth(),a.day=b.getDate(),a}(t,s,r,o);return a.toJD(l.year,l.month,l.day)},fromJD:function(t){var e=a.fromJD(t),r=function(t,e,r,n){var i,a;if("object"==typeof t)i=t,a=e||{};else{var o="number"==typeof t&&t>=1888&&t<=2111;if(!o)throw new Error("Solar year outside range 1888-2111");var s="number"==typeof e&&e>=1&&e<=12;if(!s)throw new Error("Solar month outside range 1 - 12");var l="number"==typeof r&&r>=1&&r<=31;if(!l)throw new Error("Solar day outside range 1 - 31");i={year:t,month:e,day:r},a=n||{}}var u=h[i.year-h[0]],c=i.year<<9|i.month<<5|i.day;a.year=c>=u?i.year:i.year-1,u=h[a.year-h[0]];var p,d=new Date(u>>9&4095,(u>>5&15)-1,31&u),m=new Date(i.year,i.month-1,i.day);p=Math.round((m-d)/864e5);var g,v=f[a.year-f[0]];for(g=0;g<13;g++){var y=v&1<<12-g?30:29;if(p>13;!x||g=2&&n<=6},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return{century:o[Math.floor((i.year()-1)/100)+1]||""}},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year()+(i.year()<0?1:0),e=i.month(),(r=i.day())+(e>1?16:0)+(e>2?32*(e-2):0)+400*(t-1)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t+.5)-Math.floor(this.jdEpoch)-1;var e=Math.floor(t/400)+1;t-=400*(e-1),t+=t>15?16:0;var r=Math.floor(t/32)+1,n=t-32*(r-1)+1;return this.newDate(e<=0?e-1:e,r,n)}});var o={20:"Fruitbat",21:"Anchovy"};n.calendars.discworld=a},{"../main":1414,"object-assign":634}],1403:[function(t,e,r){var n=t("../main"),i=t("object-assign");function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Ethiopian",jdEpoch:1724220.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Ethiopian",epochs:["BEE","EE"],monthNames:["Meskerem","Tikemet","Hidar","Tahesas","Tir","Yekatit","Megabit","Miazia","Genbot","Sene","Hamle","Nehase","Pagume"],monthNamesShort:["Mes","Tik","Hid","Tah","Tir","Yek","Meg","Mia","Gen","Sen","Ham","Neh","Pag"],dayNames:["Ehud","Segno","Maksegno","Irob","Hamus","Arb","Kidame"],dayNamesShort:["Ehu","Seg","Mak","Iro","Ham","Arb","Kid"],dayNamesMin:["Eh","Se","Ma","Ir","Ha","Ar","Ki"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.ethiopian=a},{"../main":1414,"object-assign":634}],1404:[function(t,e,r){var n=t("../main"),i=t("object-assign");function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Hebrew",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{"":{name:"Hebrew",epochs:["BAM","AM"],monthNames:["Nisan","Iyar","Sivan","Tammuz","Av","Elul","Tishrei","Cheshvan","Kislev","Tevet","Shevat","Adar","Adar II"],monthNamesShort:["Nis","Iya","Siv","Tam","Av","Elu","Tis","Che","Kis","Tev","She","Ada","Ad2"],dayNames:["Yom Rishon","Yom Sheni","Yom Shlishi","Yom Revi'i","Yom Chamishi","Yom Shishi","Yom Shabbat"],dayNamesShort:["Ris","She","Shl","Rev","Cha","Shi","Sha"],dayNamesMin:["Ri","She","Shl","Re","Ch","Shi","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return this._leapYear(e.year())},_leapYear:function(t){return o(7*(t=t<0?t+1:t)+1,19)<7},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),this._leapYear(t.year?t.year():t)?13:12},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),this.toJD(-1===t?1:t+1,7,1)-this.toJD(t,7,1)},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),12===e&&this.leapYear(t)?30:8===e&&5===o(this.daysInYear(t),10)?30:9===e&&3===o(this.daysInYear(t),10)?29:this.daysPerMonth[e-1]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return{yearType:(this.leapYear(i)?"embolismic":"common")+" "+["deficient","regular","complete"][this.daysInYear(i)%10-3]}},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=t<=0?t+1:t,o=this.jdEpoch+this._delay1(a)+this._delay2(a)+r+1;if(e<7){for(var s=7;s<=this.monthsInYear(t);s++)o+=this.daysInMonth(t,s);for(s=1;s=this.toJD(-1===e?1:e+1,7,1);)e++;for(var r=tthis.toJD(e,r,this.daysInMonth(e,r));)r++;var n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.hebrew=a},{"../main":1414,"object-assign":634}],1405:[function(t,e,r){var n=t("../main"),i=t("object-assign");function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Islamic",jdEpoch:1948439.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Islamic",epochs:["BH","AH"],monthNames:["Muharram","Safar","Rabi' al-awwal","Rabi' al-thani","Jumada al-awwal","Jumada al-thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-ahad","Yawm al-ithnayn","Yawm ath-thulaathaa'","Yawm al-arbi'aa'","Yawm al-kham\u012bs","Yawm al-jum'a","Yawm as-sabt"],dayNamesShort:["Aha","Ith","Thu","Arb","Kha","Jum","Sab"],dayNamesMin:["Ah","It","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(t){return(11*this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year()+14)%30<11},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return this.leapYear(t)?355:354},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year(),e=i.month(),t=t<=0?t+1:t,(r=i.day())+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t)+.5;var e=Math.floor((30*(t-this.jdEpoch)+10646)/10631);e=e<=0?e-1:e;var r=Math.min(12,Math.ceil((t-29-this.toJD(e,1,1))/29.5)+1),n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.islamic=a},{"../main":1414,"object-assign":634}],1406:[function(t,e,r){var n=t("../main"),i=t("object-assign");function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Julian",jdEpoch:1721423.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Julian",epochs:["BC","AD"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()<0?e.year()+1:e.year())%4==0},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year(),e=i.month(),r=i.day(),t<0&&t++,e<=2&&(t--,e+=12),Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r-1524.5},fromJD:function(t){var e=Math.floor(t+.5)+1524,r=Math.floor((e-122.1)/365.25),n=Math.floor(365.25*r),i=Math.floor((e-n)/30.6001),a=i-Math.floor(i<14?1:13),o=r-Math.floor(a>2?4716:4715),s=e-n-Math.floor(30.6001*i);return o<=0&&o--,this.newDate(o,a,s)}}),n.calendars.julian=a},{"../main":1414,"object-assign":634}],1407:[function(t,e,r){var n=t("../main"),i=t("object-assign");function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}function s(t,e){return o(t-1,e)+1}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Mayan",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{"":{name:"Mayan",epochs:["",""],monthNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],monthNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],dayNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesMin:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],digits:null,dateFormat:"YYYY.m.d",firstDay:0,isRTL:!1,haabMonths:["Pop","Uo","Zip","Zotz","Tzec","Xul","Yaxkin","Mol","Chen","Yax","Zac","Ceh","Mac","Kankin","Muan","Pax","Kayab","Cumku","Uayeb"],tzolkinMonths:["Imix","Ik","Akbal","Kan","Chicchan","Cimi","Manik","Lamat","Muluc","Oc","Chuen","Eb","Ben","Ix","Men","Cib","Caban","Etznab","Cauac","Ahau"]}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},formatYear:function(t){t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year();var e=Math.floor(t/400);return t%=400,t+=t<0?400:0,e+"."+Math.floor(t/20)+"."+t%20},forYear:function(t){if((t=t.split(".")).length<3)throw"Invalid Mayan year";for(var e=0,r=0;r19||r>0&&n<0)throw"Invalid Mayan year";e=20*e+n}return e},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),18},weekOfYear:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),0},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),360},daysInMonth:function(t,e){return this._validate(t,e,this.minDay,n.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate).day()},weekDay:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),!0},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate).toJD(),a=this._toHaab(i),o=this._toTzolkin(i);return{haabMonthName:this.local.haabMonths[a[0]-1],haabMonth:a[0],haabDay:a[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(t){var e=o((t-=this.jdEpoch)+8+340,365);return[Math.floor(e/20)+1,o(e,20)]},_toTzolkin:function(t){return[s((t-=this.jdEpoch)+20,20),s(t+4,13)]},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return i.day()+20*i.month()+360*i.year()+this.jdEpoch},fromJD:function(t){t=Math.floor(t)+.5-this.jdEpoch;var e=Math.floor(t/360);t%=360,t+=t<0?360:0;var r=Math.floor(t/20),n=t%20;return this.newDate(e,r,n)}}),n.calendars.mayan=a},{"../main":1414,"object-assign":634}],1408:[function(t,e,r){var n=t("../main"),i=t("object-assign");function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar;var o=n.instance("gregorian");i(a.prototype,{name:"Nanakshahi",jdEpoch:2257673.5,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Nanakshahi",epochs:["BN","AN"],monthNames:["Chet","Vaisakh","Jeth","Harh","Sawan","Bhadon","Assu","Katak","Maghar","Poh","Magh","Phagun"],monthNamesShort:["Che","Vai","Jet","Har","Saw","Bha","Ass","Kat","Mgr","Poh","Mgh","Pha"],dayNames:["Somvaar","Mangalvar","Budhvaar","Veervaar","Shukarvaar","Sanicharvaar","Etvaar"],dayNamesShort:["Som","Mangal","Budh","Veer","Shukar","Sanichar","Et"],dayNamesMin:["So","Ma","Bu","Ve","Sh","Sa","Et"],digits:null,dateFormat:"dd-mm-yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear);return o.leapYear(e.year()+(e.year()<1?1:0)+1469)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(1-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidMonth);(t=i.year())<0&&t++;for(var a=i.day(),s=1;s=this.toJD(e+1,1,1);)e++;for(var r=t-Math.floor(this.toJD(e,1,1)+.5)+1,n=1;r>this.daysInMonth(e,n);)r-=this.daysInMonth(e,n),n++;return this.newDate(e,n,r)}}),n.calendars.nanakshahi=a},{"../main":1414,"object-assign":634}],1409:[function(t,e,r){var n=t("../main"),i=t("object-assign");function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"Nepali",jdEpoch:1700709.5,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{"":{name:"Nepali",epochs:["BBS","ABS"],monthNames:["Baisakh","Jestha","Ashadh","Shrawan","Bhadra","Ashwin","Kartik","Mangsir","Paush","Mangh","Falgun","Chaitra"],monthNamesShort:["Bai","Je","As","Shra","Bha","Ash","Kar","Mang","Pau","Ma","Fal","Chai"],dayNames:["Aaitabaar","Sombaar","Manglbaar","Budhabaar","Bihibaar","Shukrabaar","Shanibaar"],dayNamesShort:["Aaita","Som","Mangl","Budha","Bihi","Shukra","Shani"],dayNamesMin:["Aai","So","Man","Bu","Bi","Shu","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:1,isRTL:!1}},leapYear:function(t){return this.daysInYear(t)!==this.daysPerYear},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){if(t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),"undefined"==typeof this.NEPALI_CALENDAR_DATA[t])return this.daysPerYear;for(var e=0,r=this.minMonth;r<=12;r++)e+=this.NEPALI_CALENDAR_DATA[t][r];return e},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),"undefined"==typeof this.NEPALI_CALENDAR_DATA[t]?this.daysPerMonth[e-1]:this.NEPALI_CALENDAR_DATA[t][e]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=n.instance(),o=0,s=e,l=t;this._createMissingCalendarData(t);var u=t-(s>9||9===s&&r>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(9!==e&&(o=r,s--);9!==s;)s<=0&&(s=12,l--),o+=this.NEPALI_CALENDAR_DATA[l][s],s--;return 9===e?(o+=r-this.NEPALI_CALENDAR_DATA[l][0])<0&&(o+=a.daysInYear(u)):o+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],a.newDate(u,1,1).add(o,"d").toJD()},fromJD:function(t){var e=n.instance().fromJD(t),r=e.year(),i=e.dayOfYear(),a=r+56;this._createMissingCalendarData(a);for(var o=9,s=this.NEPALI_CALENDAR_DATA[a][0],l=this.NEPALI_CALENDAR_DATA[a][o]-s+1;i>l;)++o>12&&(o=1,a++),l+=this.NEPALI_CALENDAR_DATA[a][o];var u=this.NEPALI_CALENDAR_DATA[a][o]-(l-i);return this.newDate(a,o,u)},_createMissingCalendarData:function(t){var e=this.daysPerMonth.slice(0);e.unshift(17);for(var r=t-1;r0?474:473))%2820+474+38)%2816<682},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-(n.dayOfWeek()+1)%7,"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=t-(t>=0?474:473),s=474+o(a,2820);return r+(e<=7?31*(e-1):30*(e-1)+6)+Math.floor((682*s-110)/2816)+365*(s-1)+1029983*Math.floor(a/2820)+this.jdEpoch-1},fromJD:function(t){var e=(t=Math.floor(t)+.5)-this.toJD(475,1,1),r=Math.floor(e/1029983),n=o(e,1029983),i=2820;if(1029982!==n){var a=Math.floor(n/366),s=o(n,366);i=Math.floor((2134*a+2816*s+2815)/1028522)+a+1}var l=i+2820*r+474;l=l<=0?l-1:l;var u=t-this.toJD(l,1,1)+1,c=u<=186?Math.ceil(u/31):Math.ceil((u-6)/30),f=t-this.toJD(l,c,1)+1;return this.newDate(l,c,f)}}),n.calendars.persian=a,n.calendars.jalali=a},{"../main":1414,"object-assign":634}],1411:[function(t,e,r){var n=t("../main"),i=t("object-assign"),a=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,i(o.prototype,{name:"Taiwan",jdEpoch:2419402.5,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Taiwan",epochs:["BROC","ROC"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(e.year());return a.leapYear(t)},weekOfYear:function(t,e,r){var i=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(i.year());return a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=this._t2gYear(i.year());return a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)},_g2tYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)}}),n.calendars.taiwan=o},{"../main":1414,"object-assign":634}],1412:[function(t,e,r){var n=t("../main"),i=t("object-assign"),a=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,i(o.prototype,{name:"Thai",jdEpoch:1523098.5,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Thai",epochs:["BBE","BE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(e.year());return a.leapYear(t)},weekOfYear:function(t,e,r){var i=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(i.year());return a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=this._t2gYear(i.year());return a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)},_g2tYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)}}),n.calendars.thai=o},{"../main":1414,"object-assign":634}],1413:[function(t,e,r){var n=t("../main"),i=t("object-assign");function a(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}a.prototype=new n.baseCalendar,i(a.prototype,{name:"UmmAlQura",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Umm al-Qura",epochs:["BH","AH"],monthNames:["Al-Muharram","Safar","Rabi' al-awwal","Rabi' Al-Thani","Jumada Al-Awwal","Jumada Al-Thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-Ahad","Yawm al-Ithnain","Yawm al-Thal\u0101th\u0101\u2019","Yawm al-Arba\u2018\u0101\u2019","Yawm al-Kham\u012bs","Yawm al-Jum\u2018a","Yawm al-Sabt"],dayNamesMin:["Ah","Ith","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!0}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 355===this.daysInYear(e.year())},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){for(var e=0,r=1;r<=12;r++)e+=this.daysInMonth(t,r);return e},daysInMonth:function(t,e){for(var r=this._validate(t,e,this.minDay,n.local.invalidMonth).toJD()-24e5+.5,i=0,a=0;ar)return o[i]-o[i-1];i++}return 30},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate),a=12*(i.year()-1)+i.month()-15292;return i.day()+o[a-1]-1+24e5-.5},fromJD:function(t){for(var e=t-24e5+.5,r=0,n=0;ne);n++)r++;var i=r+15292,a=Math.floor((i-1)/12),s=a+1,l=i-12*a,u=e-o[r-1]+1;return this.newDate(s,l,u)},isValid:function(t,e,r){var i=n.baseCalendar.prototype.isValid.apply(this,arguments);return i&&(i=(t=null!=t.year?t.year:t)>=1276&&t<=1500),i},_validate:function(t,e,r,i){var a=n.baseCalendar.prototype._validate.apply(this,arguments);if(a.year<1276||a.year>1500)throw i.replace(/\{0\}/,this.local.name);return a}}),n.calendars.ummalqura=a;var o=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]},{"../main":1414,"object-assign":634}],1414:[function(t,e,r){var n=t("object-assign");function i(){this.regionalOptions=[],this.regionalOptions[""]={invalidCalendar:"Calendar {0} not found",invalidDate:"Invalid {0} date",invalidMonth:"Invalid {0} month",invalidYear:"Invalid {0} year",differentCalendars:"Cannot mix {0} and {1} dates"},this.local=this.regionalOptions[""],this.calendars={},this._localCals={}}function a(t,e,r,n){if(this._calendar=t,this._year=e,this._month=r,this._day=n,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(u.local.invalidDate||u.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name)}function o(t,e){return"000000".substring(0,e-(t=""+t).length)+t}function s(){this.shortYearCutoff="+10"}function l(t){this.local=this.regionalOptions[t]||this.regionalOptions[""]}n(i.prototype,{instance:function(t,e){t=(t||"gregorian").toLowerCase(),e=e||"";var r=this._localCals[t+"-"+e];if(!r&&this.calendars[t]&&(r=new this.calendars[t](e),this._localCals[t+"-"+e]=r),!r)throw(this.local.invalidCalendar||this.regionalOptions[""].invalidCalendar).replace(/\{0\}/,t);return r},newDate:function(t,e,r,n,i){return(n=(null!=t&&t.year?t.calendar():"string"==typeof n?this.instance(n,i):n)||this.instance()).newDate(t,e,r)},substituteDigits:function(t){return function(e){return(e+"").replace(/[0-9]/g,function(e){return t[e]})}},substituteChineseDigits:function(t,e){return function(r){for(var n="",i=0;r>0;){var a=r%10;n=(0===a?"":t[a]+e[i])+n,i++,r=Math.floor(r/10)}return 0===n.indexOf(t[1]+e[1])&&(n=n.substr(1)),n||t[0]}}}),n(a.prototype,{newDate:function(t,e,r){return this._calendar.newDate(null==t?this:t,e,r)},year:function(t){return 0===arguments.length?this._year:this.set(t,"y")},month:function(t){return 0===arguments.length?this._month:this.set(t,"m")},day:function(t){return 0===arguments.length?this._day:this.set(t,"d")},date:function(t,e,r){if(!this._calendar.isValid(t,e,r))throw(u.local.invalidDate||u.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name);return this._year=t,this._month=e,this._day=r,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(t,e){return this._calendar.add(this,t,e)},set:function(t,e){return this._calendar.set(this,t,e)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(u.local.differentCalendars||u.regionalOptions[""].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,t._calendar.local.name);var e=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===e?0:e<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(t){return this._calendar.fromJD(t)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(t){return this._calendar.fromJSDate(t)},toString:function(){return(this.year()<0?"-":"")+o(Math.abs(this.year()),4)+"-"+o(this.month(),2)+"-"+o(this.day(),2)}}),n(s.prototype,{_validateLevel:0,newDate:function(t,e,r){return null==t?this.today():(t.year&&(this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate),r=t.day(),e=t.month(),t=t.year()),new a(this,t,e,r))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){return this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear).year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear);return(e.year()<0?"-":"")+o(Math.abs(e.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear),12},monthOfYear:function(t,e){var r=this._validate(t,e,this.minDay,u.local.invalidMonth||u.regionalOptions[""].invalidMonth);return(r.month()+this.monthsInYear(r)-this.firstMonth)%this.monthsInYear(r)+this.minMonth},fromMonthOfYear:function(t,e){var r=(e+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,r,this.minDay,u.local.invalidMonth||u.regionalOptions[""].invalidMonth),r},daysInYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear);return this.leapYear(e)?366:365},dayOfYear:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate);return n.toJD()-this.newDate(n.year(),this.fromMonthOfYear(n.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate);return(Math.floor(this.toJD(n))+2)%this.daysInWeek()},extraInfo:function(t,e,r){return this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate),{}},add:function(t,e,r){return this._validate(t,this.minMonth,this.minDay,u.local.invalidDate||u.regionalOptions[""].invalidDate),this._correctAdd(t,this._add(t,e,r),e,r)},_add:function(t,e,r){if(this._validateLevel++,"d"===r||"w"===r){var n=t.toJD()+e*("w"===r?this.daysInWeek():1),i=t.calendar().fromJD(n);return this._validateLevel--,[i.year(),i.month(),i.day()]}try{var a=t.year()+("y"===r?e:0),o=t.monthOfYear()+("m"===r?e:0);i=t.day();"y"===r?(t.month()!==this.fromMonthOfYear(a,o)&&(o=this.newDate(a,t.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(a)),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o)))):"m"===r&&(!function(t){for(;oe-1+t.minMonth;)a++,o-=e,e=t.monthsInYear(a)}(this),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o))));var s=[a,this.fromMonthOfYear(a,o),i];return this._validateLevel--,s}catch(t){throw this._validateLevel--,t}},_correctAdd:function(t,e,r,n){if(!(this.hasYearZero||"y"!==n&&"m"!==n||0!==e[0]&&t.year()>0==e[0]>0)){var i={y:[1,1,"y"],m:[1,this.monthsInYear(-1),"m"],w:[this.daysInWeek(),this.daysInYear(-1),"d"],d:[1,this.daysInYear(-1),"d"]}[n],a=r<0?-1:1;e=this._add(t,r*i[0]+a*i[1],i[2])}return t.date(e[0],e[1],e[2])},set:function(t,e,r){this._validate(t,this.minMonth,this.minDay,u.local.invalidDate||u.regionalOptions[""].invalidDate);var n="y"===r?e:t.year(),i="m"===r?e:t.month(),a="d"===r?e:t.day();return"y"!==r&&"m"!==r||(a=Math.min(a,this.daysInMonth(n,i))),t.date(n,i,a)},isValid:function(t,e,r){this._validateLevel++;var n=this.hasYearZero||0!==t;if(n){var i=this.newDate(t,e,this.minDay);n=e>=this.minMonth&&e-this.minMonth=this.minDay&&r-this.minDay13.5?13:1),u=i-(l>2.5?4716:4715);return u<=0&&u--,this.newDate(u,l,s)},toJSDate:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate),i=new Date(n.year(),n.month()-1,n.day());return i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0),i.setHours(i.getHours()>12?i.getHours()+2:0),i},fromJSDate:function(t){return this.newDate(t.getFullYear(),t.getMonth()+1,t.getDate())}});var u=e.exports=new i;u.cdate=a,u.baseCalendar=s,u.calendars.gregorian=l},{"object-assign":634}],1415:[function(t,e,r){var n=t("object-assign"),i=t("./main");n(i.regionalOptions[""],{invalidArguments:"Invalid arguments",invalidFormat:"Cannot format a date from another calendar",missingNumberAt:"Missing number at position {0}",unknownNameAt:"Unknown name at position {0}",unexpectedLiteralAt:"Unexpected literal at position {0}",unexpectedText:"Additional text found at end"}),i.local=i.regionalOptions[""],n(i.cdate.prototype,{formatDate:function(t,e){return"string"!=typeof t&&(e=t,t=""),this._calendar.formatDate(t||"",this,e)}}),n(i.baseCalendar.prototype,{UNIX_EPOCH:i.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:86400,TICKS_EPOCH:i.instance().jdEpoch,TICKS_PER_DAY:864e9,ATOM:"yyyy-mm-dd",COOKIE:"D, dd M yyyy",FULL:"DD, MM d, yyyy",ISO_8601:"yyyy-mm-dd",JULIAN:"J",RFC_822:"D, d M yy",RFC_850:"DD, dd-M-yy",RFC_1036:"D, d M yy",RFC_1123:"D, d M yyyy",RFC_2822:"D, d M yyyy",RSS:"D, d M yy",TICKS:"!",TIMESTAMP:"@",W3C:"yyyy-mm-dd",formatDate:function(t,e,r){if("string"!=typeof t&&(r=e,e=t,t=""),!e)return"";if(e.calendar()!==this)throw i.local.invalidFormat||i.regionalOptions[""].invalidFormat;t=t||this.local.dateFormat;for(var n,a,o,s,l=(r=r||{}).dayNamesShort||this.local.dayNamesShort,u=r.dayNames||this.local.dayNames,c=r.monthNumbers||this.local.monthNumbers,f=r.monthNamesShort||this.local.monthNamesShort,h=r.monthNames||this.local.monthNames,p=(r.calculateWeek||this.local.calculateWeek,function(e,r){for(var n=1;w+n1}),d=function(t,e,r,n){var i=""+e;if(p(t,n))for(;i.length1},x=function(t,r){var n=y(t,r),a=[2,3,n?4:2,n?4:2,10,11,20]["oyYJ@!".indexOf(t)+1],o=new RegExp("^-?\\d{1,"+a+"}"),s=e.substring(k).match(o);if(!s)throw(i.local.missingNumberAt||i.regionalOptions[""].missingNumberAt).replace(/\{0\}/,k);return k+=s[0].length,parseInt(s[0],10)},b=this,_=function(){if("function"==typeof l){y("m");var t=l.call(b,e.substring(k));return k+=t.length,t}return x("m")},w=function(t,r,n,a){for(var o=y(t,a)?n:r,s=0;s-1){p=1,d=m;for(var S=this.daysInMonth(h,p);d>S;S=this.daysInMonth(h,p))p++,d-=S}return f>-1?this.fromJD(f):this.newDate(h,p,d)},determineDate:function(t,e,r,n,i){r&&"object"!=typeof r&&(i=n,n=r,r=null),"string"!=typeof n&&(i=n,n="");var a=this;return e=e?e.newDate():null,t=null==t?e:"string"==typeof t?function(t){try{return a.parseDate(n,t,i)}catch(t){}for(var e=((t=t.toLowerCase()).match(/^c/)&&r?r.newDate():null)||a.today(),o=/([+-]?[0-9]+)\s*(d|w|m|y)?/g,s=o.exec(t);s;)e.add(parseInt(s[1],10),s[2]||"d"),s=o.exec(t);return e}(t):"number"==typeof t?isNaN(t)||t===1/0||t===-1/0?e:a.today().add(t,"d"):a.newDate(t)}})},{"./main":1414,"object-assign":634}],1416:[function(t,e,r){e.exports=t("cwise-compiler")({args:["array",{offset:[1],array:0},"scalar","scalar","index"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{\n var _inline_1_da = _inline_1_arg0_ - _inline_1_arg3_\n var _inline_1_db = _inline_1_arg1_ - _inline_1_arg3_\n if((_inline_1_da >= 0) !== (_inline_1_db >= 0)) {\n _inline_1_arg2_.push(_inline_1_arg4_[0] + 0.5 + 0.5 * (_inline_1_da + _inline_1_db) / (_inline_1_da - _inline_1_db))\n }\n }",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg3_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:["_inline_1_da","_inline_1_db"]},funcName:"zeroCrossings"})},{"cwise-compiler":89}],1417:[function(t,e,r){"use strict";e.exports=function(t,e){var r=[];return e=+e||0,n(t.hi(t.shape[0]-1),r,e),r};var n=t("./lib/zc-core")},{"./lib/zc-core":1416}],1418:[function(t,e,r){"use strict";var n=t("plotly.js/src/components/annotations"),i=t("plotly.js");n.add=function(t){var e=t._fullLayout.annotations.length;i.relayout(t,"annotations["+e+"]","add")},n.ARROWPATHS=t("plotly.js/src/components/annotations/arrow_paths"),n.arrowhead=t("plotly.js/src/components/annotations/draw_arrow_head"),e.exports=n},{"plotly.js":670,"plotly.js/src/components/annotations":704,"plotly.js/src/components/annotations/arrow_paths":695,"plotly.js/src/components/annotations/draw_arrow_head":703}],1419:[function(t,e,r){"use strict";var n=t("plotly.js/src/plots/cartesian/axes");n.name2id=t("plotly.js/src/plots/cartesian/axis_ids").name2id,n.autoType=t("plotly.js/src/plots/cartesian/axis_autotype"),n.layoutAttributes=t("plotly.js/src/plots/cartesian/layout_attributes"),e.exports=n},{"plotly.js/src/plots/cartesian/axes":884,"plotly.js/src/plots/cartesian/axis_autotype":885,"plotly.js/src/plots/cartesian/axis_ids":887,"plotly.js/src/plots/cartesian/layout_attributes":896}],1420:[function(t,e,r){"use strict";var n=t("plotly.js"),i=t("plotly.js/src/plots/plots"),a=t("./lib"),o="breakpoints",s="_"+o,l={_isLinkedToArray:"breakpoint",editType:"calc",description:["Layout breakpoints are a plot.ly exclusive feature.","Set width / height / aspect ratio breakpoints linked to","frames to create multi-display graphs."].join(" "),enabled:{valType:"boolean",dflt:!0,role:"info",editType:"calc",description:["Determines whether this breakpoint is enabled or disabled."].join(" ")},type:{valType:"enumerated",values:["width","height","aspectratio"],dflt:"width",role:"info",editType:"calc",description:["Sets the type of breakpoint, that is, whether the breakpoint","is applied via width or height or aspect ratio value."].join(" ")},range:{valType:"info_array",role:"info",editType:"calc",items:[{valType:"number",min:0,dflt:0},{valType:"number",min:0,dflt:1/0}],description:["Sets the range (in px) for *width* and *height* types,","or *aspectratio* (unitless)."].join(" ")},frame:{valType:"string",strict:!0,noBlank:!0,dflt:null,editType:"calc",role:"info",description:["Sets the frame name to be applied on this breakpoint."].join(" ")}};function u(t){var e=n.Lib.extendFlat({},t);return delete e.autosize,delete e.width,delete e.height,i.extendLayout({},e)}e.exports={moduleType:"component",name:o,layoutAttributes:l,supplyLayoutDefaults:function(t,e){var r,n,i=Array.isArray(t[o])?t[o]:[],s=e[o]=[];function u(t,e){return a.coerce(r,n,l,t,e)}for(var c=0;cp[0]||(n.enabled=!1)}s.push(n)}},apply:function(t){var e,r,i=t._fullLayout,a=t.layout||{},l=a[o],c=i[o];if(0===c.length)return Promise.resolve();function f(t){var e;switch(t.type){case"aspectratio":e=i.height/i.width;break;case"width":e=i.width;break;case"height":e=i.height;break;default:return!1}return e>=t.range[0]&&e<=t.range[1]}t[s]||(t[s]={layout:n.Lib.extendDeepNoArrays({},a),frameName:""});for(var h=0;ht[1]?t[0]:t[1]}function o(t,e,r){return[r*t+(1-r)*e,r*e+(1-r)*t]}function s(t,e,r){return Math.abs(e-t)t?1:-1),console.log("Moving a y value so the guesses are unequal",e)),e}function l(t){for(var e=0,r=0;r=x&&(y=v,x=b);var _=l(e.slice(0,v))/v,w=l(e.slice(b))/(f-b),A=b>v?l(e.slice(y,x))/(x-y):.3*_+.7*w;r||(r={});var M=o(_,w,.02);if(r.nostraight){var k=o(_,w,.45);A>i(k)&&A=a(M))&&(A=c(A,i(M),a(M)),console.log("moving y2 within bounds to",A)),r.unequal){var T=.02*(a(M)-i(M));A=s(_,A,T),A=s(w,A,T),w=s(_,w,T)}return Math.abs(M[0]-M[1])<1e-5&&(_=i(M)-2,w=a(M)+2,A=i(M)+.8,console.log("reticulating splines on tight bounds")),{x:[d,g,m],y:[_,A,w]}}r.exponential=function(t,e){if(t.length<3)return{params:{},err:"Exponential fitting requires a minimum of 3 points"};for(var r=u(t,e,{nostraight:!0,monotonic:!0}),n=r.y[0],i=r.y[1],a=r.y[2],o=r.x[0],s=r.x[1],l=(r.x[2],Math.pow(i-n,2)/(a-2*i+n)),c=(a-i)/(i-n),f=t[c>1?t.length-1:0],h=0;hx?u/(l-x):null,y.push(f),x=l,null!==f){for(c=y.length-1,l=h;l.75*E+.25*k?(r=E,i=k-E,b=y.indexOf(k)):(r=k,i=E-k,b=y.indexOf(E)),A=r+i/2,s=b;s>=0;s--){if(i>0?y[s]A){_=v[0]+g*(s+(r+i/2-y[s])/(y[s+1]-y[s]));break}0===s&&(_=v[0],S=!0)}for(s=b;s0?y[s]A){w=v[0]+g*(s-(r+i/2-y[s])/(y[s-1]-y[s]));break}s===y.length-1&&(w=v[y.length-1],S=!0)}a=(_+w)/2;var C=w-_,L=.1*y.length*g;return S&&(L/=2),{params:{a:r,h:i*=C/(o=Math.max(2*g,C/5,Math.sqrt(C*C-L*L)||0)),x0:a,FWHM:o},err:""}},r.gauss=function(t,e){var n=r.peak(t,e);return n.params.w=n.params.FWHM/Math.sqrt(8*Math.log(2)),delete n.params.FWHM,n}},{"../../plotly":1433}],1422:[function(t,e,r){var n=t("plotly.js/src/plots/cartesian/constants").BADNUM,i=t("../../plotly"),a=t("./funcSolver"),o=t("../transformUtils"),s=o.cleanNumber,l=o.calcRange,u=o.computeCalcData,c=o.fill,f=o.stripValueAcrossRows,h=o.sortArraysByFirstArray,p=o.findInsertionIndex,d=o.computeCorrelation,m=t("./predefinedFunctions").findVariantByFunction,g=t("fast-isnumeric"),v=t("../math"),y=t("plotly.js/src/plots/attributes"),x=t("plotly.js/src/traces/scatter/attributes"),b=i.Lib.isPlainObject,_=i.Lib.extendDeepNoArrays,w=a();function A(t){throw new Error(t)}function M(){this.moduleType="transform",this.makesData=!0,this.name="fit",this.attributes={inputUid:{valType:"string",editType:"calc"},fitfunction:{valType:"string",dflt:"m*x + b",editType:"calc"},parameters:{valType:"data_array",dflt:[{name:"m",hold:!1},{name:"b",hold:!1}],editType:"calc"},inputxrange:{valType:"data_array",dflt:[],editType:"calc"},outputxrange:{valType:"data_array",dflt:[],editType:"calc"},regressor:{valType:"string",dflt:"x",editType:"calc"},regressand:{valType:"string",dflt:"y",editType:"calc"},interpolation:{valType:"number",editType:"calc"},correlation:{valType:"number",editType:"calc"},rms:{valType:"number",editType:"calc"},xmid:{description:"Midpoint of the regressor not necessarily x.",valType:"any",editType:"calc"},ymid:{description:"Midpoint of the regressand not necessarily y.",valType:"any",editType:"calc"},editType:"calc"}}e.exports=M,M.prototype.supplyDefaults=function(t){var e=this.attributes,r={},n=function(n,a){return i.Lib.coerce(t,r,e,n,a)};return n("inputUid"),n("fitfunction"),n("parameters"),n("inputxrange"),n("outputxrange"),n("regressor"),n("regressand"),n("interpolation"),n("correlation"),n("rms"),n("xmid"),n("ymid"),r},M.prototype.transform=function(t,e){var r,a,o=e.transform,M=e.fullTrace,k=M._input;for(r=0;rG&&(Y-=1),F=[B,j,V].map(function(t){return t.slice(W,Y+1)}),B=F[0],j=F[1],V=F[2],"date"===P.type)for(U=B[0],r=0;r1&&(ct=D[0]>D[1]),it=it.filter(g).sort(function(t,e){return t-e});var ft=p(it,at),ht=p(it,ot);it[ht]>ot&&(ht-=1),it=it.slice(ft,ht+1),ct&&it.reverse()}var pt=K.map(function(t){return t.value}),dt=new Array(it.length);if(U)for(r=0;r0?5e-5:-5e-5))).substring(0,e.indexOf(".")+5)).substring(e.length-10,e.length)}function h(t){var e;return s(t)<5e-7&&(t=0),(e=(e=" "+(t+(t>0?5e-7:-5e-7))).substring(0,e.indexOf(".")+7)).substring(e.length-18,e.length)}function p(t,e,r){return t*(r+1)+e}function d(t,e,r,n){return"number"!=typeof t?n:o(e,(i=r,a=t,Math.min(i,a)));var i,a}e.exports=function(t){t||(t={});var e=t.log||!1,r={};function i(t){e&&console.log("starting Iterate",t);var r,n=t.params.slice(0),i=[1,1,1,1,1,1,1,1],a=[0,0,0,0,0,0,0,0,0],u=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];r="cov"in t&&t.cov?t.cov:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];var m,g,v,y,x,b,_,w=decodeURI("%0D")+decodeURI("%0A"),A=0,M=0,k=0,T=t.data.length,E="npar"in t?t.npar:t.params.length,S=d(t.nvar,1,8,1),C=T-E,L=(m=C,function(t,e){for(var r,n=.5,i=.25;i>1e-15;)n+=t(r=1/n-1)>e?-i:i,i/=2;return r}(function(t){return c(t,m)},.05)),O=d(t.pctile/100,0,1,.5),z=t.func,D=0,P={params:[],fit:[],res:[],conf_lo:[],conf_hi:[],rms:0,corr:0,cov:[]},I=[];for(M=0;Mq){for(;K>.01&&tt>=q;)X(K/=2),Q=tt,tt=$(n);tttt&&(X(K),et=tt),console.log("took a smaller step than originally calculated",K)):(console.log("Oops - didnt find a lower RMS anywhere on the old to new parameter vector - stopping"),et=q,n=Z)}for(M=0;M2",func:"y0 + a/x^2",info:"",autoguess:n.inverseSimple2},{name:"y0 + a/(x-x0)2",func:"y0 + a/(x-x0)^2",info:"",autoguess:n.inverse2}]}];function l(t,e){return a(function(e){return e.func===t},e.variants,null)}function u(t,e){return a(function(e){return Boolean(l(t,e))},s,e)}e.exports={predefinedFunctions:s,findVariantByFunction:function(t){var e=u(t,null);return e?l(t,e):null},findFamilyByFunction:u,findFamilyByFamilyName:function(t){return a(function(e){return e.libname===t},s,"")},extractParameterNames:function(t){return function(t){return o.parse(t).filter(function(t){return t.isSymbolNode}).map(function(t){return t.name})}(t).filter(function(t){return"x"!==t})}}},{"../math":1428,"../transformUtils":1432,"./autoGuess":1421,"./polySolver":1424}],1426:[function(t,e,r){"use strict";e.exports=function(t){var e,r={modeBarButtonsToRemove:["sendDataToCloud"],queueLength:100,workspace:!1};return"USE_CONTENT_DELIVERY_NETWORKS"in(t=t||{})&&!t.USE_CONTENT_DELIVERY_NETWORKS&&(t.DEBUG_MODE||"on_prem"===t.PLOTLY_ENV?e="/static/":t.DOMAIN_WEBAPP&&(e="//"+t.DOMAIN_WEBAPP+"/static/"),e?r.topojsonURL=e+"plotlyjs/build/topojson/":console.warn("Missing environment variable to setup non-CDN topojson URL")),r}},{}],1427:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("plotly.js/src/lib");i.addStyleRule=function(t,e){if(!i.styleSheet){var r=document.createElement("style");r.appendChild(document.createTextNode("")),document.head.appendChild(r),i.styleSheet=r.sheet}var n=i.styleSheet;n.insertRule?n.insertRule(t+"{"+e+"}",0):n.addRule?n.addRule(t,e,0):i.warn("addStyleRule failed")},i.transformUtils=t("./transformUtils"),i.isNumeric=n,i.fitUtils={},i.extendFlat(i.fitUtils,t("./fits/predefinedFunctions")),i.math=t("./math"),e.exports=i},{"./fits/predefinedFunctions":1425,"./math":1428,"./transformUtils":1432,"fast-isnumeric":178,"plotly.js/src/lib":836}],1428:[function(t,e,r){var n=t("mathjs/core").create();n.import(t("mathjs/lib/type/complex")),n.import(t("mathjs/lib/type/bignumber")),n.import(t("mathjs/lib/function/arithmetic")),n.import(t("mathjs/lib/constants")),n.import(t("mathjs/lib/expression/function/compile")),n.import(t("mathjs/lib/expression/function/eval")),n.import(t("mathjs/lib/expression/function/parse")),n.import(t("mathjs/lib/expression/function/parser")),n.import(t("mathjs/lib/expression/node")),n.import(t("mathjs/lib/expression/transform")),n.import(t("mathjs/lib/expression/parse")),n.import(t("mathjs/lib/function/trigonometry")),e.exports=n},{"mathjs/core":437,"mathjs/lib/constants":438,"mathjs/lib/expression/function/compile":447,"mathjs/lib/expression/function/eval":448,"mathjs/lib/expression/function/parse":449,"mathjs/lib/expression/function/parser":450,"mathjs/lib/expression/node":469,"mathjs/lib/expression/parse":474,"mathjs/lib/expression/transform":479,"mathjs/lib/function/arithmetic":504,"mathjs/lib/function/trigonometry":556,"mathjs/lib/type/bignumber":567,"mathjs/lib/type/complex":570}],1429:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("./transformUtils").getWindow;e.exports=function(t,e,r){var a,o;if(t.length!==e.length)throw new Error("x and y must be equal length arrays");if(!n(r.windowlength))throw new Error("window length must be specified");if(r.windowlength>t.length||r.windowlength<1)return{x:[],y:[]};var s=r.windowlength,l=Boolean(r.center),u=r.windowtype||"boxcar",c=i(u,s),f=c.reduce(function(t,e){return t+e},0),h=l?Math.floor(s/2):s-1,p=l?s-h-1:0,d=t.slice(h,t.length-p),m=new Array(d.length),g=0;for(a=0;ae.steps.length-1&&(e.active=e.steps.length-1)}function s(t,e){var r,n,i=Object.keys(e);for(r=0;rt[n-1])return n;for(var i=-1;re))return i;n=i}return r},stripValueAcrossRows:function(t){var e,r,n=[].slice.call(arguments).slice(1),i=Math.min.apply(Math,n.map(function(t){return t.length})),a=n.map(function(){return[]}),o=0;t:for(e=0;ei[1]&&(i=[i[1],i[0]]),i},cleanNumber:function(t){if(null===t||"undefined"==typeof t||!1===t)return"";if(n(t))return Number(t);var e=t.toString().replace(/[^0-9.-]/g,"");return n(e)?Number(e):""},min:function(t){for(var e=t[0],r=1;rt[r]&&(e=t[r]);return e},max:function(t){for(var e=t[0],r=1;r>>0,a=0;a - - -
- -
diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/positive_abz.js boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/positive_abz.js --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/positive_abz.js 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/positive_abz.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,22322 +0,0 @@ -var positive_abz = { - "data": [ - { - "mode": "markers", - "name": "2048-4096", - "type": "scatter3d", - "xsrc": "JohnMaddock:11:e2a057", - "x": [ - "372.292", - "639.323", - "251.482", - "578.079", - "462.241", - "516.023", - "317.798", - "340.49", - "328.031", - "325.226", - "450.742", - "554.172", - "378.76", - "313.968", - "606.864", - "288.583", - "379.196", - "485.787", - "318.137", - "481.521", - "372.774", - "432.735", - "381.321", - "604.038", - "518.015", - "284.473", - "389.518", - "375.052", - "370.738", - "287.185", - "440.89", - "557.807", - "508.437", - "431.754", - "322.725", - "477.334", - "548.995", - "419.072", - "395.048", - "440.663", - "616.969", - "746.095", - "492.901", - "492.352", - "459.293", - "315.485", - "548.207", - "557.554", - "373.079", - "500.557", - "384.007", - "374.274", - "365.181", - "374.716", - "365.838", - "595.534", - "325.331", - "310.191", - "456.806", - "365.978", - "421.086", - "405.24", - "496.951", - "513.51", - "539.701", - "263.806", - "286.5", - "539.181", - "349.205", - "385.896", - "468.012", - "316.872", - "450.961", - "611.411", - "516.117", - "354.787", - "374.978", - "522.428", - "406.072", - "490.385", - "348.72", - "441.792", - "424.242", - "278.983", - "412.523", - "343.557", - "546.242", - "253.765", - "292.949", - "520.534", - "533.224", - "283.128", - "432.346", - "512.462", - "604.614", - "357.325", - "376.837", - "351.333", - "484.151", - "360.134", - "487.941", - "361.035", - "257.857", - "299.594", - "420.916", - "477.594", - "491.815", - "291.715", - "253.202", - "447.137", - "382.717", - "492.357", - "371.408", - "517.128", - "425.308", - "438.463", - "296.93", - "301.327", - "445.093", - "334.83", - "488.312", - "318.6", - "351.066", - "451.9", - "508.482", - "346.504", - "468.041", - "462.027", - "404.575", - "1.58033", - "1.52141", - "414.855", - "499.706", - "587.006", - "399.012", - "259.316", - "472.184", - "405.799", - "464.439", - "557.073", - "482.172", - "531.398", - "298.134", - "505.195", - "299.715", - "297.774", - "381.881", - "500.635", - "329.999", - "473.831", - "516.804", - "573.073", - "375.145", - "450.642", - "461.267", - "370.306", - "366", - "242.015", - "528.066", - "572.838", - "466.76", - "618.396", - "325.804", - "345.833", - "517.055", - "535.585", - "356.6", - "434.099", - "480.639", - "495.224", - "480.202", - "445.825", - "426.076", - "426.398", - "502.247", - "545.065", - "425.501" - ], - "ysrc": "JohnMaddock:11:cb8b9d", - "y": [ - "714.658", - "852.339", - "587.711", - "680.991", - "715.619", - "663.516", - "762.809", - "663.876", - "701.2", - "478.342", - "809.833", - "741.774", - "667.724", - "371.28", - "875.855", - "498.61", - "568.515", - "904.553", - "660.912", - "644.492", - "795.029", - "706.808", - "509.305", - "732.723", - "646.678", - "626.887", - "634.293", - "597.208", - "823.669", - "450.287", - "569.38", - "823.921", - "804.784", - "658.65", - "700.214", - "784.487", - "794.037", - "634.867", - "599.946", - "826.098", - "780.758", - "720.595", - "717.456", - "735.488", - "816.582", - "660.673", - "899.694", - "922.466", - "765.128", - "697.823", - "723.891", - "759.802", - "800.633", - "738.897", - "769.784", - "708.751", - "467.672", - "620.174", - "807.255", - "786.467", - "657.52", - "681.734", - "833.711", - "779.018", - "719.194", - "209.306", - "596.992", - "758.039", - "647.286", - "724.639", - "556.759", - "444.843", - "522.629", - "781.914", - "701.637", - "694.803", - "664.086", - "756.238", - "455.822", - "711.063", - "735.534", - "839.17", - "604.031", - "444.505", - "646.306", - "500.572", - "925.915", - "649.766", - "429.145", - "742.307", - "821.844", - "485.715", - "584.646", - "870.581", - "841.467", - "695.955", - "687.042", - "759.623", - "820.915", - "827.988", - "771.874", - "638.386", - "539.32", - "443.298", - "835.703", - "793.294", - "756.135", - "496.123", - "459.54", - "783.278", - "510.919", - "453.858", - "690.738", - "918.714", - "829.248", - "798.928", - "345.87", - "680.264", - "740.429", - "685.89", - "755.344", - "631.394", - "786.369", - "755.485", - "794.443", - "712.518", - "812.546", - "738.71", - "824.168", - "483.899", - "601.784", - "855.35", - "922.704", - "742.105", - "597.334", - "676.578", - "826.629", - "691.29", - "707.263", - "746.608", - "601.093", - "727.567", - "593.39", - "879.641", - "598.718", - "482.983", - "559.244", - "873.6", - "263.499", - "744.452", - "826.038", - "830.411", - "648.832", - "773.518", - "812.09", - "519.988", - "501.031", - "221.514", - "864.905", - "934.351", - "757.629", - "841.555", - "678.019", - "493.545", - "695.742", - "835.141", - "665.456", - "728.458", - "825.679", - "811.031", - "784.93", - "797.875", - "624.772", - "869.056", - "831.238", - "722.105", - "733.957" - ], - "zsrc": "JohnMaddock:11:69e331", - "z": [ - "723.274", - "863.17", - "920.043", - "743.466", - "724.513", - "712.557", - "913.605", - "880.585", - "985.751", - "716.733", - "893.715", - "820.942", - "946.456", - "753.796", - "894.148", - "789.268", - "771.291", - "945.757", - "846.493", - "737.929", - "885.571", - "789.581", - "830.714", - "738.693", - "815.507", - "956.581", - "930.362", - "741.328", - "943.981", - "786.334", - "761.289", - "832.583", - "814.967", - "906.665", - "784.615", - "882.503", - "838.4", - "813.125", - "711.248", - "917.985", - "796.387", - "270.986", - "746.897", - "790.592", - "979.906", - "734.175", - "919.264", - "936.013", - "998.726", - "864.148", - "908.232", - "945.171", - "902.57", - "765.118", - "859.593", - "786.381", - "857.864", - "772.161", - "850.425", - "867.266", - "879.66", - "817.86", - "880.169", - "931.255", - "742.601", - "376.353", - "872.601", - "885.226", - "745.707", - "920.461", - "779.109", - "757.904", - "715.189", - "837.389", - "853.852", - "784.339", - "971.673", - "896.55", - "712.281", - "796.616", - "794.551", - "843.681", - "857.114", - "765.916", - "825.765", - "873.552", - "990.463", - "951.697", - "736.529", - "894.126", - "912.605", - "886.861", - "770.803", - "879.179", - "874.762", - "937.63", - "747.864", - "977.96", - "917.4", - "982.556", - "903.294", - "925.614", - "878.623", - "831.817", - "889.004", - "803.114", - "922.255", - "887.18", - "756.681", - "931.713", - "762.571", - "411.812", - "810.365", - "974.988", - "835.489", - "960.123", - "736.403", - "986.543", - "959.012", - "740.613", - "874.986", - "926.829", - "911.796", - "965.065", - "875.894", - "818.844", - "971.33", - "789.169", - "879.493", - "724.977", - "895.526", - "894.502", - "930.399", - "824.645", - "874.743", - "915.078", - "939.45", - "783.1", - "925.631", - "780.216", - "813.435", - "749.448", - "944", - "894.564", - "929.14", - "814.808", - "866.579", - "977.479", - "559.256", - "893.016", - "934.642", - "893.747", - "969.858", - "938.578", - "930.27", - "833.086", - "815.219", - "668.707", - "900.05", - "986.703", - "948.44", - "876.906", - "829.237", - "829.147", - "843.495", - "928.777", - "781.554", - "889.269", - "848.424", - "874.18", - "941.89", - "979.683", - "850.441", - "907.957", - "967.949", - "834.655", - "838.449" - ], - "marker": { - "size": 3, - "color": "rgb(155, 0, 0)" - } - }, - { - "mode": "markers", - "name": "1024-2048", - "type": "scatter3d", - "xsrc": "JohnMaddock:12:a022a7", - "x": [ - "241.49", - "361.724", - "476.231", - "216.984", - "377.966", - "455.201", - "357.559", - "603.057", - "323.934", - "115.045", - "605.353", - "264.899", - "560.641", - "458.247", - "126.583", - "482.419", - "503.711", - "339.499", - "216.215", - "622.447", - "294.074", - "404.455", - "154.409", - "520.191", - "106.075", - "276.875", - "326.479", - "553.663", - "295.086", - "395.377", - "469.888", - "504.916", - "227.192", - "643.364", - "280.846", - "507.405", - "216.395", - "370.038", - "291.502", - "354.802", - "339.336", - "253.738", - "568.239", - "417.14", - "344.197", - "452.172", - "335.221", - "286.108", - "549.374", - "397.778", - "200.109", - "412.812", - "297.343", - "517.414", - "104.222", - "362.636", - "298.722", - "134.728", - "398.198", - "322.379", - "379.298", - "189.886", - "21.3558", - "2.76947", - "507.211", - "1.68106", - "230.039", - "145.939", - "397.609", - "129.893", - "201.644", - "243.822", - "307.585", - "371.872", - "462.3", - "519.035", - "406.421", - "529.393", - "506.392", - "541.584", - "108.884", - "438.774", - "253.386", - "331.489", - "403.496", - "215.391", - "19.4918", - "310.758", - "270.811", - "353.857", - "103.723", - "231.664", - "530.717", - "470.284", - "414.71", - "543.192", - "259.286", - "277.946", - "414.645", - "205.232", - "397.967", - "288.571", - "288.199", - "181.259", - "4.01187", - "299.448", - "184.651", - "547.195", - "232.404", - "403.539", - "596.366", - "377.144", - "2.3814", - "241.053", - "310.778", - "328.185", - "270.578", - "511.476", - "356.37", - "400.687", - "340.761", - "199.802", - "242.617", - "281.616", - "601.546", - "464.244", - "453.628", - "181.005", - "303.856", - "4.86859", - "337.834", - "198.931", - "291.163", - "241.224", - "323.893", - "324.935", - "559.669", - "136.365", - "344.213", - "581.276", - "123.68", - "1.11791", - "258.866", - "418.28", - "261.003", - "516.718", - "252.022", - "575.374", - "487.314", - "196.851", - "267.982", - "568.145", - "285.958", - "219.331", - "520.983", - "488.264", - "546.257", - "380.856", - "604.609", - "140.27", - "365.72", - "298.907", - "369.09", - "379.209", - "497.098", - "475.979", - "570.297", - "277.534", - "169.296", - "207.719", - "171.551", - "237.467", - "389.522", - "566.485", - "295.604", - "462.976", - "292.299", - "260.046", - "251.474", - "348.632", - "487.695", - "419.327", - "380.083", - "353.705", - "269.378", - "391.861", - "119.924", - "448.905", - "266.824", - "449.649", - "315.82", - "484.531", - "354.39", - "293.251", - "517.78", - "250.244", - "331.509", - "474.515", - "414.067", - "488.654", - "295.96", - "343.837", - "278.696", - "298.689", - "319.406", - "225.165", - "352.182", - "249.805", - "50.5676", - "576.769", - "210.266", - "509.514", - "422.902", - "319.276", - "396.695", - "337.673", - "357.381", - "117.674", - "236.911", - "285.457", - "254.292", - "202.018", - "485.874", - "331.362", - "159.324", - "292.912", - "1.03137", - "415.464", - "181.257", - "315.67", - "422.251", - "156.046", - "367.742", - "422.709", - "305.819", - "432.553", - "456.523", - "280.094", - "234.917", - "258.02", - "707.774", - "164.056", - "462.236", - "244.489", - "432.251", - "5.67967", - "313.098", - "327.629", - "419.657", - "347.396", - "321.854", - "324.046", - "266.614", - "265.874", - "224.994", - "333.303", - "354.893", - "464.628", - "394.759", - "535.444", - "367.574", - "466.305", - "375.062", - "16.9929", - "337.28", - "385.587", - "352.218", - "150.887", - "343.735", - "419.292", - "135.043", - "231.581", - "639.588", - "605.226", - "332.599", - "352.054", - "373.752", - "234.318", - "329.649", - "208.107", - "248.797", - "259.649", - "344.417", - "338.864", - "526.221", - "567.765", - "599.149", - "242.284", - "398.914", - "332.452", - "442.556", - "428.714", - "499.331", - "300.328", - "405.49", - "457.473", - "198.847", - "62.9087", - "453.297", - "267.703", - "552.105", - "795.136", - "329.304", - "209.306", - "399.833", - "153.194", - "259.706", - "610.571", - "353.699", - "147.511", - "522.42", - "479.245", - "306.951", - "346.099", - "426.674", - "434.219", - "229.748", - "582.285", - "583.888", - "351.606", - "237.888", - "340.795", - "402.33", - "319.59", - "395.35", - "68.6642", - "500.32", - "273.731", - "307.596", - "531.384", - "396.128", - "453.674", - "554.832", - "445.089", - "307.173", - "261.258", - "387.095", - "259.167", - "312.474", - "427.856", - "385.07", - "8.60443", - "451.616", - "375.433", - "365.407", - "629.608", - "503.696", - "499.496", - "2.99669", - "300.877", - "180.043", - "521.499", - "359.32", - "223.78", - "505.707", - "406.362", - "509.409", - "199.527", - "911.88", - "343.499", - "391.878", - "312.574", - "632.18", - "387.345", - "207.328", - "560.8", - "197.762", - "475.124", - "345.238", - "538.315", - "352.589", - "379.729", - "529.173", - "172.125", - "200.809", - "394.714", - "515.998", - "650.093", - "417.811", - "330.149", - "252.438", - "337.099", - "197.887", - "447.994", - "457.065", - "370.601", - "278.256", - "330.799", - "415.637", - "353.83", - "497.255", - "370.45", - "549.175", - "316.639", - "491.632", - "438.623", - "575.862", - "490.18", - "278.271", - "409.331", - "302.312", - "456.985", - "360.635", - "310.189", - "286.522", - "501.789", - "142.124", - "285.228", - "444.498", - "353.431", - "283.668", - "309.204", - "337.117", - "252.233", - "499.539", - "824.08", - "468.587", - "399.917", - "475.979", - "291.141", - "555.075", - "471.844", - "526.944", - "318.097", - "346.574", - "370.729", - "289.448", - "343.984", - "292.018", - "243.986", - "521.234", - "417.102", - "489.333", - "549.441", - "461.512", - "545.488", - "427.387", - "352.763", - "448.314", - "421.315", - "490.343", - "411.475", - "290.424", - "272.773", - "273.588", - "510.923", - "534.76", - "291.594", - "377.925", - "276.629", - "409.059", - "419.335", - "525.189", - "457.68", - "354.146", - "413.984", - "239.584", - "401.29", - "326.122", - "16.6137", - "374.134", - "265.467", - "374.547", - "609.284", - "286.442", - "285.009", - "466.23", - "340.449", - "288.846", - "531.422", - "559.434", - "360.92", - "258.804", - "567.137", - "434.547", - "611.765", - "372.575", - "433.918", - "315.713", - "306.977", - "300.742", - "452.775", - "457.387", - "409.598", - "252.832", - "427.79", - "525.967", - "301.971", - "383.942", - "340.704", - "271.268", - "499.212", - "314.264", - "323.307", - "416.474", - "433.621", - "297.118", - "581.955", - "536.932", - "181.923", - "440.282", - "587.175", - "161.377", - "403.403", - "350.517", - "132.302", - "248.477", - "476.141", - "339.147", - "426.375", - "331.759", - "395.534", - "316.144", - "415.509", - "580.884", - "432.725", - "301.688", - "430.105", - "307.902", - "481.774", - "318.304", - "231.761", - "368.383", - "332.225", - "507.923", - "451.811", - "342.874", - "2.89447", - "382.269", - "462.711", - "384.649", - "355.958", - "476.204", - "263.256", - "488.803", - "401.947", - "380.524", - "444.035", - "346.364", - "562.876", - "265.324", - "595.175", - "329.385", - "228.212", - "461.797", - "370.272", - "431.993", - "382.716", - "444.811", - "483.124", - "456.882", - "573.769", - "297.335", - "377.519", - "380.488", - "557.723", - "281.763", - "418.093", - "400.75", - "430.019", - "459.76", - "328.049", - "306.269", - "293.641", - "353.34", - "517.828", - "660.523", - "491.567", - "437.611", - "164.457", - "410.752", - "1.32294", - "272.432", - "270.331", - "449.632", - "401.985", - "522.662", - "402.237", - "478.948", - "432.254", - "603.885", - "256.363", - "290.142", - "370.144", - "422.114", - "391.078", - "436.806", - "410.91", - "460.076", - "390", - "380.375", - "565.223", - "536.466", - "471.116", - "516.905", - "390.951", - "376.325", - "467.259", - "520.452", - "394.418", - "363.725", - "248.434", - "632.528", - "530.935", - "485.187", - "271.728", - "459.158", - "525.494", - "373.708", - "350.101", - "545.844", - "332.608", - "367.424", - "554.19", - "1.5457", - "304.716", - "1.7322", - "556.306", - "387.55", - "405.17", - "538.122", - "413.301", - "263.339", - "489.672", - "260.931", - "306.359", - "497.723", - "535.298", - "511.217", - "491.322", - "328.415", - "288.286", - "541.693", - "425.924", - "259.68", - "380.322", - "335.594", - "369.219", - "478.2", - "272.784", - "367.054", - "411.19", - "441.765", - "542.271", - "556.957", - "0.57164", - "495.746", - "519.335", - "419.65", - "300.679", - "278.094", - "327.217", - "511.438", - "332.147", - "660.094", - "310.292", - "575.729", - "371.16", - "461.017", - "299.686", - "492.905", - "534.545", - "378.104", - "365.226", - "413.441", - "263.436", - "336.72", - "324.705", - "327.932", - "387.344", - "360.702", - "286.403", - "430.76", - "296.485", - "247.216", - "245.647", - "289.195", - "346.138", - "445.523", - "582.503", - "373.099", - "353.401", - "430.99", - "325.554", - "454.926", - "444.448", - "262.07", - "302.987", - "428.306", - "372.79", - "377.806", - "324.058", - "343.65", - "228.476", - "261.245", - "528.94", - "394.183", - "408.944", - "362.955", - "397.45", - "382.77", - "376.415", - "595.441", - "302.305", - "581.68", - "272.209", - "549.702", - "303.276", - "565.852", - "585.17", - "446.578", - "518.259", - "413.811", - "521.615", - "227.551", - "259.948", - "383.643", - "393.794", - "430.543", - "263.958", - "330.027", - "451.233", - "474.863", - "524.503", - "452.176", - "356.05", - "279.268", - "304.691", - "340.454", - "412.938", - "264.686", - "396.727", - "528.28", - "518.413", - "350.054", - "449.326", - "337.961", - "317.099", - "346.683", - "297.795", - "350.625", - "435.037", - "422.678", - "237.825", - "351.964", - "295.725", - "437.8", - "290.45", - "274.967", - "627.133", - "257.498", - "355.612", - "393.769", - "408.496", - "308.079", - "360.113", - "548.845", - "384.385", - "260.618", - "283.232", - "471.21", - "428.542", - "422.722", - "4.24624", - "389.094", - "398.052", - "289.009", - "482.317", - "403.167", - "362.131", - "372.483", - "273.643", - "405.38", - "460.364", - "345.118", - "500.032", - "402.77", - "355.281", - "382.139", - "583.158", - "460.207", - "443.444", - "455.316", - "533.284", - "291.738", - "287.44", - "410.052", - "496.752", - "313.429", - "363.183", - "289.088", - "317.825", - "305.806", - "379.719", - "314.105", - "383.039", - "376.032", - "413.927", - "364.759", - "257.832", - "351.763", - "414.478", - "356.619", - "581.968", - "411.182", - "337.4", - "370.145", - "282.045", - "392.633", - "434.134", - "338.672", - "306.136", - "444.066", - "336.44", - "434.378", - "490.479", - "639.33", - "532.971", - "345.667", - "348.807", - "319.028", - "494.657", - "411.911", - "462.489", - "515.763", - "315.641", - "422.791", - "481.753", - "422.085", - "492.038", - "398.978", - "405.324", - "348.023", - "461.433", - "332.747", - "374.905", - "549.969", - "359.924", - "506.997", - "329.155", - "592.243", - "287.798", - "656.109", - "301.47", - "483.867", - "298.113", - "290.559", - "263.82", - "308.561", - "378.144", - "462.948" - ], - "ysrc": "JohnMaddock:12:affcec", - "y": [ - "537.75", - "508.277", - "775.174", - "419.686", - "624.896", - "659.767", - "383.388", - "675.693", - "557.268", - "970.092", - "650.143", - "433.003", - "821.608", - "578.341", - "447.686", - "889.944", - "952.596", - "377.379", - "693.682", - "695.849", - "693.695", - "757.585", - "522.128", - "939.088", - "234.594", - "664.95", - "366.601", - "684.069", - "706.616", - "597.463", - "562.613", - "681.551", - "546.071", - "670.004", - "576.613", - "912.479", - "599.669", - "615.481", - "726.846", - "419.901", - "657.135", - "631.636", - "729.13", - "527.917", - "779.685", - "791.366", - "559.077", - "632.769", - "751.679", - "801.821", - "461.454", - "745.841", - "297.225", - "755.505", - "541.418", - "732.142", - "443.128", - "537.527", - "600.857", - "729.563", - "456.854", - "446.734", - "683.674", - "393.47", - "867.87", - "513.839", - "384.323", - "318.349", - "796.674", - "450.039", - "527.663", - "399.335", - "418.212", - "473.251", - "589.906", - "879.616", - "673.271", - "639.762", - "718.056", - "962.903", - "341.047", - "690.984", - "897.429", - "514.033", - "511.98", - "465.104", - "680.894", - "566.597", - "471.587", - "389.133", - "335.046", - "438.022", - "705.324", - "914.169", - "687.918", - "827.738", - "708.851", - "608.857", - "850.184", - "470.265", - "789.045", - "548.413", - "526.267", - "512.762", - "457.386", - "687.77", - "380.962", - "726.362", - "627.791", - "447.828", - "983.387", - "529.897", - "371.171", - "679.698", - "492.732", - "510.012", - "638.676", - "796.578", - "464.604", - "472.394", - "704.122", - "439.252", - "599.858", - "682.309", - "750.069", - "781.204", - "664.613", - "335.148", - "539.51", - "678.455", - "566.448", - "583.974", - "599.521", - "553.182", - "583.952", - "644.513", - "767.722", - "362.693", - "782.781", - "662.969", - "515.606", - "325.93", - "391.489", - "722.208", - "458.923", - "670.52", - "448.652", - "782.522", - "661.249", - "355.388", - "490.969", - "824.101", - "484.47", - "356.513", - "833.427", - "868.661", - "607.452", - "758.328", - "762.207", - "494.594", - "718.333", - "526.877", - "674.579", - "837.648", - "677.757", - "865.5", - "746.204", - "677.644", - "465.435", - "390.174", - "589.616", - "453.665", - "690.802", - "948.207", - "531.612", - "652.47", - "487.43", - "669.067", - "600.296", - "460.51", - "707.498", - "596.522", - "616.866", - "676.855", - "501.382", - "706.967", - "207.324", - "726.714", - "584.427", - "628.814", - "641.671", - "837.256", - "631.493", - "438.877", - "820.423", - "425.272", - "629.489", - "755.792", - "774.796", - "868.209", - "497.062", - "544.88", - "679.684", - "532.986", - "563.903", - "391.331", - "597.269", - "590.53", - "576.996", - "789.955", - "518.588", - "635.215", - "610.654", - "466.657", - "660.508", - "644.683", - "717.094", - "186.416", - "508.174", - "389.675", - "470.739", - "250.477", - "924.665", - "644.093", - "435.919", - "505.817", - "426.721", - "863.986", - "256.21", - "445.415", - "755.53", - "193.069", - "630.661", - "517.56", - "628.869", - "677.9", - "905.483", - "481.362", - "409.056", - "633.901", - "666.273", - "467.332", - "820.729", - "339.661", - "775.958", - "660.658", - "407.219", - "602.892", - "619.496", - "702.932", - "661.497", - "685.239", - "484.582", - "615.632", - "410.98", - "665.87", - "627.738", - "635.934", - "718.786", - "869.81", - "763.534", - "734.302", - "561.906", - "676.614", - "681.2", - "742.763", - "631.601", - "219.275", - "780.867", - "609.771", - "470.538", - "497.2", - "774.649", - "912.982", - "674.295", - "384.481", - "752.163", - "328.46", - "610.024", - "452.021", - "500.486", - "535.988", - "634.713", - "633.908", - "824.788", - "854.913", - "663.774", - "277.395", - "661.602", - "458.483", - "571.613", - "569.95", - "846.349", - "602.004", - "456.901", - "932.879", - "212.067", - "650.608", - "807.179", - "429.649", - "887.53", - "748.632", - "681.024", - "477.346", - "844.105", - "385.556", - "609.118", - "638.195", - "603.871", - "264.724", - "618.931", - "819.713", - "452.046", - "613.551", - "879.516", - "677.625", - "596.919", - "894.572", - "696.193", - "656.463", - "497.735", - "809.487", - "706.448", - "663.255", - "654.841", - "687.024", - "644.786", - "559.702", - "472.076", - "753.77", - "633.275", - "556.732", - "671.299", - "580.253", - "526.456", - "625.539", - "816.309", - "537.991", - "567.019", - "778.423", - "489.158", - "521.118", - "680.213", - "523.444", - "749.64", - "774.977", - "769.447", - "557.089", - "661.73", - "672.362", - "327.076", - "629.695", - "467.293", - "579.926", - "645.043", - "838.366", - "701.126", - "348.809", - "870.377", - "655.212", - "823.598", - "417.92", - "829.449", - "811.774", - "564.642", - "947.922", - "520.655", - "824.987", - "763.106", - "694.145", - "575.658", - "740.133", - "687.243", - "589.516", - "472.898", - "622.135", - "753.773", - "688.768", - "548.863", - "685.28", - "613.762", - "683.774", - "500.21", - "668.97", - "689.515", - "670.905", - "500.32", - "663.63", - "828.874", - "647.591", - "639.411", - "835.62", - "643.825", - "526.77", - "775.98", - "823.792", - "823.351", - "609.833", - "313.805", - "570.16", - "696.246", - "681.173", - "508.928", - "697.035", - "393.343", - "866.539", - "334.715", - "600.749", - "588.376", - "700.844", - "607.468", - "479.093", - "725.099", - "661.738", - "775.79", - "815.581", - "723.015", - "666.815", - "757.209", - "463.184", - "922.866", - "777.819", - "660.278", - "669.493", - "655.401", - "750.713", - "328.703", - "802.103", - "543.272", - "502.894", - "643.365", - "644.428", - "783.568", - "708.347", - "625.764", - "611.268", - "723.852", - "657.709", - "644.187", - "690.366", - "555.261", - "684.459", - "523.307", - "409.752", - "498.081", - "587.795", - "787.872", - "511.098", - "744.647", - "419.457", - "690.717", - "419.531", - "719.34", - "684.867", - "441.298", - "708.508", - "560.618", - "814.348", - "622.983", - "594.708", - "647.701", - "534.967", - "498.552", - "762.102", - "519.246", - "729.293", - "705.552", - "655.507", - "682.314", - "761.001", - "658.454", - "534.864", - "695.487", - "643.389", - "447.982", - "705.584", - "479.426", - "707.228", - "585.939", - "429.487", - "576.269", - "783.482", - "692.394", - "685.1", - "276.768", - "733.261", - "768.529", - "627.07", - "724.699", - "629.117", - "647.76", - "805.595", - "681.798", - "785.993", - "586.781", - "763.307", - "501.752", - "605.356", - "829.809", - "572.574", - "800.178", - "882.747", - "351.061", - "775.137", - "840.756", - "265.459", - "503.2", - "722.979", - "406.949", - "710.346", - "765.894", - "652.152", - "593.027", - "752.482", - "796.639", - "760.031", - "466.618", - "881.769", - "599.508", - "734.474", - "585.562", - "485.183", - "662.956", - "632.129", - "725.946", - "701.152", - "757.14", - "710.265", - "528.565", - "801.912", - "526.433", - "751.685", - "716.882", - "519.292", - "865.037", - "792.509", - "557.234", - "766.865", - "640.045", - "674.014", - "481.871", - "743.406", - "779.348", - "531.567", - "828.751", - "829.251", - "749.375", - "512.048", - "696.708", - "697.796", - "828.558", - "808.143", - "568.037", - "701", - "684.36", - "599.797", - "441.013", - "810.498", - "606.619", - "812.531", - "688.5", - "637.33", - "596.475", - "619.476", - "643.275", - "576.704", - "718.461", - "683.229", - "698.984", - "658.032", - "710.396", - "668.72", - "404.008", - "629.902", - "750.884", - "822.373", - "627.893", - "585.333", - "909.38", - "896.843", - "515.386", - "424.505", - "675.755", - "669.83", - "525.019", - "642.104", - "602.938", - "771.693", - "863.347", - "648.942", - "682.04", - "855.959", - "697.695", - "749.725", - "667.843", - "839.642", - "429.068", - "940.578", - "669.242", - "525.86", - "635.049", - "590.568", - "862.508", - "732.979", - "814.53", - "702.028", - "531.528", - "596.893", - "642.164", - "719.783", - "648.475", - "417.225", - "738.238", - "675.172", - "323.594", - "624.539", - "597.339", - "783.861", - "803.739", - "799.288", - "739.38", - "722.602", - "644.225", - "671.5", - "367.744", - "530.232", - "605.008", - "744.488", - "704", - "803.209", - "573.693", - "663.669", - "836.002", - "732.325", - "570.959", - "458.089", - "778.875", - "657.845", - "799.318", - "554.943", - "751.786", - "679.165", - "757.658", - "832.759", - "735.26", - "516.444", - "616.994", - "695.748", - "664.487", - "385.484", - "551.036", - "647.44", - "685.684", - "701.965", - "757.673", - "803.947", - "849.655", - "660.09", - "806.513", - "424.034", - "761.171", - "739.77", - "774.549", - "700.697", - "519.825", - "626.598", - "494.891", - "696.592", - "479.613", - "578.722", - "779.193", - "412.861", - "540.053", - "705.313", - "469.748", - "418.714", - "442.9", - "701.314", - "807.258", - "962.562", - "590.714", - "625.903", - "779.8", - "701.959", - "919.982", - "785.474", - "408.823", - "526.288", - "748.951", - "516.45", - "503.216", - "555.031", - "775.598", - "472.352", - "549.436", - "862.886", - "675.31", - "683.485", - "796.173", - "608.904", - "344.271", - "575.57", - "991.217", - "633.703", - "851.441", - "472.802", - "706.098", - "565.542", - "850.698", - "905.355", - "623.196", - "802.533", - "751.331", - "660.362", - "586.043", - "489.186", - "425.217", - "647.984", - "608.828", - "579.057", - "548.425", - "594.736", - "812.906", - "543.813", - "768.373", - "749.295", - "537.839", - "579.319", - "511.294", - "549.149", - "578.106", - "658.581", - "982.22", - "841.266", - "464.051", - "724.599", - "740.734", - "479.198", - "562.218", - "442.814", - "476.053", - "773.811", - "554.529", - "605.673", - "469.371", - "732.07", - "770.63", - "627.293", - "464.361", - "887.53", - "734.449", - "728.46", - "712.837", - "719.108", - "490.975", - "684.508", - "737.346", - "684.633", - "491.427", - "540.709", - "742.52", - "775.898", - "782.757", - "686.911", - "471.688", - "669.765", - "406.434", - "760.993", - "746.103", - "777.414", - "697.454", - "542.278", - "521.996", - "882.289", - "768.086", - "669.545", - "544.221", - "764.68", - "726.486", - "778.046", - "704.465", - "662.012", - "456.306", - "829.986", - "764.881", - "732.863", - "786.1", - "899.651", - "459.399", - "579.923", - "633.85", - "533.041", - "740.871", - "652.15", - "751.54", - "648.747", - "731.602", - "505.598", - "784.895", - "575.756", - "708.678", - "799.407", - "514.014", - "991.047", - "748.082", - "663.586", - "694.373", - "675.089", - "557.369", - "729.055", - "627.257", - "714.358", - "525.128", - "496.98", - "663.431", - "880.388", - "735.286", - "570.395", - "580.121", - "695.036", - "739.727", - "805.091", - "604.216", - "783.809", - "846.546", - "607.913", - "686.446", - "962.05", - "586.836", - "563.155", - "723.017", - "734.185", - "678.12", - "614.531", - "623.514", - "691.946", - "818.992", - "632.527", - "782.234", - "569.677", - "780.797", - "604.841", - "709.45", - "564.917", - "918.473", - "723.37", - "600.217", - "619.122", - "590.874", - "777.041", - "589.513" - ], - "zsrc": "JohnMaddock:12:114922", - "z": [ - "744.434", - "729.585", - "848.463", - "902.439", - "768.171", - "749.501", - "733.413", - "763.462", - "778.07", - "989.743", - "731.108", - "710.429", - "916.119", - "816.092", - "847.022", - "947.15", - "964.878", - "747.603", - "993.046", - "733.284", - "849.194", - "882.253", - "969.177", - "977.082", - "714.569", - "944.635", - "751.542", - "791.731", - "826.249", - "817.945", - "786.121", - "804.017", - "918.944", - "717.508", - "872.254", - "988.745", - "897.29", - "756.543", - "909.67", - "711.961", - "837.66", - "871.414", - "790.51", - "752.133", - "912.228", - "976.205", - "900.26", - "825.215", - "847.019", - "991.136", - "796.573", - "818.032", - "621.229", - "804.688", - "982.82", - "924.793", - "817.937", - "914.322", - "759.998", - "815.503", - "763.607", - "836.501", - "988.35", - "625.052", - "877.573", - "595.876", - "752.396", - "919.584", - "866.543", - "952.506", - "838.724", - "869.019", - "809.924", - "719.661", - "797.782", - "995.127", - "791.98", - "797.299", - "770.533", - "981.957", - "983.57", - "839.774", - "968.949", - "907.705", - "799.878", - "900.348", - "991.196", - "846.72", - "811.892", - "744.974", - "989.324", - "945.653", - "774.509", - "982.804", - "876.753", - "845.256", - "982.545", - "820.43", - "950.898", - "758.408", - "917.258", - "967.401", - "964.508", - "813.131", - "861.647", - "965.408", - "787.677", - "761.558", - "899.241", - "719.541", - "988.948", - "844.667", - "719.262", - "990.88", - "747.195", - "715.624", - "937.098", - "905.324", - "752.409", - "738.46", - "727.161", - "985.761", - "978.693", - "974.578", - "751.627", - "899.646", - "720.368", - "798.914", - "720.355", - "852.495", - "957.378", - "850.318", - "883.979", - "897.491", - "981.28", - "933.548", - "770.578", - "948.271", - "912.276", - "735.838", - "940.121", - "448.866", - "777.793", - "870.321", - "737.317", - "792.232", - "903.969", - "870.692", - "726.825", - "889.671", - "942.21", - "869.958", - "785.361", - "760.187", - "849.782", - "971.671", - "746.503", - "897.856", - "805.873", - "817.348", - "822.431", - "877.494", - "810.429", - "978.659", - "847.273", - "870.442", - "779.751", - "855.302", - "743.713", - "741.494", - "881.087", - "760.626", - "960.008", - "962.513", - "844.202", - "777.186", - "899.355", - "850.638", - "753.577", - "749.736", - "750.757", - "712.551", - "941.976", - "993.959", - "929.824", - "715.621", - "733.038", - "864.312", - "768.581", - "812.078", - "851.394", - "901.035", - "833.923", - "808.023", - "882.737", - "815.182", - "722.5", - "882.489", - "932.492", - "929.881", - "755.642", - "718.284", - "819.693", - "961.21", - "814.324", - "719.603", - "966.792", - "865.012", - "992.436", - "858.67", - "813.748", - "772.939", - "795.731", - "862.901", - "756.588", - "850.111", - "928.739", - "755.543", - "726.757", - "737.712", - "814.84", - "714.544", - "991.086", - "781.224", - "878.518", - "940.251", - "974.638", - "925.125", - "812.769", - "746.198", - "790.309", - "750.169", - "790.634", - "725.597", - "808.875", - "874.129", - "980.264", - "801.048", - "711.662", - "974.08", - "232.841", - "751.63", - "925.955", - "805.079", - "859.529", - "997.259", - "748.745", - "765.821", - "892.205", - "931.975", - "928.13", - "773.906", - "789.734", - "906.029", - "943.458", - "837.957", - "796.536", - "843.766", - "790.66", - "886.789", - "923.981", - "742.924", - "902.538", - "986.657", - "896.737", - "941.948", - "988.557", - "739.871", - "939.229", - "816.508", - "871.825", - "834.589", - "808.576", - "934.177", - "969.734", - "739.157", - "810.576", - "797.809", - "919.67", - "878.349", - "969.009", - "788.78", - "876.449", - "972.739", - "834.919", - "905.663", - "751.697", - "720.489", - "932.256", - "749.089", - "815.373", - "812.303", - "905.216", - "790.438", - "758.185", - "986.416", - "713.229", - "945.687", - "923.521", - "776.074", - "916", - "599.539", - "738.756", - "772.877", - "904.105", - "721.518", - "742.25", - "710.127", - "854.658", - "837.591", - "763.491", - "914.921", - "726.598", - "858.653", - "982.445", - "838.16", - "843.909", - "902.298", - "739.119", - "999.698", - "885.478", - "982.022", - "868.168", - "767.226", - "923.895", - "916.537", - "781.033", - "894.993", - "855.569", - "834.791", - "870.396", - "765.249", - "710.449", - "786.494", - "893.056", - "751.59", - "992.712", - "890.255", - "967.245", - "870.195", - "714.946", - "851.634", - "837.202", - "826.637", - "973.268", - "794.358", - "876.843", - "714.071", - "870.213", - "914.289", - "918.192", - "781.484", - "795.767", - "761.461", - "826.507", - "907.752", - "752.578", - "863.565", - "582.241", - "910.351", - "934.462", - "724.819", - "838.207", - "958.207", - "718.471", - "952.036", - "928.062", - "895.021", - "944.316", - "737.275", - "889.498", - "920.905", - "741.077", - "858.972", - "962.929", - "854.61", - "867.451", - "737.743", - "735.481", - "724.837", - "974.752", - "974.154", - "717.903", - "869.801", - "817.37", - "896.602", - "822.854", - "939.618", - "859.019", - "733.611", - "721.262", - "996.554", - "735.394", - "828.683", - "911.343", - "857.162", - "878.696", - "720.977", - "739.889", - "788.666", - "997.481", - "724.491", - "852.124", - "792.517", - "774.746", - "879.384", - "853.574", - "788.464", - "773.72", - "893.319", - "922.385", - "762.278", - "975.67", - "830.623", - "840.717", - "544.623", - "775.935", - "929.997", - "864.947", - "848.824", - "967.898", - "931.45", - "732.295", - "891.816", - "906.173", - "849.535", - "737.022", - "974.038", - "871.368", - "759.535", - "793.555", - "881.342", - "882.491", - "788.919", - "791.121", - "744.945", - "888.345", - "936.643", - "725.896", - "959.731", - "755.69", - "869.824", - "955.537", - "836.041", - "738.168", - "716.84", - "850.714", - "947.487", - "841.776", - "876.597", - "969.038", - "695.964", - "745.107", - "876.199", - "785.111", - "767.348", - "790.96", - "917.201", - "715.14", - "993.932", - "830.35", - "895.662", - "716.096", - "780.015", - "815.507", - "982.813", - "846.388", - "858.481", - "970.371", - "876.581", - "746.139", - "868.347", - "994.406", - "755.67", - "717.179", - "715.016", - "759.891", - "787.853", - "827.61", - "744.93", - "995.496", - "798.622", - "903.376", - "837.601", - "717.006", - "817.253", - "808.486", - "914.909", - "970.992", - "848.2", - "975.381", - "886.185", - "904.722", - "988.99", - "722.014", - "836.438", - "834.092", - "727.261", - "884.258", - "939.252", - "893.193", - "892.886", - "862.103", - "961.51", - "986.268", - "857.434", - "924.989", - "818.521", - "741.18", - "765.01", - "945.06", - "888.014", - "905.075", - "826.057", - "809.172", - "807.57", - "716.258", - "923.283", - "801.844", - "906.388", - "727.095", - "810.947", - "724.891", - "855.383", - "789.09", - "743.031", - "961.122", - "969.709", - "742.823", - "820.435", - "770.497", - "793.777", - "799.024", - "909.278", - "871.146", - "982.186", - "755.787", - "924.447", - "987.651", - "736.735", - "963.947", - "768.275", - "914.7", - "811.56", - "901.776", - "939.539", - "817.243", - "746.842", - "891.682", - "766.419", - "836.215", - "868.035", - "988.271", - "735.671", - "799.659", - "719.901", - "714.809", - "867.332", - "799.911", - "833.833", - "789.872", - "756.844", - "920.242", - "751.493", - "876.883", - "724.768", - "748.065", - "749.656", - "744.219", - "993.71", - "979.94", - "777.128", - "758.833", - "875.345", - "873.772", - "947.976", - "760.43", - "789.011", - "953.671", - "962.28", - "638.901", - "735.787", - "839.202", - "771.212", - "724.259", - "720.356", - "758.385", - "874.424", - "973.414", - "857.481", - "926.119", - "866.716", - "842.256", - "882.392", - "722.746", - "941.79", - "747.393", - "958.15", - "753.046", - "817.426", - "928.177", - "983.339", - "870.747", - "750.636", - "849.455", - "964.548", - "735.187", - "757.267", - "834.041", - "806.77", - "749.899", - "765.925", - "876.342", - "766.583", - "480.612", - "788.297", - "694.285", - "860.509", - "920.768", - "981.592", - "787.979", - "865.6", - "884.279", - "799.736", - "792.07", - "840.502", - "723.576", - "763.008", - "811.432", - "889.253", - "904.204", - "902.45", - "945.588", - "794.57", - "887.029", - "782.004", - "978.013", - "844.797", - "826.086", - "796.851", - "944.987", - "721.556", - "875.295", - "852.313", - "805.87", - "979.136", - "786.893", - "743.259", - "743.665", - "797.885", - "769.121", - "753.863", - "779.329", - "934.014", - "774.317", - "999.106", - "897.722", - "916.443", - "828.903", - "856.672", - "818.65", - "856.322", - "978.541", - "768.704", - "714.883", - "955.513", - "837.175", - "776.624", - "780.238", - "762.67", - "931.218", - "821.426", - "800.879", - "999.907", - "959.128", - "762.071", - "811.854", - "880.213", - "995.667", - "964.413", - "782.331", - "786.726", - "947.879", - "994.546", - "930.424", - "961.657", - "719.6", - "727.857", - "903.943", - "785.49", - "810.049", - "812.998", - "949.336", - "916.84", - "920.92", - "879.645", - "747.286", - "934.104", - "943.096", - "832.722", - "167.448", - "821.677", - "995.849", - "745.737", - "890.188", - "879.341", - "835.325", - "933.159", - "921.642", - "913.322", - "737.85", - "897.769", - "846.959", - "815.205", - "909.438", - "962.379", - "714.572", - "910.688", - "855.646", - "920.164", - "859.442", - "724.999", - "909.212", - "719.704", - "949.253", - "948.096", - "917.182", - "832.453", - "832.537", - "725.677", - "990.007", - "947.356", - "982.82", - "961.952", - "829.197", - "727.408", - "917.272", - "763.804", - "844.729", - "837.981", - "730.669", - "849.659", - "797.839", - "761.412", - "729.196", - "915.436", - "872.906", - "729.999", - "787.655", - "895.721", - "998.114", - "814.945", - "985.118", - "883.488", - "803.822", - "830.747", - "845.235", - "763.952", - "810.859", - "957.225", - "892.29", - "892.579", - "785.04", - "923.768", - "731.76", - "867.05", - "843.805", - "904.879", - "845.638", - "881.401", - "771.679", - "752.389", - "808.774", - "917.596", - "894.864", - "818.473", - "738.029", - "875.278", - "998.244", - "808.154", - "748.298", - "775.041", - "709.544", - "911.333", - "963.435", - "913.418", - "819.296", - "904.786", - "728.794", - "888.392", - "793.37", - "784.819", - "946.711", - "756.176", - "998.169", - "747.001", - "799.1", - "758.819", - "973.515", - "930.191", - "753.611", - "961.265", - "753.387", - "993.616", - "835.617", - "727.813", - "801.237", - "983.429", - "785.068", - "765.557", - "850.081", - "983.106", - "746.774", - "794.258", - "836.82", - "922.711", - "762.014", - "723.097", - "935.618", - "913.44", - "996.862", - "968.631", - "728.946", - "966.967", - "895.092", - "848.469", - "898.008", - "962.171", - "829.493", - "767.495", - "998.271", - "784.065", - "985.124", - "723.87", - "727.21", - "753.792", - "860.24", - "856.476", - "799.641", - "714.728", - "842.025", - "888.868", - "717.175", - "747.245", - "966.883", - "869.593", - "829.509", - "984.069", - "884.818", - "927.892", - "747.029" - ], - "marker": { - "size": 3, - "color": "rgb(239, 130, 59)" - } - }, - { - "mode": "markers", - "name": "512-1024", - "type": "scatter3d", - "xsrc": "JohnMaddock:13:045801", - "x": [ - "226.889", - "39.9707", - "179.883", - "111.566", - "30.8271", - "35.7822", - "87.6295", - "401.491", - "566.435", - "186.492", - "174.302", - "429.309", - "74.4639", - "203.819", - "543.438", - "81.8779", - "181.956", - "311.881", - "94.0266", - "358.539", - "102.573", - "173.302", - "141.745", - "207.094", - "84.2567", - "248.435", - "252.953", - "167.419", - "357.485", - "110.316", - "466.92", - "344.612", - "88.382", - "381.155", - "212.915", - "28.0614", - "429.903", - "375.862", - "479.343", - "354.434", - "418.581", - "255.044", - "47.313", - "144.719", - "554.802", - "101.239", - "91.9154", - "150.107", - "93.4929", - "368.565", - "40.9549", - "49.8873", - "77.8188", - "227.358", - "415.665", - "377.751", - "41.61", - "497.548", - "80.6664", - "164.849", - "366.74", - "188.489", - "148.391", - "249.732", - "274.451", - "164.636", - "213.759", - "446.108", - "223.204", - "71.5901", - "85.6457", - "104.484", - "443.736", - "5.92469", - "141.546", - "58.4989", - "77.7158", - "479.394", - "495.736", - "193.072", - "277.125", - "117.125", - "333.409", - "487.868", - "180.741", - "259.98", - "114.386", - "499.283", - "396.041", - "263.253", - "390.892", - "341.775", - "221.255", - "348.976", - "587.542", - "78.9689", - "382.598", - "43.2302", - "41.4961", - "537.304", - "82.7007", - "116.214", - "326.766", - "267.14", - "444.413", - "224.344", - "262.781", - "98.8952", - "483.722", - "353.732", - "28.348", - "282.924", - "132.014", - "171.845", - "279.892", - "103.608", - "190.366", - "184.059", - "21.3965", - "476.206", - "471.314", - "213.889", - "322.212", - "258.27", - "423.351", - "406.661", - "153.903", - "77.3557", - "120.142", - "119.645", - "188.124", - "208.534", - "296.086", - "175.469", - "51.7431", - "69.0134", - "274", - "157.096", - "78.7152", - "119.486", - "125.744", - "187.097", - "128.24", - "171.211", - "92.2607", - "118.748", - "271.963", - "192.58", - "384.406", - "14.1102", - "437.13", - "56.1289", - "232.799", - "69.842", - "141.218", - "34.3849", - "240.152", - "128.394", - "233.251", - "462.609", - "67.8801", - "2.20015", - "228.715", - "20.2777", - "271.26", - "554.852", - "48.7173", - "87.4084", - "565.247", - "85.0417", - "66.0342", - "328.914", - "290.505", - "46.1669", - "198.519", - "60.6234", - "305.881", - "420.061", - "215.025", - "47.0752", - "33.2263", - "378.708", - "545.871", - "55.8863", - "166.212", - "175.095", - "104.902", - "203.59", - "452.758", - "419.403", - "223.783", - "163.831", - "393.66", - "59.9022", - "453.237", - "301.842", - "287.097", - "428.682", - "385.654", - "410.794", - "310.549", - "156.726", - "161.52", - "51.9785", - "209.3", - "437.633", - "418.114", - "313.256", - "196.794", - "190.425", - "162.29", - "180.869", - "170.295", - "2.67866", - "296.872", - "177.527", - "433.222", - "75.3291", - "261.438", - "340.332", - "286.493", - "231.112", - "262.259", - "176.286", - "47.9566", - "147.191", - "9.74378", - "154.593", - "96.5663", - "283.644", - "217.678", - "37.1172", - "554.933", - "82.0721", - "175.107", - "566.611", - "244.035", - "30.6379", - "310.513", - "449.172", - "314.572", - "275.428", - "161.765", - "517.723", - "99.6354", - "361.576", - "252.498", - "417.838", - "0.409181", - "367.473", - "577.319", - "20.7163", - "99.7601", - "134.013", - "134.566", - "114.82", - "409.571", - "170.491", - "89.6164", - "84.4396", - "256.709", - "405.832", - "336.594", - "346.983", - "362.725", - "603.147", - "89.2816", - "323.286", - "41.1417", - "243.501", - "277.038", - "562.664", - "101.011", - "317.228", - "245.716", - "227.46", - "278.134", - "287.872", - "533.712", - "407.405", - "72.812", - "224.38", - "258.125", - "191.11", - "378.785", - "246.819", - "449.056", - "182.603", - "154.705", - "69.5863", - "91.1051", - "206.081", - "223.806", - "176.29", - "211.032", - "75.2925", - "284.068", - "149.154", - "56.0837", - "218.796", - "215.126", - "156.971", - "408.037", - "220.99", - "197.708", - "112.095", - "198.372", - "60.8771", - "8.47309", - "130.462", - "340.09", - "669.144", - "143.627", - "63.2241", - "195.564", - "644.84", - "106.738", - "311.15", - "618.685", - "383.625", - "15.8182", - "34.1057", - "63.4431", - "314.527", - "184.823", - "516.162", - "207.409", - "198.285", - "402.951", - "215.823", - "97.0912", - "112.524", - "152.342", - "244.309", - "84.7692", - "70.9046", - "336.716", - "35.4158", - "318.638", - "368.696", - "395.812", - "237.076", - "191.801", - "337.32", - "127.7", - "253.362", - "237.669", - "319.109", - "7.68078", - "15.3675", - "279.066", - "185.474", - "400.41", - "247.414", - "524.106", - "486.987", - "307.679", - "128.216", - "254.06", - "511.879", - "118.173", - "191.901", - "381.728", - "70.0337", - "112.702", - "47.7281", - "265.188", - "241.968", - "68.2045", - "180.327", - "64.6405", - "220.548", - "266.682", - "103.158", - "47.1048", - "149.921", - "155.663", - "89.5504", - "144.482", - "74.177", - "400.42", - "413.962", - "152.497", - "380.687", - "127.95", - "497.224", - "511.932", - "445.259", - "462.356", - "183.769", - "150.954", - "24.1387", - "2.19991", - "62.6361", - "93.3409", - "135.285", - "524.235", - "161.957", - "490.419", - "149.924", - "75.4684", - "15.9989", - "87.1172", - "51.1343", - "181.771", - "230.11", - "119.732", - "108.288", - "227.375", - "155.526", - "303.115", - "271.034", - "164.464", - "275.356", - "239.797", - "354.662", - "178.069", - "396.915", - "211.202", - "47.4312", - "333.116", - "54.2812", - "44.6452", - "469.516", - "54.405", - "190.14", - "171.401", - "196.04", - "63.9053", - "28.1071", - "159.958", - "493.664", - "413.415", - "238.922", - "587.749", - "227.277", - "47.7096", - "524.247", - "48.3041", - "146.848", - "124.828", - "409.57", - "107.686", - "231.431", - "294.993", - "268.606", - "158.678", - "26.9737", - "126.161", - "78.0748", - "172.58", - "13.8535", - "437.188", - "305.792", - "446.147", - "228.674", - "109.534", - "212.265", - "64.6878", - "122.939", - "180.2", - "240.028", - "444.956", - "497.003", - "487.783", - "107.659", - "35.488", - "168.363", - "111.164", - "160.252", - "321.057", - "125.127", - "222.929", - "4.98208", - "82.8938", - "204.751", - "300.463", - "368.913", - "229.745", - "239.528", - "130.847", - "0.854703", - "93.7501", - "317.674", - "215.824", - "391.339", - "287.269", - "133.425", - "108.143", - "588.897", - "139.907", - "28.4653", - "534.753", - "53.8831", - "96.4074", - "99.9078", - "33.4224", - "204.462", - "122.969", - "147.589", - "268.066", - "2.4674", - "116.301", - "56.8788", - "79.3459", - "46.2985", - "75.0859", - "59.9089", - "89.4315", - "394.568", - "90.6406", - "186.125", - "22.9501", - "685.903", - "126.564", - "73.4662", - "213.309", - "292.251", - "131.782", - "148.515", - "60.303", - "181.252", - "479.305", - "105.076", - "344.149", - "100.031", - "378.339", - "305.382", - "225.548", - "44.2617", - "223.889", - "121.82", - "302.121", - "12.6832", - "398.579", - "357.876", - "135.155", - "63.8887", - "378.94", - "250.903", - "548.736", - "187.38", - "13.6046", - "139.035", - "227.846", - "259.261", - "11.2788", - "132.281", - "183.216", - "181.031", - "294.11", - "253.563", - "146.697", - "107.008", - "315.275", - "300.003", - "163.585", - "120.3", - "243.303", - "489.898", - "223.639", - "258.24", - "106.532", - "64.9288", - "131.329", - "435.935", - "383.017", - "182.418", - "142.144", - "365.564", - "437.084", - "190.709", - "181.002", - "211.34", - "208.229", - "367.492", - "337.638", - "459.054", - "166.333", - "233.601", - "273.201", - "139.739", - "144.454", - "37.0171", - "230.056", - "539.489", - "90.9984", - "446.977", - "376.327", - "90.8002", - "418.452", - "188.267", - "84.2761", - "513.37", - "176.841", - "599.54", - "123.181", - "73.3161", - "376.661", - "97.5434", - "6.95597", - "257.947", - "677.231", - "263.166", - "437.857", - "94.9721", - "359.378", - "83.5533", - "126.882", - "255.711", - "254.178", - "92.4773", - "172.643", - "460.003", - "172.286", - "250.882", - "235.889", - "265.349", - "537.882", - "56.388", - "118.151", - "214.101", - "224.804", - "200.642", - "346.672", - "234.723", - "364.265", - "118.78", - "27.143", - "71.2269", - "179.339", - "519.431", - "298.672", - "100.591", - "215.313", - "9.62272", - "201.539", - "317.132", - "90.5025", - "310.425", - "155.72", - "422.499", - "229.954", - "100.763", - "176.175", - "187.859", - "244.82", - "40.9721", - "234.336", - "121.019", - "291.886", - "212.793", - "19.4875", - "135.911", - "148.941", - "84.6935", - "182.083", - "146.535", - "310.475", - "186.097", - "360.373", - "423.739", - "371.128", - "18.7901", - "165.549", - "195.994", - "348.455", - "191.126", - "41.9017", - "211.19", - "394.972", - "507.327", - "164.846", - "1.1754", - "162.834", - "235.53", - "75.4976", - "217.02", - "165.807", - "183.993", - "115.095", - "170.231", - "150.176", - "434.221", - "172.505", - "263.822", - "102.542", - "371.402", - "157.697", - "499.227", - "159.723", - "109.442", - "303.606", - "81.7469", - "212.856", - "344.461", - "159.81", - "56.2563", - "311.496", - "1.82133", - "109.224", - "177.402", - "554.501", - "52.5644", - "174.236", - "521.983", - "61.2013", - "190.34", - "153.327", - "122.404", - "322.274", - "260.396", - "576.31", - "424.478", - "78.4397", - "373.248", - "366.171", - "374.064", - "130.557", - "15.0069", - "515.807", - "359.856", - "185.645", - "254.243", - "394.476", - "13.4972", - "1.36453", - "100.202", - "140.609", - "50.4236", - "258.61", - "375.947", - "556.367", - "186.319", - "213.077", - "247.067", - "250.478", - "313.182", - "538.913", - "15.577", - "264.531", - "57.8361", - "445.759", - "83.4277", - "362.372", - "189.947", - "233.642", - "506.69", - "57.6081", - "165.675", - "267.01", - "263.651", - "149.945", - "159.562", - "291.71", - "109.896", - "467.898", - "149.77", - "252.844", - "57.3893", - "287.764", - "34.5596", - "165.535", - "76.6126", - "104.006", - "87.641", - "292.776", - "89.0149", - "144.271", - "33.478", - "168.485", - "9.92613", - "453.148", - "122.354", - "241.023", - "163.087", - "381.82", - "537.868", - "242.778", - "398.896", - "246.5", - "412.372", - "62.5129", - "317.179", - "4.06184", - "387.539", - "336.055", - "280.412", - "14.4285", - "428.789", - "177.878", - "252.827", - "417.949", - "483.332", - "22.0607", - "210.01", - "284.313", - "2.20219", - "215.517", - "493.665", - "126.825", - "573.288", - "135.061", - "105.182", - "296.396", - "367.429", - "198.971", - "557.045", - "147.876", - "289.949", - "222.072", - "581.169", - "338.458", - "609.253", - "269.283", - "146.188", - "331.101", - "282.28", - "87.2132", - "5.32645", - "253.838", - "513.854", - "239.516", - "27.2593", - "43.5373", - "126.679", - "447.828", - "230.966", - "210.892", - "161.988", - "201.184", - "77.2456", - "49.8665", - "65.0235", - "166.818", - "111.225", - "196.53", - "101.05", - "533.911", - "408.273", - "21.053", - "314.928", - "172.98", - "632.744", - "254.478", - "279.746", - "313.722", - "207.495", - "362.627", - "350.87", - "4.41207", - "351.89", - "449.882", - "29.4976", - "134.244", - "154.267", - "202.816", - "136.547", - "324.629", - "84.5839", - "51.4119", - "25.8274", - "209.581", - "316.669", - "375.178", - "122.747", - "190.678", - "263.032", - "458.478", - "430.407", - "2.53085", - "421.672", - "225.13", - "200.699", - "258.271", - "287.504", - "292.205", - "399.463", - "64.1286", - "472.429", - "294.652", - "68.0062", - "440.419", - "1.72652", - "160.469", - "396.957", - "425.473", - "175.872", - "152.156", - "139.714", - "584.584", - "328.146", - "198.432", - "103.056", - "287.458", - "220.342", - "24.5325", - "125.138", - "331.746", - "125.847", - "184.73", - "247.453", - "298.624", - "120.441", - "249.092", - "16.5112", - "181.266", - "273.183", - "182.621", - "247.052", - "273.104", - "166.678", - "37.1319", - "20.111", - "390.417", - "100.997", - "164.145", - "335.041", - "337.843", - "83.8078", - "103.882", - "349.457", - "206.563", - "231.626", - "280.96", - "479.159", - "303.767", - "228.773", - "279.836", - "203.508", - "163.13", - "322.69", - "437.34", - "250.619", - "405.075", - "46.6959", - "600.36", - "279.317", - "348.307", - "165.784", - "459.164", - "225.899", - "138.604", - "167.31", - "217.324", - "146.468", - "429.855", - "24.588", - "564.576", - "273.289", - "143.982", - "122.372", - "294.558", - "150.784", - "479.819", - "312.71", - "82.8162", - "0.722186", - "18.3465", - "429.709", - "233.047", - "540.86", - "253.507", - "100.516", - "337.728", - "379.767", - "99.5658", - "447.678", - "315.46", - "98.75", - "289.689", - "385.328", - "635.693", - "142.063", - "571.99", - "213.262", - "281.496", - "182.092", - "401.577", - "351.339", - "263.947", - "452.384", - "406.576", - "164.081", - "191.108", - "329.809", - "247.194", - "164.565", - "506.856", - "140.369", - "434.409", - "255.253", - "538.736", - "255.303", - "309.532", - "224.29", - "115.099", - "162.711", - "92.1955", - "201.247", - "179.174", - "293.813", - "196.696", - "158.069", - "470.943", - "127.082", - "389.303", - "94.7281", - "58.2688", - "302.101", - "1.58764", - "531.32", - "1.62115", - "109.734", - "151.991", - "17.2955", - "137.672", - "567.176", - "123.215", - "173.273", - "31.4387", - "221.106", - "422.02", - "156.695", - "328.617", - "267.984", - "367.959", - "345.643", - "347.541", - "255.446", - "216.981", - "482.198", - "249.385", - "456.175", - "194.352", - "334.047", - "456.421", - "155.492", - "25.8858", - "0.510667", - "247.424", - "274.64", - "484.026", - "509.719", - "345.717", - "597.517", - "278.594", - "450.985", - "266.913", - "231.547", - "135.042", - "504.66", - "150.24", - "101.068", - "217.64", - "290.966", - "187.113", - "328.079", - "115.259", - "480.296", - "162.749", - "225.368", - "223.47", - "549.029", - "262.9", - "420.469", - "213.628", - "146.151", - "255.286", - "101.957", - "190.114", - "407.202", - "235.254", - "27.8849", - "150.997", - "191.007", - "352.272", - "456.341", - "608.062", - "320.576", - "424.7", - "437.799", - "263.564", - "387.346", - "5.82279", - "153.082", - "369.908", - "325.581", - "219.936", - "543.967", - "381.682", - "192.819", - "334.819", - "503.972", - "121.51", - "419.044", - "88.0089", - "190.962", - "479.211", - "3.06334", - "63.58", - "239.699", - "482.329", - "308.99", - "88.0756", - "161.644", - "326.937", - "258.813", - "475.629", - "213.69", - "245.074", - "245.685", - "305.766", - "49.4207", - "22.1306", - "292.929", - "288.663", - "303.486", - "245.49", - "335.141", - "638.803", - "411.986", - "560.571", - "204.106", - "250.605", - "563.771", - "245.672", - "134.465", - "118.924", - "214.67", - "423.751", - "343.815", - "113.783", - "421.025", - "165.051", - "314.496", - "365.872", - "10.2199", - "480.711", - "135.694", - "100.103", - "152.563", - "19.6292", - "314.371", - "310.101", - "226.586", - "440.649", - "279.545", - "1.18925", - "290.315", - "156.643", - "631.041", - "138.468", - "181.905", - "3.10574", - "298.402", - "489.49", - "125.722", - "300.646", - "168.407", - "9.55463", - "352.782", - "217.871", - "175.004", - "194.79", - "142.685", - "516.395", - "188.17", - "77.0661", - "281.993", - "408.251", - "224.587", - "471.741", - "256.546", - "337.489", - "255.706", - "184.405", - "288.841", - "396.313", - "245.217", - "136.085", - "336.353", - "398.421", - "257.104", - "374.05", - "377.516", - "240.795", - "312.441", - "183.754", - "349.162", - "453.317", - "273.068", - "149.706", - "175.595", - "277.478", - "308.502", - "387.645", - "423.591", - "318.041", - "2.08588", - "254.508", - "385.289", - "369.784", - "484.164", - "317.259", - "45.21", - "167.358", - "454.212", - "141.155", - "161.913", - "405.645", - "293.259", - "392.082", - "384.577", - "2.14097", - "503.873", - "386.755", - "358.43", - "144.182", - "538.902", - "206.522", - "457.986", - "395.05", - "271.976", - "131.627", - "212.546", - "228.347", - "448.104", - "379.704", - "445.03", - "123.813", - "257.184", - "437.633", - "439.608", - "302.261", - "370.954", - "445.821", - "296.794", - "210.06", - "396.07", - "194.253", - "51.7782", - "150.129", - "349.674", - "460.108", - "278.694", - "118.629", - "21.0128", - "333.889", - "80.5366", - "7.35989", - "167.942", - "2.34351", - "211.326", - "297.106", - "527.444", - "426.15", - "276.059", - "4.24049", - "149.626", - "166.701", - "439.861", - "472.933", - "252.088", - "283.283", - "497.815", - "556.994", - "325.829", - "224.804", - "214.915", - "331.867", - "5.09193", - "335.309", - "404.872", - "308.136", - "181.852", - "157.067", - "183.894", - "481.457", - "71.0019", - "3.1987", - "292.294", - "326.538", - "263.303", - "488.969", - "465.222", - "124.117", - "387.033", - "325.884", - "366.302", - "166.445", - "85.1003", - "158.542", - "352.386", - "188.653", - "567.505", - "459.504", - "175.718", - "295.794", - "371.802", - "215.741", - "216.03", - "0.267379", - "443.262", - "505.845", - "0.181755", - "442.395", - "184.069", - "164.816", - "384.919", - "506.334", - "591.408", - "254.622", - "76.6705", - "363.108", - "1.04816", - "468.784", - "311.524", - "416.32", - "238.776", - "173.396", - "151.795", - "385.958", - "359.635", - "224.322", - "196.099", - "451.647", - "439.258", - "146.611", - "286.723", - "372.333", - "402.671", - "317.388", - "108.032", - "403.62", - "580.342", - "43.7955", - "176.632", - "296.225", - "490.274", - "454.169", - "278.837", - "431.762", - "120.238", - "293.729", - "276.245", - "109.383", - "402.901", - "425.636", - "241.125", - "343.455", - "527.587", - "209.487", - "192.139", - "367.686", - "425.488", - "326.795", - "599.299", - "466.315", - "191.934", - "337.219", - "292.438", - "491.307", - "209.413", - "371.907", - "440.469", - "327.461", - "399.237", - "137.566", - "206.725", - "79.1118", - "308.728", - "399.556", - "55.1835", - "376.659", - "175.307", - "184.344", - "286.548", - "197.749", - "258.64", - "380.365", - "466.248", - "466.814", - "236.795", - "495.351", - "192.105", - "524.254", - "210.869", - "356.611", - "150.079", - "183.566", - "275.37", - "222.688", - "122.275", - "595.867", - "81.6583", - "202.644", - "7.66056", - "348.046", - "348.475", - "26.0787", - "481.039", - "300.153", - "416.174", - "504.298", - "359.279", - "295.192", - "289.899", - "554.542", - "237.832", - "408.697", - "265.658", - "0.883773", - "499.229", - "137.629", - "363.857", - "293.756", - "262.117", - "408.351", - "347.788", - "105.787", - "156.365", - "111.902", - "534.723", - "462.807", - "421.741", - "371.693", - "332.114", - "489.651", - "215.252", - "471.233", - "545.522", - "74.1785", - "305.657", - "508.698", - "403.239", - "399.282", - "19.5238", - "194.902", - "178.905", - "409.341", - "36.0941", - "427.059", - "463.306", - "455.352", - "18.691", - "230.779", - "239.125", - "347.773", - "350.049", - "237.226", - "470.701", - "480.426", - "327.506", - "271.248", - "328.954", - "642.678", - "177.761", - "412.934", - "494.138", - "569.553", - "185.741", - "313.379", - "78.2997", - "341.182", - "444.533", - "189.584", - "461.629", - "481.192", - "446.516", - "416.618", - "574.693", - "238.755", - "119.325", - "185.539", - "10.6173", - "269.893", - "130.9", - "294.03", - "327.579", - "5.10995", - "353.007", - "2.98211", - "255.109", - "394.575", - "365.548", - "14.0768", - "421.144", - "497.877", - "175.665", - "403.64", - "116.298", - "224.113", - "377.518", - "0.784563", - "443.054", - "437.266", - "101.884", - "316.66", - "249.729", - "519.26", - "244.058", - "438.883", - "539.457", - "235.298", - "511.648", - "241.784", - "449.392", - "182.9", - "282.411", - "284.784", - "309.188", - "345.681", - "464.624", - "381.527", - "269.76", - "388.469", - "363.28", - "550.582", - "420.176", - "206.882", - "504.659", - "50.8964", - "315.719", - "416.525", - "321.362", - "347.834", - "136.452", - "246.714", - "342.75", - "368.112", - "397.56", - "520.485", - "157.824" - ], - "ysrc": "JohnMaddock:13:2e1242", - "y": [ - "315.72", - "581.032", - "554.146", - "322.525", - "416.603", - "739.405", - "430.45", - "525.294", - "788.629", - "438.225", - "492.509", - "695.579", - "804.988", - "505.474", - "656.555", - "435.973", - "617.257", - "540.005", - "144.359", - "600.589", - "442.014", - "452.566", - "676.999", - "386.883", - "273.683", - "801.422", - "446.01", - "453.591", - "851.388", - "278.244", - "553.117", - "901.885", - "414.834", - "720.29", - "771.017", - "457.334", - "812.85", - "675.114", - "882.371", - "677.655", - "846.651", - "303.037", - "543.84", - "387.263", - "873.897", - "369.433", - "257.562", - "338.254", - "536.702", - "644.63", - "342.081", - "574.864", - "407.578", - "535.589", - "899.008", - "716.332", - "436.863", - "671.078", - "303.407", - "525.995", - "757.906", - "671.777", - "435.05", - "370.976", - "453.371", - "838.944", - "623.062", - "794.397", - "512.974", - "358.433", - "506.832", - "721.602", - "794.065", - "626.979", - "750.919", - "587.464", - "252.753", - "800.006", - "651.299", - "467.467", - "584.122", - "802.99", - "693.753", - "616.594", - "392.775", - "795.828", - "431.96", - "868.832", - "686.066", - "661.452", - "390.845", - "882.589", - "222.249", - "656.651", - "747.281", - "467.051", - "773.601", - "320.23", - "466.214", - "725.354", - "858.266", - "369.599", - "448.137", - "441.622", - "940.759", - "728.444", - "704.433", - "658.081", - "927.094", - "643.334", - "868.97", - "561.701", - "552.589", - "374.613", - "421.114", - "421.966", - "477.991", - "453.181", - "754.826", - "901.524", - "537.006", - "374.105", - "598.587", - "460.363", - "592.183", - "599.017", - "491.682", - "143.116", - "362.51", - "422.321", - "410.954", - "532.031", - "296.519", - "405.871", - "429.287", - "227.869", - "561.756", - "286.624", - "260.344", - "236.284", - "772.899", - "788.32", - "820.477", - "838.411", - "245.163", - "586.704", - "342.959", - "866.159", - "815.778", - "421.203", - "700.835", - "414.811", - "444.366", - "296.797", - "661.444", - "334.96", - "532.306", - "306.515", - "426.87", - "617.919", - "176.263", - "601.592", - "456.091", - "586.323", - "390.129", - "645.736", - "409.687", - "842.533", - "636.229", - "240.475", - "475.423", - "586.891", - "851.004", - "96.4073", - "350.28", - "449.713", - "890.524", - "455.296", - "724.383", - "262.275", - "435.337", - "752.297", - "765.927", - "290.127", - "732.526", - "640.173", - "597.29", - "880.857", - "609.413", - "664.648", - "592.284", - "866.972", - "503.93", - "467.012", - "804.76", - "563.408", - "524.983", - "764.101", - "715.43", - "706.919", - "573.238", - "500.483", - "775.373", - "744.217", - "275.778", - "465.768", - "647.595", - "793.181", - "321.088", - "256.482", - "451.963", - "609.737", - "394.94", - "224.338", - "354.515", - "504.461", - "690.342", - "169.171", - "718.167", - "637.427", - "427.086", - "440.824", - "465.125", - "340.681", - "474.597", - "610.79", - "470.207", - "514.149", - "604.769", - "561.828", - "545.424", - "442.111", - "886.503", - "363.561", - "539.313", - "819.111", - "485.604", - "203.203", - "642.863", - "943.619", - "559.135", - "700.573", - "492.076", - "848.634", - "744.376", - "718.678", - "569.217", - "756.349", - "190.946", - "559.776", - "772.183", - "727.155", - "736.747", - "873.103", - "550.263", - "397.158", - "832.322", - "394.475", - "584.679", - "385.909", - "686.125", - "640.042", - "618.222", - "694.307", - "494.202", - "825.846", - "806.179", - "540.483", - "755.616", - "424.273", - "418.986", - "944.475", - "242.558", - "623.658", - "513.646", - "517.506", - "515.673", - "371.058", - "802.991", - "780.046", - "688.669", - "932.912", - "447.918", - "548.122", - "641.623", - "375.036", - "717.597", - "635.294", - "552.587", - "434.357", - "539.062", - "349.77", - "822.658", - "991.878", - "316.183", - "860.973", - "910.159", - "688.172", - "496.059", - "315.87", - "464.499", - "441.42", - "815.523", - "421.08", - "649.995", - "937.78", - "396.713", - "743.422", - "576.774", - "605.822", - "767.175", - "696.967", - "393.398", - "605.417", - "417.33", - "921.007", - "142.513", - "568.615", - "808.37", - "472.849", - "738.524", - "852.987", - "706.024", - "889.688", - "537.833", - "953.69", - "638.44", - "470.789", - "596.569", - "772.95", - "763.871", - "591.443", - "719.71", - "773.136", - "257.868", - "813.798", - "525.913", - "324.675", - "857.149", - "571.452", - "626.794", - "551.853", - "686.325", - "788.005", - "751.757", - "616.547", - "851.768", - "388.92", - "624.267", - "631.961", - "564.079", - "419.155", - "491.96", - "447.687", - "672.003", - "536.962", - "807.116", - "797.642", - "585.592", - "846.405", - "409.012", - "594.871", - "828.025", - "386.745", - "427.026", - "416.929", - "657.361", - "400.143", - "390.799", - "858.569", - "668.881", - "260.297", - "587.13", - "218.624", - "532.881", - "808.907", - "264.775", - "454.144", - "554.953", - "363.093", - "485.032", - "634.392", - "340.784", - "757.07", - "796.326", - "651.162", - "615.803", - "664.311", - "725.798", - "464.306", - "529.624", - "351.016", - "169.803", - "560.042", - "657.038", - "615.01", - "715.503", - "253.076", - "810.571", - "660.248", - "125.551", - "784.895", - "314.435", - "648.706", - "691.31", - "568.695", - "771.135", - "418.566", - "226.796", - "361.886", - "518.703", - "469.236", - "342.906", - "497.816", - "545.584", - "799.848", - "546.731", - "706.864", - "543.809", - "910.38", - "481.08", - "741.828", - "617.922", - "650.491", - "300.882", - "526.506", - "205.214", - "708.326", - "391.207", - "815.27", - "441.982", - "854.935", - "741.967", - "386.679", - "888.897", - "803.3", - "268.097", - "636.514", - "566.613", - "488.179", - "776.441", - "609.22", - "259.831", - "713.244", - "529.759", - "915.105", - "286.455", - "718.078", - "464.412", - "437.557", - "382.253", - "832.635", - "690.259", - "854.331", - "576.516", - "769.484", - "267.11", - "474.422", - "352.853", - "309.909", - "734.129", - "708.657", - "789.507", - "764.462", - "692.771", - "503.211", - "773.666", - "299.327", - "440.765", - "513.576", - "787.284", - "477.022", - "322.618", - "555.958", - "384.006", - "779.09", - "329.426", - "777.005", - "467.882", - "483.037", - "651.624", - "149.948", - "466.973", - "871.603", - "675.744", - "539.905", - "666.904", - "319.365", - "851.981", - "653.276", - "450.059", - "694.089", - "824.948", - "330.883", - "418.864", - "324.504", - "258.742", - "478.334", - "571.416", - "237.901", - "385.109", - "838.666", - "837.658", - "334.19", - "676.931", - "334.123", - "638.036", - "457.188", - "185.292", - "837.414", - "231.743", - "569.93", - "653.638", - "733.979", - "358.569", - "388.645", - "388.92", - "589.695", - "395.729", - "451.924", - "305.782", - "495.04", - "709.706", - "273.16", - "784.792", - "273.87", - "974.088", - "750.427", - "643.888", - "743.486", - "403.452", - "167.737", - "405.814", - "569.693", - "654.944", - "632.706", - "528.467", - "469.425", - "898.9", - "885.045", - "798.864", - "297.129", - "697.84", - "274.865", - "386.66", - "499.446", - "707.942", - "784.809", - "473.358", - "779.546", - "414.26", - "921.67", - "503.495", - "509.498", - "428.748", - "881.081", - "708.45", - "319.375", - "839.086", - "784.605", - "416.618", - "370.258", - "286.023", - "698.046", - "505.265", - "707.594", - "882.027", - "527.727", - "409.063", - "533.01", - "832.446", - "602.135", - "718.587", - "464.664", - "392.286", - "636.372", - "535.786", - "785.026", - "715.081", - "258.189", - "273.324", - "899.851", - "765.676", - "637.834", - "668.891", - "853.894", - "348.434", - "741.026", - "677.217", - "592.124", - "682.921", - "455.957", - "269.497", - "931.511", - "278.284", - "641.903", - "643.434", - "510.365", - "893.736", - "834.957", - "545.493", - "496.395", - "695.81", - "503.679", - "862.92", - "837.179", - "537.147", - "692.536", - "327.709", - "325.927", - "624.099", - "614.612", - "381.729", - "922.726", - "739.799", - "619.69", - "580.143", - "654.563", - "807.75", - "648.875", - "372.779", - "676.376", - "536.84", - "924.15", - "587.172", - "359.24", - "993.093", - "480.523", - "795.5", - "405.791", - "436.068", - "668.653", - "812.535", - "548.373", - "576.091", - "667.769", - "584.471", - "679.6", - "313.799", - "671.305", - "332.237", - "771.662", - "555.701", - "901.306", - "686.864", - "681.518", - "345.729", - "642.191", - "460.895", - "137.152", - "436.015", - "289.728", - "653.494", - "227.1", - "422.024", - "470.854", - "477.12", - "470.64", - "644.325", - "619.052", - "597.261", - "809.599", - "407.985", - "336.027", - "669.377", - "646.975", - "632.683", - "761.037", - "471.309", - "561.059", - "641.194", - "620.532", - "739.036", - "697.792", - "317.051", - "477.724", - "311.133", - "503.083", - "297.105", - "337.068", - "672.832", - "934.82", - "647.475", - "625.806", - "456.114", - "754.086", - "427.53", - "621.686", - "635.304", - "681.589", - "205.458", - "448.63", - "360.934", - "610.019", - "498.853", - "578.538", - "314.487", - "409.605", - "604.249", - "245.109", - "418.936", - "590.137", - "795.676", - "579.443", - "526.297", - "795.585", - "634.282", - "540.948", - "270.644", - "246.272", - "670.263", - "468.585", - "697.78", - "961.156", - "784.133", - "676.784", - "679.946", - "831.655", - "374.298", - "518.231", - "673.955", - "642.443", - "439.698", - "518.909", - "722.095", - "842.7", - "563.842", - "622.117", - "445.704", - "534.051", - "647.266", - "517.817", - "932.277", - "546.989", - "510.808", - "489.597", - "520.187", - "645.579", - "798.864", - "512.028", - "695.641", - "838.494", - "654.588", - "307.717", - "606.384", - "464.76", - "377.077", - "588.644", - "268.884", - "469.259", - "455.409", - "636.071", - "387.391", - "508.381", - "543.977", - "344.831", - "810.102", - "344.826", - "543.333", - "689.307", - "504.139", - "686.947", - "448.513", - "362.257", - "225.714", - "213.408", - "670.651", - "508.717", - "468.738", - "713.605", - "452.55", - "500.343", - "870.222", - "508.558", - "449.467", - "596.137", - "702.48", - "669.752", - "466.03", - "501.544", - "731.083", - "724.109", - "169.053", - "204.678", - "397.016", - "628.105", - "855.369", - "690.684", - "541.011", - "506.793", - "307.55", - "416.713", - "808.701", - "801.69", - "518.534", - "483.719", - "490.864", - "255.829", - "257.921", - "681.777", - "623.288", - "952.885", - "496.3", - "743.207", - "765.49", - "608.089", - "338.654", - "961.056", - "757.84", - "646.616", - "521.156", - "787.804", - "464.803", - "753.883", - "392.195", - "642.9", - "656.034", - "560.453", - "221.03", - "483.6", - "470.034", - "750.756", - "501.393", - "626.949", - "876.338", - "528.008", - "691.431", - "567.464", - "469.085", - "357.393", - "802.011", - "329.55", - "388.747", - "292.077", - "319.979", - "331.613", - "744.594", - "300.173", - "713.975", - "874.755", - "619.004", - "556.002", - "228.556", - "893.201", - "763.828", - "494.857", - "445.283", - "534.309", - "552.103", - "573.902", - "448.847", - "589.105", - "725.549", - "655.664", - "727.45", - "332.188", - "523.302", - "498.951", - "462.564", - "327.548", - "469.41", - "719.202", - "440.118", - "525.898", - "810.749", - "409.413", - "467.644", - "400.138", - "969.832", - "666.219", - "926.177", - "641.028", - "875.295", - "274.02", - "574.858", - "911.485", - "501.302", - "830.443", - "674.735", - "709.501", - "546.525", - "235.205", - "786.956", - "306.317", - "200.34", - "677.627", - "757.11", - "562.003", - "615.74", - "862.01", - "684.857", - "676.553", - "570.033", - "237.053", - "348.044", - "401.871", - "538.432", - "304.28", - "345.084", - "423.988", - "465.018", - "604.03", - "590.097", - "298.613", - "482.793", - "609.705", - "584.364", - "681.038", - "468.349", - "617.871", - "481.394", - "422.21", - "527.168", - "504.204", - "460.72", - "474.479", - "574.311", - "599.639", - "814.652", - "517.815", - "384.078", - "928.437", - "594.509", - "495.587", - "612.566", - "600.268", - "479.256", - "588.072", - "731.372", - "600.25", - "441.066", - "521.973", - "735.689", - "301.483", - "970.392", - "184.734", - "517.861", - "595.699", - "663.873", - "319.012", - "778.185", - "332.824", - "316.703", - "450.371", - "561.242", - "547.452", - "683.749", - "137.261", - "833.834", - "575.377", - "392.261", - "862.387", - "310.954", - "532.194", - "851.127", - "651.52", - "475.14", - "276.706", - "702.706", - "703.802", - "605.329", - "735.17", - "381.74", - "282.882", - "633.641", - "500.858", - "532.308", - "819.111", - "749.86", - "413.212", - "680.899", - "668.024", - "804.546", - "334.945", - "792.217", - "672.065", - "602.406", - "555.589", - "605.628", - "563.01", - "501.744", - "800.685", - "740.46", - "472.683", - "481.702", - "739.421", - "471.01", - "529.152", - "847.635", - "497.647", - "662.618", - "479.064", - "687.773", - "297.08", - "467.539", - "448.748", - "709.624", - "363.418", - "451.625", - "701.826", - "406.282", - "504.09", - "295.633", - "580.221", - "976.358", - "302.675", - "586.54", - "888.942", - "693.662", - "635.639", - "708.351", - "760.013", - "678.534", - "378.376", - "273.2", - "585.669", - "554.15", - "870.613", - "499.216", - "852.752", - "763.433", - "553.022", - "689.493", - "527.263", - "610.087", - "485.468", - "653.343", - "639.109", - "592.435", - "504.69", - "396.26", - "831.77", - "675.737", - "860.5", - "504.381", - "567.606", - "552.112", - "394.658", - "718.491", - "250.254", - "568.353", - "627.299", - "915.169", - "820.49", - "456.117", - "584.016", - "681.707", - "684.366", - "430.43", - "597.764", - "623.987", - "568.519", - "794.368", - "141.728", - "594.438", - "604.909", - "389.053", - "529.407", - "511.519", - "671.745", - "300.615", - "613.764", - "977.927", - "713.02", - "535.662", - "763.017", - "345.717", - "436.091", - "482.577", - "426.058", - "439.136", - "702.223", - "636.843", - "738.305", - "567.158", - "333.966", - "713.584", - "635.973", - "795.123", - "606.022", - "563.581", - "569.547", - "746.72", - "727.046", - "566.414", - "440.462", - "562.01", - "784.215", - "336.295", - "982.449", - "703.439", - "323.337", - "744.737", - "582.87", - "328.714", - "722.332", - "347.158", - "433.01", - "614.723", - "157.367", - "587.133", - "800.741", - "756.212", - "706.954", - "503.347", - "515.861", - "649.663", - "566.449", - "926.986", - "388.294", - "507.361", - "606.585", - "892.304", - "488.784", - "576.666", - "852.657", - "617.971", - "550.585", - "340.081", - "710.385", - "830.665", - "709.427", - "797.752", - "489.395", - "575.788", - "873.854", - "441.3", - "355.997", - "532.23", - "437.223", - "714.542", - "727.497", - "220.895", - "726.192", - "825.663", - "460.147", - "604.39", - "611.405", - "664.975", - "422.835", - "316.743", - "497.675", - "505.739", - "365.348", - "704.31", - "542.901", - "626.838", - "433.669", - "273.708", - "377.126", - "337.563", - "708.561", - "247.817", - "448.716", - "582.563", - "385.165", - "547.256", - "462.999", - "458.111", - "418.223", - "574.299", - "588.259", - "482.331", - "626.708", - "268.924", - "309.002", - "630.239", - "486.919", - "243.48", - "552.8", - "707.513", - "662.391", - "848.1", - "570.656", - "614", - "773.258", - "634.789", - "571.345", - "552.564", - "808.629", - "302.21", - "612.053", - "529.579", - "604.671", - "483.418", - "754.096", - "501.786", - "311.424", - "294.393", - "663.757", - "550.518", - "447.404", - "208.654", - "290.305", - "498.354", - "567.014", - "677.746", - "474.191", - "575.342", - "257.468", - "681.943", - "709.186", - "625.785", - "720.673", - "834.637", - "512.823", - "197.254", - "928.296", - "338.57", - "293.196", - "775.142", - "508.702", - "738.052", - "574.793", - "187.693", - "700.324", - "662.581", - "617.514", - "399.823", - "841.553", - "412.026", - "711.863", - "657.23", - "537.006", - "476.691", - "656.591", - "387.041", - "766.08", - "553.957", - "575.285", - "419.898", - "537.128", - "788.379", - "684.346", - "618.761", - "736.645", - "518.902", - "499.116", - "649.187", - "590.957", - "345.644", - "458.554", - "543.495", - "513.059", - "923.102", - "558.368", - "745.451", - "974.154", - "620.087", - "718.912", - "580.288", - "300.879", - "875.145", - "516.656", - "453.506", - "863.64", - "577.32", - "451.686", - "624.425", - "408.737", - "259.54", - "806.565", - "716.154", - "381.713", - "658.622", - "664.258", - "854.396", - "545.559", - "477.039", - "422.344", - "674.154", - "540.719", - "769.218", - "772.151", - "756.523", - "533.706", - "235.348", - "282.57", - "792.224", - "764.561", - "525.212", - "588.147", - "625.623", - "974.282", - "698.483", - "692.095", - "390.016", - "774.236", - "514.95", - "567.178", - "292.952", - "378.085", - "541.942", - "470.937", - "424.454", - "816.723", - "897.622", - "463.226", - "694.365", - "652.991", - "286.943", - "423.962", - "225.708", - "650.22", - "752.605", - "395.535", - "592.805", - "440.959", - "315.837", - "697.85", - "740.058", - "716.534", - "586.184", - "545.261", - "783.685", - "876.373", - "768.574", - "490.552", - "709.116", - "338.283", - "340.324", - "501.535", - "517.618", - "620.561", - "453.253", - "501.342", - "827.681", - "856.496", - "209.338", - "384.668", - "672.192", - "717.686", - "622.778", - "553.201", - "836.679", - "707.964", - "499.233", - "232.247", - "528.891", - "922.574", - "609.179", - "414.416", - "503.211", - "393.699", - "361.443", - "461.863", - "655.006", - "776.651", - "834.626", - "535.054", - "742.222", - "856.846", - "408.25", - "206.793", - "749.429", - "574.501", - "438.289", - "871.151", - "524.198", - "536.776", - "656.949", - "761.498", - "588.506", - "621.046", - "614.475", - "697.846", - "652.335", - "385.734", - "24.0659", - "462.517", - "593.573", - "595.47", - "677.828", - "570.447", - "700.993", - "454.521", - "595.654", - "568.31", - "270.369", - "631.144", - "554.519", - "866.591", - "638.468", - "636.323", - "946.55", - "582.954", - "721.354", - "501.674", - "555.967", - "604.573", - "558.787", - "395.162", - "537.637", - "277.671", - "824.403", - "445.771", - "404.3", - "502.154", - "694.833", - "495.925", - "517.687", - "956.935", - "669.232", - "880.384", - "874.163", - "592.384", - "653.366", - "717.799", - "629.411", - "659.436", - "587.31", - "360.455", - "311.468", - "801.181", - "254.846", - "740.982", - "519.722", - "372.675", - "684.612", - "960.137", - "605.336", - "359.726", - "310.023", - "704.492", - "725.596", - "820.297", - "731.313", - "710.59", - "610.08", - "484.776", - "862.199", - "853.505", - "891.73", - "490.68", - "819.645", - "699.499", - "567.638", - "727.122", - "529.635", - "438.575", - "761.801", - "635.294", - "536.587", - "717.531", - "619.175", - "601.071", - "505.511", - "428.089", - "517.38", - "845.314", - "631.748", - "945.613", - "727.795", - "407.827", - "729.353", - "628.885", - "688.093", - "583.075", - "831.184", - "865.645", - "838.021", - "55.2396", - "648.078", - "690.389", - "509.592", - "717.542", - "396.389", - "841.991", - "857.084", - "715.727", - "771.065", - "831.754", - "625.56", - "198.465", - "553.581", - "451.05", - "627.807", - "347.76", - "634.784", - "719.665", - "519.534", - "742.304", - "645.797", - "473.952", - "782.744", - "771.629", - "684.321", - "734.766", - "658.845", - "321.891", - "566.129", - "621.632", - "416.973", - "867.582", - "437.416", - "806.003", - "634.992", - "356.686", - "519.721", - "575.405", - "664.376", - "509.894", - "690.651", - "876.587", - "442.471", - "638.399", - "414.634", - "692.559", - "554.829", - "737.492", - "703.392", - "587.61", - "586.972", - "598.428", - "648.175", - "650.796", - "795.701", - "745.566", - "849.649", - "689.929", - "534.831", - "689.643", - "626.23", - "765.734", - "842.693", - "646.406", - "514.464", - "556.324", - "693.931", - "535.1", - "511.296", - "604.017", - "876.86", - "379.904" - ], - "zsrc": "JohnMaddock:13:7b7f96", - "z": [ - "773.761", - "903.697", - "793.57", - "940.139", - "941.866", - "975.453", - "733.334", - "833.257", - "800.254", - "768.656", - "875.176", - "859.962", - "994.207", - "827.315", - "765.179", - "609.611", - "927.812", - "720.383", - "768.14", - "716.231", - "652.898", - "972.598", - "888.115", - "950.142", - "799.991", - "859.998", - "937.82", - "937.242", - "939.867", - "767.316", - "729.579", - "943.825", - "811.332", - "833.845", - "913.945", - "853.859", - "824.181", - "770.05", - "951.59", - "903.572", - "991.89", - "724.54", - "623.301", - "764.738", - "956.698", - "786.761", - "778.983", - "837.667", - "871.842", - "904.297", - "924.825", - "793.75", - "760.063", - "919.721", - "942.178", - "862.216", - "715.671", - "719.091", - "772.878", - "821.164", - "840.592", - "958.742", - "904.47", - "745.763", - "783.881", - "857.978", - "893.37", - "780.323", - "717.711", - "746.802", - "914.78", - "724.382", - "906.979", - "801.62", - "977.692", - "672.599", - "890.003", - "864.328", - "721.774", - "770.568", - "874.384", - "858.398", - "739.409", - "718.523", - "982.598", - "889.559", - "809.561", - "900.399", - "814.353", - "999.112", - "585.215", - "883.832", - "456.432", - "862.872", - "757.211", - "570.312", - "979.197", - "903.084", - "829.201", - "863.599", - "890.014", - "744.221", - "819.594", - "876.27", - "988.805", - "742.007", - "817.01", - "722.44", - "972.914", - "844.327", - "968.04", - "730.323", - "935.875", - "797.413", - "719.379", - "956.785", - "831.851", - "968.864", - "862.443", - "899.873", - "760.05", - "801.668", - "813.203", - "898.21", - "759.368", - "781.763", - "743.262", - "787.114", - "778.061", - "778.054", - "899.667", - "942.735", - "581.741", - "992.488", - "639.294", - "978.589", - "934.757", - "758.225", - "964.962", - "873.879", - "962.381", - "838.423", - "879.771", - "995.98", - "947.055", - "918.948", - "749.615", - "867.294", - "950.732", - "615.578", - "819.974", - "717.224", - "727.656", - "848.519", - "659.348", - "943.618", - "761.177", - "765.978", - "891.489", - "729.868", - "929.319", - "821.707", - "739.025", - "932.752", - "802.192", - "720.122", - "920.933", - "971.551", - "724.722", - "949.169", - "772.67", - "768.942", - "969.793", - "818.692", - "740.995", - "583.86", - "928.313", - "729.853", - "846.53", - "940.563", - "970.985", - "769.064", - "772.522", - "899.583", - "842.442", - "914.594", - "994.682", - "955.013", - "819.837", - "909.741", - "859.323", - "916.858", - "784.374", - "780.744", - "998.294", - "862.677", - "864.416", - "836.072", - "809.325", - "799.46", - "714.065", - "775.979", - "961.994", - "918.251", - "742.661", - "712.37", - "922.181", - "911.588", - "764.474", - "783.065", - "758.24", - "867.406", - "785.35", - "836.43", - "765.206", - "880.944", - "765.404", - "775.231", - "939.792", - "936.805", - "714.288", - "877.249", - "880.608", - "767.445", - "766.751", - "779.941", - "879.232", - "989.863", - "712.059", - "958.226", - "641.45", - "809.157", - "930.807", - "743.358", - "736.439", - "829.346", - "906.799", - "986.922", - "866.969", - "939.287", - "848.329", - "915.085", - "903.567", - "945.497", - "947.313", - "951.868", - "783.745", - "796.416", - "957.818", - "710.767", - "807.155", - "974.567", - "857.293", - "881.286", - "699.364", - "944.92", - "979.781", - "887.576", - "885.984", - "741.228", - "908.523", - "864.546", - "796.604", - "784.089", - "790.512", - "832.888", - "893.864", - "927.277", - "909.828", - "721.561", - "739.808", - "938.498", - "960.964", - "874.723", - "792.563", - "912.091", - "868.697", - "766.411", - "811.979", - "815.14", - "945.591", - "980.417", - "824.356", - "868.255", - "853.388", - "719.521", - "738.825", - "981.945", - "806.686", - "979.909", - "983.446", - "821.087", - "910.057", - "980.944", - "852.046", - "888.914", - "919.043", - "744.923", - "979.735", - "805.747", - "817.457", - "888.145", - "942.091", - "745.433", - "912.608", - "998.04", - "970.233", - "747.215", - "729.609", - "753.602", - "871.197", - "709.366", - "921.857", - "960.011", - "955.999", - "910.299", - "756.43", - "910.699", - "849.823", - "766.95", - "967.242", - "994.926", - "981.521", - "873.72", - "962.14", - "957.881", - "994.036", - "726.758", - "746.037", - "906.388", - "934.028", - "977.835", - "893.89", - "888.778", - "876.412", - "854.502", - "715.633", - "961.137", - "972.343", - "912.864", - "786.583", - "843.395", - "764.414", - "996.899", - "998.339", - "878.483", - "981.283", - "717.253", - "949.62", - "841.284", - "954.385", - "712.795", - "736.32", - "856.507", - "746.184", - "741.336", - "982.499", - "896.175", - "890.359", - "845.475", - "831.57", - "731.812", - "845.659", - "880.129", - "764.724", - "891.635", - "676.948", - "826.971", - "950.834", - "992.559", - "963.397", - "742.75", - "777.182", - "838.091", - "669.354", - "955.456", - "883.599", - "975.42", - "777.58", - "851.707", - "765.831", - "832.959", - "994.473", - "773.84", - "939.787", - "769.688", - "754.538", - "853.859", - "915.349", - "738.57", - "912.604", - "611.485", - "635.472", - "850.825", - "983.475", - "803.034", - "731.239", - "773.506", - "891.624", - "741.534", - "784.25", - "993.321", - "794.896", - "904.071", - "895.997", - "630.028", - "997.273", - "893.524", - "537.355", - "772.924", - "890.83", - "919.125", - "710.519", - "735.383", - "821.681", - "913.119", - "882.102", - "976.963", - "898.581", - "922.919", - "865.998", - "860.02", - "980.09", - "748.559", - "924.985", - "909.282", - "720.579", - "835.035", - "860.85", - "908.935", - "958.573", - "888.607", - "832.33", - "817.46", - "935.102", - "929.136", - "897.981", - "756.01", - "569.506", - "920.649", - "940.559", - "904.414", - "755.192", - "992.726", - "808.931", - "903.078", - "911.847", - "984.12", - "930.392", - "851.507", - "756.62", - "874.052", - "885.071", - "842.873", - "781.192", - "871.112", - "781.027", - "758.349", - "989.047", - "883.293", - "856.906", - "918.852", - "802.568", - "805.609", - "737.323", - "915.928", - "892.502", - "907.47", - "909.385", - "874.592", - "993.765", - "715.66", - "762.894", - "631.034", - "956.434", - "766.532", - "730.254", - "936.395", - "817.097", - "895.541", - "931.036", - "904.878", - "873.649", - "948.834", - "814.02", - "765.396", - "852.724", - "991.128", - "865.385", - "716.896", - "819.345", - "964.926", - "930.511", - "950.31", - "795.216", - "892.102", - "986.521", - "869.066", - "887.35", - "778.292", - "787.792", - "889.124", - "897.319", - "968.77", - "880.021", - "743.924", - "930.573", - "896.389", - "807.01", - "869.378", - "918.711", - "923.824", - "803.995", - "736.469", - "782.632", - "931.059", - "792.799", - "958.508", - "712.467", - "795.956", - "715.32", - "841.48", - "856.076", - "838.818", - "978.672", - "827.839", - "997.755", - "896.71", - "731.069", - "898.073", - "791.411", - "755.294", - "752.958", - "892.308", - "952.253", - "867.75", - "679.923", - "738.706", - "908.476", - "935.557", - "871.079", - "728.973", - "980.449", - "775.524", - "880.106", - "860.714", - "792.194", - "792.535", - "846.508", - "998.385", - "720.494", - "988.776", - "889.971", - "687.955", - "793.509", - "906.867", - "927.782", - "826.942", - "875.329", - "857.611", - "868.468", - "732.142", - "741.549", - "948.202", - "660.17", - "724.955", - "895.917", - "725.805", - "993.064", - "746.186", - "979.405", - "830.868", - "916.351", - "871.933", - "960.138", - "974.5", - "754.08", - "910.608", - "954.244", - "732.507", - "389.559", - "966.615", - "848.279", - "713.335", - "962.857", - "860.416", - "829.197", - "866.783", - "820.812", - "688.112", - "719.969", - "919.899", - "800.35", - "963.774", - "774.612", - "721.307", - "734.946", - "922.374", - "984.57", - "952.436", - "892.615", - "755.921", - "718.215", - "767.806", - "858.627", - "990.99", - "862.75", - "861.986", - "981.675", - "752.885", - "849.82", - "978.542", - "789.769", - "989.675", - "853.718", - "748.252", - "769.85", - "908.154", - "841.169", - "956.374", - "849.765", - "907.006", - "821.695", - "917.746", - "857.453", - "762.546", - "985.507", - "882.557", - "897.229", - "949.195", - "733.481", - "812.434", - "800.465", - "969.094", - "859.288", - "937.526", - "977.453", - "746.42", - "725.88", - "827.277", - "800.235", - "990.386", - "813.266", - "984.581", - "944.232", - "973.8", - "723.354", - "874.493", - "839.8", - "726.786", - "736.568", - "793.646", - "809.872", - "716.65", - "956.356", - "993.397", - "717.254", - "713.132", - "987.341", - "867.903", - "830.411", - "836.903", - "717.533", - "623.732", - "980.427", - "966.487", - "793.419", - "968.851", - "911.833", - "712.301", - "771.963", - "793.233", - "931.593", - "710.151", - "829.982", - "805.527", - "922.14", - "780.443", - "828.13", - "725.534", - "966.146", - "932.322", - "812.253", - "726.018", - "778.784", - "870.983", - "895.741", - "782.094", - "963.557", - "799.187", - "716.31", - "742.859", - "713.416", - "946.028", - "967.487", - "914.312", - "820.474", - "889.497", - "756.856", - "840.905", - "931.065", - "859.176", - "896.351", - "840.26", - "712.618", - "911.852", - "981.075", - "998.902", - "752.885", - "894.519", - "810.486", - "894.595", - "719.458", - "968.263", - "894.034", - "818.204", - "929.776", - "873.75", - "938.37", - "894.51", - "711.052", - "849.186", - "992.186", - "912.312", - "897.117", - "965.812", - "633.473", - "976.768", - "801.34", - "884.589", - "868.503", - "842.812", - "984.288", - "809.211", - "753.052", - "845.314", - "808.307", - "887.613", - "813.688", - "929.59", - "894.221", - "939.039", - "808.167", - "941.942", - "735.423", - "961.604", - "900.981", - "717.257", - "928.658", - "853.687", - "798.801", - "752.874", - "728.913", - "931.008", - "817.519", - "753.3", - "936.854", - "996.729", - "929.853", - "978.59", - "761.318", - "820.403", - "891.661", - "787.082", - "934.924", - "886.16", - "895.438", - "709.199", - "989.434", - "968.899", - "769.087", - "809.204", - "974.252", - "789.482", - "745.522", - "969.884", - "755.266", - "777.933", - "772.58", - "796.33", - "962.246", - "796.589", - "874.08", - "431.387", - "694.275", - "898.692", - "981.277", - "938.565", - "717.386", - "760.045", - "714.538", - "806.73", - "831.939", - "858.552", - "990.224", - "912.042", - "764.002", - "716.926", - "713.401", - "744.135", - "954.845", - "955.378", - "723.466", - "954.181", - "983.864", - "740.095", - "775.223", - "963.18", - "806.662", - "858.436", - "855.347", - "811.615", - "839.525", - "803.234", - "782.41", - "867.197", - "825.83", - "847.133", - "736.404", - "842.711", - "744.663", - "832.881", - "791.362", - "945.661", - "960.67", - "844.869", - "851.848", - "925.522", - "959.601", - "923.01", - "917.129", - "827.976", - "979.601", - "936.559", - "934.995", - "969.237", - "764.137", - "904.916", - "777.509", - "912.458", - "617.3", - "878.527", - "787.562", - "900.3", - "907.998", - "945.908", - "717.361", - "877.456", - "784.785", - "879.488", - "629.802", - "712.881", - "815.398", - "977.452", - "970.669", - "844.517", - "911.301", - "814.757", - "771.139", - "943.926", - "791.333", - "940.975", - "818.007", - "734.601", - "801.996", - "740.95", - "966.587", - "799.519", - "974.63", - "737.973", - "976.838", - "909.526", - "889.629", - "718.931", - "827.282", - "908.431", - "793.861", - "866.661", - "918.416", - "872.504", - "866.02", - "957.425", - "933.016", - "757.09", - "711.75", - "898.281", - "816.951", - "912.378", - "845.813", - "969.763", - "783.941", - "782.066", - "962.294", - "939.629", - "760.414", - "945.369", - "733.492", - "993.852", - "719.234", - "967.937", - "890.804", - "975.148", - "942.387", - "849.373", - "755.99", - "747.791", - "863.862", - "984.436", - "799.67", - "747.627", - "814.535", - "797.172", - "971.867", - "916.797", - "777.46", - "787.773", - "987.748", - "733.483", - "966.634", - "906.094", - "724.461", - "965.048", - "878.811", - "739.048", - "996.569", - "721.437", - "880.766", - "753.738", - "911.309", - "860.717", - "761.661", - "711.857", - "831.974", - "724.35", - "972.35", - "915.718", - "477.738", - "747.304", - "791.081", - "884.741", - "856.842", - "790.847", - "853.881", - "937.977", - "824.615", - "823.705", - "890.681", - "987.445", - "833.953", - "729.157", - "966.379", - "969.145", - "725.491", - "793.867", - "862.287", - "915.26", - "924.775", - "952.1", - "926.198", - "941.141", - "911.752", - "738.49", - "845.59", - "985.337", - "928.057", - "814.761", - "920.774", - "916.712", - "945.486", - "854.381", - "868.638", - "775.378", - "812.057", - "910.165", - "868.423", - "801.833", - "830.889", - "881.883", - "782.405", - "860.991", - "858.233", - "967.776", - "957.826", - "735.398", - "750.259", - "845.748", - "856.129", - "974.297", - "849.157", - "721.773", - "923.184", - "719.211", - "821.828", - "716.626", - "736.748", - "797.84", - "875.99", - "982.468", - "916.595", - "994.904", - "781.856", - "860.479", - "731.004", - "980.904", - "980.831", - "952.064", - "795.111", - "875.309", - "905.158", - "983.996", - "974.918", - "787.362", - "699.205", - "788.711", - "722.999", - "842.648", - "880.96", - "918.714", - "871.527", - "890.527", - "871.015", - "959.721", - "806.342", - "921.002", - "936.269", - "807.27", - "720.002", - "778.525", - "945.271", - "887.826", - "789.495", - "990.663", - "908.42", - "959.78", - "724.974", - "711.259", - "753.215", - "794.45", - "902.243", - "906.141", - "767.349", - "788.257", - "957.805", - "834.924", - "719.363", - "558.137", - "965.836", - "869.913", - "871.272", - "927.603", - "985.033", - "762.085", - "930.861", - "765.605", - "854.756", - "854.494", - "800.631", - "818.882", - "796.149", - "741.674", - "737.5", - "916.026", - "989.756", - "719.805", - "715.669", - "974.745", - "800.306", - "964.167", - "796.152", - "822.893", - "871.089", - "993.362", - "821.078", - "886.459", - "834.648", - "714.256", - "922.097", - "837.755", - "804.98", - "989.097", - "718.357", - "728.377", - "950.414", - "885.229", - "820.545", - "720.514", - "777.709", - "921.479", - "781.96", - "987.285", - "974.818", - "741.686", - "905.754", - "732.821", - "981.376", - "948.094", - "979.988", - "847.231", - "739.17", - "981.332", - "896.836", - "906.835", - "948.465", - "872.952", - "674.339", - "881.333", - "952.154", - "907.261", - "982.212", - "898.814", - "928.851", - "911.368", - "961.473", - "882.058", - "811.327", - "954.918", - "968.098", - "770.199", - "808.312", - "840.653", - "842.727", - "871.849", - "868.343", - "856.835", - "796.601", - "914.097", - "874.227", - "991.065", - "827.258", - "722.84", - "932.279", - "857.553", - "712.702", - "782.763", - "870.873", - "859.717", - "897.729", - "919.618", - "814.946", - "777.293", - "792.958", - "887.586", - "889.338", - "760.176", - "995.228", - "983.489", - "718.8", - "743.922", - "316.425", - "767.011", - "842.507", - "745.94", - "784.672", - "741.914", - "761.71", - "772.227", - "726.615", - "894.654", - "822.059", - "915.341", - "924.553", - "762.597", - "849.813", - "972.221", - "778.384", - "751.891", - "712.419", - "821.159", - "833.312", - "801.654", - "829.985", - "931.698", - "873.455", - "858.955", - "814.336", - "785.018", - "996.59", - "940.734", - "825.131", - "981.913", - "984.878", - "984.382", - "800.471", - "818.616", - "772.146", - "814.332", - "880.644", - "633.883", - "754.308", - "934.023", - "798.954", - "808.773", - "710.753", - "765.264", - "824.497", - "813.779", - "862.395", - "723.013", - "995.851", - "964.065", - "935.752", - "921.183", - "787.5", - "879.027", - "973.683", - "977.493", - "718.248", - "965.611", - "883.798", - "869.348", - "951.206", - "753.154", - "933.832", - "726.126", - "659.887", - "839.349", - "882.755", - "961.941", - "898.955", - "898.761", - "926.479", - "851.55", - "766.694", - "967.253", - "752.898", - "951.48", - "900.274", - "882.65", - "837.157", - "793.042", - "818.371", - "748.687", - "847.462", - "711.166", - "797.034", - "831.748", - "767.115", - "805.344", - "915.19", - "861.785", - "754.414", - "874.054", - "800.43", - "745.628", - "930.772", - "866.319", - "885.167", - "995.903", - "907.377", - "875.822", - "870.173", - "890.149", - "903.332", - "949.588", - "831.024", - "874.683", - "792.719", - "760.255", - "956.217", - "845.417", - "841.858", - "996.114", - "802.27", - "736.101", - "957.033", - "719.938", - "891.983", - "822.762", - "891.277", - "898.602", - "965.218", - "959.057", - "946.408", - "799.727", - "912.924", - "887.133", - "730.793", - "850.319", - "908.092", - "919.589", - "923.652", - "988.484", - "776.809", - "972.775", - "835.792", - "796.401", - "805.085", - "878.185", - "802.094", - "726.693", - "780.63", - "964.132", - "856.846", - "748.819", - "998.379", - "900.672", - "907.455", - "947.467", - "859.963", - "798.439", - "733.966", - "986.788", - "637.358", - "833.754", - "865.062", - "907.134", - "784.794", - "818.592", - "719.438", - "968.384", - "878.774", - "781.871", - "831.012", - "875.814", - "954.113", - "921.919", - "939.45", - "832.774", - "826.454", - "765.408", - "710.991", - "720.993", - "841.888", - "741.064", - "985.096", - "816.443", - "917.994", - "899.395", - "714.175", - "751.261", - "782.962", - "977.762", - "809.488", - "693.519", - "904.997", - "748.371", - "860.666", - "772.046", - "885.444", - "981.323", - "712.734", - "720.232", - "711.978", - "728.544", - "779.886", - "742.241", - "852.828", - "839.761", - "949.9", - "893.198", - "805.593", - "893.838", - "754.292", - "716.194", - "911.893", - "746.953", - "769.061", - "881.594", - "724.717", - "816.818", - "728.19", - "970.354", - "778.952", - "927.231", - "805.711", - "893.822", - "738.101", - "687.404", - "318.646", - "977.172", - "987.473", - "774.836", - "911.898", - "981.233", - "832.594", - "724.376", - "832.912", - "975.309", - "754.464", - "870.596", - "887.371", - "909.746", - "751.213", - "921.746", - "991.277", - "801.796", - "792.875", - "791.473", - "888.319", - "883.61", - "958.404", - "735.728", - "898.986", - "962.475", - "840.977", - "998.061", - "771.117", - "950.285", - "933.281", - "711.839", - "929.231", - "996.726", - "852.109", - "982.189", - "886.608", - "918.31", - "994.568", - "821.799", - "761.648", - "950.452", - "747.217", - "723.547", - "738.141", - "916.423", - "734.146", - "760.546", - "941.107", - "766.568", - "791.336", - "994.979", - "982.985", - "912.285", - "779.122", - "815.243", - "877.994", - "902.161", - "745.797", - "945.132", - "784.085", - "916.741", - "874.098", - "954.348", - "989.7", - "807.856", - "825.763", - "716.578", - "835.26", - "997.752", - "826.728", - "817.254", - "894.307", - "971.125", - "794.46", - "842.394", - "717.093", - "978.356", - "917.449", - "919.447", - "747.465", - "870.085", - "871.296", - "974.381", - "878.954", - "757.904", - "952.809", - "859.912", - "729.456", - "923.457", - "887.629", - "909.903", - "893.019", - "264.932", - "894.052", - "933.839", - "716.743", - "782.125", - "952.527", - "994.134", - "895.062", - "902.668", - "880.25", - "911.699", - "842.682", - "709.391", - "752.169", - "678.123", - "888.752", - "872.39", - "902.732", - "932.582", - "961.722", - "942.621", - "822.027", - "931.654", - "900.276", - "985.056", - "999.702", - "835.253", - "774.545", - "773.017", - "796.255", - "939.32", - "827.855", - "981.153", - "699.514", - "820.718", - "858.025", - "970.393", - "773.377", - "898.469", - "790.347", - "925.93", - "882.816", - "958.767", - "776.196", - "712.681", - "797.384", - "763.439", - "922.791", - "927.84", - "861.661", - "858.044", - "753.339", - "767.653", - "735.144", - "766.695", - "945.004", - "845.236", - "923.849", - "949.835", - "771.622", - "774.174", - "901.794", - "947.958", - "926.111", - "725.039", - "819.808", - "932.408", - "978.772", - "866.122", - "731.88", - "763.555", - "887.456", - "983.26" - ], - "marker": { - "size": 2, - "color": "rgb(201, 204, 0)" - } - }, - { - "mode": "markers", - "name": "256-512", - "type": "scatter3d", - "xsrc": "JohnMaddock:14:6b0716", - "x": [ - "216.083", - "110.33", - "290.196", - "195.678", - "181.716", - "144.728", - "138.654", - "128.977", - "51.6185", - "246.309", - "35.8812", - "36.117", - "188.318", - "281.033", - "116.462", - "17.7535", - "75.5463", - "341.126", - "141.909", - "51.4406", - "359.974", - "365.15", - "471.18", - "153.379", - "70.1651", - "135.306", - "162.674", - "152.884", - "82.2969", - "122.832", - "396.271", - "53.9692", - "93.6324", - "2.01907", - "43.7258", - "494.616", - "319.16", - "423.816", - "85.1614", - "155.565", - "184.651", - "506.29", - "415.123", - "272.287", - "28.7633", - "69.1893", - "64.2572", - "504.633", - "116.764", - "110.172", - "444.667", - "92.5182", - "267.606", - "306.782", - "191.333", - "139.843", - "368.803", - "94.3084", - "446.411", - "180.451", - "187.846", - "171.948", - "204.152", - "83.3746", - "172.566", - "59.124", - "7.88092", - "109.121", - "153.112", - "16.4565", - "106.394", - "152.978", - "143.531", - "11.0398", - "10.2686", - "626.573", - "82.1652", - "390.606", - "220.837", - "70.3953", - "375.485", - "402.324", - "85.9984", - "541.27", - "159.585", - "93.9351", - "141.193", - "182.088", - "270.285", - "341.356", - "18.6082", - "321.674", - "493.548", - "381.091", - "41.9009", - "124.557", - "198.992", - "71.8308", - "106.165", - "224.604", - "258.276", - "219.718", - "123.408", - "283.541", - "17.0495", - "29.4263", - "161.967", - "236.656", - "249.803", - "74.7149", - "426.129", - "421.588", - "142.824", - "333.791", - "201.633", - "110.754", - "153.308", - "222.531", - "558.052", - "319.317", - "62.7014", - "200.057", - "42.846", - "381.725", - "176.312", - "223.197", - "92.7347", - "209.462", - "87.1753", - "489.836", - "421.213", - "177.43", - "166.376", - "234.511", - "180.99", - "91.5097", - "19.3611", - "201.468", - "238.991", - "71.7452", - "189.083", - "606.224", - "63.9528", - "47.3864", - "302.037", - "130.563", - "250.413", - "31.7396", - "255.13", - "103.893", - "26.182", - "190.61", - "321.794", - "109.059", - "150.373", - "356.847", - "94.2628", - "132.851", - "9.18483", - "88.2884", - "76.0614", - "276.811", - "80.0445", - "192.599", - "43.2546", - "100.546", - "204.965", - "241.768", - "43.8833", - "185.724", - "176.463", - "593.528", - "132.529", - "8.65717", - "116.272", - "327.319", - "227.126", - "26.8089", - "179.137", - "270.554", - "156.783", - "47.5677", - "515.161", - "65.2973", - "119.479", - "250.436", - "132.115", - "182.541", - "401.22", - "197.164", - "293.711", - "112.33", - "55.8618", - "147.256", - "126.049", - "142.358", - "265.322", - "68.8714", - "227.454", - "58.6242", - "121.682", - "219.591", - "90.8724", - "312.794", - "460.454", - "269.149", - "110.237", - "68.0427", - "260.543", - "148.401", - "4.56483", - "22.1657", - "320.723", - "36.6336", - "111.298", - "336.806", - "398.382", - "224.584", - "114.601", - "16.2906", - "139.676", - "9.63807", - "110.768", - "18.082", - "358.644", - "235.475", - "176.666", - "26.3213", - "139.309", - "5.59794", - "221.482", - "182.231", - "46.4592", - "38.4928", - "234.421", - "45.1786", - "5.56093", - "112.402", - "328.501", - "19.1698", - "180.308", - "102.614", - "71.3735", - "159.502", - "340.628", - "137.014", - "327.646", - "22.4648", - "37.3418", - "64.8178", - "59.3565", - "39.0792", - "45.0845", - "178.016", - "308.61", - "294.405", - "165.063", - "110.531", - "152.957", - "36.6008", - "91.6791", - "206.405", - "140.863", - "164.354", - "71.8125", - "325.518", - "31.7987", - "511.35", - "215.692", - "157.275", - "141.811", - "56.8157", - "230.413", - "302.724", - "244.717", - "436.277", - "151.017", - "174.648", - "120.82", - "41.7818", - "188.039", - "136.405", - "240.947", - "174.733", - "127.322", - "226.181", - "96.1509", - "43.3207", - "198.67", - "254.641", - "20.4747", - "179.703", - "80.3694", - "95.4022", - "30.3287", - "77.9235", - "7.83769", - "188.408", - "141.441", - "397.673", - "135.575", - "331.487", - "99.251", - "97.9907", - "178.132", - "226.229", - "80.649", - "38.675", - "100.62", - "63.5551", - "69.9013", - "3.21541", - "158.08", - "181.489", - "413.714", - "136.603", - "38.7117", - "79.2095", - "73.2034", - "204.757", - "49.8263", - "224.309", - "9.82904", - "277.635", - "437.885", - "38.8834", - "52.2003", - "71.9673", - "33.3842", - "2.84198", - "187.741", - "594.198", - "24.752", - "61.7725", - "43.3567", - "35.6474", - "446.663", - "348.774", - "12.7989", - "150.596", - "149.339", - "207.601", - "539.009", - "258.95", - "64.318", - "99.8326", - "180.905", - "247.378", - "285.124", - "56.2769", - "50.4779", - "418.578", - "80.7709", - "94.4671", - "96.6306", - "58.7213", - "227.828", - "40.9245", - "300.49", - "560.377", - "72.4858", - "143.921", - "42.472", - "194.714", - "231.704", - "84.909", - "22.6587", - "125.555", - "87.797", - "99.5461", - "169.165", - "76.3917", - "28.0157", - "106.301", - "89.2029", - "129.241", - "58.7584", - "236.699", - "123.121", - "34.1635", - "125.393", - "102.903", - "39.6611", - "79.2075", - "40.2294", - "514.158", - "379.384", - "378.64", - "415.76", - "9.69763", - "325.929", - "19.6702", - "124.987", - "96.0543", - "140.816", - "40.1111", - "412.728", - "160.381", - "185.632", - "211.933", - "215.423", - "114.644", - "255.829", - "133.088", - "285.21", - "199.799", - "87.6951", - "76.3015", - "30.0867", - "63.1101", - "82.3488", - "191.65", - "174.774", - "267.081", - "288.274", - "18.3572", - "17.1506", - "108.002", - "0.985267", - "303.055", - "146.093", - "303.979", - "79.3997", - "179.367", - "18.3213", - "464.425", - "178.121", - "183.728", - "322.764", - "28.3216", - "218.834", - "12.633", - "485.224", - "69.5649", - "116.495", - "3.94687", - "28.2114", - "158.776", - "393.307", - "307.749", - "169.695", - "3.51563", - "198.305", - "17.2992", - "54.0975", - "42.78", - "178.117", - "375.954", - "193.752", - "219.898", - "106.779", - "106.901", - "255.786", - "127.719", - "145.334", - "51.3518", - "90.6103", - "125.651", - "23.5822", - "116.654", - "267.539", - "118.352", - "57.6519", - "129.339", - "147.022", - "2.59195", - "209.777", - "294.313", - "181.951", - "179.503", - "174.353", - "77.5589", - "238.54", - "272.929", - "100.296", - "128.3", - "295.924", - "165.525", - "150.962", - "71.6696", - "217.786", - "51.0393", - "171.788", - "155.521", - "5.6638", - "152.373", - "51.3499", - "6.39948", - "100.61", - "59.0546", - "489.515", - "105.229", - "50.4756", - "448.861", - "61.2857", - "247.242", - "80.1032", - "194.849", - "249.694", - "201.343", - "392.587", - "337.753", - "147.802", - "231.621", - "289.156", - "178.555", - "111.893", - "0.816848", - "84.8125", - "51.0467", - "161.818", - "18.9184", - "955.236", - "126.703", - "69.5151", - "176.038", - "46.7363", - "196.696", - "155.293", - "141.26", - "32.6512", - "232.72", - "195.301", - "221.487", - "98.2218", - "89.4888", - "240.53", - "298.26", - "173.192", - "144.876", - "93.9929", - "322.337", - "63.0582", - "246.41", - "36.6362", - "184.919", - "88.13", - "54.2237", - "363.28", - "24.5838", - "54.4372", - "204.073", - "73.7878", - "200.005", - "390.394", - "109.458", - "29.2484", - "273.475", - "225.721", - "161.849", - "75.873", - "509.265", - "83.0294", - "209.199", - "113.164", - "19.8325", - "120.398", - "109.201", - "239.884", - "317.214", - "264.351", - "209.604", - "260.429", - "100.291", - "50.0197", - "11.0284", - "264.105", - "79.3837", - "83.0151", - "50.5721", - "115.687", - "151.019", - "63.8772", - "189.677", - "139.34", - "50.2823", - "249.48", - "15.3103", - "89.7352", - "22.5367", - "329.289", - "290.218", - "434.382", - "173.189", - "98.5176", - "55.1109", - "444.368", - "191.102", - "138.288", - "219.988", - "59.6756", - "333.923", - "332.308", - "342.494", - "149.614", - "182.471", - "77.5438", - "19.6066", - "10.1733", - "178.547", - "37.8178", - "3.01182", - "366.02", - "391.282", - "93.3469", - "31.8715", - "20.4777", - "29.2056", - "53.9204", - "24.1082", - "41.1018", - "134.776", - "49.8051", - "271.077", - "213.146", - "121.513", - "236.563", - "188.158", - "190.701", - "213.706", - "164.375", - "20.7435", - "249.538", - "353.493", - "69.6162", - "191.104", - "1.90615", - "127.923", - "251.948", - "58.9121", - "183.999", - "191.67", - "33.4843", - "286.504", - "910.008", - "365.898", - "121.178", - "29.5017", - "348.309", - "305.625", - "52.7767", - "99.5482", - "40.1166", - "110.015", - "232.794", - "73.8399", - "89.8686", - "229.04", - "1.5906", - "512.169", - "253.952", - "100.392", - "326.328", - "179.94", - "45.6928", - "391.119", - "134.436", - "95.2135", - "58.6184", - "187.701", - "1.17757", - "256.403", - "155.827", - "129.737", - "41.0086", - "388.556", - "81.105", - "288.743", - "0.087369", - "86.8534", - "165.744", - "79.1387", - "152.876", - "226.514", - "588.946", - "441.575", - "53.651", - "318.98", - "45.0027", - "4.39602", - "7.35526", - "107.284", - "26.6318", - "202.966", - "228.898", - "21.5279", - "269.44", - "13.8509", - "23.4347", - "301.41", - "208.573", - "10.0983", - "570.24", - "504.273", - "102.139", - "538.068", - "64.1707", - "229.243", - "486.887", - "17.1", - "385.405", - "49.1674", - "126.021", - "50.3314", - "263.419", - "209.864", - "291.061", - "31.1583", - "323.77", - "29.2207", - "143.111", - "201.792", - "16.0117", - "157.968", - "76.8413", - "191.892", - "424.849", - "30.4045", - "65.131", - "87.4311", - "150.82", - "230.845", - "374.764", - "116.618", - "235.169", - "276.44", - "82.858", - "59.3735", - "181.113", - "3.27721", - "277.967", - "88.8789", - "44.4757", - "33.4275", - "113.851", - "147.513", - "17.7387", - "42.9552", - "40.16", - "137.314", - "108.404", - "139.347", - "517.735", - "171.49", - "448.459", - "93.6051", - "170.906", - "38.7233", - "153.602", - "4.05786", - "109.542", - "228.239", - "5.64327", - "42.825", - "39.0942", - "153.479", - "6.28781", - "138.854", - "146.069", - "435.277", - "112.182", - "138.149", - "625.07", - "296.757", - "181.853", - "35.9015", - "266.658", - "260.873", - "162.276", - "96.1827", - "488.044", - "347.097", - "161.517", - "285.01", - "127.246", - "197.677", - "39.5291", - "36.9683", - "4.28051", - "8.87828", - "151.506", - "73.4129", - "68.8827", - "66.6391", - "511.054", - "128.34", - "175.009", - "204.293", - "420.616", - "238.047", - "232.024", - "905.837", - "115.044", - "189.3", - "251.886", - "428.043", - "118.353", - "34.1351", - "52.8629", - "23.727", - "345.545", - "99.192", - "18.3165", - "168.103", - "115.176", - "284.349", - "185.837", - "126.131", - "61.6035", - "115.39", - "198.681", - "38.229", - "70.0152", - "76.5204", - "328.195", - "189.634", - "244.353", - "93.8303", - "151.684", - "128.29", - "12.85", - "49.5436", - "271.883", - "85.7638", - "108.375", - "134.633", - "151.189", - "324.931", - "161.986", - "197.993", - "116.929", - "223.383", - "23.6423", - "0.690669", - "304.165", - "238.759", - "200.867", - "103.807", - "467.683", - "149.628", - "81.9863", - "131.356", - "293.87", - "79.2583", - "620.569", - "282.443", - "289.561", - "45.9907", - "54.4671", - "466.783", - "221.401", - "73.8113", - "80.2372", - "255.472", - "246.339", - "264.02", - "564.697", - "426.361", - "216.736", - "76.1424", - "63.4224", - "191.568", - "11.3886", - "94.3128", - "171.867", - "403.534", - "151.583", - "124.885", - "544.034", - "8.86722", - "41.5256", - "22.3275", - "411.289", - "106.794", - "186.236", - "171.52", - "202.59", - "352.979", - "312.589", - "234.29", - "90.814", - "374.347", - "28.9522", - "102.82", - "282.473", - "127.287", - "214.595", - "57.8102", - "202.155", - "316.783", - "27.7341", - "102.679", - "257.487", - "268.557", - "198.843", - "255.217", - "257.453", - "61.96", - "86.827", - "7.65299", - "99.3859", - "436.623", - "72.298", - "38.3591", - "23.3921", - "43.0035", - "977.771", - "63.4844", - "90.4212", - "37.3275", - "59.7676", - "280.78", - "180.295", - "176.574", - "46.1787", - "36.9977", - "74.8031", - "66.0418", - "243.194", - "99.549", - "241.774", - "101.533", - "378.079", - "95.6275", - "29.797", - "105.936", - "166.177", - "66.5429", - "182.827", - "193.405", - "167.602", - "164.948", - "248.407", - "348.037", - "260.877", - "179.033", - "146.3", - "112.423", - "15.402", - "190.834", - "61.2227", - "14.8341", - "296.023", - "2.07516", - "118.59", - "76.308", - "338.213", - "145.351", - "79.9689", - "78.4367", - "105.389", - "8.82074", - "4.49308", - "32.9036", - "152.68", - "13.5093", - "89.4278", - "108.729", - "375.608", - "76.722", - "181.798", - "294.022", - "284.309", - "989.346", - "10.5232", - "211.313", - "160.989", - "191.714", - "95.0515", - "20.741", - "210.462", - "23.6171", - "359.285", - "129.129", - "14.1885", - "176.316", - "458.312", - "38.5852", - "84.0811", - "325.065", - "224.796", - "100.57", - "204.441", - "245.932", - "385.18", - "49.4042", - "387.33", - "16.1966", - "109.016", - "68.5332", - "73.4018", - "108.675", - "34.1239", - "79.1878", - "302.154", - "193.962", - "93.6913", - "77.5646", - "74.2157", - "35.4036", - "22.0787", - "30.799", - "382.52", - "349.635", - "305.333", - "14.5303", - "272.326", - "60.0752", - "358.141", - "73.4441", - "149.412", - "276.75", - "82.807", - "317.587", - "298.396", - "126.35", - "163.621", - "13.1917", - "318.179", - "579.419", - "14.0585", - "65.3306", - "29.8356", - "334.494", - "8.99854", - "21.8529", - "279.113", - "138.956", - "67.7059", - "367.102", - "81.5361", - "200.427", - "63.7964", - "234.98", - "166.295", - "346.574", - "112.91", - "291.476", - "338.19", - "194.302", - "521.221", - "120.175", - "250.527", - "0.465517", - "78.8943", - "97.5499", - "348.967", - "44.93", - "592.573", - "96.3134", - "51.5476", - "125.615", - "368.917", - "224.785", - "183.976", - "580.19", - "10.318", - "511.061", - "291.757", - "90.2896", - "630.727", - "85.8396", - "29.4301", - "405.689", - "232.002", - "111.124", - "92.0662", - "246.684", - "14.8863", - "101.004", - "181.81", - "0.704623", - "95.1173", - "11.0539", - "86.9984", - "509.449", - "25.9913", - "395.095", - "187.636", - "521.319", - "537.277", - "207.515", - "104.218", - "35.5696", - "75.6685", - "36.7269", - "81.5669", - "32.102", - "247.953", - "185.299", - "229.485", - "106.259", - "77.4333", - "611.841", - "69.8607", - "209.325", - "566.434", - "554.84", - "213.437", - "38.1568", - "28.663", - "567.736", - "58.0262", - "218.746", - "248.875", - "259.817", - "322.046", - "4.5413", - "4.78193", - "412.443", - "240.617", - "133.866", - "271.21", - "359.016", - "411.478", - "82.276", - "125.044", - "187.769", - "398.897", - "118.225", - "94.3105", - "119.573", - "2.90053", - "334.059", - "40.9797", - "52.8864", - "170.436", - "350.352", - "280.198", - "2.46782", - "89.981", - "103.115", - "502.305", - "288.86", - "117.647", - "369.281", - "142.815", - "355.271", - "108.896", - "246.35", - "132.347", - "161.453", - "213.276", - "356.215", - "31.2486", - "506.89", - "114.605", - "368.966", - "150.864", - "213.248", - "290.785", - "88.0949", - "212.221", - "91.8055", - "82.6262", - "6.35873", - "272.189", - "481.413", - "216.666", - "87.9564", - "147.089", - "264.269", - "473.405", - "612.737", - "494.688", - "372.25", - "201.14", - "123.88", - "102.75", - "81.815", - "136.024", - "12.8757", - "254.181", - "218.338", - "200.015", - "423.37", - "415.134", - "96.0666", - "187.309", - "67.3918", - "260.135", - "346.033", - "215.337", - "328", - "75.9885", - "369.511", - "45.7544", - "621.872", - "146.806", - "311.187", - "100.525", - "158.588", - "111.234", - "455.936", - "45.0478", - "316.562", - "406.379", - "19.8265", - "280.721", - "69.4918", - "312.774", - "172.597", - "38.1285", - "23.5495", - "14.4804", - "435.675", - "420.438", - "327.847", - "629.72", - "43.3126", - "94.2254", - "85.9375", - "291.873", - "70.6794", - "445.889", - "31.4674", - "4.11636", - "69.9016", - "475.688", - "50.1948", - "84.9128", - "44.0287", - "160.56", - "92.4368", - "162.807", - "66.0009", - "595.011", - "201.297", - "146.496", - "197.752", - "153.799", - "251.091", - "250.843", - "108.72", - "47.9721", - "119.165", - "628.714", - "245.139", - "158.576", - "435.386", - "33.7334", - "44.1671", - "324.491", - "418.156", - "107.378", - "160.891", - "190.063", - "158.178", - "77.6301", - "149.402", - "469.497", - "38.7695", - "203.009", - "162.92", - "125.241", - "345.243", - "146.353", - "73.8485", - "405.916", - "296.07", - "96.8613", - "91.9379", - "25.5525", - "240.458", - "310.222", - "115.603", - "122.768", - "180.794", - "302.44", - "38.7625", - "373.728", - "93.4534", - "272.884", - "206.161", - "139.752", - "69.5966", - "154.068", - "87.7673", - "13.8248", - "129.578", - "169.174", - "52.492", - "436.462", - "164.979", - "380.348", - "376.692", - "155.448", - "32.2817", - "164.212", - "296.789", - "245.283", - "4.72916", - "119.144", - "12.1026", - "61.7076", - "137.351", - "298.965", - "418.981", - "48.2428", - "4.04325", - "229.21", - "22.0178", - "367.91", - "52.7547", - "15.5653", - "48.105", - "130.653", - "154.185", - "31.9684", - "126.665", - "445.056", - "236.075", - "150.869", - "286.947", - "5.27742", - "346.241", - "243.077", - "333.348", - "13.1173", - "323.698", - "390.514", - "307.491", - "83.7097", - "269.068", - "625.93", - "441.009", - "8.19737", - "143.129", - "80.8942", - "165.934", - "115.994", - "107.061", - "154.129", - "253.021", - "26.7333", - "473.89", - "66.4022", - "73.171", - "386.462", - "85.3249", - "181.064", - "102.041", - "103.836", - "105.302", - "141.168", - "490.504", - "83.3082", - "185.208", - "57.3821", - "506.298", - "68.9609", - "522.342", - "76.2446", - "48.6436", - "388.223", - "4.98378", - "152.172", - "630.092", - "45.7565", - "5.90647", - "133.37", - "257.998", - "310.856", - "59.3195", - "365.325", - "175.681", - "496.488", - "198.118", - "68.6121", - "165.351", - "282.443", - "0.579704", - "162.397", - "65.7516", - "42.2926", - "116.364", - "179.314", - "181.521", - "76.1348", - "232.203", - "138.952", - "549.981", - "50.8683", - "146.003", - "83.611", - "194.092", - "418.386", - "28.8983", - "156.906", - "230.052", - "159.65", - "44.8809", - "60.1569", - "169.743", - "329.432", - "525.615", - "58.3396", - "275.638", - "497.898", - "185.798", - "70.5543", - "146.751", - "354.698", - "188.957", - "197.869", - "45.2077", - "231.551", - "249.06", - "273.143", - "103.709", - "166.465", - "88.2826", - "294.988", - "330.033", - "448.085", - "128.221", - "200.439", - "320.564", - "38.732", - "188.74", - "592.865", - "55.534", - "6.20101", - "349.02", - "182.654", - "458.037", - "258.243", - "52.019", - "63.017", - "79.378", - "224.574", - "134.547", - "315.655", - "421.863", - "431.274", - "348.496", - "16.4819", - "102.86", - "210.255", - "287.843", - "80.0093", - "441.693", - "103.491", - "215.283", - "367.719", - "46.1228", - "3.05724", - "359.201", - "224.546", - "17.1934", - "10.0061", - "603.582", - "267.085", - "249.686", - "46.8052", - "161.016", - "96.0785", - "37.3911", - "137.719", - "60.9946", - "237.219", - "69.2097", - "92.6183", - "109.871", - "207.176", - "385.602", - "40.9051", - "357.354", - "107.287", - "106.049", - "243.829", - "103.544", - "249.588", - "263.945", - "501.496", - "343.157", - "209.534", - "230.612", - "92.6552", - "68.8284", - "291.527", - "86.0029", - "83.9146", - "314.75", - "354.727", - "40.2678", - "239.731", - "17.7761", - "346.719", - "243.765", - "500.9", - "113.327", - "208.868", - "347.144", - "503.934", - "13.2096", - "439.473", - "395.737", - "62.1636", - "16.0997", - "182.455", - "273.302", - "41.8699", - "179.932", - "227.003", - "9.17403", - "400.155", - "71.8429", - "15.7124", - "170.106", - "34.9322", - "168.612", - "54.7344", - "131.069", - "204.827", - "478.755", - "154.628", - "353.228", - "46.1837", - "471.603", - "300.189", - "559.388", - "166.625", - "409.4", - "19.8359", - "79.0014", - "315.588", - "237.713", - "280.926", - "316.253", - "283.194", - "73.7293", - "510.044", - "56.1875", - "304.52", - "217.1", - "122.332", - "205.637", - "74.2975", - "28.017", - "190.82", - "253.63", - "153.571", - "164.408", - "184.936", - "452.741", - "188.142", - "200.945", - "321.54", - "11.2364", - "233.235", - "299.683", - "66.6915", - "25.7593", - "61.3045", - "120.404", - "159.621", - "340.177", - "182.114", - "132.122", - "54.3072", - "23.2884", - "134.156", - "196.365", - "229.364", - "181.778", - "1.16014", - "388.641", - "221.848", - "501.025", - "596.137", - "158.76", - "131.493", - "143.921", - "478.493", - "336.988", - "104.713", - "357.616", - "126.06", - "245.935", - "39.2128", - "68.8559", - "5.83494", - "203.464", - "136.912", - "201.591", - "90.0398", - "23.1154", - "26.4342", - "335.902", - "356.6", - "147.788", - "87.1321", - "128.937", - "184.584", - "363.61", - "88.6711", - "169.578", - "81.4592", - "33.9238", - "218.235", - "209.589", - "287.172", - "263.378", - "67.6595", - "9.66226", - "198.412", - "335.128", - "102.199", - "196.172", - "107.492", - "331.837", - "12.3062", - "222.241", - "449.249", - "506.869", - "185.851", - "88.8013", - "313.636", - "160.591", - "151.671", - "517.387", - "370.597", - "65.3867", - "260.496", - "186.013", - "212.466", - "133.986", - "119.201", - "240.969", - "298.783", - "97.9424", - "190.064", - "24.3576", - "231.34", - "435.921", - "143.981", - "483.429", - "24.3679", - "517.041", - "58.4348", - "181.103", - "492.584", - "454.109", - "194.67", - "330.545", - "138.42", - "370.699", - "137.077", - "58.2997", - "65.6051", - "93.084", - "122.141", - "382.385", - "273.706", - "87.8937", - "297.804", - "385.241", - "174.553", - "85.1992", - "50.1125", - "177.241", - "24.0618", - "35.0719", - "110.057", - "376.816", - "97.7844", - "443.879", - "1.56325", - "32.8107", - "186.337", - "26.445", - "24.263", - "56.9194", - "39.9791", - "138.212", - "237.289", - "154.02", - "414.357", - "179.646", - "316.472", - "431.929", - "169.47", - "457.861", - "257.212", - "235.335", - "96.4589", - "549.41", - "219.652", - "294.07", - "280.53", - "481.257", - "6.45969", - "297.546", - "343.905", - "56.5507", - "214.751", - "392.154", - "400.212", - "123.075", - "166.271", - "302.872", - "150.805", - "7.16442", - "324.046", - "89.6787", - "72.4629", - "398.874", - "63.4547", - "123.522", - "226.774", - "89.0774", - "14.4171", - "30.4245", - "9.80699", - "299.57", - "63.1279", - "7.64108", - "53.3623", - "386.724", - "54.7335", - "33.1451", - "41.1885", - "12.3372", - "539.512", - "90.3787", - "35.5929", - "184.028", - "230.404", - "148.704", - "58.8948", - "252.107", - "80.1551", - "222.598", - "1.6392", - "344.245", - "111.095", - "275.141", - "175.808", - "311.975", - "90.8238", - "9.39798", - "61.6829", - "277.719", - "610.558", - "342.023", - "260.091", - "15.6635", - "157.249", - "535.862", - "159.572", - "370.912", - "286.978", - "79.396", - "187.035", - "304.756", - "96.5971", - "505.796", - "109.883", - "304.652", - "252.61", - "115.524", - "218.736", - "0.95407", - "50.2788", - "20.1877", - "284.283", - "298.066", - "67.7017", - "405.744", - "426.757", - "39.325", - "222.008", - "261.191", - "68.4509", - "104.228", - "37.765", - "85.1903", - "540.051", - "129.802", - "175.443", - "41.9717", - "201.615", - "224.83", - "162.52", - "67.1312", - "370.355", - "78.3879", - "289.365", - "113.66", - "289.508", - "110.754", - "150.789", - "599.815", - "605.246", - "70.8868", - "342.365", - "42.6976", - "135.629", - "293.439", - "269.472", - "99.9652", - "167.785", - "85.0437", - "83.552", - "254.418", - "432.711", - "308.06", - "246.488", - "70.3278", - "52.0842", - "80.5094", - "199.732", - "146.903", - "542.742", - "574.961", - "288.553", - "336.462", - "132.398", - "291.372", - "172.151", - "165.423", - "110.171", - "604.07", - "45.2489", - "111.501", - "282.63", - "140.549", - "167.566", - "106.596", - "39.4827", - "409.034", - "92.6506", - "557.527", - "134.793", - "200.245", - "65.0191", - "166.699", - "321.315", - "250.947", - "128.847", - "33.5792", - "2.99206", - "106.625", - "82.786", - "191.952", - "279.118", - "205.742", - "60.7301", - "3.24045", - "57.8268", - "485.591", - "91.844", - "188.007", - "285.633", - "144.882", - "426.324", - "12.4679", - "135.133", - "161.232", - "162.884", - "210.694", - "83.2336", - "174.107", - "58.6505", - "214.434", - "69.2441", - "447.919", - "166.266", - "106.054", - "172.465", - "357.672", - "332.266", - "334.426", - "100.956", - "482.456", - "349.303", - "346.438", - "181.839", - "73.5268", - "117.763", - "1.3025", - "274.934", - "126.131", - "332.432", - "133.275", - "183.963", - "109.896", - "25.4082", - "185.548", - "165.113", - "81.5478", - "417.215", - "28.8015", - "59.9304", - "229.072", - "262.541", - "153.288", - "90.7915", - "91.5985", - "112.93", - "13.5972", - "375.181", - "314.515", - "235.261", - "231.993", - "237.606", - "140.096", - "275.383", - "89.6645", - "120.053", - "231.406", - "42.0906", - "22.4568", - "4.24296", - "136.699", - "94.7227", - "137.796", - "102.719", - "79.0634", - "176.081", - "130.385", - "116.204", - "128.988", - "27.6766", - "274.059", - "320.753", - "140.311", - "121", - "557.584", - "203.304", - "76.146", - "189.178", - "668.659", - "349.781", - "66.5244", - "376.594", - "41.3237", - "251.935", - "2.19867", - "26.8822", - "78.1119", - "38.1548", - "177.812", - "52.8868", - "16.812", - "95.5766", - "30.7902", - "374.384", - "323.749", - "42.4782", - "25.6063", - "212.131", - "181.262", - "426.307", - "69.8495", - "60.5633", - "207.515", - "51.3759", - "188.036", - "43.8649", - "125.509", - "154.199", - "152.256", - "41.8319", - "224.288", - "478.016", - "143.117", - "127.198", - "4.32917", - "66.8556", - "450.314", - "43.6941", - "101.034", - "518.866", - "251.997", - "462.184", - "418.724", - "194.361", - "110.348", - "67.0153", - "81.2432", - "109.748", - "152.2", - "125.235", - "368.564", - "18.4837", - "225.611", - "230.595", - "251.989", - "126.487", - "191.93", - "67.4057", - "69.581", - "147.792", - "66.4467", - "51.9976", - "90.5023", - "99.9892", - "4.65253", - "250.62", - "278.465", - "352.241", - "199.977", - "31.1436", - "105.333", - "195.405", - "247.322", - "6.68655", - "105.317", - "120.385", - "207.103", - "566.222", - "185.417", - "92.7849", - "422.053", - "114.254", - "476.437", - "90.0946", - "57.5098", - "64.2838", - "151.075", - "518.638", - "448.906", - "97.7872", - "120.881", - "302.996", - "457.51", - "386.913", - "198.633", - "3.502", - "356.922", - "166.619", - "39.7481", - "363.277", - "212.091", - "132.217", - "177.099", - "384.847", - "187.559", - "239.306", - "211.297", - "25.7772", - "182.435", - "598.602", - "461.822", - "329.368", - "4.06997", - "831.163", - "260", - "191.453", - "166.732", - "106.952", - "585.653", - "414.615", - "83.1515", - "566.027", - "248.865", - "235.81", - "44.5272", - "513.708", - "93.1525", - "308.353", - "35.7417", - "1.48734", - "160.399", - "39.3459", - "251.987", - "630.885", - "62.2817", - "203.133", - "15.267", - "223.145", - "153.754", - "485.602", - "201.144", - "278.338", - "16.3211", - "249.517", - "55.9307", - "208.833", - "373.133", - "385.935", - "86.9381", - "194.992", - "360.218", - "103.397", - "541.966", - "19.5231", - "51.1554", - "310.4", - "362.772", - "237.934", - "215.341", - "314.695", - "534.459", - "60.1316", - "210.318", - "89.843", - "60.2554", - "62.6224", - "134.543", - "150.368", - "34.6483", - "192.49", - "8.52327", - "93.1015", - "23.8076", - "232.436", - "218.096", - "128.121", - "150.037", - "229.314", - "91.1712", - "282.45", - "212.097", - "151.341", - "101.257", - "191.357", - "220.238", - "346.497", - "141.6", - "211.161", - "160.233", - "101.574", - "487.81", - "125.186", - "509.903", - "87.991", - "50.1011", - "396.668", - "40.543", - "383.491", - "210.952", - "86.1009", - "137.919", - "145.319", - "476.882", - "213.086", - "55.2007", - "176.733", - "38.5299", - "153.369", - "25.536", - "223.454", - "81.959", - "153.74", - "23.9014", - "25.7845", - "83.9814", - "511.128", - "358.793", - "57.2962", - "175.04", - "428.861", - "213.87", - "236.6", - "73.2197", - "148.75", - "173.588", - "191.451", - "587.398", - "5.18331", - "602.492", - "243.207", - "334.672", - "89.904", - "520.047", - "575.249", - "404.323", - "164.448", - "5.35711", - "22.8284", - "165.57", - "154.568", - "91.6876", - "28.3953", - "111.691", - "93.8", - "453.71", - "291.011", - "305.031", - "112.594", - "310.352", - "21.8533", - "121.052", - "48.6595", - "454.191", - "130.84", - "212.072", - "148.862", - "131.138", - "168.375", - "157.823", - "155.701", - "83.6156", - "199.846", - "768.953", - "336.038", - "255.066", - "66.4265", - "258.041", - "204.706", - "314.157", - "625.239", - "205.711", - "154.543", - "139.413", - "414.339", - "245.658", - "210.903", - "27.9879", - "383.834", - "106.619", - "17.7252", - "113.214", - "260.661", - "28.331", - "292.95", - "314.401", - "183.128", - "367.343", - "330.575", - "84.8825", - "458.758", - "195.468", - "280.1", - "126.839", - "155.028", - "322.56", - "361.261", - "126.71", - "207.451", - "116.325", - "104.485", - "264.193", - "341.479", - "351.189", - "129.42", - "24.1006", - "61.1122", - "227.238", - "90.0185", - "197.359", - "246.282", - "71.287", - "131.762", - "59.9445", - "472.859", - "90.4927", - "92.8117", - "407.268", - "204.276", - "223.849", - "93.1886", - "1.82121", - "231.414", - "21.3672", - "121.229", - "122.617", - "14.3089", - "89.3637", - "180.77", - "132.041", - "247.766", - "212.872", - "345.063", - "172.151", - "176.405", - "182.294", - "132.188", - "136.969", - "569.235", - "348.079", - "355.86", - "778.004", - "186.763", - "376.477", - "173.182", - "35.0565", - "375.976", - "234.738", - "16.9693", - "254.524", - "142.349", - "142.267", - "392.269", - "329.776", - "408.324", - "255.836", - "162.644", - "187.523", - "165.353", - "16.2349", - "30.752", - "218.767", - "150.1", - "395.714", - "164.863", - "272.962", - "184.571", - "361.397", - "188.391", - "441.772", - "137.002", - "178.597", - "236.913", - "420.374", - "177.511", - "228.576", - "182.515", - "69.5377", - "19.8447", - "247.855", - "443.031", - "148.669", - "96.7823", - "259.884", - "425.692", - "50.8527", - "86.4609", - "182.537", - "123.799", - "17.1822", - "103.405", - "476.298", - "305.03", - "256.054", - "157.657", - "96.073", - "131.089", - "50.4594", - "226.454", - "31.2757", - "510.781", - "187.265", - "86.6042", - "88.565", - "66.0526", - "13.9663", - "73.5922", - "190.783", - "327.071", - "550.49", - "124.526", - "64.2193", - "67.009", - "124.521", - "267.003", - "43.8091", - "339.82", - "173.335", - "382.674", - "109.473", - "102.997", - "412.934", - "61.2204", - "74.5674", - "106.692", - "136.302", - "20.2224", - "342.322", - "199.969", - "208.452", - "75.0215", - "70.9923" - ], - "ysrc": "JohnMaddock:14:10d3bc", - "y": [ - "528.454", - "355.604", - "837.472", - "574.534", - "139.211", - "580.557", - "383.881", - "636.617", - "546.712", - "891.732", - "761.728", - "640.356", - "916.453", - "573.395", - "566.731", - "586.339", - "371.082", - "928.542", - "765.264", - "422.459", - "611.13", - "343.654", - "776.435", - "244.673", - "414.787", - "424.811", - "472.659", - "893.226", - "824.374", - "506.154", - "545.756", - "392.717", - "253.633", - "303.321", - "171.014", - "679.786", - "864.095", - "586.126", - "793.265", - "760.151", - "380.661", - "901.328", - "893.512", - "585.058", - "374.034", - "658.164", - "222.143", - "681.849", - "589.719", - "729.45", - "744.392", - "845.318", - "493.243", - "872.089", - "224.287", - "380.317", - "643.008", - "432.373", - "568.67", - "832.47", - "846.145", - "578.706", - "516.291", - "616.633", - "381.038", - "684.8", - "416.757", - "384.113", - "837.938", - "140.982", - "285.149", - "240.99", - "621.733", - "658.976", - "152.66", - "882.063", - "417.978", - "891.121", - "421.959", - "329.841", - "850.563", - "903.283", - "511.502", - "724.075", - "714.235", - "395.619", - "781.942", - "795.361", - "528.404", - "520.682", - "750.537", - "625.339", - "641.473", - "672.878", - "259.442", - "374.864", - "542.602", - "436.209", - "725.427", - "664.89", - "602.2", - "947.293", - "524.559", - "605.062", - "399.677", - "350.037", - "712.447", - "907.278", - "478.432", - "136.765", - "693.574", - "934.433", - "624.772", - "855.084", - "609.579", - "440.812", - "928.41", - "506.282", - "766.855", - "851.298", - "826.865", - "455.325", - "162.688", - "372.222", - "376.455", - "427.208", - "438.157", - "666.782", - "428.521", - "800.038", - "598.943", - "411.571", - "502.793", - "824.465", - "181.35", - "434.449", - "704.754", - "440.64", - "787.35", - "338.897", - "478.317", - "797.882", - "423.715", - "499.895", - "696.022", - "405.795", - "354.743", - "925.559", - "486.8", - "740.674", - "304.551", - "780.409", - "520.133", - "540.122", - "458.688", - "522.415", - "462.821", - "402.571", - "72.9822", - "477.643", - "477.524", - "638.441", - "400.495", - "591.442", - "413.32", - "267.358", - "720.587", - "749.02", - "400.822", - "693.782", - "808.286", - "778.885", - "318.062", - "316.405", - "364.503", - "749.911", - "324.519", - "553.416", - "934.184", - "517.55", - "490.198", - "93.0433", - "905.333", - "185.933", - "428.563", - "586.038", - "986.791", - "356.625", - "783.202", - "633.02", - "523.49", - "970.369", - "284.775", - "996.579", - "301.484", - "567.74", - "808.65", - "195.2", - "936.358", - "717.226", - "190.006", - "605.387", - "296.956", - "840.928", - "721.977", - "603.658", - "394.713", - "932.33", - "784.287", - "497.704", - "268.395", - "340.14", - "774.83", - "270.291", - "324.284", - "773.731", - "720.186", - "616.486", - "590.143", - "637.905", - "579.123", - "452.443", - "649.599", - "346.399", - "712.81", - "831.204", - "383.604", - "154.566", - "695.274", - "327.565", - "415.996", - "487.683", - "503.452", - "184.463", - "738.391", - "641.346", - "601.917", - "752.677", - "875.956", - "694.935", - "577.189", - "595.702", - "268.692", - "601.233", - "679.151", - "704.817", - "768.016", - "313.287", - "325.651", - "358.927", - "492.738", - "288.772", - "752.083", - "535.334", - "768.987", - "941.09", - "578.706", - "387.911", - "569.73", - "538.96", - "436.631", - "551.217", - "636.724", - "541.778", - "761.377", - "837.018", - "671.106", - "745.614", - "514.976", - "835.605", - "702.984", - "637.848", - "871.203", - "589.155", - "511.284", - "759.047", - "751.825", - "517.875", - "23.315", - "797.338", - "790.083", - "786.077", - "389.318", - "621.902", - "562.151", - "645.911", - "231.364", - "460.838", - "590.113", - "538.426", - "849.102", - "876.943", - "857.316", - "735.846", - "273.096", - "551.558", - "390.352", - "490.8", - "428.74", - "939.707", - "662.085", - "912.91", - "557.127", - "627.43", - "224.791", - "741.399", - "942.847", - "444.826", - "334.167", - "778.698", - "241.801", - "176.916", - "490.127", - "683.507", - "716.116", - "868.913", - "407.905", - "401.35", - "761.533", - "619.97", - "294.427", - "561.451", - "572.615", - "719.168", - "754.861", - "336.642", - "787.971", - "356.12", - "319.868", - "418.085", - "746.433", - "793.015", - "451.162", - "439.44", - "218.028", - "817.126", - "687.885", - "787.574", - "519.827", - "683.765", - "384.924", - "566.431", - "947.896", - "488.804", - "418.633", - "729.875", - "450.283", - "703.456", - "685.597", - "639.739", - "199.581", - "692.777", - "550.504", - "660.806", - "747.721", - "226.095", - "808.227", - "675.398", - "752.191", - "778.659", - "551.51", - "665.291", - "369.819", - "291.79", - "820.553", - "564.519", - "678.077", - "373.315", - "484.382", - "547.59", - "552.952", - "629.718", - "704.417", - "548.431", - "752.359", - "767.506", - "467.429", - "839.763", - "433.402", - "338.228", - "501.674", - "366.018", - "644.023", - "519.133", - "509.504", - "886.014", - "890.141", - "493.435", - "969.484", - "400.557", - "896.487", - "422.51", - "557.73", - "857.051", - "667.017", - "614.625", - "843.127", - "924.691", - "812.787", - "391.172", - "661.678", - "415.1", - "725.146", - "763.228", - "520.501", - "394.752", - "374.99", - "855.976", - "297.369", - "559.53", - "721.383", - "643.99", - "710.283", - "470.396", - "826.721", - "340.387", - "379.271", - "256.342", - "148.295", - "714.369", - "499.803", - "499.281", - "797.166", - "946.228", - "199.956", - "551.606", - "348.251", - "628.842", - "805.04", - "405.261", - "633.701", - "435.469", - "890.295", - "548.911", - "215.436", - "318.315", - "662.26", - "158.674", - "621.254", - "676.9", - "529.999", - "210.472", - "533.757", - "321.619", - "469.327", - "653.566", - "543.174", - "893.758", - "484.198", - "904.951", - "583.402", - "632.573", - "854.82", - "375.07", - "441.251", - "548.332", - "715.668", - "961.393", - "669.051", - "548.37", - "722.098", - "612.906", - "392.557", - "489.048", - "484.847", - "377.694", - "784.339", - "729.748", - "486.117", - "367.079", - "700.217", - "762.253", - "776.566", - "511.667", - "376.988", - "475.096", - "672.299", - "581.128", - "716.621", - "302.754", - "689.109", - "538.431", - "411.622", - "521.379", - "174.581", - "523.217", - "542.859", - "536.252", - "665.549", - "487.592", - "823.871", - "204.196", - "351.163", - "682.77", - "304.131", - "592.392", - "508.443", - "585.662", - "682.932", - "578.796", - "686.46", - "707.037", - "556.251", - "604.405", - "648.313", - "572.282", - "232.907", - "161.062", - "715.556", - "507.911", - "612.93", - "887.442", - "926.73", - "539.311", - "339.271", - "633.36", - "767.659", - "584.218", - "564.906", - "614.719", - "798.942", - "602.617", - "524.384", - "721.63", - "575.186", - "447.594", - "514.864", - "435.598", - "815.54", - "500.317", - "251.74", - "943.378", - "526.568", - "634.208", - "797.348", - "794.663", - "615.683", - "906.608", - "688.277", - "451.046", - "310.879", - "665.595", - "270.774", - "545.11", - "813.157", - "450.101", - "447.955", - "823.272", - "490.703", - "309.584", - "243.058", - "764.345", - "379.018", - "787.352", - "377.537", - "519.837", - "515.325", - "473.572", - "945.235", - "626.042", - "736.995", - "528.106", - "369.585", - "710.323", - "758.648", - "678.737", - "713.928", - "516.773", - "743.157", - "408.151", - "280.829", - "709.735", - "179.015", - "688.86", - "500.433", - "147.1", - "399.539", - "916.236", - "344.493", - "171.17", - "697.647", - "785.552", - "556.639", - "172.577", - "475.576", - "506.449", - "517.88", - "658.464", - "237.155", - "495.926", - "398.099", - "780.836", - "775.25", - "714.12", - "797.871", - "554.088", - "465.609", - "544.16", - "410.584", - "112.045", - "571.897", - "806.812", - "507.895", - "847.124", - "364.862", - "369.752", - "419.37", - "651.614", - "122.323", - "431.589", - "343.389", - "802.493", - "805.452", - "714.143", - "602.441", - "564.877", - "741.334", - "596.094", - "330.984", - "765.402", - "731.379", - "152.986", - "443.859", - "787.199", - "566.532", - "368.108", - "711.435", - "395.147", - "974.581", - "148.302", - "395.733", - "838.226", - "354.487", - "357.874", - "864.511", - "939.188", - "646.621", - "219.253", - "862.592", - "613.837", - "448.324", - "225.999", - "211.695", - "448.861", - "451.151", - "785.507", - "692.152", - "657.96", - "135.567", - "718.19", - "951.131", - "482.447", - "930.859", - "369.363", - "658.056", - "427.245", - "829.472", - "813.191", - "639.072", - "586.685", - "168.766", - "304.467", - "274.243", - "609.303", - "273.596", - "573.861", - "763.887", - "802.545", - "109.738", - "711.554", - "509.829", - "441.1", - "555.812", - "769.747", - "667.159", - "794.069", - "362.086", - "414.52", - "290.229", - "207.184", - "371.918", - "699.911", - "184.444", - "659.761", - "853.892", - "481.843", - "434.463", - "408.682", - "569.58", - "905.673", - "481.698", - "561.452", - "744.599", - "676.775", - "361.653", - "670.625", - "437.48", - "582.655", - "634.617", - "334.959", - "609.912", - "192.968", - "499.596", - "881.051", - "509.65", - "554.264", - "589.947", - "233.233", - "854.166", - "436.324", - "582.743", - "415.407", - "667.181", - "838.28", - "473.783", - "192.192", - "626.24", - "328.222", - "479.385", - "738.871", - "318.578", - "577.552", - "803.201", - "546.104", - "365.211", - "165.943", - "682.937", - "558.251", - "858.359", - "159.672", - "713.879", - "451.686", - "183.238", - "158.987", - "471.844", - "622.12", - "137.252", - "402.478", - "607.656", - "300.88", - "470.082", - "527.535", - "849.044", - "548.505", - "945.231", - "544.316", - "498.13", - "762.153", - "797.302", - "425.51", - "647.036", - "703.756", - "832.12", - "584.822", - "301.438", - "439.868", - "232.151", - "437.922", - "356.371", - "781.713", - "587.114", - "594.167", - "754.979", - "767.888", - "369.892", - "123.409", - "341.561", - "712.081", - "795.05", - "317.097", - "920.793", - "949.885", - "452.463", - "573.827", - "394.364", - "333.758", - "580.51", - "414.652", - "231.568", - "886.792", - "721.435", - "172.071", - "292.554", - "452.997", - "909.454", - "841.928", - "575.086", - "506.296", - "821.94", - "701.504", - "933.683", - "828.322", - "683.87", - "498.358", - "849.4", - "859.09", - "555.514", - "641.548", - "668.418", - "251.786", - "728.667", - "565.342", - "505.878", - "581.822", - "794.903", - "802.526", - "480.695", - "943.264", - "588.386", - "620.729", - "198.941", - "331.997", - "810.861", - "554.025", - "579.831", - "785.491", - "880.683", - "733.547", - "366.928", - "580.362", - "453.878", - "313.427", - "673.163", - "150.99", - "674.617", - "135.935", - "517.309", - "525.443", - "828.691", - "658.93", - "380.811", - "652.337", - "429.671", - "136.377", - "803.019", - "753.166", - "572.526", - "399.611", - "813.659", - "610.167", - "407.962", - "920.239", - "940.866", - "311.62", - "665.14", - "761.956", - "974.816", - "537.189", - "510.482", - "806.881", - "354.061", - "708.064", - "782.536", - "672.881", - "757.689", - "263.556", - "799.793", - "738.389", - "842.042", - "814.595", - "766.648", - "432.54", - "483.667", - "716.94", - "431.539", - "723.202", - "601.901", - "478.277", - "852.165", - "748.839", - "554.197", - "469.372", - "445.627", - "291.774", - "590.804", - "900.778", - "465.831", - "742.794", - "439.521", - "799.392", - "136.069", - "596.126", - "471.408", - "818.808", - "601.944", - "811.865", - "635.844", - "658.524", - "569.127", - "535.181", - "220.928", - "516.219", - "709.299", - "710.556", - "762.773", - "454.465", - "531.718", - "833.166", - "376.459", - "546.95", - "815.124", - "684.429", - "578.131", - "284.722", - "614.039", - "613.131", - "960.266", - "458.474", - "455.363", - "489.875", - "275.766", - "437.386", - "569.011", - "307.351", - "269.723", - "734.599", - "602.281", - "722.908", - "611.061", - "369.426", - "472.299", - "443.903", - "869.582", - "488.244", - "498.115", - "162.062", - "491.264", - "657.358", - "734.623", - "504.085", - "538.148", - "725.85", - "500.243", - "595.515", - "637.017", - "535.655", - "701.041", - "609.152", - "548.785", - "396.06", - "464.679", - "312.672", - "918.768", - "297.979", - "541.171", - "246.251", - "805.13", - "895.513", - "192.841", - "478.722", - "409.23", - "194.818", - "643.132", - "258.05", - "888.043", - "124.71", - "888.001", - "494.977", - "564.078", - "746.88", - "917.394", - "845.058", - "896.768", - "934.853", - "745.771", - "733.271", - "784.242", - "759.723", - "696.435", - "414.972", - "575.676", - "562.475", - "733.346", - "689.723", - "762.025", - "323.298", - "782.373", - "596.396", - "367.427", - "744.222", - "927.718", - "822.103", - "479.279", - "674.963", - "466.111", - "285.633", - "600.871", - "582.18", - "774.256", - "185.856", - "440.825", - "774.41", - "626.168", - "705.768", - "650.225", - "344.496", - "728.747", - "604.303", - "550.146", - "381.675", - "657.207", - "130.824", - "972.284", - "548.245", - "882.591", - "182.617", - "568.747", - "712.948", - "825.615", - "596.182", - "307.274", - "780.149", - "636.707", - "704.903", - "466.221", - "270.699", - "622.914", - "349.849", - "809.715", - "857.915", - "344.382", - "351.423", - "921.896", - "595.836", - "380.282", - "342.103", - "753.597", - "756.38", - "250.567", - "915.868", - "413.929", - "572.769", - "433.227", - "677.561", - "439.949", - "507.798", - "326.601", - "916.78", - "776.701", - "779.118", - "900.164", - "710.586", - "715.629", - "101.34", - "298.264", - "298.512", - "446.617", - "372.473", - "559.071", - "846.428", - "620.16", - "355.148", - "664.226", - "692.008", - "866.628", - "818.136", - "769.556", - "791.163", - "572.309", - "716.066", - "734.82", - "399.259", - "668.203", - "638.59", - "504.029", - "840.936", - "438.595", - "783.458", - "255.398", - "310.09", - "749.758", - "399.332", - "647.945", - "342.978", - "488.282", - "757.361", - "554.497", - "589.456", - "828.888", - "688.657", - "601.654", - "664.536", - "337.309", - "875.076", - "328.088", - "343.619", - "949.923", - "828.542", - "546.549", - "585.741", - "815.163", - "549.876", - "596.978", - "825.137", - "345.172", - "498.162", - "496.938", - "684.532", - "989.595", - "772.893", - "689.894", - "915.023", - "617.662", - "915.685", - "863.316", - "792.358", - "796.181", - "173.701", - "321.214", - "719.559", - "574.378", - "733.799", - "287.437", - "614.834", - "950.505", - "500.898", - "604.359", - "578.458", - "471.831", - "206.248", - "517.376", - "435.561", - "189.977", - "604.329", - "398.278", - "579.323", - "243.508", - "574.378", - "552.874", - "263.156", - "444.96", - "332.508", - "800.973", - "863.782", - "722.35", - "807.851", - "544.854", - "761.101", - "415.225", - "328.84", - "773.318", - "779.288", - "441.369", - "871.701", - "759.121", - "669.745", - "634.405", - "585.988", - "282.758", - "424.419", - "422.258", - "421.314", - "189.719", - "245.886", - "670.885", - "443.958", - "730.52", - "457.907", - "629.468", - "896.69", - "267.991", - "486.511", - "849.72", - "832.702", - "622.324", - "613.719", - "571.012", - "3.38226", - "460.201", - "348.393", - "407.411", - "503.437", - "669.27", - "755.676", - "632.857", - "631.379", - "685.709", - "332.185", - "430.867", - "874.625", - "810.5", - "907.475", - "720.516", - "720.737", - "456.039", - "806.35", - "640.422", - "703.27", - "585.643", - "746.233", - "247.96", - "627.225", - "680.571", - "879.293", - "346.042", - "795.756", - "745.07", - "421.661", - "487.437", - "123.356", - "699.97", - "253.183", - "882.395", - "389.466", - "595.4", - "705.485", - "337.931", - "918.572", - "730.554", - "324.537", - "623.685", - "178.516", - "676.674", - "485.307", - "932.472", - "632.882", - "546.792", - "805.871", - "549.71", - "303.285", - "740.897", - "861.325", - "585.35", - "203.997", - "488.476", - "425.857", - "805.372", - "764.184", - "324.558", - "375.317", - "757.909", - "583.505", - "647.55", - "157.395", - "212.391", - "718.538", - "808.735", - "761.489", - "282.974", - "773.258", - "359.545", - "823.481", - "788.076", - "674.414", - "673.398", - "520.338", - "436.704", - "359.703", - "652.454", - "716.528", - "566.897", - "493.879", - "494.078", - "722.611", - "456.786", - "588.26", - "402.414", - "485.21", - "951.844", - "667.231", - "329.342", - "792.951", - "329.138", - "239.818", - "667.993", - "970.53", - "555.374", - "601.446", - "754.105", - "737.361", - "745.657", - "487.362", - "643.438", - "794.607", - "442.887", - "299.153", - "772.62", - "396.443", - "461.995", - "284.615", - "526.174", - "696.408", - "511.36", - "185.684", - "655.735", - "508.61", - "513.884", - "829.294", - "369.257", - "855.299", - "632.384", - "653.355", - "280.845", - "245.521", - "651.93", - "672.034", - "653.825", - "557.653", - "832.155", - "775.55", - "808.145", - "468.803", - "357.406", - "793.73", - "120.244", - "317.542", - "446.823", - "322.63", - "502.317", - "284.146", - "563.304", - "896.361", - "245.756", - "939.113", - "362.935", - "960.754", - "929.632", - "842.104", - "548.869", - "908.805", - "920.76", - "782.727", - "173.45", - "568.215", - "962.427", - "921.156", - "438.06", - "318.619", - "583.344", - "626.356", - "609.721", - "300.139", - "597.55", - "459.493", - "170.328", - "607.395", - "692.679", - "216.577", - "506.329", - "483.554", - "577.351", - "551.193", - "485.196", - "672.739", - "735.668", - "645.665", - "274.93", - "609.484", - "873.292", - "675.564", - "482.408", - "676.111", - "834.915", - "527.687", - "739.04", - "108.411", - "510.291", - "704.239", - "75.521", - "538.749", - "602.544", - "691.584", - "753.445", - "500.828", - "843.33", - "532.221", - "862.544", - "642.748", - "581.177", - "585.221", - "564.437", - "304.077", - "534.148", - "913.718", - "515.449", - "763.586", - "579.912", - "736.226", - "918.424", - "604.311", - "527.372", - "604.455", - "608.694", - "615.36", - "646.595", - "337.398", - "912.443", - "137.949", - "582.052", - "469.661", - "761.402", - "923.768", - "729.48", - "937.022", - "819.156", - "781.026", - "416.938", - "732.726", - "772.854", - "672.939", - "383.688", - "542.893", - "432.604", - "625.367", - "283.113", - "473.354", - "815.229", - "773.835", - "885.911", - "878.068", - "586.219", - "651.307", - "506.931", - "627.661", - "744.4", - "128.523", - "633.536", - "500.306", - "840.429", - "861.462", - "784.659", - "495.965", - "295.119", - "722.293", - "641.395", - "952.81", - "575.169", - "89.4598", - "139.986", - "220.226", - "574.969", - "809.239", - "531.248", - "653.99", - "716.355", - "832.665", - "483.413", - "578.361", - "801.549", - "672.636", - "149.825", - "737.62", - "523.247", - "621.315", - "779.975", - "698.203", - "470.758", - "455.928", - "627.988", - "540.85", - "802.436", - "675.608", - "395.209", - "475.305", - "320.469", - "322.909", - "205.315", - "930.616", - "757.403", - "103.539", - "569.597", - "498.549", - "486.916", - "730.324", - "590.47", - "378.098", - "703.541", - "680.048", - "414.302", - "416.07", - "568.289", - "285.855", - "697.055", - "838.443", - "639.53", - "821.146", - "513.92", - "783.147", - "498.012", - "818.116", - "478.342", - "628.359", - "165.965", - "677.329", - "651.34", - "507.919", - "415.904", - "470.119", - "556.734", - "548.497", - "850.498", - "211.789", - "479.704", - "668.636", - "745.705", - "541.766", - "648.829", - "467.523", - "181.631", - "782.568", - "616.293", - "662.871", - "603.46", - "426.95", - "778.349", - "351.34", - "450.969", - "457.837", - "343.411", - "410.212", - "766.095", - "516.583", - "511.744", - "503.059", - "625.029", - "670.786", - "522.641", - "818.501", - "495.659", - "848.019", - "538.37", - "732.608", - "630.264", - "755.729", - "728.139", - "528.264", - "805.949", - "443.664", - "607.202", - "778.427", - "427.972", - "577.017", - "702.562", - "827.18", - "751.85", - "551.676", - "500.268", - "497.624", - "309.881", - "780.949", - "431.244", - "672.325", - "342.66", - "484.894", - "502.967", - "693.222", - "546.665", - "439.072", - "274.03", - "567.034", - "826.721", - "816.203", - "840.738", - "403.201", - "500.042", - "687.976", - "364.49", - "872.238", - "574.89", - "295.394", - "734.454", - "744.213", - "383.494", - "492.506", - "823.816", - "838.993", - "257.303", - "774.429", - "799.614", - "700.355", - "764.431", - "738.531", - "514.824", - "177.033", - "676.819", - "952.185", - "747.111", - "623.633", - "377.917", - "728.327", - "263.438", - "591.697", - "362.803", - "925.986", - "694.81", - "897.292", - "538.596", - "810.412", - "803.018", - "874.672", - "712.215", - "474.478", - "910.429", - "544.033", - "323.923", - "763.061", - "351.468", - "608.308", - "894.44", - "857.439", - "626.349", - "801.557", - "430.474", - "315.014", - "116.908", - "260.276", - "519.552", - "801.723", - "247.789", - "516.119", - "562.675", - "852.892", - "584.083", - "368.008", - "743.822", - "717.284", - "572.596", - "677.926", - "652.971", - "254.407", - "809.239", - "872.34", - "328.101", - "471.798", - "484.064", - "572.3", - "968.966", - "257.339", - "649.418", - "388.723", - "794.282", - "771.625", - "576.277", - "436.872", - "617.354", - "920.755", - "427.518", - "929.713", - "474.185", - "569.368", - "269.545", - "551.018", - "824.827", - "649.024", - "626.523", - "664.207", - "708.832", - "589.32", - "941.796", - "507.894", - "306.111", - "617.294", - "656.097", - "809.572", - "767.496", - "623.737", - "527.226", - "628.626", - "481.787", - "689.873", - "463.224", - "530.743", - "330.451", - "858.601", - "649.874", - "643.653", - "857.217", - "571.191", - "479.672", - "149.442", - "451.109", - "641.723", - "784.289", - "497.702", - "419.994", - "271.44", - "569.578", - "654.984", - "609.984", - "528.656", - "883.172", - "556.728", - "345.596", - "673.597", - "823.025", - "408.846", - "236.405", - "961.948", - "327.889", - "882.644", - "729.713", - "579.272", - "507.743", - "778.607", - "795.868", - "576.326", - "563.592", - "721.763", - "762.866", - "290.514", - "223.559", - "547.624", - "781.852", - "276.872", - "490.162", - "59.1806", - "569.993", - "420.994", - "407.165", - "584.134", - "790.042", - "553.009", - "360.888", - "478.192", - "516.374", - "384.067", - "560.122", - "564.561", - "477.501", - "770.626", - "355.155", - "666.266", - "803.749", - "247.57", - "879.274", - "175.904", - "417.643", - "354.836", - "422.048", - "771.877", - "673.707", - "636.672", - "169.443", - "569.124", - "732.38", - "995.533", - "378.014", - "779.982", - "572.224", - "447.634", - "635.414", - "538.691", - "812.851", - "778.325", - "722.871", - "484.065", - "708.648", - "577.343", - "701.901", - "868.955", - "308.995", - "726.474", - "906.529", - "557.093", - "352.35", - "734.748", - "560.002", - "847.415", - "402.199", - "815.03", - "294.644", - "774.506", - "594.971", - "316.882", - "144.819", - "312.692", - "578.004", - "715.484", - "522.097", - "715.019", - "714.775", - "182.154", - "681.495", - "785.115", - "476.659", - "191.891", - "313.768", - "472.174", - "849.344", - "718.564", - "362.745", - "289.09", - "301.235", - "631.903", - "590.337", - "385.809", - "663.928", - "739.986", - "981.358", - "526.212", - "461.746", - "330.651", - "219.734", - "850.332", - "956.12", - "687.219", - "617.94", - "407.348", - "615.796", - "921.839", - "803.644", - "814.925", - "904.353", - "534.543", - "881.411", - "468.227", - "675.465", - "874.407", - "881.477", - "641.786", - "846.543", - "411.028", - "278.061", - "775.968", - "653.122", - "919.42", - "647.265", - "515.141", - "282.2", - "957.294", - "717.814", - "336.216", - "295.338", - "959.394", - "713.664", - "239.786", - "400.468", - "555.063", - "736.609", - "500.792", - "577.305", - "778.028", - "432.528", - "759.212", - "485.784", - "743.856", - "562.913", - "279.769", - "732.3", - "501.427", - "425.014", - "552.859", - "516.274", - "294.84", - "568.709", - "536.46", - "561.122", - "613.087", - "339.553", - "331.129", - "518.47", - "593.175", - "639.748", - "260.435", - "437.441", - "810.608", - "703.716", - "852.596", - "581.716", - "385.112", - "300.883", - "606.44", - "525.048", - "736.953", - "432.006", - "855.634", - "652.737", - "878.992", - "442.732", - "721.867", - "520.654", - "566.017", - "612.055", - "551.053", - "428.089", - "645.256", - "546.797", - "742.699", - "533.8", - "699.994", - "735.98", - "559.65", - "632.053", - "476.322", - "731.117", - "512.79", - "651.043", - "893.45", - "639.692", - "401.814", - "819.679", - "679.626", - "709.091", - "562.539", - "578.675", - "612.916", - "599.065", - "356.59", - "641.459", - "486.888", - "191.444", - "243.423", - "653.179", - "453.267", - "443.66", - "488.142", - "655.803", - "490.531", - "785.881", - "458.167", - "883.316", - "563.893", - "789.79", - "429.266", - "858.783", - "307.132", - "427.63", - "386.95", - "329.236", - "439.95", - "255.984", - "241.883", - "435.586", - "373.938", - "389.555", - "764.009", - "687.885", - "378.725", - "204.304", - "748.163", - "468.309", - "653.067", - "336.826", - "842.035", - "874.59", - "431.711", - "805.921", - "597.309", - "713.217", - "264.432", - "626.135", - "793.161", - "470.435", - "271.658", - "449.97", - "804.324", - "518.197", - "547.599", - "602.679", - "627.999", - "285.495", - "464.806", - "888.777", - "514.029", - "775.778", - "600.606", - "728.627", - "720.959", - "421.356", - "316.935", - "428.357", - "701.661", - "234.495", - "518.951", - "154.065", - "483.732", - "586.249", - "278.416", - "819.703", - "486.497", - "629.542", - "800.801", - "435.449", - "924.076", - "715.795", - "410.91", - "546.417", - "637.498", - "857.98", - "598.805", - "207.661", - "504.583", - "523.165", - "641.695", - "255.631", - "742.924", - "509.643", - "518.23", - "773.955", - "656.115", - "163.337", - "583.449", - "534.894", - "279.122", - "149.272", - "747.975", - "287.85", - "586.249", - "729.44", - "302.294", - "743.3", - "520.661", - "646.479", - "282.109", - "581.253", - "381.583", - "254.632", - "436.742", - "528.111", - "337.944", - "471.973", - "948.447", - "738.07", - "761.475", - "381.22", - "469.008", - "989.378", - "715.091", - "271.052", - "103.811", - "261.774", - "568.445", - "750.482", - "764.095", - "592.692", - "294.961", - "569.155", - "550.628", - "544.853", - "773.267", - "518.849", - "624.376", - "486.183", - "306.96", - "895.845", - "545.093", - "412.79", - "587.731", - "870.039", - "443.19", - "610.002", - "446.488", - "472.949", - "583.617", - "758.295", - "751.609", - "662.551", - "754.805", - "774.667", - "646.902", - "486.504", - "523.441", - "248.747", - "798.568", - "438.328", - "559.876", - "643.641", - "765.62", - "777.578", - "469.975", - "722.439", - "726.314", - "697.692", - "555.069", - "298.489", - "316.907", - "387.617", - "480.188", - "762.836", - "478.427", - "557.949", - "310.657", - "223.389", - "315.264", - "820.123", - "427.007", - "641.269", - "714.225", - "475.932", - "537.811", - "325.959", - "721.292", - "689.896", - "382.932", - "763.636", - "696.604", - "596.412", - "827.302", - "786.995", - "767.583", - "620.799", - "945.168", - "921.733", - "291.854", - "837.077", - "574.481", - "389.483", - "580.534", - "447.891", - "390.878", - "610.547", - "173.085", - "412.11", - "643.519", - "879.793", - "756.873", - "188.587", - "838.373", - "488.393", - "482.003", - "275.427", - "403.556", - "783.585", - "319.589", - "712.534", - "730.417", - "429.666", - "275.933", - "712.718", - "580.166", - "706.858", - "417.92", - "688.124", - "514.466", - "448.158", - "800.212", - "401.999", - "832.309", - "729.272", - "455.098", - "731.386", - "418.771", - "559.458", - "762.786", - "689.716", - "322.664", - "406.961", - "410.376", - "871.86", - "604.995", - "796.924", - "268.253", - "595.715", - "434.525", - "283.086", - "633.056", - "737.218", - "513.462", - "762.301", - "850.977", - "696.187", - "684.741", - "797.248", - "686.19", - "813.91", - "278.823", - "357.223", - "660.853", - "263.799", - "571.41", - "718.777", - "975.171", - "560.237", - "773.101", - "612.569", - "772.318", - "392.173", - "612.193", - "907.777", - "604.758", - "744.588", - "465.946", - "705.184", - "476.713", - "598.11", - "84.1883", - "420.156", - "909.829", - "492.248", - "624.251", - "682.39", - "695.873", - "514.604", - "656.474", - "302.284", - "262.031", - "610.523", - "867.185", - "514.293", - "393.138", - "724.134", - "381.29", - "469.473", - "188.115", - "427.496", - "154.987", - "386.18", - "758.455", - "423.539", - "449.587", - "290.688", - "722.354", - "458.973", - "660.213", - "818.173", - "696.106", - "136.042", - "327.302", - "682.011", - "366.401", - "366.998", - "483.27", - "687.987", - "502.895", - "451.771", - "484.653", - "747.221", - "85.3221", - "615.276", - "814.194", - "546.538", - "686.995", - "507.624", - "456.217", - "794.025", - "418.014", - "517.783", - "401.73", - "299.463", - "543.716", - "779.58", - "936.267", - "460.89", - "665.287", - "494.494", - "754.678", - "713.978", - "824.832", - "179.918", - "618.588", - "182.389", - "422.073", - "191.892", - "645.579", - "538.379", - "300.609", - "503.997", - "489.33", - "675.532", - "435.987", - "242.947", - "698.895", - "455.883", - "804.7", - "298.813", - "504.366", - "505.942", - "343.26", - "568.727", - "381.256", - "917.465", - "305.193", - "309.16", - "733.858", - "421.918", - "544.758", - "715.772", - "432.04", - "474.593", - "369.65", - "656.613", - "314.684", - "826.502", - "512.858", - "565.053", - "708.506", - "539.403", - "650.738", - "683.289", - "576.362", - "684.684", - "820.679", - "654.166", - "394.952", - "732.171", - "814.938", - "641.195", - "763.821", - "807.453", - "887.004", - "367.116", - "592.288", - "636.57", - "777.92", - "974.375", - "626.935", - "769.278", - "677.007", - "309.355", - "622.236", - "521.691", - "572.737", - "563.166", - "691.808", - "633.504", - "653.257", - "424.917", - "674.212", - "272.255", - "697.621", - "293.262", - "411.494", - "764.02", - "562.328", - "744.249", - "636.873", - "316.17", - "944.684", - "529.466", - "515.846", - "690.135", - "908.833", - "458.93", - "133.639", - "292.207", - "710.445", - "730.41", - "661.283", - "200.282", - "735.425", - "766.349", - "702.879", - "377.752", - "782.307", - "792.354", - "328.37", - "260.283", - "859.194", - "769.031", - "319.817", - "547.211", - "532.182", - "486.278", - "842.613", - "482.758", - "460.969", - "248.729", - "428.907", - "892.906", - "445.567", - "810.301", - "272.704", - "789.93", - "467.129", - "411.754", - "547.446", - "989.631", - "611.891", - "486.505", - "727.339", - "606.409", - "626.878", - "651.494", - "889.172", - "317.737", - "541.825" - ], - "zsrc": "JohnMaddock:14:cac3ee", - "z": [ - "728.45", - "872.447", - "838.04", - "715.994", - "634.599", - "776.538", - "741.025", - "722.968", - "881.733", - "920.918", - "800.613", - "717.424", - "990.029", - "782.543", - "967.762", - "593.308", - "788.546", - "975.764", - "937.424", - "839.321", - "754.763", - "402.673", - "965.706", - "827.697", - "564.044", - "768.145", - "569.58", - "954.036", - "965.132", - "940.736", - "821.833", - "720.749", - "904.568", - "342.145", - "840.833", - "840.83", - "959.407", - "722.363", - "980.66", - "920.158", - "927.636", - "944.452", - "985.8", - "843.26", - "598.483", - "715.623", - "917.216", - "821.92", - "792.804", - "959.071", - "932.187", - "946.179", - "738.719", - "922.2", - "759.41", - "904.546", - "879.502", - "451.006", - "762.478", - "994.199", - "839.292", - "866.242", - "898.206", - "774.844", - "935.876", - "695.766", - "994.322", - "451.358", - "880.801", - "896.293", - "981.839", - "770.148", - "743.748", - "919.632", - "746.087", - "870.959", - "612.187", - "978.484", - "876.676", - "738.437", - "989.672", - "962.414", - "750.11", - "713.209", - "736.446", - "847.443", - "811.104", - "774.852", - "786.117", - "738.832", - "768.317", - "755.581", - "791.301", - "786.319", - "988.131", - "819.236", - "986.736", - "520.039", - "968.538", - "957.454", - "825.601", - "966.398", - "969.935", - "639.051", - "811.857", - "957.786", - "832.081", - "956.586", - "911.558", - "804.708", - "722.999", - "985.094", - "763.41", - "850.517", - "695.196", - "980.204", - "976.095", - "897.345", - "752.883", - "922.276", - "951", - "716.663", - "861.044", - "587.368", - "886.12", - "860.292", - "642.602", - "974.073", - "639.483", - "953.662", - "721.242", - "807.833", - "871.246", - "882.797", - "223.641", - "886.258", - "759.858", - "827.82", - "919.184", - "472.359", - "827.876", - "779.964", - "630.749", - "882.037", - "837.301", - "738.438", - "808.112", - "945.282", - "711.424", - "811.893", - "776.356", - "975.83", - "887.867", - "938.325", - "542.482", - "871.221", - "737.144", - "770.529", - "888.002", - "715.897", - "956.874", - "751.897", - "505.355", - "755.51", - "889.895", - "845.67", - "957.143", - "747.802", - "950.131", - "687.239", - "915.227", - "766.153", - "888.466", - "721.755", - "961.716", - "809.728", - "758.393", - "735.984", - "955.988", - "899.794", - "563.521", - "746.15", - "887.269", - "710.076", - "852.075", - "712.974", - "970.402", - "797.347", - "984.591", - "686.78", - "876.018", - "989.495", - "825.235", - "990.872", - "957.371", - "908.235", - "882.457", - "910.336", - "937.165", - "819.78", - "826.073", - "762.265", - "942.662", - "991.559", - "839.038", - "606.995", - "812.222", - "988.856", - "816.761", - "493.447", - "913.438", - "426.551", - "907.145", - "976.927", - "857.062", - "763.156", - "831.998", - "682.163", - "705.292", - "658.175", - "824.023", - "646.061", - "834.046", - "602.207", - "924.041", - "841.138", - "999.036", - "728.564", - "930.131", - "621.773", - "821.535", - "563.083", - "767.312", - "716.013", - "745.315", - "911.758", - "890.672", - "762.166", - "940.836", - "749.62", - "777.098", - "594.775", - "732.134", - "777.495", - "935.971", - "829.661", - "755.311", - "491.03", - "468.67", - "975.257", - "956.461", - "444.202", - "878.865", - "885.127", - "929.134", - "934.249", - "637.944", - "426.136", - "925.627", - "684.735", - "591.338", - "570.028", - "629.458", - "717.926", - "781.644", - "839.596", - "709.286", - "736.127", - "940.465", - "927.365", - "777.175", - "841.31", - "863.01", - "738.884", - "710.499", - "822.228", - "920.606", - "779.355", - "277.086", - "954.77", - "970.389", - "988.309", - "836.405", - "888.109", - "693.559", - "764.744", - "775.357", - "806.581", - "672.753", - "836.053", - "873.956", - "919.1", - "888.029", - "840.538", - "880.13", - "794.939", - "872.626", - "978.691", - "954.672", - "996.705", - "750.558", - "894.84", - "710.499", - "658.046", - "711.805", - "744.488", - "969.306", - "909.344", - "866.989", - "802.08", - "858.376", - "267.63", - "840.303", - "969.539", - "919.08", - "852.586", - "838.616", - "851.171", - "918.817", - "976.772", - "865.561", - "994.989", - "966.584", - "824.988", - "775.934", - "944.534", - "769.964", - "471.786", - "998.207", - "583.336", - "849.01", - "833.954", - "725.339", - "875.26", - "969.261", - "994.979", - "770.059", - "783.843", - "722.571", - "699.137", - "820.274", - "890.03", - "939.459", - "877.525", - "949.483", - "878.957", - "877.323", - "781.984", - "891.004", - "932.493", - "733.927", - "779.509", - "746.567", - "808.606", - "914.194", - "757.809", - "900.084", - "946.281", - "876.365", - "790.607", - "752.283", - "744.376", - "907.716", - "716.625", - "952.029", - "711.137", - "907.126", - "898.557", - "511.505", - "810.688", - "730.868", - "666.34", - "937.727", - "826.725", - "995.725", - "945.059", - "738.608", - "838.87", - "979.155", - "888.821", - "865.126", - "517.083", - "704.464", - "754.535", - "517.172", - "983.754", - "884.967", - "760.347", - "993.494", - "761.009", - "958.97", - "696.446", - "656.321", - "958.806", - "690.984", - "928.164", - "834.901", - "984.749", - "796.582", - "758.647", - "656.33", - "896.857", - "843.818", - "760.96", - "980.013", - "831.619", - "801.002", - "951.125", - "433.576", - "770.126", - "908.41", - "803.567", - "712", - "809.611", - "899.114", - "639.756", - "856.402", - "751.56", - "515.078", - "879.25", - "980.483", - "730.058", - "945.898", - "973.855", - "774.63", - "772.568", - "888.57", - "785.823", - "829.495", - "602.025", - "930.354", - "811.221", - "917.504", - "981.561", - "884.298", - "808.553", - "660.809", - "401.697", - "712.741", - "769.372", - "561.336", - "784.638", - "982.743", - "975.431", - "980.573", - "776.532", - "626.345", - "907.599", - "796.346", - "961.103", - "881.69", - "768.58", - "995.399", - "759.736", - "464.853", - "608.355", - "979.752", - "946.595", - "839.284", - "954.94", - "815.428", - "731.801", - "887.284", - "867.674", - "501.783", - "872.687", - "875.081", - "769.081", - "768.244", - "932.564", - "840.296", - "788.818", - "884.228", - "910.619", - "909.389", - "937.366", - "892.929", - "683.491", - "740.865", - "746.403", - "908.083", - "582.135", - "968.622", - "881.516", - "810.405", - "895.799", - "880.955", - "585.494", - "715.937", - "936.253", - "812.832", - "801.105", - "871.592", - "761.157", - "891.624", - "609.31", - "825.828", - "756.074", - "736.1", - "948.107", - "886.534", - "869.735", - "591.168", - "650.78", - "677.795", - "713.535", - "921.129", - "905.137", - "906.902", - "840.502", - "611.717", - "928.967", - "241.653", - "727.236", - "792.756", - "680.014", - "939.873", - "808.547", - "866.425", - "798.968", - "806.972", - "967.936", - "555.822", - "872.095", - "987.527", - "810.604", - "996.83", - "756.613", - "858.115", - "761.272", - "967.705", - "928.18", - "951.399", - "723.945", - "943.717", - "885.813", - "831.17", - "996.195", - "904.689", - "884.673", - "846.333", - "946.942", - "970.111", - "628.262", - "900.991", - "533.181", - "506.038", - "889.994", - "750.201", - "921.905", - "730.749", - "925.835", - "550.47", - "846.923", - "864.941", - "965.004", - "938.015", - "712.894", - "985.633", - "929.994", - "835.337", - "956.173", - "743.703", - "715.442", - "769.881", - "778.054", - "992.408", - "949.341", - "832.95", - "664.966", - "987.823", - "971.266", - "747.774", - "840.77", - "590.267", - "805.098", - "793.864", - "915.473", - "479.555", - "811.149", - "895.49", - "876.007", - "753.403", - "362.448", - "863.202", - "952.345", - "724.301", - "875.857", - "868.511", - "902.403", - "764.732", - "802.205", - "880.449", - "815.776", - "897.599", - "625.345", - "873.658", - "975.052", - "631.506", - "235.585", - "712.562", - "994.321", - "826.672", - "948.511", - "956.008", - "628.01", - "853.152", - "900.849", - "829.734", - "591.317", - "963.678", - "850.289", - "853.147", - "837.334", - "639.198", - "739.235", - "883.524", - "717.901", - "765.959", - "940.588", - "794.541", - "947.915", - "793.965", - "965.128", - "813.666", - "771.371", - "794.516", - "724.438", - "954.314", - "834.702", - "975.156", - "882.28", - "862.673", - "768.978", - "659.95", - "979.097", - "833.256", - "899.61", - "968.879", - "932.925", - "708.601", - "715.925", - "953.444", - "931.333", - "931.262", - "876.513", - "758.269", - "696.923", - "332.306", - "878.352", - "985.637", - "576.555", - "961.036", - "922.266", - "898.693", - "735.513", - "925.339", - "886.704", - "783.399", - "919.929", - "635.219", - "724.965", - "861.875", - "869.329", - "726.317", - "743.675", - "772.057", - "805.429", - "265.959", - "703.429", - "553.219", - "757.761", - "624.698", - "898.614", - "731.266", - "790.91", - "897.02", - "792.797", - "807.699", - "341.426", - "513.759", - "865.928", - "838.403", - "892.017", - "971.638", - "607.214", - "745.426", - "954.173", - "921.662", - "897.25", - "936.735", - "819.081", - "754.125", - "748.458", - "501.094", - "805.873", - "867.502", - "888.701", - "779.227", - "755.542", - "838.652", - "939.518", - "706.969", - "881.802", - "842.224", - "985.919", - "965.949", - "847.825", - "842.082", - "874.379", - "593.949", - "919.161", - "990.459", - "945.272", - "780.923", - "259.728", - "873.204", - "812.328", - "985.297", - "884.088", - "790.503", - "628.105", - "808.844", - "800.918", - "771.815", - "559.29", - "899.127", - "670.461", - "896.775", - "939.547", - "735.938", - "799.105", - "863.49", - "885.306", - "634.661", - "735.518", - "962.064", - "669.958", - "913.068", - "892.557", - "754.428", - "740.794", - "983.909", - "775.987", - "981.773", - "980.552", - "841.596", - "859.054", - "968.739", - "643.904", - "989.35", - "730.286", - "961.289", - "587.224", - "812.762", - "953.059", - "846.692", - "766.224", - "776.4", - "770.429", - "891.062", - "713.415", - "780.536", - "768.225", - "719.086", - "712.794", - "730.067", - "883.602", - "877.514", - "411.872", - "976.436", - "962.873", - "769.64", - "756.073", - "878.205", - "799.462", - "748.247", - "690.461", - "417.648", - "919.888", - "716.601", - "909.295", - "719.79", - "637.803", - "902.993", - "830.48", - "929.194", - "966.318", - "854", - "777.532", - "996.669", - "624.075", - "965.89", - "767.029", - "854.292", - "921.95", - "703.163", - "954.084", - "872.715", - "915.574", - "903.01", - "948.872", - "881.277", - "730.745", - "935.422", - "854.685", - "537.82", - "965.863", - "826.768", - "962.964", - "278.232", - "768.336", - "965.966", - "903.729", - "953.257", - "888.085", - "913.298", - "840.345", - "949.932", - "858.319", - "824.82", - "769.696", - "813.595", - "711.383", - "931.67", - "351.652", - "549.744", - "807.354", - "995.562", - "825.192", - "527.329", - "859.315", - "820.759", - "503.625", - "986.19", - "964.06", - "630.948", - "752.886", - "915.35", - "896.619", - "777.904", - "910.033", - "995.334", - "892.293", - "729.227", - "814.045", - "962.265", - "976.745", - "719.897", - "883.552", - "791.081", - "885.124", - "973.744", - "836.814", - "961.914", - "474.167", - "894.196", - "969.435", - "856.337", - "810.488", - "834.891", - "780.175", - "600.793", - "924.673", - "815.973", - "731.369", - "707.179", - "675.276", - "845.198", - "929.944", - "912.544", - "837.83", - "724.101", - "890.392", - "867.566", - "967.683", - "871.399", - "748.481", - "770.533", - "823.445", - "785.153", - "727.065", - "868.92", - "971.432", - "771.271", - "935.842", - "909.048", - "940.519", - "652.434", - "843.456", - "710.826", - "692.981", - "885.492", - "841.059", - "872.118", - "914.093", - "857.732", - "992.574", - "820.22", - "677.012", - "802.416", - "927.308", - "972.005", - "895.623", - "758.408", - "765.095", - "335.309", - "699.633", - "718.755", - "924.188", - "873.067", - "743.93", - "974.996", - "842.674", - "726.992", - "830.36", - "911.225", - "744.13", - "648.6", - "538.187", - "828.442", - "895.557", - "887.315", - "782.76", - "769.45", - "780.224", - "911.814", - "773.376", - "811.919", - "795.271", - "633.756", - "828.708", - "732.006", - "926.273", - "974.65", - "837.645", - "776.682", - "971.911", - "816.913", - "926.846", - "810.205", - "482.931", - "924.757", - "359.008", - "962.336", - "746.587", - "869.852", - "989.964", - "715.99", - "666.84", - "995.349", - "892.13", - "752.858", - "931.814", - "993.424", - "844.013", - "935.751", - "874.688", - "781.102", - "765.612", - "940.689", - "965.464", - "919.728", - "228.745", - "976.564", - "809.038", - "972.724", - "925.227", - "828.76", - "988.591", - "583.166", - "699.615", - "751.847", - "849.234", - "754.518", - "809.262", - "776.877", - "769.275", - "788.487", - "807.325", - "993.184", - "886.472", - "716.827", - "788.283", - "753.281", - "780.318", - "777.214", - "840.221", - "918.136", - "811.295", - "538.311", - "965.353", - "666.498", - "753.133", - "756.177", - "748.411", - "990.034", - "855.798", - "742.395", - "898.309", - "741.3", - "910.845", - "995.324", - "766.448", - "896.963", - "949.155", - "576.388", - "826.035", - "886.461", - "912.636", - "961.427", - "915.046", - "738.354", - "723.539", - "791.548", - "878.396", - "849.703", - "968.016", - "814.968", - "864.969", - "634.424", - "927.334", - "974.21", - "987.097", - "686.331", - "949.361", - "927.91", - "923.765", - "723.658", - "947.415", - "491.43", - "744.56", - "808.471", - "888.165", - "993.927", - "873.281", - "789.067", - "981.747", - "933.527", - "939.7", - "896.807", - "836.317", - "825.628", - "497.24", - "760.475", - "856.255", - "716.053", - "941.708", - "63.7843", - "878.576", - "850.722", - "940.023", - "877.588", - "979.965", - "988.456", - "884.106", - "753.33", - "883.279", - "942.08", - "817.512", - "725.079", - "713.705", - "908.741", - "798.26", - "960.882", - "881.755", - "648.261", - "954.115", - "948.895", - "722.052", - "763.723", - "996.693", - "994.857", - "651.371", - "802.877", - "765.256", - "756.793", - "840.904", - "871.024", - "831.207", - "738.368", - "739.911", - "818.912", - "870.873", - "927.517", - "940.797", - "946.786", - "984.773", - "981.539", - "916.449", - "823.963", - "882.675", - "809.381", - "811.324", - "938.273", - "841.21", - "354.799", - "737.169", - "994.704", - "965.537", - "970.563", - "966.584", - "986.425", - "975.154", - "893.496", - "859.377", - "989.712", - "886.043", - "866.418", - "879.127", - "660.945", - "811.309", - "709.816", - "745.851", - "955.707", - "706.902", - "875.68", - "700.414", - "751.251", - "849.705", - "947.52", - "717.591", - "877.859", - "809.145", - "730.897", - "738.022", - "742.116", - "757.545", - "714.11", - "314.698", - "967.025", - "922.51", - "908.091", - "972.741", - "977.759", - "816.991", - "919.241", - "870.988", - "727.065", - "765.729", - "906.019", - "916.609", - "995.47", - "991.676", - "748.744", - "829.395", - "865.275", - "854.162", - "756.029", - "740.436", - "799.257", - "588.161", - "228.18", - "873.758", - "815.442", - "647.834", - "979.198", - "227.507", - "819.995", - "901.118", - "839.916", - "815.862", - "915.056", - "832.274", - "728.682", - "799.295", - "972.411", - "331.958", - "854.304", - "711.487", - "774.608", - "789.207", - "894.414", - "868.981", - "857.055", - "782.164", - "741.904", - "372.275", - "724.513", - "881.636", - "876.185", - "998.197", - "915.168", - "820.576", - "851.74", - "835.43", - "940.24", - "731.666", - "721.983", - "895.4", - "726.159", - "969.285", - "830.082", - "991.77", - "943.771", - "829.02", - "876.932", - "989.316", - "788.925", - "808.926", - "713.917", - "824.49", - "965.979", - "763.127", - "952.999", - "797.494", - "506.798", - "991.653", - "764.701", - "551.156", - "944.503", - "819.161", - "784.625", - "733.37", - "919.249", - "953.218", - "762.942", - "832.467", - "732.561", - "786.695", - "938.009", - "937.989", - "943.599", - "888.679", - "587.845", - "922.781", - "844.759", - "769.691", - "980.422", - "822.213", - "823.554", - "848.229", - "904.985", - "734.271", - "889.961", - "709.486", - "810.316", - "982.785", - "866.061", - "781.645", - "784.714", - "923.483", - "862.357", - "740.892", - "724.386", - "981.746", - "794.351", - "730.647", - "865.305", - "895.015", - "710.628", - "663.979", - "859.269", - "764.598", - "819.688", - "821.902", - "904.153", - "892.132", - "992.168", - "942.613", - "747.341", - "793.391", - "736.503", - "525.84", - "749.802", - "997.124", - "664.172", - "949.592", - "926.228", - "968.044", - "844.531", - "706.153", - "810.114", - "988.593", - "753.758", - "826.386", - "860.629", - "992.538", - "927.8", - "717.637", - "632.726", - "758.32", - "734.227", - "730.989", - "870.082", - "816.894", - "922.409", - "938.313", - "733.687", - "903.767", - "836.277", - "702.216", - "798.474", - "782.394", - "946.59", - "663.811", - "958.343", - "741.536", - "851.619", - "942.499", - "895.832", - "820.372", - "669.052", - "879.337", - "886.859", - "718.586", - "963.536", - "953.745", - "957.253", - "820.309", - "728.665", - "980.405", - "764.191", - "957.463", - "845.284", - "951.844", - "989.309", - "851.199", - "920.542", - "916.936", - "998.513", - "827.458", - "862.024", - "804.743", - "944.196", - "947.958", - "674.233", - "890.605", - "750.57", - "830.852", - "840.115", - "882.543", - "649.087", - "817.629", - "718.131", - "800.524", - "814.158", - "917.423", - "729.567", - "582.406", - "976.39", - "589.865", - "593.808", - "894.059", - "934.689", - "807.411", - "996.31", - "777.333", - "915.197", - "727.027", - "760.138", - "784.318", - "925.487", - "686.275", - "925.957", - "834.153", - "790.419", - "757.793", - "731.627", - "775.42", - "937.937", - "800.205", - "759.488", - "664.381", - "903.252", - "792.654", - "935.851", - "688.154", - "927.612", - "880.618", - "814.123", - "481.687", - "930.799", - "931.05", - "791.063", - "764.209", - "815.738", - "731.319", - "964.991", - "908.755", - "901.563", - "754.644", - "658.286", - "928.14", - "861.944", - "803.536", - "912.068", - "763.911", - "818.493", - "838.131", - "965.348", - "951.095", - "837.464", - "940.455", - "977.96", - "772.246", - "827.528", - "793.716", - "825.29", - "833.289", - "960.834", - "598.23", - "728.846", - "866.486", - "824.321", - "881.152", - "808.013", - "898.039", - "940.167", - "863.636", - "676.671", - "843.309", - "805.001", - "828.524", - "788.52", - "363.598", - "927.887", - "787.041", - "896.168", - "897.496", - "805.846", - "686.965", - "870.362", - "990.4", - "629.212", - "949.198", - "766.371", - "791.073", - "861.045", - "790.85", - "868.392", - "841.799", - "753.126", - "786.571", - "758.779", - "925.427", - "621.324", - "583.629", - "801.337", - "688.687", - "721.148", - "950.326", - "642.056", - "616.931", - "929.704", - "742.436", - "755.167", - "778.557", - "973.308", - "984.055", - "920.04", - "712.487", - "794.197", - "819.519", - "859.761", - "866.104", - "868.601", - "940.971", - "893.23", - "761.683", - "736.096", - "809.435", - "860.048", - "953.951", - "709.794", - "681.58", - "775.219", - "877.032", - "931.491", - "769.897", - "744.742", - "863.511", - "863.886", - "825.419", - "761.066", - "955.137", - "957.684", - "999.164", - "894.98", - "909.968", - "909.282", - "945.136", - "813.1", - "844.827", - "808.291", - "851.115", - "935.279", - "795.811", - "864.593", - "804.124", - "964.512", - "763.973", - "767.88", - "907.801", - "752.594", - "773.606", - "804.079", - "728.744", - "875.597", - "781.793", - "781.481", - "936.925", - "721.937", - "474.83", - "945", - "570.879", - "716.813", - "491.411", - "600.508", - "850.956", - "902.997", - "877.205", - "705.208", - "730.632", - "971.299", - "716.627", - "700.908", - "926.583", - "917.963", - "940.171", - "789.65", - "785.036", - "896.734", - "776.049", - "986.316", - "997.47", - "962.656", - "804.645", - "869.173", - "982.392", - "827.28", - "867.427", - "872.282", - "989.98", - "924.844", - "885.961", - "644.138", - "894.963", - "765.143", - "868.804", - "821.188", - "666.887", - "784.039", - "863.478", - "862.567", - "805.402", - "905.264", - "758.623", - "601.371", - "877.891", - "999.855", - "814.431", - "955.173", - "703.095", - "879.553", - "791.601", - "927.995", - "934.621", - "925.502", - "732.826", - "855.348", - "942.622", - "831.656", - "497.838", - "988.763", - "839.275", - "276.617", - "840.792", - "848.923", - "872.183", - "809.725", - "797.372", - "808.1", - "712.871", - "754.605", - "955.71", - "764.166", - "737.43", - "773.711", - "758.384", - "881.619", - "666.485", - "843.472", - "950.522", - "715.422", - "996.898", - "873.311", - "872.917", - "941.685", - "986.307", - "881.864", - "805.219", - "946.664", - "903.499", - "894.96", - "810.747", - "847.982", - "906.502", - "958.862", - "965.773", - "640.283", - "852.296", - "739.206", - "710.349", - "816.246", - "834.092", - "793.283", - "906.343", - "795.19", - "714.332", - "917.851", - "958.605", - "879.064", - "749.26", - "803.993", - "776.298", - "964.177", - "912.411", - "783.339", - "750.417", - "919.227", - "931.404", - "571.148", - "655.648", - "776.116", - "940.787", - "958.007", - "817.273", - "814.937", - "843.589", - "957.686", - "832.822", - "865.73", - "642.926", - "642.442", - "966.23", - "805.378", - "916.539", - "812.618", - "747.631", - "726.986", - "707.713", - "833.682", - "787.666", - "988.951", - "853.946", - "936.428", - "763.867", - "983.459", - "959.222", - "861.436", - "863.133", - "767.826", - "974.957", - "948.801", - "613.815", - "962.779", - "787.578", - "900.189", - "941.755", - "871.084", - "826.124", - "957.871", - "910.542", - "871.712", - "911.837", - "942.428", - "782.193", - "914.975", - "839.319", - "992.996", - "809.391", - "852.181", - "715.292", - "838.002", - "901.482", - "609.647", - "922.116", - "846.149", - "886.178", - "930.479", - "745.447", - "836.787", - "733.64", - "968.889", - "892.295", - "845.172", - "986.727", - "764.675", - "888.494", - "992.091", - "768.928", - "694.665", - "899.483", - "802.686", - "764.757", - "688.957", - "991.477", - "922.432", - "939.606", - "798.317", - "867.474", - "851.946", - "937.628", - "769.719", - "447.72", - "928.895", - "723.002", - "944.73", - "925.769", - "827.479", - "804.548", - "944.995", - "646.89", - "791.93", - "755.372", - "950.627", - "801.186", - "590.343", - "950.233", - "994.677", - "971.965", - "935.639", - "787.997", - "903.721", - "778.659", - "788.601", - "882.592", - "739.367", - "956.312", - "728.894", - "669.832", - "737.791", - "783.404", - "779.904", - "982.844", - "715.074", - "861.7", - "711.268", - "835.054", - "679.87", - "735.305", - "951.498", - "962.624", - "794.737", - "822.059", - "863.018", - "990.581", - "855.751", - "982.042", - "796.057", - "754.474", - "916.408", - "778.714", - "900.7", - "800.552", - "761.163", - "889.903", - "757.661", - "988.35", - "761.784", - "913.514", - "805.299", - "998.521", - "806.272", - "829.154", - "939.747", - "942.513", - "774.491", - "799.856", - "920.668", - "968.113", - "669.016", - "784.608", - "788.889", - "789.267", - "495.482", - "659.745", - "934.43", - "995.293", - "805.297", - "864.738", - "808.252", - "708.548", - "652.831", - "917.606", - "883.049", - "985.137", - "972.096", - "698.178", - "879.981", - "815.256", - "721.682", - "838.799", - "968.634", - "768.901", - "843.159", - "913.038", - "866.261", - "989.192", - "901.949", - "938.407", - "994.438", - "904.428", - "928.45", - "730.861", - "767.219", - "912.962", - "920.061", - "702.966", - "896.685", - "749.62", - "766.714", - "836.919", - "736.517", - "910.427", - "830.289", - "731.179", - "941.176", - "981.264", - "842.725", - "883.818", - "937.619", - "965.856", - "801.883", - "834.272", - "823.234", - "950.417", - "904.076", - "681.106", - "977.335", - "971.552", - "876.031", - "787.126", - "892.376", - "956.195", - "675.546", - "730.689", - "943.954", - "887.892", - "740.524", - "769.145", - "720.941", - "849.468", - "825.921", - "776.514", - "805.472", - "721.607", - "910.454", - "500.342", - "970.173", - "770.41", - "858.922", - "766.741", - "726.797", - "815.529", - "735.238", - "880.381", - "977.411", - "725.284", - "825.383", - "825.651", - "940.486", - "738.058", - "962.552", - "926.025", - "808.862", - "995.582", - "927.801", - "730.965", - "905.873", - "804.239", - "844.97", - "909.526", - "921.92", - "805.136", - "904.147", - "943.977", - "836.818", - "843.36", - "814.27", - "743.699", - "984.689", - "957.257", - "896.225", - "933.472", - "993.055", - "936.834", - "655.509", - "931.761", - "902.749", - "844.544", - "744.412", - "662.648", - "791.033", - "642.723", - "651.208", - "934.819", - "747.299", - "702.973", - "770.687", - "935.311", - "949.31", - "834.217", - "880.713", - "978.432", - "993.217", - "988.028", - "881.456", - "977.694", - "937.109", - "831.474", - "892.402", - "858.121", - "882.861", - "947.011", - "799.527", - "878.081", - "804.767", - "853.3", - "811.557", - "854.373", - "791.9", - "978.953", - "906.296", - "814.124", - "926.494", - "743.341", - "800.78", - "763.32", - "894.248", - "852.19", - "919.405", - "830.5", - "868.632", - "892.083", - "824.928", - "880.902", - "920.804", - "513.631", - "827.651", - "882.37", - "704.731", - "746.878", - "966.043", - "828.889", - "727.958", - "775.975", - "832.735", - "965.288", - "830.896", - "856.822", - "955.35", - "709.584", - "929.803", - "834.909", - "948.458", - "828.463", - "675.85", - "759.081", - "699.369", - "806.483", - "811.038", - "856.705", - "894.011", - "930.22", - "724.758", - "770.254", - "925.686", - "955.939", - "761.965", - "861.366", - "589.022", - "947.222", - "792.519", - "793.716", - "741.393", - "874.116", - "918.171", - "828.457", - "940.618", - "813.535", - "917.247", - "683.473", - "809.881", - "871.972", - "530.175", - "728.421", - "996.276", - "787.535", - "761.155", - "909.422", - "857.316", - "942.183", - "646.03", - "758.464", - "912.701", - "924.241", - "954.659", - "803.864", - "740.126", - "865.117", - "824.46", - "789.741", - "803.269", - "552.053", - "740.25", - "932.938", - "647.335", - "894.445", - "746.326", - "952.106", - "760.739", - "854.102", - "923.972", - "753.874", - "982.452", - "779.527", - "747.269", - "733.646", - "979.955", - "687.668", - "828.937", - "973.732", - "990.377", - "907.863", - "996.707", - "768.643", - "725.217", - "994.224", - "734.828", - "786.683", - "900.321", - "898.47", - "938.778", - "774.865", - "745.59", - "580.068", - "944.712", - "860.85", - "963.326", - "769.941", - "995.325", - "841.119", - "750.876", - "816.811", - "805.024", - "869.481", - "563.193", - "850.394", - "832.648", - "912.278", - "881.513", - "806.813", - "725.155", - "705.5", - "732.584", - "907.682", - "854.678", - "973.448", - "759.576", - "729.405", - "943.751", - "855.821", - "622.332", - "813.222", - "917.839", - "860.04", - "777.702", - "644.924", - "954.266", - "491.726", - "402.993", - "869.053", - "836.931", - "862.896", - "811.626", - "867.489", - "909.677", - "861.094", - "713.66", - "724.942", - "902.528", - "807.722", - "879.961", - "831.494", - "897.738", - "893.581", - "883.701", - "969.024", - "901.185", - "953.596", - "934.207", - "744.175", - "893.474", - "737.979", - "971.124", - "982.159", - "990.039", - "863.871", - "924.857", - "715.281", - "986.964", - "988.832", - "987.015", - "833.612", - "746.13", - "912.772", - "870.798", - "710.23", - "730.258", - "934.994", - "910.321", - "722.267", - "883.439", - "749.471", - "840.514", - "988.461", - "926.59", - "745.03", - "874.723", - "822.233", - "757.357", - "832.104", - "847.527", - "794.374", - "932.644", - "956.798", - "847.251", - "951.411", - "876.825", - "759.683", - "735.204", - "917.317", - "945.735", - "862.416", - "711.856", - "538.75", - "901.75", - "977.405", - "873.599", - "790.651", - "615.951", - "784.208", - "716.003", - "799.082", - "995.289", - "840.486", - "876.231", - "982.371", - "750.616", - "916.553", - "869.759", - "835.3", - "927.876", - "724.328", - "726.396", - "855.044", - "878.064", - "653.204", - "719.29", - "975.501", - "649.163", - "791.617", - "762.078", - "871.268", - "735.816", - "718.431", - "944.757", - "720.116", - "991.114", - "720.959", - "838.759", - "874.021", - "722.23", - "129.186", - "978.743", - "901.339", - "852.185", - "847.935", - "771.032", - "980.502", - "698.135", - "730.363", - "902.699", - "828.71", - "995.097", - "891.536", - "786.961", - "942.913", - "875.887", - "765.05", - "945.066", - "755.443", - "895.829", - "710.573", - "973.096", - "558.103", - "713.589", - "928.421", - "996.637", - "740.671", - "846.219", - "848.577", - "852.383", - "896.802", - "355.867", - "779.125", - "897.442", - "796.737", - "823.813", - "961.257", - "973.639", - "821.694", - "764.455", - "680.755", - "736.355", - "817.525", - "749.109", - "882.479", - "894.725", - "985.822", - "886.368", - "867.715", - "811.071", - "906.572", - "945.675", - "728.934", - "916.164", - "750.189", - "888.813", - "923.794", - "917.511", - "964.766", - "897.287", - "784.559", - "941.215", - "931.299", - "754.189", - "659.486", - "858.828", - "941.926", - "871.349", - "858.983", - "779.535", - "760.776", - "740.116", - "766.684", - "825.502", - "631.812", - "971.512", - "875.617", - "854.624", - "912.175", - "930.273", - "546.752", - "850.527", - "980.332", - "890.237", - "770.112", - "908.127", - "928.161", - "785.796", - "741.256", - "746.206", - "976.267", - "754.441", - "940.523", - "810.029", - "739.662", - "811.696", - "821.742", - "829.729", - "749.599", - "835.577", - "570.471", - "916.586", - "794.245", - "767.974", - "853.201", - "995.594", - "922.383", - "899.493", - "818.835", - "827.048", - "877.578", - "847.805", - "967.718", - "794.597", - "960.311", - "931.078", - "988.184", - "797.03", - "955.66", - "983.607", - "990.95", - "829.245", - "819.184", - "813.682", - "656.002", - "839.27", - "905.288", - "925.073", - "755.736", - "764.241", - "975.204", - "918.426", - "810.696", - "846.37", - "880.632", - "720.797", - "925.219", - "865.257", - "785.534", - "886.35", - "986.317", - "802.248", - "976.267", - "747.511", - "771.449", - "893.303", - "920.913", - "826.923", - "847.429", - "893.473", - "841.266", - "953.822", - "869.748", - "776.505", - "995.415", - "942.443", - "958.221", - "728.423", - "841.898", - "920.914", - "860.961", - "864.759", - "997.255", - "764.7", - "823.293", - "794.822", - "828.237", - "778.849", - "831.018", - "671.074", - "664.575", - "808.079", - "780.135", - "972.443", - "633.389", - "900.074", - "733.367", - "821.095", - "935.999", - "807.956", - "822.455", - "975.431", - "924.975", - "630.224", - "762.283", - "838.273", - "731.336", - "778.075", - "997.318", - "953.941", - "973.058" - ], - "marker": { - "size": 2, - "color": "rgb(233, 250, 99)" - } - }, - { - "mode": "markers", - "name": "128-256", - "type": "scatter3d", - "xsrc": "JohnMaddock:15:cca0fc", - "x": [ - "80.2657", - "6.32795", - "409.886", - "190.624", - "11.5296", - "525.841", - "66.422", - "707.636", - "32.8829", - "495.506", - "103.126", - "292.313", - "85.583", - "26.6354", - "697.343", - "5.78697", - "240.219", - "16.0987", - "194.019", - "727.706", - "251.659", - "284.093", - "191.52", - "157.155", - "467.264", - "87.3656", - "208.552", - "311.491", - "229.749", - "101.459", - "129.589", - "96.235", - "2.4488", - "123.17", - "126.384", - "224.155", - "253.765", - "269.318", - "34.6188", - "93.7976", - "313.331", - "266.53", - "514.401", - "8.85737", - "411.489", - "550.114", - "584.689", - "27.427", - "559.485", - "101.827", - "129.014", - "132.781", - "209.688", - "839.505", - "393.733", - "488.584", - "341.372", - "521.136", - "552.291", - "70.1888", - "69.6066", - "211.227", - "17.1069", - "109.049", - "260.665", - "528.63", - "154.799", - "28.9812", - "238.399", - "171.178", - "680.325", - "11.6303", - "299.352", - "454.514", - "135.669", - "460.103", - "130.179", - "9.10317", - "107.896", - "789.671", - "722.234", - "690.868", - "89.7252", - "226.937", - "460.185", - "355.647", - "193.295", - "519.933", - "73.5923", - "621.423", - "389.279", - "56.6038", - "474.284", - "304.944", - "701.117", - "117.996", - "58.0147", - "878.131", - "61.2183", - "633.304", - "167.563", - "586.485", - "284.086", - "44.4645", - "600.701", - "200.84", - "132.646", - "144.398", - "215.621", - "688.907", - "445.228", - "47.5513", - "398.65", - "337.533", - "638.505", - "139.536", - "531.418", - "312.79", - "374.697", - "43.9015", - "113.382", - "39.4868", - "428.269", - "472.221", - "72.9034", - "685.713", - "214.494", - "507.633", - "176.848", - "120.833", - "2.81917", - "737.125", - "56.0804", - "445.086", - "74.998", - "544.843", - "24.156", - "183.397", - "233.873", - "35.5198", - "186.477", - "397.61", - "54.5735", - "190.299", - "264.92", - "722.193", - "2.0218", - "163.722", - "34.1586", - "174.049", - "322.182", - "89.4737", - "232.344", - "94.1165", - "453.651", - "264.347", - "413.008", - "13.9477", - "4.89244", - "666.82", - "18.7677", - "237.752", - "7.96005", - "78.2798", - "49.2129", - "46.9095", - "120.716", - "264.716", - "28.5569", - "387.313", - "28.0286", - "57.7354", - "119.345", - "239.603", - "523.536", - "385.681", - "208.784", - "21.3421", - "146.605", - "129.688", - "27.1981", - "378.545", - "6.2719", - "881.391", - "44.1341", - "179.397", - "451.834", - "103.003", - "115.571", - "231.651", - "470.22", - "361.601", - "434.181", - "156.555", - "50.2192", - "397.625", - "29.8683", - "34.2472", - "16.4755", - "45.9245", - "198.69", - "5.62087", - "10.0503", - "22.051", - "224.504", - "103.664", - "279.123", - "84.8252", - "153.924", - "520.514", - "86.2896", - "37.8536", - "18.7337", - "304.406", - "671.771", - "43.5828", - "599.654", - "90.8277", - "393.472", - "460.189", - "165.704", - "200.476", - "522.627", - "8.33022", - "453.435", - "551.85", - "118.244", - "480.126", - "515.558", - "448.707", - "556.893", - "139.234", - "179.395", - "84.1898", - "368.937", - "508.267", - "101.719", - "140.514", - "443", - "459.679", - "109.563", - "33.192", - "157.853", - "400.531", - "19.7705", - "155.049", - "6.70999", - "123.158", - "80.421", - "57.3073", - "135.31", - "393.459", - "43.4243", - "106.346", - "38.5082", - "107.605", - "660.397", - "294.455", - "6.38406", - "20.3264", - "551.345", - "615.329", - "498.515", - "390.268", - "394", - "73.1675", - "260.665", - "553.424", - "49.1939", - "602.417", - "294.112", - "403.003", - "429.312", - "5.53472", - "445.857", - "464.32", - "226.526", - "42.5128", - "465.037", - "33.1061", - "236.219", - "658.487", - "627.583", - "137.713", - "34.4872", - "134.853", - "10.9442", - "34.8392", - "442.384", - "10.7351", - "252.765", - "262.545", - "602.219", - "734.921", - "100.07", - "348.763", - "37.0958", - "499.942", - "366.029", - "67.8784", - "342.645", - "333.564", - "322.658", - "613.183", - "205.093", - "563.414", - "646.531", - "12.3834", - "177.122", - "362.531", - "465.471", - "59.6134", - "152.551", - "80.2772", - "467.203", - "253.468", - "35.5395", - "148.879", - "121.873", - "545.302", - "549.681", - "116.601", - "22.5939", - "27.1371", - "267.815", - "240.352", - "384.865", - "344.665", - "70.9278", - "307.569", - "420.528", - "456.848", - "40.2547", - "25.3355", - "137.392", - "943.934", - "320.875", - "274.529", - "145.723", - "521.517", - "143.453", - "263.435", - "520", - "88.2913", - "353.24", - "251.654", - "124.781", - "424.049", - "297.938", - "605.535", - "86.0407", - "147.903", - "445.08", - "122.205", - "77.9775", - "694.864", - "124.686", - "43.0546", - "25.5959", - "271.323", - "47.9164", - "59.5444", - "494.814", - "51.017", - "24.9234", - "13.6859", - "445.572", - "101.541", - "840.715", - "163.17", - "515.043", - "21.4516", - "159.768", - "908.609", - "133.501", - "529.764", - "14.105", - "294.356", - "8.22075", - "88.764", - "500.01", - "355.363", - "109.666", - "71.1978", - "344.401", - "549.767", - "8.89133", - "142.072", - "119.32", - "212.652", - "39.4259", - "114.458", - "22.5266", - "274.506", - "28.072", - "691.947", - "161.861", - "502.376", - "120.505", - "270.871", - "69.3718", - "44.8101", - "74.8108", - "244.584", - "89.4555", - "403.669", - "216.973", - "255.313", - "508.503", - "783.186", - "63.7921", - "30.2619", - "527.897", - "473.72", - "11.0942", - "220.228", - "505.285", - "522.103", - "129.194", - "572.991", - "369.861", - "599.39", - "8.79248", - "152.442", - "328.719", - "81.4571", - "436.422", - "476.768", - "128.557", - "251.782", - "3.22375", - "394.483", - "535.918", - "223.208", - "24.799", - "16.5724", - "355.021", - "141.304", - "436.469", - "36.62", - "65.2991", - "678.583", - "12.7228", - "147.817", - "275.762", - "405.097", - "661.214", - "68.3102", - "606.577", - "425.953", - "384.616", - "68.4776", - "294.311", - "529.289", - "222.881", - "41.3852", - "304.72", - "408.825", - "179.37", - "56.3827", - "110.069", - "29.8086", - "685.05", - "49.7562", - "484.69", - "346.038", - "392.235", - "355.291", - "442.328", - "16.8847", - "82.0428", - "516.081", - "208.846", - "555.387", - "37.9658", - "684.494", - "73.4859", - "38.403", - "233.174", - "206.955", - "162.167", - "379.876", - "122.289", - "31.1902", - "73.3523", - "407.207", - "139.321", - "55.8219", - "199.152", - "445.866", - "96.7551", - "580.067", - "316.179", - "369.108", - "51.4878", - "496.187", - "5.43668", - "64.6467", - "55.6118", - "331.501", - "11.7618", - "138.093", - "724.827", - "189.209", - "421.505", - "96.3318", - "387.435", - "29.1019", - "616.422", - "165.882", - "163.268", - "533.463", - "88.5615", - "87.5029", - "542.275", - "459.622", - "484.437", - "110.68", - "126.471", - "168.026", - "205.561", - "551.447", - "338.804", - "76.9912", - "481.294", - "13.4833", - "529.236", - "358.84", - "31.3959", - "138.586", - "464.169", - "477.663", - "63.9766", - "59.2921", - "200.802", - "233.42", - "221.829", - "425.303", - "128.266", - "146.448", - "438.216", - "342.997", - "93.1393", - "24.7068", - "212.577", - "167.33", - "403.977", - "763.961", - "119.142", - "212.199", - "565.483", - "114.128", - "57.7391", - "11.8547", - "53.9703", - "102.211", - "95.438", - "57.4787", - "491.322", - "61.6908", - "38.5725", - "4.35313", - "14.3788", - "27.3573", - "555.419", - "218.589", - "260.108", - "84.8898", - "198.962", - "107.646", - "77.1071", - "119.325", - "145.026", - "529.585", - "60.5791", - "13.9021", - "23.1258", - "61.7881", - "454.247", - "630.861", - "69.5052", - "198.354", - "456.133", - "46.7104", - "108.363", - "365.811", - "120.946", - "100.005", - "39.7832", - "51.4514", - "184.566", - "38.5341", - "547.335", - "66.5912", - "50.4908", - "28.7471", - "547.632", - "100.979", - "223.59", - "107.169", - "503.786", - "161.377", - "93.6736", - "504.254", - "117.975", - "67.9019", - "84.5027", - "205.85", - "93.4614", - "189.822", - "67.0332", - "121.964", - "321.635", - "167.652", - "421.353", - "119.107", - "218.096", - "135.202", - "44.8026", - "533.663", - "486.407", - "84.589", - "80.5853", - "238.924", - "126.514", - "148.476", - "376.678", - "307.147", - "53.7749", - "58.4561", - "432.267", - "113.568", - "91.7502", - "270.058", - "30.0434", - "222.22", - "69.8164", - "311.978", - "173.687", - "244.164", - "478.804", - "101.187", - "220.294", - "435.718", - "480.352", - "637.065", - "56.4984", - "50.863", - "369.47", - "230.36", - "2.48357", - "58.2541", - "163.221", - "24.4222", - "427.149", - "67.7242", - "131.764", - "470.481", - "263.531", - "34.4824", - "102.419", - "236.988", - "207.911", - "151.447", - "64.3761", - "359.92", - "145.785", - "136.037", - "188.644", - "405.142", - "186.93", - "494.156", - "146.692", - "95.326", - "412.244", - "107.838", - "208.915", - "152.869", - "41.4985", - "293.318", - "40.7077", - "450.274", - "78.1591", - "257.4", - "930.716", - "184.91", - "309.808", - "232.353", - "622.047", - "642.024", - "70.5727", - "153.74", - "85.6594", - "651.148", - "34.2193", - "361.425", - "71.3118", - "191.773", - "244.326", - "40.8274", - "296.784", - "190.27", - "551.537", - "72.7545", - "477.233", - "479.274", - "668.582", - "255.289", - "549.621", - "112.766", - "145.703", - "31.5181", - "11.1418", - "149.819", - "458.213", - "157.551", - "269.598", - "112.444", - "502.738", - "60.7342", - "439.831", - "28.303", - "102.593", - "269.447", - "173.453", - "138.778", - "374.888", - "62.5553", - "195.414", - "474.932", - "11.5598", - "436.975", - "313.045", - "105.726", - "88.7517", - "127.18", - "71.6023", - "348.939", - "705.65", - "108.885", - "231.794", - "548.002", - "70.9972", - "389.348", - "262.278", - "65.1509", - "247.834", - "335.564", - "543.796", - "236.192", - "310.215", - "50.8687", - "148.771", - "132.377", - "692.6", - "90.115", - "496.03", - "62.4545", - "541.298", - "264.951", - "120.43", - "53.2554", - "207.5", - "133.966", - "35.437", - "668.888", - "5.34456", - "489.017", - "208.087", - "8.29651", - "973.92", - "409.003", - "21.3445", - "15.9528", - "357.825", - "49.1231", - "442.509", - "397.912", - "122.459", - "362.718", - "460.958", - "87.9644", - "96.1901", - "81.504", - "192.137", - "520.077", - "69.7982", - "6.23848", - "45.9932", - "101.215", - "298.934", - "555.574", - "673.992", - "241.42", - "5.55299", - "390.821", - "41.3201", - "10.969", - "259.328", - "430.872", - "318.247", - "237.503", - "89.2163", - "108.602", - "45.6487", - "235.03", - "119.599", - "174.798", - "13.5047", - "147.897", - "102.019", - "162.393", - "2.16282", - "209.599", - "123.04", - "194.686", - "411.814", - "309.893", - "77.369", - "425.883", - "45.6484", - "569.28", - "225.909", - "553.442", - "129.392", - "155.517", - "551.279", - "372.868", - "582.114", - "97.4784", - "74.6627", - "57.3256", - "155.085", - "121.668", - "496.687", - "118.25", - "112.265", - "68.4794", - "296.775", - "3.49603", - "222.851", - "500.408", - "7.64795", - "268.842", - "315.195", - "374.983", - "56.478", - "24.6914", - "119.448", - "29.0182", - "31.2213", - "310.656", - "281.323", - "43.4781", - "344.822", - "267.221", - "147.791", - "342.854", - "158.577", - "15.6385", - "104.683", - "653.7", - "43.3755", - "194.054", - "161.079", - "5.61728", - "48.7771", - "432.957", - "337.661", - "43.503", - "15.6099", - "15.6045", - "384.818", - "267.902", - "147.319", - "116.438", - "167.876", - "375.894", - "66.6544", - "225.841", - "157.586", - "368.066", - "143.205", - "136.524", - "195.034", - "171.128", - "393.91", - "100.294", - "488.416", - "72.0228", - "50.5345", - "111.989", - "253.443", - "131.493", - "226.06", - "75.4982", - "154.563", - "362.47", - "22.9967", - "108.731", - "11.3025", - "194.154", - "51.9589", - "35.6414", - "21.339", - "123.615", - "95.532", - "126.261", - "230.362", - "39.645", - "4.08635", - "595.613", - "517.5", - "199.877", - "568.332", - "918.197", - "166.88", - "140.068", - "139.385", - "52.8357", - "558.138", - "154.325", - "333.796", - "650.906", - "203.762", - "112.468", - "333.898", - "13.0003", - "211.377", - "240.734", - "270.04", - "34.9411", - "334.07", - "70.5978", - "127.327", - "379.82", - "113.476", - "217.851", - "65.4628", - "270.686", - "119.318", - "255.992", - "508.291", - "442.153", - "290.982", - "137.713", - "93.4028", - "663.912", - "479.246", - "55.2499", - "138.393", - "80.3031", - "155.866", - "274.617", - "120.058", - "78.173", - "207.287", - "141.525", - "427.364", - "297.353", - "51.4418", - "301.749", - "11.0582", - "227.487", - "410.769", - "68.2189", - "72.3437", - "7.31178", - "390.306", - "489.892", - "29.2614", - "31.9491", - "40.1657", - "61.7543", - "123.512", - "1.666", - "62.6774", - "23.3513", - "43.806", - "452.922", - "118.464", - "360.21", - "315.758", - "274.249", - "630.183", - "20.7705", - "439.761", - "193.267", - "117.833", - "191.969", - "132.089", - "282.207", - "70.2193", - "217.567", - "212.45", - "53.693", - "70.2765", - "61.184", - "1.35436", - "1.03914", - "37.3965", - "231.765", - "341.548", - "427.801", - "94.3965", - "36.7887", - "5.49554", - "127.43", - "386.674", - "80.7384", - "145.679", - "169.675", - "97.6607", - "121.183", - "328.301", - "3.89489", - "105.588", - "62.8809", - "41.0827", - "257.051", - "88.4229", - "215.197", - "60.2981", - "102.971", - "361.301", - "45.1507", - "11.4366", - "174.74", - "55.3328", - "3.21141", - "509.192", - "43.6682", - "134.659", - "355.014", - "3.79793", - "352.938", - "55.0662", - "432.57", - "82.281", - "605.861", - "83.2198", - "126.332", - "799.263", - "442.836", - "25.9764", - "109.008", - "226.579", - "469.245", - "154.827", - "139.195", - "10.4451", - "192.593", - "29.3833", - "269.581", - "520.75", - "336.763", - "232.482", - "149.287", - "448.237", - "170.415", - "98.1705", - "51.8693", - "457.586", - "188.944", - "1.61908", - "43.8947", - "386.712", - "14.4392", - "53.5048", - "104.72", - "576.186", - "62.3439", - "33.7618", - "123.992", - "154.469", - "20.9928", - "9.64087", - "17.268", - "626.385", - "220.344", - "103.14", - "106.716", - "555.712", - "528.747", - "200.954", - "77.1502", - "127.246", - "464.385", - "234.801", - "611.97", - "105.417", - "269.785", - "161.751", - "15.4699", - "419.697", - "426.215", - "215.851", - "259.76", - "68.6818", - "216.052", - "424.942", - "107.569", - "563.162", - "270.754", - "38.1045", - "223.874", - "132.336", - "149.952", - "86.253", - "660.246", - "285.7", - "72.3584", - "80.4886", - "68.9697", - "51.394", - "916.838", - "191.002", - "93.9375", - "24.8979", - "20.2485", - "0.272414", - "421.862", - "22.7021", - "207.229", - "39.5245", - "123.371", - "134.233", - "478.687", - "431.787", - "67.8896", - "123.33", - "554.148", - "8.97188", - "451.976", - "544.544", - "252.954", - "56.844", - "66.852", - "144.581", - "73.254", - "137.097", - "384.735", - "404.739", - "186.425", - "85.0053", - "93.9049", - "21.7633", - "330.1", - "178.028", - "111.406", - "34.455", - "283.234", - "163.997", - "217.133", - "335.835", - "266.836", - "4.79581", - "125.595", - "78.8074", - "224.436", - "202.988", - "280.289", - "130.316", - "155.489", - "335.341", - "201.958", - "69.3054", - "8.30087", - "1.90219", - "73.5513", - "250.655", - "250.387", - "134.85", - "21.4379", - "189.528", - "236.249", - "77.801", - "199.725", - "20.267", - "571.57", - "296.137", - "22.2461", - "122.795", - "517.798", - "86.0664", - "38.7213", - "91.0416", - "164.04", - "269.019", - "37.1584", - "516.209", - "132.584", - "328.02", - "14.4685", - "200.489", - "33.7612", - "92.9755", - "153.362", - "56.7254", - "91.7381", - "263.063", - "31.8298", - "25.2701", - "418.283", - "88.3038", - "553.74", - "180.509", - "107.992", - "9.07383", - "44.9791", - "302.555", - "125.181", - "109.099", - "90.7601", - "10.765", - "198.776", - "201.799", - "228.227", - "45.1179", - "47.5268", - "98.0338", - "288.246", - "214.258", - "47.4205", - "54.9929", - "53.1691", - "34.3194", - "277.147", - "60.1211", - "223.307", - "536.059", - "22.2436", - "153.569", - "85.6135", - "6.43959", - "253.625", - "91.1553", - "126.521", - "283.488", - "106.758", - "71.0706", - "100.764", - "160.68", - "47.8562", - "88.6402", - "531.587", - "17.1715", - "81.3687", - "63.2788", - "48.9127", - "327.601", - "69.9903", - "339.787", - "50.4501", - "135.856", - "87.9926", - "296.065", - "28.3088", - "256.637", - "625.814", - "39.8756", - "164.733", - "105.433", - "460.087", - "11.4688", - "39.8593", - "46.0133", - "87.669", - "26.7238", - "8.71652", - "89.1413", - "43.1141", - "41.2589", - "37.2518", - "381.031", - "100.104", - "174.528", - "24.9827", - "568.018", - "461.971", - "481.809", - "82.7648", - "330.692", - "153.992", - "4.59618", - "105.943", - "133.245", - "71.5877", - "137.132", - "26.1805", - "165.616", - "85.1476", - "86.7829", - "158.812", - "173.251", - "39.6534", - "277.415", - "23.1122", - "34.185", - "22.8724", - "201.574", - "91.9926", - "57.5615", - "88.1954", - "75.8321", - "98.7698", - "573.275", - "168.099", - "398.927", - "39.7004", - "111.319", - "143.731", - "176.85", - "48.2125", - "512.426", - "142.1", - "129.737", - "0.551539", - "71.5594", - "1.88601", - "584.117", - "299.37", - "67.9698", - "354.562", - "58.9302", - "296.542", - "490.407", - "283.043", - "196.569", - "392.222", - "21.4414", - "303.922", - "208.479", - "6.43736", - "154.131", - "220.228", - "48.4462", - "28.6985", - "422.197", - "354.06", - "87.4318", - "413.74", - "25.3606", - "291.734", - "72.9196", - "193.903", - "491.822", - "49.9753", - "262.517", - "80.658", - "83.0754", - "85.3557", - "214.584", - "804.669", - "187.09", - "265.539", - "187.482", - "146.248", - "34.9205", - "105.774", - "0.55788", - "465.348", - "535.807", - "49.8574", - "217.165", - "74.9812", - "238.977", - "117.369", - "25.4791", - "165.436", - "90.8025", - "74.9345", - "102.121", - "185.081", - "39.3056", - "149.349", - "61.5054", - "598.61", - "164.243", - "371.908", - "33.9631", - "276.581", - "460.888", - "52.4788", - "145.489", - "57.5812", - "161.336", - "4.06111", - "36.3905", - "20.9923", - "46.0543", - "38.3032", - "149.182", - "177.921", - "249.24", - "356.099", - "335.13", - "312.248", - "324.481", - "373.199", - "238.652", - "255.009", - "19.3337", - "546.388", - "135.227", - "43.9257", - "179.698", - "410.831", - "185.163", - "210.07", - "45.2973", - "179.142", - "85.3317", - "90.4855", - "121.716", - "593.164", - "212.071", - "22.9059", - "253.074", - "303.051", - "203.973", - "175.476", - "124.489", - "69.7593", - "228.205", - "189.11", - "137.383", - "166.558", - "40.4974", - "147.887", - "59.5325", - "420.809", - "10.5813", - "274.192", - "152.448", - "55.1744", - "135.994", - "51.9451", - "43.3861", - "129.525", - "29.4739", - "26.6479", - "79.9762", - "19.3992", - "164.471", - "38.401", - "252.323", - "53.1359", - "23.9062", - "141.261", - "57.2955", - "123.736", - "207.414", - "20.5007", - "399.906", - "34.4925", - "273.929", - "106.209", - "228.992", - "175.011", - "161.664", - "52.1943", - "74.0447", - "84.2449", - "11.7717", - "22.8215", - "169.264", - "331.679", - "199.181", - "132.858", - "180.111", - "130.441", - "45.4754", - "5.18533", - "392.783", - "72.4706", - "26.4259", - "41.3712", - "405.24", - "271.614", - "142.853", - "167.166", - "663.682", - "200.381", - "322.289", - "584.634", - "30.4311", - "226.51", - "42.1038", - "367.798", - "130.292", - "276.939", - "365.447", - "218.893", - "144.996", - "202.239", - "35.2527", - "149.292", - "55.0305", - "5.56449", - "103.207", - "101.789", - "190.317", - "192.189", - "139.75", - "150.485", - "69.4136", - "370.764", - "8.41052", - "28.2638", - "6.8855", - "41.4154", - "601.49", - "103.636", - "189.251", - "112.039", - "189.248", - "100.654", - "39.7901", - "26.1034", - "49.6535", - "154.689", - "200.729", - "275.811", - "226.433", - "157.758", - "991.553", - "23.3928", - "99.898", - "79.8272", - "30.2512", - "56.2705", - "122.056", - "35.4168", - "141.416", - "20.1677", - "239.88", - "54.0773", - "244.716", - "254.612", - "94.003", - "45.9593", - "639.583", - "20.1548", - "60.1985", - "154.32", - "87.756", - "281.028", - "51.254", - "179.126", - "130.125", - "195.441", - "277.149", - "210.411", - "47.3235", - "468.746", - "64.3736", - "140.333", - "38.004", - "63.1222", - "0.58941", - "152.63", - "109.969", - "59.6431", - "13.4477", - "167.4", - "429.665", - "22.2904", - "6.14398", - "109.987", - "67.1876", - "33.5691", - "34.9324", - "410.931", - "7.69004", - "43.9358", - "32.8072", - "99.0622", - "45.0561", - "224.91", - "4.71267", - "117.818", - "106.602", - "108.356", - "83.8868", - "58.2539", - "492.382", - "208.517", - "106.705", - "24.2047", - "54.0502", - "648.647", - "50.0481", - "285.461", - "11.9819", - "44.8257", - "301.898", - "71.8828", - "81.1159", - "17.7932", - "131.445", - "68.6927", - "353.79", - "458.905", - "27.7514", - "88.1882", - "104.172", - "104.879", - "2.97029", - "219.189", - "278.6", - "73.7998", - "6.84714", - "299.63", - "12.454", - "196.381", - "16.8649", - "38.7043", - "181.088", - "221.947", - "181.315", - "390.274", - "206.207", - "518.297", - "221.418", - "284.564", - "369.885", - "53.6942", - "12.5687", - "46.7321", - "65.0626", - "198.684", - "131.167", - "282.52", - "121.991", - "171.577", - "77.0684", - "312.539", - "23.7338", - "294.019", - "131.837", - "205.751", - "94.0132", - "32.8442", - "282.667", - "210.476", - "66.8366", - "46.7576", - "388.437", - "147.108", - "78.5443", - "71.9174", - "13.9311", - "274.337", - "174.883", - "366.222", - "104.927", - "115.71", - "156.61", - "77.801", - "67.6814", - "39.043", - "389.129", - "152.36", - "18.8832", - "271.825", - "107.242", - "74.3402", - "218.68", - "56.9962", - "41.5959", - "211.882", - "490.584", - "289.085", - "118.847", - "3.74096", - "127.363", - "186.67", - "129.594", - "6.80689", - "23.2259", - "50.7048", - "100.62", - "283.377", - "339.895", - "114.246", - "62.7746", - "325.73", - "245.434", - "231.195", - "240.264", - "80.6721", - "99.595", - "29.2503", - "29.696", - "59.8177", - "138.014", - "4.23663", - "523.336", - "314.807", - "19.6168", - "250.457", - "85.0489", - "228.882", - "335.854", - "341.438", - "132.186", - "140.09", - "81.5106", - "44.5666", - "140.09", - "203.634", - "518.1", - "257.694", - "219.871", - "39.1787", - "134.221", - "25.2463", - "16.0487", - "14.9889", - "505.477", - "56.0827", - "482.272", - "147.406", - "315.559", - "75.3767", - "11.8203", - "75.6638", - "318.106", - "211.252", - "56.809", - "292.163", - "245.194", - "157.003", - "232.73", - "18.6419", - "207.496", - "44.2057", - "105.924", - "243.568", - "200.534", - "15.2719", - "358.251", - "44.0144", - "12.0365", - "95.9623", - "233.123", - "151.453", - "213.403", - "341.328", - "71.0469", - "73.2491", - "134.866", - "121.528", - "148.448", - "17.7106", - "223.506", - "128.044", - "293.388", - "22.236", - "234.24", - "132.655", - "95.2202", - "75.7028", - "37.659", - "12.9604", - "597.488", - "361.987", - "80.585", - "176.337", - "4.90436", - "96.3821", - "151.219", - "281.968", - "25.3337", - "118.977", - "167.552", - "288.379", - "15.8204", - "120.661", - "47.2271", - "432.183", - "182.764", - "35.9586", - "935.153", - "26.5087", - "138.537", - "402.324", - "44.7759", - "252.957", - "150.54", - "1.69225", - "251.319", - "67.1312", - "140.499", - "33.831", - "66.3749", - "164.249", - "70.5216", - "40.5152", - "155.559", - "72.1438", - "113.892", - "54.5172", - "10.8073", - "56.8443", - "298.821", - "111.394", - "21.8234", - "209.534", - "214.606", - "20.5968", - "12.6235", - "90.6953", - "53.9097", - "13.1132", - "231.132", - "162.822", - "430.96", - "121.926", - "169.205", - "208.848", - "248.385", - "236.937", - "626.158", - "659.871", - "272.34", - "125.87", - "35.3132", - "237.73", - "82.8674", - "59.7009", - "31.1142", - "530.232", - "189.689", - "54.8924", - "231.405", - "292.929", - "207.384", - "57.3326", - "11.4205", - "171.602", - "38.8626", - "267.03", - "114.726", - "273.871", - "59.8519", - "34.623", - "156.542", - "231.17", - "316.044", - "37.3696", - "87.0081", - "117.718", - "19.498", - "165.679", - "466.399", - "35.4429", - "133.606", - "35.9762", - "173.956", - "46.6102", - "457.188", - "399.503", - "199.946", - "107.417", - "220.725", - "197.314", - "202.05", - "48.0278", - "210.143", - "77.0516", - "275.643", - "260.019", - "3.05392", - "180.006", - "35.8331", - "482.099", - "132.999", - "164.752", - "532.459", - "271.516", - "313.954", - "64.2143", - "28.0725", - "205.2", - "96.5109", - "187.42", - "5.00053", - "134.209", - "209.626", - "305.818", - "169.376", - "228.472", - "141.699", - "194.064", - "57.986", - "40.1449", - "26.6179", - "104.145", - "141.338", - "41.3798", - "44.3431", - "151.276", - "150.715", - "115.304", - "50.9041", - "407.467", - "97.5192", - "67.245", - "67.2496", - "300.077", - "89.3544", - "550.224", - "40.1305", - "109.207", - "131.08", - "292.843", - "335.85", - "23.9546", - "71.4947", - "101.689", - "57.5416", - "186.38", - "94.7779", - "93.9112", - "336.968", - "26.1219", - "55.2785", - "88.4147", - "225.071", - "26.4933", - "94.8606", - "98.9572", - "139.218", - "396.899", - "196.523", - "86.8489", - "622.33", - "14.5707", - "344.002", - "150.179", - "86.8555", - "708.374", - "82.0748", - "27.2278", - "85.7051", - "57.8163", - "429.717", - "187.038", - "67.7556", - "154.325", - "320.243", - "250.328", - "248.4", - "115.318", - "370.597", - "80.0889", - "16.1181", - "19.1924", - "53.9091", - "55.1222", - "169.491", - "176.972", - "213.737", - "98.6808", - "138.804", - "304.044", - "186.559", - "62.2355", - "288.256", - "64.7499", - "141.895", - "49.5039", - "51.4293", - "2.19826", - "524.338", - "219.131", - "199.368", - "263.375", - "220.262", - "202.657", - "96.933", - "63.1088", - "60.1064", - "45.5553", - "392.523", - "25.9124", - "203.166", - "162.283", - "15.5434", - "79.1171", - "46.2961", - "240.855", - "149.048", - "336.997", - "162.949", - "193.072", - "103.162", - "227.682", - "20.5169", - "20.0047", - "267.862", - "293.842", - "379.917", - "197.736", - "18.6568", - "493.329", - "200.105", - "6.23953", - "28.7066", - "10.7262", - "182.144", - "135.678", - "127.244", - "43.3847", - "19.8667", - "159.255", - "61.3977", - "127.595", - "75.845", - "63.1838", - "166.092", - "129.553", - "190.545", - "84.6051", - "494.129", - "165.534", - "144.597", - "42.0991", - "53.6243", - "222.775", - "14.0681", - "55.578", - "112.958", - "285.218", - "212.532", - "66.0626", - "449.389", - "396.949", - "94.1448", - "445.296", - "6.70756", - "168.698", - "328.159", - "46.1025", - "440.27", - "119.368", - "208.19", - "78.4083", - "58.9434", - "106.137", - "197.249", - "77.2379", - "77.0721", - "18.506", - "6.75993", - "212.673", - "106.744", - "76.6159", - "474.162", - "79.5945", - "424.815", - "83.3224", - "28.1223", - "313.997", - "114.473", - "118.464", - "95.8905", - "67.236", - "46.2853", - "76.151", - "29.6982", - "139.727", - "297.326", - "81.9788", - "372.568", - "100.532", - "166.209", - "46.8872", - "192.255", - "15.704", - "206.673", - "44.572", - "239.927", - "18.348", - "59.5452", - "136.447", - "124.92", - "8.91205", - "76.5997", - "9.34457", - "256.594", - "499.641", - "10.9433", - "54.7785", - "12.4143", - "82.3777", - "74.2354", - "277.787", - "70.0175", - "359.878", - "86.8242", - "7.53873", - "235.793", - "46.2427", - "285.79", - "132.43", - "26.6875", - "70.2369", - "157.091", - "123.707", - "63.295", - "55.8141", - "202.937", - "54.3486", - "392.78", - "17.9253", - "151.012", - "54.5212", - "91.5667", - "99.3657", - "243.045", - "11.0654", - "211.497", - "204.659", - "359.266", - "418.895", - "66.2314", - "96.4376", - "194.932", - "229.516", - "66.8667", - "310.1", - "152.85", - "102.372", - "2.26349", - "102.472", - "629.446", - "96.7002", - "409.603", - "28.7115", - "2.40514", - "182.738", - "132.828", - "12.6106", - "141.248", - "8.48645", - "226.135", - "15.4896", - "202.253", - "48.0064", - "342.704", - "417.687", - "66.591", - "253.933", - "96.9997", - "580.9", - "223.564", - "162.848", - "130.266", - "484.299", - "128.126", - "29.7904", - "430.919", - "145.062", - "34.7812", - "198.187", - "20.9101", - "68.9883", - "414.045", - "420.851", - "17.2437", - "444.198", - "64.0635", - "180.244", - "542.3", - "447.634", - "494.048", - "3.91273", - "270.789", - "357.89", - "90.2786", - "438.363", - "10.0038", - "336.916", - "49.9741", - "378.658", - "78.1695", - "302.03", - "138.549", - "95.9576", - "28.6776", - "32.5566", - "238.741", - "165.085", - "365.052", - "254.65", - "137.412", - "131.549", - "154.745", - "126.252", - "53.5341", - "118.288", - "392.71", - "142.609", - "268.505", - "49.5745", - "194.707", - "263.122", - "196.395", - "189.41", - "103.398", - "111.02", - "237.409", - "180.185", - "363.384", - "278.846", - "295.988", - "539.708", - "190.79", - "69.7069", - "182.862", - "188.005", - "32.5838", - "317.466", - "274.25", - "108.443", - "174.836", - "119.337", - "319.926", - "11.5049", - "94.9096", - "65.3893", - "100.416", - "2.83521", - "327.308", - "52.6397", - "54.365", - "90.7303", - "536.232", - "331.157", - "156.631", - "165.401", - "84.029", - "27.1012", - "180.804", - "199.172", - "379.293", - "325.988", - "455.623", - "497.033", - "136.428", - "293.977", - "248.19", - "12.4213", - "157.821", - "172.409", - "89.6211", - "71.6177", - "218.869", - "163.374", - "38.7206", - "361.816", - "312.637", - "70.0722", - "520.133", - "215.859", - "249.735", - "143.807", - "348.799", - "305.283" - ], - "ysrc": "JohnMaddock:15:e64592", - "y": [ - "474.506", - "271.145", - "719.321", - "333.419", - "280.485", - "693.613", - "615.476", - "979.085", - "384.452", - "790.061", - "654.229", - "774.57", - "609.975", - "321.308", - "986.193", - "255.759", - "671.752", - "478.034", - "378.824", - "980.748", - "764.321", - "516.485", - "760.269", - "624.035", - "903.661", - "350.026", - "814.448", - "702.27", - "395.605", - "521.359", - "440.973", - "660.722", - "152.563", - "332.892", - "484.656", - "875.455", - "606.824", - "627.899", - "499.069", - "400.604", - "822.928", - "895.841", - "789.978", - "174.573", - "884.379", - "906.313", - "889.708", - "504.73", - "919.37", - "347.484", - "572.431", - "748.497", - "541.952", - "800.544", - "716.679", - "809.442", - "624.011", - "930.34", - "911.99", - "736.894", - "277.532", - "510.703", - "248.451", - "367.666", - "766.493", - "910.567", - "399.866", - "680.428", - "786.681", - "917.668", - "963.237", - "397.833", - "767.457", - "874.477", - "204.059", - "708.68", - "709.984", - "204.987", - "691.77", - "976.624", - "910.124", - "924.783", - "482.549", - "227.414", - "768.92", - "581.656", - "664.147", - "827.669", - "563.23", - "982.009", - "622.29", - "250.854", - "817.701", - "611.277", - "986.296", - "759.862", - "326.148", - "866.172", - "346.554", - "933.606", - "767.368", - "888.641", - "807.988", - "295.737", - "994.413", - "647.256", - "246.144", - "415.701", - "874.332", - "908.001", - "847.989", - "268.24", - "730.233", - "702.664", - "852.388", - "362.617", - "771.161", - "763.236", - "903.962", - "471.941", - "682.151", - "116.955", - "729.067", - "896.86", - "474.451", - "806.319", - "914.753", - "952.172", - "503.247", - "449.089", - "68.0657", - "918.994", - "787.133", - "724.592", - "705.792", - "959.31", - "768.205", - "353.012", - "609.411", - "566.091", - "795.915", - "669.624", - "139.113", - "574.062", - "836.034", - "964.92", - "274.183", - "350.321", - "365.145", - "965.46", - "809.731", - "505.335", - "326.955", - "817.183", - "773.238", - "712.244", - "650.489", - "400.249", - "215.844", - "999.711", - "365.786", - "525.943", - "337.312", - "706.497", - "192.296", - "788.855", - "563.818", - "775.035", - "589.344", - "708.752", - "401.591", - "621.62", - "436.285", - "137.086", - "955.778", - "723.346", - "737.189", - "547.812", - "312.208", - "659.142", - "916.381", - "686.775", - "337.846", - "825.451", - "395.996", - "407.576", - "760.728", - "308.637", - "675.271", - "688.149", - "810.198", - "769.795", - "524.677", - "766.264", - "251.018", - "739.661", - "579.391", - "360.919", - "391.697", - "569.116", - "342.819", - "392.808", - "934.111", - "677.182", - "224.339", - "546.296", - "520.853", - "238.274", - "532.742", - "966.429", - "542.941", - "415.189", - "451.325", - "589.509", - "977.406", - "143.242", - "879.588", - "333.895", - "749.496", - "767.002", - "886.231", - "758.691", - "816.339", - "300.592", - "717.964", - "729.05", - "620.637", - "782.895", - "961.875", - "862.445", - "887.017", - "825.531", - "546.909", - "165.278", - "807.649", - "942.762", - "667.294", - "461.536", - "788.982", - "768.316", - "801.643", - "443.923", - "469.782", - "903.859", - "757.973", - "552.868", - "287.199", - "915.67", - "711.569", - "520.24", - "493.45", - "680.769", - "300.233", - "797.805", - "449.195", - "177.732", - "983.843", - "420.419", - "687.122", - "480.496", - "978.402", - "688.59", - "846.322", - "771.573", - "670.359", - "424.852", - "765.034", - "512.439", - "153.418", - "553.921", - "785.639", - "755.872", - "786.827", - "560.755", - "742.672", - "752.499", - "332.399", - "296.911", - "740.878", - "562.895", - "236.854", - "969.954", - "793.66", - "260.459", - "757.394", - "355.922", - "830.297", - "439.264", - "765.418", - "230.959", - "523.622", - "575.36", - "900.706", - "999.383", - "712.616", - "800.872", - "886.911", - "914.153", - "630.922", - "284.36", - "626.404", - "277.051", - "641.72", - "967.818", - "729.811", - "996.543", - "978.003", - "109.515", - "414.576", - "681.781", - "851.476", - "365.952", - "465.163", - "397.881", - "918.248", - "852.7", - "676.648", - "604.897", - "297.922", - "681.421", - "909.8", - "489.314", - "405.709", - "132.034", - "410.643", - "600.654", - "675.369", - "905.506", - "512.264", - "235.065", - "686.727", - "379.344", - "447.415", - "201.787", - "559.915", - "878.012", - "866.349", - "385.191", - "419.543", - "756.834", - "528.944", - "495.929", - "738.209", - "675.963", - "579.262", - "558.942", - "463.621", - "758.148", - "874.515", - "807.131", - "125.12", - "483.511", - "771.383", - "800.02", - "265.25", - "992.446", - "776.576", - "282.681", - "364.636", - "770.766", - "504.724", - "383.688", - "799.166", - "222.155", - "642.862", - "582.116", - "755.204", - "543.165", - "827.199", - "634.009", - "931.543", - "810.417", - "582.775", - "832.124", - "369.651", - "968.374", - "200.237", - "687.172", - "666.026", - "232.364", - "921.799", - "691.164", - "472.396", - "207.709", - "463.554", - "920.566", - "642.653", - "414.33", - "819.497", - "516.549", - "709.233", - "572.304", - "419.397", - "648.508", - "868.145", - "959.292", - "735.005", - "845.793", - "342.774", - "279.994", - "319.27", - "451.464", - "653.646", - "589.4", - "148.565", - "744.67", - "900.597", - "970.335", - "980.257", - "988.295", - "744.463", - "581.227", - "880.121", - "967.708", - "954.339", - "800.559", - "819.188", - "892.67", - "683.279", - "997.949", - "682.932", - "987.84", - "346.162", - "476.669", - "268.206", - "223.403", - "716.591", - "890.29", - "575.608", - "804.652", - "109.498", - "765.896", - "882.537", - "983.54", - "291.317", - "333.734", - "792.433", - "562.134", - "820.037", - "67.6281", - "482.335", - "994.92", - "698.002", - "802.298", - "540.591", - "726.282", - "774.054", - "504.525", - "640.848", - "782.557", - "631.411", - "502.363", - "803.773", - "831.541", - "594.403", - "530.621", - "272.228", - "762.589", - "410.299", - "370.601", - "545.928", - "426.034", - "927.836", - "264.049", - "736.383", - "611.119", - "766.63", - "492.215", - "711.79", - "610.742", - "880.353", - "811.686", - "649.176", - "861.869", - "271.857", - "639.973", - "275.101", - "682.246", - "488.862", - "873.224", - "520.269", - "815.372", - "460.528", - "387.769", - "660.906", - "755.045", - "310.368", - "250.072", - "401.061", - "826.747", - "274.851", - "844.644", - "965.231", - "890.969", - "337.627", - "746.777", - "767.744", - "604.461", - "888.364", - "889.204", - "524.52", - "796.911", - "979.365", - "498.342", - "752.362", - "623.292", - "823.714", - "84.8409", - "587.454", - "852.269", - "416.841", - "459.984", - "549.934", - "774.452", - "970.382", - "832.93", - "771.874", - "784.894", - "485.48", - "743.335", - "861.264", - "863.28", - "738.058", - "429.551", - "799.553", - "172.93", - "931.934", - "387.13", - "335.428", - "445.631", - "771.327", - "873.43", - "726.66", - "293.425", - "743.793", - "594.633", - "996.361", - "761.652", - "303.014", - "875.768", - "814.344", - "879.463", - "962.132", - "343.54", - "134.066", - "533.837", - "894.684", - "688.464", - "500.245", - "546.852", - "940.358", - "395.753", - "568.678", - "808.448", - "529.327", - "501.856", - "408.679", - "440.959", - "747.324", - "237.082", - "311.944", - "688.803", - "573.897", - "560.534", - "832.327", - "823.054", - "864.249", - "432.216", - "632.869", - "357.76", - "388.909", - "556.004", - "612.831", - "850.707", - "399.266", - "742.259", - "304.587", - "648.739", - "866.174", - "968.937", - "147.711", - "851.987", - "888.684", - "255.895", - "912.331", - "662.691", - "600.956", - "644.091", - "533.916", - "304.569", - "631.719", - "598.28", - "977.709", - "461.547", - "480.735", - "643.794", - "807.051", - "563.261", - "551.432", - "779.96", - "494.273", - "671.406", - "656.154", - "885.015", - "406.459", - "563.29", - "590.049", - "765.414", - "577.431", - "968.187", - "739.168", - "736.369", - "313.146", - "533.517", - "964.99", - "599.238", - "706.067", - "172.368", - "283.397", - "744.538", - "827.558", - "847.112", - "693.065", - "798.375", - "636.68", - "579.449", - "737.811", - "568.752", - "711.845", - "689.195", - "799.368", - "467.128", - "363.656", - "625.866", - "475.147", - "704.563", - "347.106", - "459.025", - "746.664", - "325.492", - "806.256", - "477.129", - "452.661", - "844.056", - "910.001", - "935.04", - "595.854", - "412.547", - "875.015", - "768.64", - "58.6625", - "253.139", - "578.988", - "427.845", - "568.928", - "725.35", - "285.444", - "867.202", - "556.148", - "291.132", - "691.435", - "601.411", - "813.623", - "352.388", - "496.81", - "767.121", - "974.762", - "814.651", - "857.232", - "714.851", - "503.98", - "987.183", - "484.477", - "283.214", - "637.91", - "491.907", - "814.869", - "514.055", - "523.089", - "584.719", - "135.894", - "824.943", - "196.265", - "575.467", - "909.187", - "661.304", - "532.732", - "528.284", - "870.572", - "733.607", - "142.949", - "569.174", - "85.4512", - "930.667", - "592.424", - "884.327", - "683.769", - "283.005", - "814.446", - "140.23", - "770.745", - "581.174", - "875.572", - "614.702", - "773.546", - "799.942", - "969.195", - "740.647", - "858.722", - "177.225", - "492.876", - "209.612", - "697.1", - "514.885", - "847.059", - "722.115", - "744.385", - "351.225", - "986.094", - "790.787", - "785.982", - "500.586", - "512.751", - "797.788", - "599.248", - "817.077", - "734.824", - "445.753", - "611.704", - "768.108", - "748.463", - "992.031", - "701.618", - "573.842", - "543.876", - "410.92", - "407.249", - "857.916", - "972.973", - "842.754", - "358.231", - "991.972", - "290.621", - "730.671", - "179.758", - "317.408", - "761.827", - "780.368", - "960.912", - "653.672", - "571.142", - "129.724", - "422.093", - "330.507", - "957.261", - "399.396", - "796.044", - "382.857", - "927", - "478.039", - "304.178", - "251.176", - "727.667", - "479.09", - "294.586", - "966.221", - "295.405", - "787.24", - "321.11", - "230.84", - "954.438", - "828.334", - "657.036", - "261.71", - "965.206", - "582.558", - "774.601", - "807.57", - "758.75", - "736.677", - "704.875", - "434.715", - "302.166", - "737.251", - "843.434", - "964.47", - "196.185", - "897.737", - "766.107", - "714.563", - "870.006", - "635.184", - "967.975", - "425.958", - "156.561", - "850.112", - "537.025", - "133.616", - "846.291", - "641.333", - "794.223", - "479.405", - "398.257", - "475.738", - "350.848", - "696.17", - "925.375", - "460.064", - "660.608", - "278.172", - "420.386", - "463.355", - "89.5219", - "776.519", - "316.305", - "871.798", - "758.303", - "986.575", - "485.674", - "721.172", - "533.432", - "514.781", - "814.036", - "805.781", - "603.07", - "553.458", - "919.302", - "633.49", - "997.55", - "431.003", - "588.924", - "818.496", - "692.716", - "348.086", - "914.026", - "278.986", - "331.569", - "510.416", - "250.266", - "368.815", - "647.242", - "877.232", - "609.394", - "684.068", - "881.186", - "821.545", - "363.703", - "506.644", - "456.295", - "388.464", - "376.393", - "615.48", - "747.199", - "476.647", - "837.582", - "602.508", - "148.224", - "560.434", - "664.712", - "686.473", - "454.923", - "606.193", - "363.103", - "792.737", - "282.055", - "435.117", - "470.994", - "755.051", - "637.775", - "230.837", - "403.776", - "272.806", - "596.678", - "419.849", - "424.778", - "259.086", - "825.846", - "648.225", - "226.746", - "749.563", - "259.305", - "870.299", - "573.62", - "511.836", - "345.327", - "499.91", - "801.327", - "505.242", - "816.126", - "377.16", - "420.865", - "556.378", - "814.156", - "252.143", - "640.361", - "274.441", - "727.213", - "592.691", - "379.232", - "470.729", - "718.28", - "453.393", - "396.516", - "529.518", - "347.184", - "667.128", - "361.722", - "276.609", - "673.94", - "210.701", - "638.127", - "965.331", - "782.214", - "891.017", - "796.32", - "853.663", - "608.02", - "655.869", - "519.705", - "352.965", - "840.09", - "307.269", - "766.341", - "744.413", - "657.375", - "635.76", - "305.4", - "195.515", - "618.217", - "770.746", - "365.549", - "861.771", - "597.297", - "615.648", - "780.206", - "364.312", - "632.507", - "832.431", - "484.792", - "860.247", - "698.595", - "833.211", - "986.611", - "878.497", - "684.288", - "746.526", - "477.812", - "976.708", - "801.411", - "693.995", - "566.884", - "433.428", - "553.307", - "387.036", - "474.302", - "745.472", - "761.049", - "563.698", - "608.135", - "674.688", - "462.792", - "700.12", - "820.124", - "620.957", - "731.738", - "195.655", - "907.038", - "265.045", - "873.05", - "758.779", - "361.747", - "217.313", - "352.549", - "443.15", - "440.591", - "516.949", - "883.523", - "239.231", - "732.053", - "760.275", - "303.897", - "913.804", - "639.073", - "671.222", - "796.436", - "60.3347", - "888.931", - "81.771", - "587.522", - "675.897", - "537.267", - "722.644", - "300.706", - "216.56", - "423.375", - "439.409", - "638.365", - "530.099", - "63.1681", - "192.269", - "339.488", - "939.895", - "738.427", - "750.313", - "473.508", - "667.024", - "367.383", - "390.549", - "573.879", - "305.142", - "556.882", - "390.567", - "510.717", - "482.363", - "869.789", - "502.455", - "457.516", - "598.099", - "507.476", - "506.282", - "618.656", - "705.96", - "278.35", - "231.64", - "512.563", - "633.133", - "468.245", - "109.245", - "263.636", - "179.868", - "826.151", - "458.101", - "313.602", - "664.989", - "235.341", - "878.472", - "200.924", - "792.6", - "203.341", - "798.247", - "380.18", - "378.132", - "744.765", - "891.418", - "910.267", - "457.106", - "682.62", - "771.076", - "453.524", - "335.16", - "304.311", - "589.788", - "201.583", - "844.927", - "982.646", - "944.216", - "598.129", - "716.163", - "871.273", - "416.091", - "371.268", - "391.954", - "759.981", - "554.381", - "152.455", - "578.614", - "543.954", - "266.338", - "387.978", - "657.553", - "931.363", - "310.997", - "484.745", - "123.549", - "451.464", - "436.783", - "401.294", - "769.475", - "711.502", - "460.946", - "876.234", - "731.884", - "974.998", - "948.942", - "663.614", - "93.5529", - "419.68", - "846.472", - "453.022", - "868.287", - "345.028", - "934.552", - "453.308", - "832.811", - "894.545", - "619.677", - "735.361", - "597.609", - "680.027", - "335.067", - "793.579", - "578.238", - "969.325", - "759.712", - "369.808", - "885.889", - "308.358", - "906.345", - "400.662", - "994.393", - "894.708", - "643.72", - "345.011", - "742.324", - "772.961", - "846.857", - "425.773", - "483.657", - "693.174", - "819.94", - "75.4569", - "710.11", - "612.924", - "574.975", - "694.422", - "407.196", - "705.678", - "653.279", - "762.925", - "499.084", - "401.131", - "969.424", - "625.289", - "730.294", - "646.835", - "737.198", - "437.051", - "855.796", - "624.991", - "551.176", - "702.08", - "825.565", - "981.484", - "597.899", - "546.03", - "540.342", - "300.714", - "470.544", - "373.712", - "413.825", - "629.68", - "882.995", - "482.456", - "523.011", - "647.145", - "645.914", - "255.985", - "651.678", - "463.473", - "670.523", - "420.557", - "743.522", - "303.822", - "393.483", - "831.731", - "680.661", - "915.273", - "924.29", - "284.123", - "610.516", - "903.805", - "526.056", - "794.454", - "569.413", - "662.025", - "462.26", - "305.626", - "788.314", - "80.1869", - "929.02", - "764.787", - "203.957", - "419.788", - "867.087", - "460.68", - "346.594", - "431.843", - "173.773", - "695.092", - "444.887", - "844.212", - "592.48", - "850.944", - "227.679", - "807.601", - "445.978", - "700.205", - "558.168", - "756.23", - "926.29", - "932.34", - "487.946", - "239.915", - "734.849", - "482.845", - "957.518", - "609.38", - "780.296", - "194.674", - "403.598", - "581.568", - "394.188", - "417.472", - "620.183", - "685.079", - "695.136", - "625.686", - "475.573", - "138.249", - "444.777", - "895.99", - "592.018", - "532.081", - "795.264", - "321.973", - "341.595", - "172.543", - "401.602", - "236.685", - "560.978", - "910.702", - "560.578", - "741.063", - "338.927", - "123.58", - "453.974", - "503.088", - "414.443", - "885.696", - "590.098", - "573.484", - "287.449", - "422.454", - "840.061", - "222.542", - "967.895", - "90.6116", - "788.989", - "169.014", - "403.861", - "476.742", - "267.11", - "660.802", - "451.205", - "690.568", - "255.465", - "705.249", - "445.923", - "507.783", - "551.321", - "614.668", - "781.817", - "482.534", - "774.15", - "774.627", - "702.078", - "150.797", - "670.719", - "899.855", - "397.36", - "793.773", - "425.194", - "353.609", - "703.707", - "423.185", - "512.412", - "644.703", - "437.007", - "994.356", - "966.474", - "844.804", - "263.837", - "631.895", - "593.014", - "215.735", - "622.378", - "611.31", - "862.529", - "489.257", - "204.733", - "466.437", - "553.694", - "513.089", - "335.676", - "685.718", - "378.556", - "863.777", - "396.047", - "525.749", - "294.076", - "911.639", - "959.646", - "472.176", - "388.855", - "153.735", - "279.828", - "932.835", - "582.656", - "797.844", - "252.578", - "610.266", - "760.63", - "377.456", - "490.765", - "801.914", - "852.522", - "876.808", - "280.719", - "574.613", - "158.919", - "964.865", - "758.366", - "881.974", - "753.999", - "617.866", - "952.213", - "860.33", - "264.528", - "654.673", - "835.551", - "287.627", - "863.47", - "466.803", - "357.445", - "472.388", - "388.481", - "505.588", - "893.363", - "767.211", - "478.684", - "396.319", - "707.845", - "456.005", - "716.822", - "214.605", - "629.689", - "893.893", - "215.695", - "717.849", - "629.849", - "738.972", - "674.301", - "408.919", - "790.163", - "453.851", - "434.849", - "813.333", - "668.488", - "472.893", - "508.716", - "76.5209", - "870.484", - "596.177", - "261.003", - "603.93", - "443.768", - "217.473", - "675.797", - "664.504", - "727.298", - "847.119", - "309.853", - "756.938", - "466.749", - "458.407", - "783.726", - "747.59", - "986.076", - "382.719", - "608.764", - "215.126", - "721.745", - "786.479", - "233.967", - "555.958", - "526.195", - "570.924", - "525.549", - "651.267", - "268.324", - "362.278", - "393.394", - "626.979", - "504.558", - "775.104", - "817.006", - "463.864", - "815.834", - "664.348", - "598.258", - "768.887", - "688.249", - "669.036", - "470.883", - "797.047", - "366.271", - "632.767", - "903.45", - "730.153", - "545.347", - "388.531", - "640.15", - "277.448", - "467.844", - "646.773", - "733.289", - "538.037", - "352.867", - "185.566", - "646.986", - "656.683", - "903.073", - "326.586", - "356.501", - "874.013", - "665.101", - "517.826", - "833.362", - "407.903", - "349.491", - "437.786", - "916.822", - "307.153", - "797.549", - "442.021", - "842.312", - "686.061", - "60.5202", - "166.427", - "444.825", - "773.188", - "220.536", - "309.533", - "440.306", - "686.665", - "400.659", - "735.071", - "519.385", - "163.025", - "701.964", - "710.655", - "362.797", - "804.389", - "334.003", - "694.363", - "405.507", - "500.292", - "106.791", - "969.273", - "847.884", - "605.34", - "455.972", - "969.671", - "637.888", - "248.133", - "293.602", - "433.015", - "684.126", - "518.583", - "877.286", - "539.504", - "790.411", - "143.465", - "640.12", - "749.741", - "623.225", - "515.388", - "671.03", - "821.532", - "619.161", - "695.099", - "749.739", - "872.777", - "707.343", - "681.874", - "775.26", - "226.923", - "614.671", - "215.712", - "676.386", - "841.326", - "433.908", - "796.21", - "409.319", - "837.8", - "517.714", - "304.672", - "330.428", - "557.603", - "456.894", - "741.026", - "506.501", - "730.891", - "789.196", - "542.486", - "774.843", - "262.276", - "724.613", - "290.386", - "329.924", - "238.924", - "404.992", - "938.624", - "426.015", - "464.514", - "337.664", - "449.691", - "457.515", - "105.343", - "286.267", - "299.408", - "515.599", - "762.945", - "887.751", - "686.557", - "584.212", - "957.051", - "839.927", - "500.636", - "598.23", - "636.136", - "675.067", - "482.163", - "133.604", - "855.506", - "248.581", - "778.159", - "565.948", - "638.404", - "350.976", - "355.111", - "380.683", - "996.849", - "869.925", - "821.976", - "616.294", - "723.881", - "668.172", - "555.678", - "342.06", - "592.752", - "471.551", - "530.036", - "373.778", - "355.628", - "922.512", - "663.212", - "493.788", - "432.198", - "665.237", - "116.376", - "858.782", - "785.665", - "480.404", - "258.494", - "615.201", - "656.198", - "201.071", - "612.152", - "750.661", - "789.599", - "59.7094", - "170.435", - "725.799", - "458.409", - "482.034", - "154.288", - "604.461", - "972.481", - "871.472", - "151.971", - "603.296", - "221.39", - "740.69", - "832.938", - "253.186", - "564.948", - "512.702", - "656.436", - "492.22", - "383.266", - "671.668", - "448.295", - "714.232", - "811.57", - "462.055", - "760.673", - "346.167", - "366.299", - "584.094", - "598.24", - "352.763", - "860.342", - "902.51", - "192.422", - "500.363", - "497.243", - "805.913", - "217.128", - "960.902", - "591.906", - "374.849", - "473.794", - "725.272", - "759.35", - "798.315", - "506.925", - "490.42", - "626.065", - "802.277", - "336.877", - "603.531", - "631.61", - "932.691", - "734.558", - "833.396", - "778.978", - "723.322", - "691.39", - "803.312", - "186.364", - "662.554", - "397.707", - "753.214", - "484.113", - "587.426", - "424.27", - "840.672", - "333.056", - "889.635", - "648.371", - "647.063", - "416.64", - "818.387", - "754.566", - "352.21", - "273.598", - "162.702", - "697.836", - "985.75", - "666.408", - "889.824", - "801.473", - "685.001", - "727.202", - "843.401", - "169.868", - "687.787", - "625.829", - "795.563", - "470.577", - "453.311", - "679.981", - "199.557", - "462.075", - "720.331", - "241.068", - "325.643", - "649.233", - "587.699", - "622.332", - "533.24", - "855.096", - "714.38", - "344.25", - "297.851", - "127.695", - "854.207", - "833.081", - "334.31", - "376.802", - "748.09", - "819.463", - "970.982", - "971.892", - "453.079", - "765.777", - "841.847", - "742.069", - "766.625", - "620.459", - "725.78", - "593.014", - "409.154", - "572.981", - "396.442", - "537.881", - "451.856", - "679.711", - "680.789", - "759.077", - "857.827", - "494.143", - "384.042", - "606.268", - "756.963", - "661.971", - "365.522", - "273.674", - "683.327", - "291.214", - "454.363", - "883.068", - "884.296", - "623.206", - "713.251", - "740.883", - "405.761", - "308.442", - "239.674", - "949.931", - "975.082", - "777.786", - "935.412", - "811.139", - "560.52", - "569.775", - "486.838", - "908.155", - "679.317", - "534.414", - "759.776", - "825.189", - "308.266", - "700.597", - "780.877", - "780.767", - "946.885", - "212.262", - "656.394", - "600.946", - "308.606", - "928.874", - "506.48", - "539.385", - "167.667", - "875.711", - "347.569", - "692.31", - "793.055", - "400.422", - "489.369", - "829.299", - "645.738", - "515.112", - "746.194", - "472.511", - "588.137", - "926.742", - "311.551", - "640.53", - "596.28", - "202.535", - "633.396", - "631.124", - "694.076", - "927.855", - "968.096", - "361.765", - "592.814", - "735.575", - "451.422", - "736.635", - "569.974", - "346.759", - "529.716", - "601.398", - "705.976", - "635.85", - "478.325", - "309.742", - "957.33", - "301.779", - "755.894", - "877.643", - "166.102", - "493.646", - "540.757", - "447.834", - "593.046", - "872.575", - "791.419", - "575.485", - "868.027", - "602.993", - "692.355", - "797.777", - "358.387", - "418.179", - "609.248", - "439.62", - "187.313", - "565.663", - "689.907", - "727.353", - "209.063", - "717.189", - "908.851", - "591.221", - "735.536", - "946.925", - "328.714", - "659.327", - "341.941", - "233.759", - "779.939", - "377.494", - "505.343", - "714.2", - "309.949", - "746.132", - "504.525", - "591.867", - "769.629", - "861.891", - "714.304", - "851.099", - "710.981", - "370.894", - "775.639", - "259.809", - "454.826", - "575.738", - "918.204", - "895.008", - "264.571", - "584.55", - "617.227", - "749.569", - "199.553", - "375.073", - "835.43", - "446.355", - "897.224", - "624.989", - "804.694", - "432.342", - "606.005", - "529.754", - "624.888", - "926.729", - "759.086", - "290.417", - "450.078", - "129.983", - "715.513", - "947.206", - "412.056", - "417.617", - "485.321", - "646.069", - "197.116", - "389.695", - "873.298", - "467.918", - "844.742", - "723.075", - "511.21", - "509.878", - "327.595", - "459.183", - "361.611", - "198.147", - "532.595", - "450.382", - "614.412", - "894.904", - "856.034", - "793.256", - "553.546", - "653.958", - "657.238", - "545.943", - "387.909", - "501.747", - "860.954", - "568.536", - "612.125", - "813.205", - "497.787", - "405.834", - "299.305", - "804.766", - "793.443", - "366.48", - "702.495", - "254.083", - "174.533", - "711.672", - "393.621", - "746.051", - "478.961", - "497.114", - "519.828", - "419.386", - "594.817", - "343.588", - "853.87", - "394.141", - "186.493", - "523.607", - "730.727", - "601.097", - "748.935", - "482.453", - "900.704", - "131.162", - "608.483", - "701.468", - "518.948", - "866.158", - "477.248", - "131.642", - "329.426", - "422.215", - "930.849", - "789.719", - "404.145", - "133.977", - "590.066", - "441.216", - "546.38", - "739.991", - "603.848", - "689.503", - "369.393", - "287.657", - "418.422", - "792.19", - "478.137", - "619.197", - "582.319", - "614.96", - "641.877", - "258.321", - "185.57", - "573.344", - "587.389", - "806.892", - "568.71", - "466.905", - "581.467", - "796.349", - "721.464", - "927.797", - "723.127", - "908.779", - "637.033", - "721.743", - "602.227", - "692.558", - "339.269", - "441.611", - "811.727", - "707.221", - "750.361", - "536.967", - "889.75", - "544.524", - "831.998", - "827.373", - "739.828", - "415.247", - "608.727", - "819.071", - "146.815", - "994.499", - "975.652", - "573.27", - "656.888", - "393.35", - "338.901", - "567.534", - "365.014", - "261.477", - "836.824", - "930.943", - "351.609", - "701.079", - "442.474", - "444.063", - "492.87", - "301.811", - "762.829", - "432.613", - "685.034", - "510.246", - "727.548", - "512.651", - "555.373", - "285.208", - "975.139", - "410.97", - "665.536", - "712.223", - "726.516", - "409.564", - "986.326", - "450.63", - "360.18", - "424.493", - "479.496", - "923.818", - "639.364", - "628.5", - "777.498", - "748.955", - "588.067", - "359.248", - "450.987", - "150.444", - "555.13", - "337.626", - "225.161", - "709.616", - "600.485", - "686.873", - "443.42", - "713.236", - "563.263", - "525.03", - "852.569", - "890.406", - "294.741", - "898.747", - "739.31", - "726.206", - "924.917", - "900.337", - "491.108", - "251.491", - "553.986", - "837.229", - "398.363", - "855.184", - "481.409", - "609.508", - "228.803", - "843.674", - "750.593", - "564.308", - "580.154", - "252.983", - "351.525", - "565.348", - "870.074", - "431.418", - "556.774", - "787.207", - "625.841", - "850.253", - "356.91", - "654.487", - "790.7", - "570.045", - "431.554", - "500.489", - "700.916", - "431.465", - "978.942", - "757.921", - "388.628", - "124.379", - "723.393", - "324.093", - "236.146", - "749.172", - "929.187", - "813.969", - "518.565", - "678.132", - "279.145", - "632.086", - "299.999", - "795.184", - "490.084", - "610.19", - "575.435", - "482.627", - "222.885", - "306.495", - "453.168", - "504.696", - "769.358", - "695.302", - "523.921", - "826.633", - "259.839", - "492.556", - "997.525", - "812.653", - "879.563", - "447.429", - "574.062", - "587.274", - "271.611", - "693.578", - "338.381", - "502.571", - "424.233", - "640.271", - "356.966", - "816.49", - "626.642", - "462.518", - "652.307", - "903.774", - "330.154", - "647.696", - "201.406", - "624.907", - "766.748", - "458.19", - "344.738", - "595.454", - "372.968", - "810.613", - "850.551", - "725.298", - "521.159", - "602.034", - "542.14", - "622.091", - "708.867", - "876.57", - "635.159", - "175.233", - "585.691", - "606.943", - "533.835", - "783.557", - "496.574", - "683.612", - "342.739", - "663.124", - "683.022", - "683.054", - "364.706", - "389.012", - "608.332", - "358.83", - "212.842", - "519.995", - "715.81", - "648.109", - "426.453", - "822.416", - "826.255", - "499.585", - "812.942", - "259.913", - "661.296", - "838.844", - "367.289", - "858.197", - "820.888", - "221.101", - "548.045", - "372.169", - "936.974", - "907.918", - "987.655", - "369.532", - "866.494", - "393.192", - "864.195", - "696.514", - "870.051", - "718.779", - "677.436", - "296.757", - "634.244", - "777.112", - "425.869", - "612.149", - "737.015", - "555.374", - "814.917", - "574.06", - "676.498", - "469.97", - "545.005", - "604.816", - "392.932", - "723.656", - "783.988", - "702.239", - "801.783", - "544.88", - "656.077", - "747.407", - "290.012", - "838.504", - "400.402", - "877.738", - "962.647", - "490.948", - "412.695", - "586.731", - "664.079", - "691.574", - "314.747", - "698.218", - "583.661", - "949.216", - "216.576", - "804.429", - "743.239", - "503.038", - "498.201", - "645.652", - "474.82", - "579.345", - "438.654", - "682.385", - "848.56", - "769.472", - "587.716", - "514.723", - "661.601", - "746.362", - "135.029", - "625.306", - "212.157", - "650.313", - "532.415", - "748.741", - "525.808", - "402.94", - "370.206", - "645.876", - "631.63", - "435.195", - "913.819", - "387.199", - "429.112", - "710.483", - "320.757", - "865.524", - "777.883", - "814.324", - "402.525", - "494.44", - "701.39", - "517.216", - "778.134", - "203.092", - "469.311", - "391.721", - "172.825", - "784.376", - "539.83", - "154.743", - "973.053", - "592.347", - "165.057", - "945.866", - "701.057", - "435.862", - "579.706", - "846.581", - "459.895" - ], - "zsrc": "JohnMaddock:15:073ca4", - "z": [ - "605.506", - "915.141", - "765.346", - "823.255", - "422.845", - "806.906", - "656.869", - "270.295", - "382.562", - "403.355", - "769.236", - "803.328", - "615.768", - "955.678", - "375.535", - "359.698", - "795.956", - "827.451", - "915.661", - "425.182", - "994.405", - "455.991", - "822.234", - "937.884", - "622.147", - "394.051", - "885.218", - "764.159", - "842.346", - "856.104", - "686.84", - "992.498", - "831.12", - "745.535", - "529.414", - "933.848", - "632.858", - "620.018", - "525.037", - "576.54", - "807.955", - "910.442", - "569.428", - "805.643", - "935.38", - "425.479", - "632.316", - "781.278", - "618.209", - "837.452", - "647.702", - "783.913", - "602.241", - "328.708", - "648.154", - "579.509", - "595.726", - "534.099", - "681.111", - "899.083", - "874.995", - "977.173", - "993.145", - "992.497", - "988.044", - "506.6", - "416.235", - "754.72", - "827.68", - "994.338", - "358.154", - "858.931", - "944.184", - "593.355", - "756.807", - "676.07", - "924.914", - "342.476", - "705.022", - "667.071", - "643.312", - "239.822", - "943.825", - "563.303", - "404.938", - "297.027", - "752.211", - "677.112", - "962.481", - "452.125", - "897.546", - "967.279", - "387.882", - "658.085", - "552.5", - "881.537", - "371.104", - "616.763", - "536.095", - "305.674", - "874.292", - "531.557", - "961.158", - "882.647", - "577.972", - "909.162", - "897.362", - "430.288", - "997.311", - "560.719", - "469.133", - "872.719", - "492.702", - "690.573", - "841.918", - "407.056", - "750.607", - "793.498", - "917.458", - "923.389", - "683.424", - "865.252", - "495.168", - "701.364", - "745.135", - "786.089", - "973.62", - "685.836", - "586.444", - "740.427", - "736.652", - "704.88", - "764.414", - "599.573", - "806.448", - "572.721", - "913.553", - "862.478", - "942.517", - "986.059", - "802.915", - "695.926", - "710.536", - "653.337", - "825.118", - "502.187", - "290.916", - "890.485", - "358.404", - "995.486", - "995.617", - "496.12", - "740.443", - "949.976", - "921.224", - "754.67", - "710.924", - "447.902", - "874.259", - "474.958", - "400.474", - "712.567", - "994.708", - "959.026", - "818.757", - "769.865", - "688.399", - "931.245", - "826.55", - "613.186", - "823.828", - "668.953", - "455.962", - "539.426", - "683.032", - "430.126", - "823.7", - "791.558", - "976.46", - "989.797", - "981.051", - "709.124", - "876.815", - "650.025", - "379", - "839.249", - "349.142", - "884.676", - "994.418", - "979.174", - "376.63", - "748.09", - "723.362", - "804.887", - "319.361", - "635.621", - "959.389", - "663.381", - "719.809", - "753.21", - "719.877", - "489.117", - "824.319", - "655.56", - "638.676", - "787.882", - "893.708", - "920.502", - "558.236", - "564.431", - "949.582", - "430.584", - "710.976", - "575.216", - "329.188", - "841.314", - "466.973", - "744.824", - "601.644", - "647.973", - "980.082", - "739.876", - "461.143", - "768.35", - "643.079", - "728.822", - "984.825", - "437.421", - "639.258", - "849.302", - "877.46", - "813.255", - "795.61", - "772.559", - "963.318", - "659.152", - "722.729", - "547.72", - "653.856", - "570.611", - "865.216", - "635.139", - "818.686", - "994.74", - "952.661", - "735.216", - "944.947", - "921.621", - "752.742", - "508.181", - "781.609", - "473.108", - "383.949", - "994.121", - "719.336", - "744.421", - "635.306", - "785.499", - "959.185", - "521.926", - "571.574", - "738.942", - "632.7", - "655.218", - "314.032", - "440.513", - "962.351", - "360.106", - "929.713", - "514.96", - "884.813", - "569.115", - "668.965", - "887.084", - "456.94", - "903.922", - "737.327", - "735.278", - "601.907", - "790.408", - "627.223", - "554.733", - "789.334", - "853.373", - "835.371", - "974.734", - "983.647", - "885.112", - "533.1", - "895.688", - "528.195", - "921.073", - "562.351", - "305.725", - "882.845", - "884.164", - "968.272", - "674.212", - "283.005", - "400.468", - "615.233", - "483.158", - "477.521", - "448.819", - "941.056", - "707.727", - "436.221", - "154.841", - "710.329", - "978.527", - "706.06", - "482.213", - "727.27", - "775.75", - "590.874", - "897.01", - "787.968", - "704.882", - "941.26", - "799.036", - "385.909", - "529.166", - "819.029", - "977.029", - "722.327", - "936.214", - "406.281", - "885.673", - "710.351", - "195.359", - "954.559", - "456.369", - "897.225", - "312.553", - "853.149", - "412.53", - "944.916", - "766.074", - "995.712", - "735.498", - "558.155", - "983.748", - "616.153", - "659.369", - "762.155", - "606.116", - "728.081", - "455.246", - "983.179", - "795.773", - "769.056", - "540.324", - "627.296", - "971.698", - "278.204", - "447.536", - "914.536", - "472.716", - "753.32", - "995.044", - "504.548", - "484.586", - "503.337", - "929.348", - "822.08", - "782.567", - "904.538", - "642.188", - "535.097", - "762.983", - "578.187", - "914.493", - "955.296", - "570.913", - "406.397", - "498.846", - "721.516", - "977.909", - "794.191", - "252.216", - "488.11", - "677.841", - "934.538", - "891.196", - "815.517", - "404.573", - "753.252", - "545.46", - "956.909", - "588.603", - "805.947", - "899.183", - "873.764", - "819.293", - "995.007", - "677.615", - "974.321", - "495.91", - "410.597", - "713.807", - "413.14", - "498.693", - "854.135", - "940.604", - "758.33", - "551.621", - "970.733", - "974.052", - "646.378", - "616.569", - "871.632", - "924.493", - "628.134", - "998.037", - "955.328", - "924.02", - "564.702", - "451.523", - "712.803", - "584.612", - "576.392", - "585.035", - "571.326", - "551.487", - "163.687", - "922.507", - "959.669", - "690.901", - "836.746", - "958.298", - "848.334", - "967.898", - "373.061", - "976.136", - "461.54", - "935.489", - "858.55", - "667.884", - "581.334", - "778.994", - "679.387", - "632.748", - "901.625", - "919.222", - "877.808", - "588.992", - "755.8", - "965.477", - "732.255", - "760.007", - "899.597", - "991.78", - "810.046", - "509.898", - "694.66", - "524.219", - "537.343", - "695.028", - "842.595", - "402.382", - "801.614", - "835.624", - "393.682", - "994.013", - "827.681", - "971.752", - "821.762", - "739.484", - "826.163", - "978.124", - "893.6", - "479.115", - "754.561", - "363.929", - "427.887", - "352.639", - "766.282", - "882.051", - "787.617", - "930.195", - "713.18", - "914.116", - "892.218", - "561.625", - "822.381", - "541.956", - "912.433", - "888.622", - "736.241", - "544.36", - "331.692", - "347.034", - "974.277", - "963.201", - "489.897", - "399.698", - "948.929", - "718.424", - "912.17", - "936.427", - "549.547", - "976.703", - "550.954", - "838.776", - "466.947", - "848.096", - "865.744", - "815.129", - "547.383", - "998.071", - "400.847", - "354.615", - "714.817", - "827.87", - "703.47", - "890.437", - "521.964", - "770.214", - "781.743", - "821.973", - "965.585", - "353.422", - "892.371", - "536.43", - "381.215", - "984.157", - "605.122", - "729.756", - "475.977", - "922.434", - "889.907", - "699.624", - "948.331", - "432.486", - "827.852", - "713.459", - "979.299", - "672.55", - "317.764", - "981", - "465.56", - "956.496", - "971.694", - "340.057", - "189.87", - "536.663", - "958.753", - "640.053", - "509.523", - "562.903", - "509.869", - "460.496", - "934.576", - "800.274", - "876.837", - "748.94", - "570.985", - "617.33", - "575.257", - "762.222", - "390.145", - "702.914", - "609.442", - "768.999", - "378.362", - "827.421", - "867.501", - "652.897", - "823.078", - "365.423", - "712.672", - "792.137", - "865.966", - "512.992", - "609.695", - "868.985", - "365.644", - "727.971", - "607.702", - "956.819", - "777.408", - "917.382", - "573.626", - "347.656", - "942.053", - "423.848", - "608.71", - "773.396", - "900.838", - "951.499", - "771.562", - "989.519", - "557.918", - "820.982", - "615.648", - "761.957", - "786.002", - "813.777", - "761.253", - "777.264", - "634.653", - "851.673", - "885.644", - "470.89", - "559.092", - "649.427", - "574.566", - "798.645", - "617.933", - "941.692", - "843.547", - "931.272", - "259.354", - "630.539", - "991.292", - "983.476", - "781.152", - "759.3", - "350.008", - "805.119", - "409.138", - "843.951", - "858.854", - "901.709", - "694.446", - "851.775", - "688.844", - "862.363", - "768.321", - "881.376", - "438.876", - "914.175", - "803.874", - "660.524", - "687.1", - "974.528", - "395.25", - "752.82", - "789.856", - "815.616", - "396.504", - "805.216", - "885.692", - "692.966", - "931.253", - "916.51", - "997.815", - "434.864", - "959.723", - "772.826", - "792.407", - "825.354", - "696.885", - "906.897", - "757.879", - "923.63", - "754.338", - "557.068", - "959.147", - "388.359", - "672.834", - "788.355", - "861.096", - "764.891", - "507.607", - "777.36", - "955.236", - "891.149", - "872.815", - "654.382", - "968.948", - "591.131", - "788.151", - "864.853", - "848.096", - "933.948", - "899.971", - "587.098", - "531.809", - "777.982", - "739.85", - "479.478", - "831.829", - "798.702", - "650.04", - "872.363", - "794.209", - "861.46", - "878.655", - "749.517", - "777.548", - "989.956", - "705.799", - "596.599", - "825.02", - "936.074", - "945.727", - "750.913", - "832.728", - "855.931", - "814.346", - "796.933", - "342.459", - "750.453", - "887.276", - "610.783", - "643.859", - "830.563", - "529.614", - "760.542", - "512.592", - "951.464", - "865.207", - "742.611", - "845.51", - "974.003", - "880.319", - "377.538", - "648.588", - "804.07", - "848.737", - "814.125", - "629.848", - "959.834", - "931.373", - "980.761", - "421.649", - "979.285", - "914.75", - "540.449", - "890.44", - "999.939", - "849.332", - "747.068", - "558.483", - "461.015", - "563.457", - "959.365", - "659.668", - "852.413", - "848.637", - "609.545", - "804.012", - "835.056", - "465.481", - "713.04", - "815.014", - "758.027", - "562.292", - "979.51", - "812.68", - "866.675", - "450.705", - "358.291", - "596.298", - "878.327", - "471.181", - "860.983", - "670.172", - "742.656", - "341.499", - "859.846", - "822.744", - "495.308", - "873.456", - "616.651", - "846.23", - "775.826", - "817.077", - "737.45", - "662.494", - "981.248", - "684.998", - "801.951", - "996.662", - "659.964", - "484.837", - "800.244", - "776.827", - "919.901", - "786.153", - "996.024", - "783.366", - "799.272", - "834.92", - "664.647", - "950.406", - "931.234", - "862.337", - "840.967", - "981.98", - "731.49", - "708.358", - "889.785", - "937.71", - "832.679", - "888.395", - "943.325", - "950.828", - "717.019", - "797.204", - "467.812", - "447.305", - "843.132", - "455.869", - "907.338", - "978.432", - "521.317", - "648.683", - "710.578", - "801.435", - "906.806", - "993.027", - "905.143", - "819.387", - "939.981", - "585.311", - "976.814", - "690.297", - "823.321", - "541.121", - "286.776", - "816.606", - "791.627", - "910.337", - "636.019", - "915.433", - "851.839", - "980.926", - "456.904", - "809.527", - "904.972", - "902.041", - "744.644", - "479.042", - "887.777", - "910.638", - "766.38", - "399.002", - "911.781", - "643.652", - "531.644", - "829.69", - "712.202", - "914.349", - "820.858", - "498.634", - "630.615", - "617.193", - "653.945", - "955.464", - "814.016", - "763.141", - "503.27", - "954.727", - "836.032", - "429.515", - "841.469", - "810.07", - "695.702", - "596.956", - "125.962", - "501.599", - "995.095", - "798.491", - "467.561", - "953.852", - "754.575", - "829.253", - "363.597", - "481.352", - "420.881", - "900.536", - "747.688", - "423.65", - "796.375", - "990.767", - "870.239", - "732.843", - "857.265", - "800.51", - "983.848", - "909.945", - "871.647", - "765.44", - "957.069", - "853.496", - "728.1", - "504.944", - "734.883", - "508.899", - "823.616", - "933.592", - "766.627", - "752.435", - "992.981", - "773.311", - "948.761", - "711.561", - "660.721", - "785.061", - "728.551", - "882.606", - "958.581", - "779.442", - "785.573", - "820.495", - "766.22", - "941.323", - "810.802", - "723.32", - "500.206", - "893.757", - "902.356", - "808.215", - "455.218", - "641.009", - "739.907", - "505.009", - "737.669", - "831.915", - "724.708", - "826.389", - "736.471", - "851.692", - "760.62", - "334.172", - "887.439", - "927.796", - "913.668", - "749.577", - "873.046", - "890.207", - "999.854", - "958.402", - "314.816", - "953.674", - "816.08", - "774.15", - "852.546", - "871.063", - "851.922", - "677.614", - "652.659", - "740.499", - "875.44", - "529.765", - "490.359", - "452.816", - "834.947", - "839.304", - "568.509", - "711.749", - "772.755", - "916.448", - "913.47", - "958.848", - "914.537", - "818.966", - "799.129", - "946.634", - "780.73", - "755.406", - "771.031", - "541.401", - "733.684", - "973.876", - "995.307", - "928.955", - "860.362", - "371.68", - "345.603", - "381.303", - "442.806", - "897.112", - "523.002", - "883.405", - "360.672", - "777.324", - "807.399", - "718.41", - "954.295", - "917.795", - "648.922", - "776.316", - "744.741", - "871.852", - "432.799", - "740.567", - "725.776", - "544.956", - "871.479", - "816.302", - "599.46", - "855.073", - "888.713", - "962.636", - "586.419", - "545.219", - "259.9", - "424.667", - "915.358", - "744.652", - "663.86", - "522.575", - "982.743", - "717.217", - "813.242", - "874.566", - "977.774", - "673.971", - "923.739", - "883.45", - "700.788", - "963.704", - "804.308", - "752.542", - "763.061", - "713.166", - "828.871", - "619.63", - "939.586", - "427.497", - "844.676", - "834.007", - "687.819", - "555.358", - "386.006", - "969.763", - "270.613", - "950.379", - "595.363", - "330.134", - "747.279", - "845.566", - "882.897", - "922.627", - "667.107", - "824.944", - "780.837", - "981.234", - "367.349", - "245.091", - "950.73", - "918.72", - "659.032", - "890.563", - "888.683", - "516.276", - "387.543", - "930.915", - "576.668", - "946.37", - "935.949", - "967.674", - "953.287", - "967.138", - "885.222", - "634.539", - "961.944", - "457.968", - "566.684", - "880.985", - "842.58", - "224.377", - "749.355", - "812.914", - "870.681", - "788.418", - "758.964", - "385.515", - "392.875", - "512.669", - "413.685", - "981.828", - "503.547", - "463.818", - "972.229", - "711.281", - "463.461", - "863.468", - "821.474", - "612.255", - "933.518", - "913.262", - "743.524", - "996.417", - "592.224", - "928.557", - "888.604", - "934.768", - "942.09", - "444.93", - "927.632", - "962.381", - "724.14", - "903.63", - "814.363", - "848.083", - "811.977", - "997.766", - "880.742", - "608.684", - "882.514", - "858.825", - "973.687", - "855.896", - "974.665", - "778.973", - "349.028", - "893.732", - "750.445", - "874.522", - "793.946", - "844.045", - "647.877", - "938.984", - "547.798", - "757.243", - "919.027", - "778.841", - "934.064", - "727.232", - "570.461", - "700.138", - "492.442", - "754.725", - "857.836", - "358.819", - "713.596", - "469.698", - "958.097", - "674.469", - "825", - "758.905", - "776.952", - "988.959", - "971.622", - "660.375", - "678.179", - "778.28", - "832.211", - "976.148", - "777.237", - "915.933", - "924.93", - "389.967", - "787.672", - "384.008", - "528.172", - "738.516", - "971.81", - "580.676", - "602.672", - "815.428", - "722.678", - "878.766", - "663.687", - "687.923", - "956.039", - "773.593", - "833.973", - "799.089", - "796.745", - "919.49", - "910.189", - "992.625", - "939.59", - "465.408", - "646.893", - "980.097", - "709.356", - "855.89", - "714.535", - "794.12", - "966.515", - "980.517", - "788.566", - "750.091", - "990.974", - "771.258", - "975.546", - "490.019", - "520.141", - "953.667", - "587.604", - "648.826", - "721.539", - "717.493", - "609.294", - "932.673", - "699.555", - "893.693", - "892.932", - "944.507", - "973.939", - "785.724", - "665.868", - "940.365", - "931.291", - "925.801", - "545.985", - "408.292", - "956.523", - "535.453", - "948.448", - "851.083", - "784.617", - "908.65", - "460.111", - "961.195", - "987.021", - "884.501", - "978.273", - "961.263", - "705.168", - "763.875", - "845.178", - "934.202", - "689.163", - "986.196", - "747.751", - "606.188", - "787.778", - "407.645", - "954.481", - "802.91", - "735.645", - "812.272", - "570.336", - "525.615", - "746.64", - "779.481", - "773.998", - "988.33", - "723.084", - "657.984", - "505.634", - "951.875", - "618.412", - "775.721", - "867.709", - "717.818", - "906.879", - "887.286", - "960.695", - "796.367", - "953.693", - "795.769", - "849.282", - "790.332", - "331.22", - "779.009", - "611.095", - "812.691", - "832.948", - "802.359", - "459.117", - "991.605", - "633.156", - "662.129", - "997.732", - "952.687", - "762.067", - "773.601", - "682.669", - "822.61", - "831.481", - "953.52", - "794.349", - "937.701", - "717.743", - "368.081", - "854.042", - "709.285", - "575.846", - "770.219", - "643.74", - "972.438", - "974.1", - "505.794", - "268.764", - "765.648", - "983.172", - "778.787", - "680.738", - "982.324", - "848.322", - "647.736", - "920.232", - "803.328", - "893.218", - "994.216", - "853.23", - "703.632", - "429.972", - "934.528", - "431.943", - "840.759", - "434.826", - "976.711", - "966.783", - "807.09", - "378.835", - "854.045", - "727.979", - "953.964", - "585.739", - "901.589", - "986.086", - "658.399", - "872.037", - "961.391", - "721.245", - "400.836", - "838.752", - "919.762", - "765.876", - "751.69", - "523.173", - "947.515", - "860.966", - "939.76", - "764.016", - "860.956", - "990.778", - "481.857", - "683.883", - "747.68", - "869.381", - "901.509", - "959.346", - "512.821", - "899.718", - "764.692", - "770.148", - "656.659", - "894.66", - "766.241", - "739.306", - "596.602", - "778.97", - "930.069", - "741.688", - "880.258", - "779.944", - "546.267", - "921.587", - "733.186", - "779.147", - "926.266", - "689.91", - "786.372", - "231.683", - "495.415", - "886.347", - "911.833", - "731.974", - "574.218", - "696.125", - "355.212", - "489.076", - "757.585", - "947.02", - "598.835", - "498.463", - "65.6501", - "814.569", - "707.511", - "985.888", - "879.65", - "732.408", - "847.883", - "526.176", - "948.606", - "986.533", - "893.845", - "969.076", - "932.071", - "912.777", - "821.771", - "733.838", - "771.134", - "835.044", - "725.409", - "839.573", - "696.652", - "579.249", - "810.825", - "826.228", - "476.811", - "766.778", - "877.666", - "917.669", - "908.506", - "900.271", - "762.877", - "808.375", - "652.124", - "932.106", - "843.252", - "808.083", - "724.715", - "625.726", - "962.267", - "931.293", - "718.556", - "921.165", - "784.79", - "658.463", - "602.936", - "851.034", - "887.611", - "952.629", - "684.384", - "714.836", - "539.939", - "889.332", - "514.308", - "664.151", - "713.851", - "922.61", - "734.729", - "716.175", - "878.544", - "886.108", - "892.197", - "970.45", - "549.689", - "728.985", - "997.4", - "971.979", - "364.806", - "857.172", - "933.23", - "919.962", - "759.403", - "725.57", - "784.014", - "953.594", - "914.395", - "846.7", - "993.821", - "483.159", - "952.753", - "787.4", - "758.081", - "778.99", - "949.357", - "684.823", - "778.006", - "980.99", - "844.315", - "613.944", - "843.375", - "692.936", - "792.839", - "385.524", - "955.035", - "935.922", - "663.956", - "715.764", - "998.95", - "737.168", - "825.595", - "428.163", - "435.776", - "868.182", - "553.768", - "917.584", - "973.8", - "943.3", - "769.559", - "658.657", - "794.5", - "712.992", - "671.978", - "739.305", - "902.604", - "999.318", - "863.48", - "943.433", - "857.426", - "956.097", - "718.83", - "766.554", - "960.248", - "612.707", - "772.848", - "983.159", - "851.884", - "721.872", - "825.153", - "807.268", - "903.074", - "723.303", - "423.115", - "940.301", - "800.649", - "952.299", - "889.052", - "976.475", - "785.466", - "829.816", - "933.87", - "943.376", - "352.476", - "742.371", - "720.629", - "806.816", - "831.193", - "998.858", - "922.787", - "728.557", - "535.354", - "910.437", - "481.246", - "621.851", - "794.788", - "948.177", - "931.55", - "505.891", - "948.073", - "881.614", - "833.117", - "724.547", - "268.22", - "919.819", - "775.203", - "940.381", - "719.286", - "685.182", - "882.78", - "736.012", - "955.23", - "714.25", - "779.139", - "830.875", - "711.25", - "796.635", - "963.571", - "711.459", - "704.967", - "974.577", - "984.547", - "759.349", - "921.294", - "693.313", - "918.066", - "720.389", - "774.193", - "487.419", - "950.831", - "907.132", - "801.141", - "609.136", - "719.683", - "828.551", - "849.884", - "729.509", - "354.46", - "928.653", - "955.615", - "677.992", - "457.166", - "622.59", - "900.953", - "979.811", - "819.631", - "762.499", - "786.437", - "771.073", - "957.894", - "874.09", - "578.848", - "505.841", - "794.852", - "722.862", - "950.369", - "895.152", - "225.12", - "730.966", - "876.839", - "979.223", - "884.315", - "709.449", - "719.35", - "816.323", - "707.143", - "963.718", - "467.393", - "721.749", - "656.886", - "695.346", - "975.251", - "461.553", - "862.714", - "740.116", - "509.206", - "609.598", - "798.507", - "929.664", - "998.257", - "889.426", - "859.382", - "802.86", - "846.119", - "809.458", - "824.703", - "951.855", - "779.954", - "785.187", - "721.88", - "731.246", - "801.838", - "783.318", - "707.228", - "640.562", - "875.064", - "991.199", - "903.663", - "745.084", - "770.31", - "683.686", - "890.463", - "841.139", - "806.435", - "955.985", - "933.254", - "942.413", - "784.691", - "890.982", - "758.686", - "805.576", - "956.853", - "588.538", - "765.373", - "984.152", - "864.012", - "975.364", - "791.81", - "991.69", - "872.402", - "956.089", - "803.507", - "812.374", - "884.684", - "728.485", - "896.382", - "985.757", - "790.219", - "931.969", - "820.879", - "677.405", - "778.846", - "827.908", - "714.831", - "815.643", - "830.271", - "821.02", - "939.326", - "557.902", - "747.675", - "720.5", - "717.39", - "739.327", - "786.64", - "938.407", - "755.612", - "591.848", - "636.983", - "835.305", - "846.538", - "721.636", - "869.83", - "465.885", - "635.971", - "934.393", - "816.852", - "443.753", - "936.465", - "981.621", - "810.355", - "966.396", - "982.159", - "573.431", - "880.987", - "827.007", - "897.219", - "957.693", - "711.442", - "962.66", - "613.213", - "654.202", - "628.956", - "717.463", - "616.111", - "976.337", - "713.453", - "829.47", - "747.744", - "929.441", - "671.268", - "887.269", - "883.059", - "796.446", - "747.604", - "886.779", - "734.028", - "892.314", - "917.437", - "861.56", - "523.355", - "983.477", - "622.031", - "803.667", - "749.716", - "532.371", - "544.967", - "430.282", - "555.931", - "997.022", - "866.428", - "971.096", - "928.422", - "735.948", - "820.244", - "812.673", - "970.51", - "964.873", - "710.411", - "772.048", - "883.044", - "717.54", - "840.781", - "972.608", - "887.263", - "931.355", - "786.552", - "828.272", - "738.896", - "497.292", - "977.026", - "692.247", - "789.326", - "732.258", - "998.643", - "809.715", - "715.807", - "851.344", - "836.568", - "939.967", - "989.132", - "763.86", - "601.824", - "931.781", - "979.031", - "597.882", - "943.848", - "709.238", - "708.199", - "903.775", - "782.343", - "756.531", - "958.551", - "902.915", - "906.926", - "984.563", - "803.807", - "611.576", - "816.59", - "920.829", - "736.208", - "996.139", - "637.25", - "951.884", - "881.296", - "967.799", - "793.788", - "564.138", - "378.838", - "943.303", - "828.326", - "978.429", - "329.056", - "850.332", - "548.947", - "794.826", - "768.293", - "669.981", - "881.72", - "891.012", - "863.621", - "859.327", - "796.653", - "869.532", - "898.749", - "966.871", - "572.123", - "966.262", - "902.493", - "792.171", - "666.812", - "727.947", - "721.809", - "301.07", - "729.122", - "981.939", - "893.45", - "842.673", - "950.996", - "598.336", - "794.193", - "925.748", - "980.499", - "781.728", - "819.191", - "928.56", - "808.521", - "951.853", - "741.644", - "999.111", - "946.246", - "974.375", - "844.363", - "723.624", - "905.987", - "762.265", - "829.011", - "835.912", - "747.557", - "688.087", - "680.816", - "442.116", - "896.883", - "748.489", - "956.669", - "817.761", - "806.647", - "796.068", - "649.749", - "907.622", - "660.088", - "895.445", - "648.575", - "865.401", - "548.654", - "634.588", - "541.324", - "623.217", - "964.006", - "807.46", - "298.807", - "516.346", - "954.482", - "792.563", - "928.014", - "993.529", - "722.184", - "713.566", - "884.128", - "898.761", - "531.056", - "865.935", - "891.634", - "830.41", - "769.823", - "519.647", - "512.285", - "743.793", - "456.64", - "953.512", - "373.715", - "756.788", - "569.133", - "775.047", - "880.791", - "846.344", - "989.675", - "656.172", - "726.582", - "641.421", - "817.323", - "594.628", - "967.767", - "859.918", - "927.073", - "630.007", - "837.783", - "984.799", - "863.888", - "436.171", - "800.496", - "812.414", - "729.339", - "791.491", - "716.605", - "925.937", - "787.458", - "988.724", - "836.779", - "740.534", - "517.967", - "726.222", - "847.355", - "597.716", - "925.313", - "839.437", - "410.195", - "853.3", - "746.291", - "734.01", - "870.446", - "733.4", - "608.201", - "955.366", - "559.636", - "771.047", - "692.963", - "596.476", - "873.075", - "585.687", - "854.519", - "869.525", - "733.186", - "975.819", - "902.87", - "491.162", - "710.828", - "977.542", - "727.321", - "641.718", - "957.816", - "936.928", - "681.078", - "260.342", - "819.109", - "929.02", - "785.272", - "945.998", - "754.689", - "693.635", - "628.312", - "541.36", - "900.438", - "963.637", - "749.748", - "794.431", - "971.248", - "730.537", - "849.342", - "678.915", - "882.524", - "739.741", - "911.767", - "938.851", - "963.901", - "692.868", - "818.881", - "909.474", - "707.963", - "793.014", - "492.42", - "893.038", - "750.97", - "925.794", - "577.558", - "985.777", - "623.692", - "989.412", - "987.789", - "778.008", - "516.741", - "805.468", - "884.193", - "904.9", - "989.99", - "978.284", - "886.075", - "925.726", - "899.538", - "756.158", - "779.914", - "474.824", - "351.381", - "867.279", - "933.519", - "961.378", - "898.072", - "547.72", - "836.257", - "851.888", - "758.576", - "750.859", - "471.942", - "861.288", - "525.946", - "962.579", - "929.437", - "867.475", - "746.667", - "993.939", - "778.037", - "915.276", - "838.204", - "767.166", - "618.298", - "612.303", - "949.316", - "696.419", - "668.559", - "931.728", - "945.87", - "634.864", - "614.125", - "876.03", - "882.096", - "601.253", - "915.38", - "783.711", - "845.84", - "841.971", - "716.858", - "873.328", - "815.342", - "956.421", - "828.707", - "544.236", - "853.429", - "663.437", - "747.427", - "962.509", - "813.616", - "451.018", - "886.113", - "888.179", - "829.254", - "914.729", - "890.626", - "722.909", - "911.782", - "743.713", - "905.212", - "921.782", - "930.609", - "793.715", - "741.59", - "736.16", - "948.568", - "970.057", - "898.837", - "652.854", - "764.782", - "899.936", - "691.95", - "935.619", - "794.14", - "830.263", - "823.267", - "797.974", - "668.754", - "499.088", - "783.418", - "960.265", - "615.05", - "797.181", - "910.024", - "958.36", - "935.39", - "968.493", - "803.385", - "733.325", - "835.196", - "941.088", - "725.788", - "755.859", - "899.612", - "990.527", - "989.268", - "748.031", - "703.579", - "739.458", - "823.981", - "963.466", - "912.794", - "890.754", - "952.158", - "727.92", - "537.632", - "345.144", - "784.735", - "987.077", - "850.83", - "751.653", - "677.716", - "691.601", - "978.884", - "902.345", - "862.213", - "982.398", - "843.134", - "919.176", - "476.701", - "657.707", - "791.671", - "413.542", - "687.262", - "899.343", - "538.327", - "713.639", - "774.867", - "937.486", - "939.014", - "874.038", - "901.894", - "936.052", - "915.262", - "454.944", - "676.138", - "909.446", - "788.245", - "873.253", - "969.01", - "818.483", - "726.891", - "746.7", - "929.402", - "884.352", - "740.371", - "659.511", - "614.522", - "957.766", - "928.583", - "845.07", - "961.523", - "890.465", - "776.042", - "895.571", - "169.297", - "815.529", - "854.823", - "527.938", - "798.529", - "811.799", - "673.167", - "783.092", - "712.438", - "833.862", - "737.478", - "687.642", - "844.629", - "932.833", - "893.393", - "729.664", - "791.717", - "927.978", - "930.72", - "852.747", - "811.861", - "924.542", - "718.836", - "825.459", - "834.682", - "962.019", - "986.183", - "813.848", - "774.405", - "899.504", - "801.332", - "980.648", - "922.231", - "989.265", - "765.93", - "859.871", - "879.77", - "873.76", - "724.18", - "875.972", - "879.767", - "932.241", - "742.257", - "824.889", - "770.474", - "399.28", - "945.438", - "908.836", - "733.116", - "848.245", - "923.271", - "904.534", - "632.86", - "581.645", - "932.415", - "831.436", - "857.489", - "836.003", - "868.241", - "869.276", - "620.156", - "929.113", - "877.592", - "726.852", - "955.853", - "809.498", - "872.11", - "966.129", - "849.433", - "703.952", - "982.64", - "954.349", - "744.383", - "787.232", - "869.642", - "610.116", - "994.511", - "727.913", - "870.05", - "763.666", - "865.748", - "130.581", - "667.778", - "772.368", - "626.031", - "824.681", - "831.997", - "995.077", - "913.444", - "650.081", - "866.298", - "812.208", - "808.997", - "932.81", - "666.363", - "767.38", - "862.796", - "568.943", - "786.44", - "951.298", - "988.661", - "734.432", - "759.49", - "792.751", - "945.839", - "928.199", - "908.334", - "468.641", - "969.487", - "741.104", - "981.932", - "999.957", - "959.124", - "445.55", - "766.556", - "862.311", - "798.705", - "984.322", - "715.448", - "916.48", - "814.714", - "905.378", - "791.525", - "634.645", - "756.291", - "986.062", - "907.097", - "833.154", - "935.647", - "711.179", - "944.631", - "919.623", - "976.482", - "870.854" - ], - "marker": { - "size": 2, - "color": "rgb(25, 243, 46)" - } - }, - { - "mode": "none", - "name": "< 128 not shown for brevity", - "type": "scatter3d", - "xsrc": "JohnMaddock:31:e2a322", - "x": [ - "0" - ], - "ysrc": "JohnMaddock:31:e2a322", - "y": [ - "0" - ], - "zsrc": "JohnMaddock:31:8af868", - "z": [ - "0" - ], - "opacity": 0.05 - } - ], - "layout": { - "scene": { - "xaxis": { - "type": "linear", - "title": { - "text": "a" - } - }, - "yaxis": { - "type": "linear", - "title": { - "text": "b" - } - }, - "camera": { - "up": { - "x": 0, - "y": 0, - "z": 1 - }, - "eye": { - "x": 1.4020189843514879, - "y": 1.2818957627144305, - "z": 1.0385499607880269 - }, - "center": { - "x": 0, - "y": 0, - "z": 0 - }, - "projection": { - "type": "perspective" - } - }, - "aspectmode": "auto", - "aspectratio": { - "x": 0.9944707716036977, - "y": 1.0026527775627772, - "z": 1.0028995014492608 - } - }, - "title": { - "font": { - "size": 19 - }, - "text": "Error Plot for 1F1(a,b,z)

\n0 < a,b,z < 1000
\n
\n(Taken from 100000 Uniformly distributed points.)" - }, - "xaxis": { - "range": [ - -1, - 6 - ], - "autorange": true - }, - "yaxis": { - "range": [ - -1, - 4 - ], - "title": { - "text": "Click to enter Y axis title" - }, - "autorange": true - }, - "legend": { - "font": { - "size": 14 - } - }, - "autosize": true, - "template": { - "data": { - "bar": [ - { - "type": "bar", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "table": [ - { - "type": "table", - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - } - } - ], - "carpet": [ - { - "type": "carpet", - "aaxis": { - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "endlinecolor": "#2a3f5f", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "gridcolor": "#C8D4E3", - "linecolor": "#C8D4E3", - "endlinecolor": "#2a3f5f", - "minorgridcolor": "#C8D4E3", - "startlinecolor": "#2a3f5f" - } - } - ], - "mesh3d": [ - { - "type": "mesh3d", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "contour": [ - { - "type": "contour", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "heatmap": [ - { - "type": "heatmap", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "scatter": [ - { - "type": "scatter", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "surface": [ - { - "type": "surface", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "heatmapgl": [ - { - "type": "heatmapgl", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "histogram": [ - { - "type": "histogram", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - }, - "type": "parcoords" - } - ], - "scatter3d": [ - { - "type": "scatter3d", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scattergl": [ - { - "type": "scattergl", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "choropleth": [ - { - "type": "choropleth", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "scattergeo": [ - { - "type": "scattergeo", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "histogram2d": [ - { - "type": "histogram2d", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ], - "scatterpolar": [ - { - "type": "scatterpolar", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "contourcarpet": [ - { - "type": "contourcarpet", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - ], - "scattercarpet": [ - { - "type": "scattercarpet", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scattermapbox": [ - { - "type": "scattermapbox", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scatterpolargl": [ - { - "type": "scatterpolargl", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "scatterternary": [ - { - "type": "scatterternary", - "marker": { - "colorbar": { - "ticks": "", - "outlinewidth": 0 - } - } - } - ], - "histogram2dcontour": [ - { - "type": "histogram2dcontour", - "colorbar": { - "ticks": "", - "outlinewidth": 0 - }, - "autocolorscale": true - } - ] - }, - "layout": { - "geo": { - "bgcolor": "white", - "showland": true, - "lakecolor": "white", - "landcolor": "white", - "showlakes": true, - "subunitcolor": "#C8D4E3" - }, - "font": { - "color": "#2a3f5f" - }, - "polar": { - "bgcolor": "white", - "radialaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8" - }, - "angularaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8" - } - }, - "scene": { - "xaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - }, - "yaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - }, - "zaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "gridwidth": 2, - "linecolor": "#EBF0F8", - "zerolinecolor": "#EBF0F8", - "showbackground": true, - "backgroundcolor": "white" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "automargin": true, - "zerolinecolor": "#EBF0F8", - "zerolinewidth": 2 - }, - "yaxis": { - "ticks": "", - "gridcolor": "#EBF0F8", - "linecolor": "#EBF0F8", - "automargin": true, - "zerolinecolor": "#EBF0F8", - "zerolinewidth": 2 - }, - "ternary": { - "aaxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "baxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "caxis": { - "ticks": "", - "gridcolor": "#DFE8F3", - "linecolor": "#A2B1C6" - }, - "bgcolor": "white" - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#19d3f3", - "#e763fa", - "#fecb52", - "#ffa15a", - "#ff6692", - "#b6e880" - ], - "hovermode": "closest", - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0508b8" - ], - [ - 0.0893854748603352, - "#1910d8" - ], - [ - 0.1787709497206704, - "#3c19f0" - ], - [ - 0.2681564245810056, - "#6b1cfb" - ], - [ - 0.3575418994413408, - "#981cfd" - ], - [ - 0.44692737430167595, - "#bf1cfd" - ], - [ - 0.5363128491620112, - "#dd2bfd" - ], - [ - 0.6256983240223464, - "#f246fe" - ], - [ - 0.7150837988826816, - "#fc67fd" - ], - [ - 0.8044692737430168, - "#fe88fc" - ], - [ - 0.8938547486033519, - "#fea5fd" - ], - [ - 0.9832402234636871, - "#febefe" - ], - [ - 1, - "#fec3fe" - ] - ], - "sequentialminus": [ - [ - 0, - "#0508b8" - ], - [ - 0.0893854748603352, - "#1910d8" - ], - [ - 0.1787709497206704, - "#3c19f0" - ], - [ - 0.2681564245810056, - "#6b1cfb" - ], - [ - 0.3575418994413408, - "#981cfd" - ], - [ - 0.44692737430167595, - "#bf1cfd" - ], - [ - 0.5363128491620112, - "#dd2bfd" - ], - [ - 0.6256983240223464, - "#f246fe" - ], - [ - 0.7150837988826816, - "#fc67fd" - ], - [ - 0.8044692737430168, - "#fe88fc" - ], - [ - 0.8938547486033519, - "#fea5fd" - ], - [ - 0.9832402234636871, - "#febefe" - ], - [ - 1, - "#fec3fe" - ] - ] - }, - "plot_bgcolor": "white", - "paper_bgcolor": "white", - "shapedefaults": { - "line": { - "width": 0 - }, - "opacity": 0.4, - "fillcolor": "#506784" - }, - "annotationdefaults": { - "arrowhead": 0, - "arrowcolor": "#506784", - "arrowwidth": 1 - } - }, - "themeRef": "PLOTLY_WHITE" - }, - "showlegend": true - }, - "frames": [] -} \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/script_include.html boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/script_include.html --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/script_include.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/script_include.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -
- -
diff -Nru boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/title.tex boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/title.tex --- boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/title.tex 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/doc/graphs/hypergeometric_1f1/title.tex 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -\begin{center}\large -Error Rates In $_1F_1(a,b,z)$ - -For - -$-1000 < a,b < 0$ - -$0 < z < 1000$ -\end{center} diff -Nru boost1.81-1.81.0/libs/math/reporting/performance/doc/boost-no-inspect boost1.81-1.81.0/libs/math/reporting/performance/doc/boost-no-inspect --- boost1.81-1.81.0/libs/math/reporting/performance/doc/boost-no-inspect 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/reporting/performance/doc/boost-no-inspect 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - diff -Nru boost1.81-1.81.0/libs/math/reporting/performance/html/index.html boost1.81-1.81.0/libs/math/reporting/performance/html/index.html --- boost1.81-1.81.0/libs/math/reporting/performance/html/index.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/math/reporting/performance/html/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,16754 +0,0 @@ - - - -Special Function and Distribution Performance Report - - - - - - - - - - - - -
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
-
-
-
-
-
-

-Special Function and Distribution Performance Report

-
-

- Distributed under the Boost Software License, Version 1.0. (See accompanying - file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -

-
-
-
-
- -
- -
-

Table 1. Compiler Comparison on Windows x64

-
------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- Microsoft Visual C++ version 14.2
boost 1.73 -

-
-

- GNU C++ version 9.2.0
boost 1.73 -

-
-

- GNU C++ version 9.2.0
boost 1.73
promote_double<false> -

-
-

- assoc_laguerre -

-
-

- 1.41
(179ns)
-

-
-

- 1.08
(137ns)
-

-
-

- 1.00
(127ns)
-

-
-

- assoc_legendre -

-
-

- 1.76
(248ns)
-

-
-

- 1.36
(192ns)
-

-
-

- 1.00
(141ns)
-

-
-

- beta -

-
-

- 1.00
(123ns)
-

-
-

- 2.62
(322ns)
-

-
-

- 1.93
(237ns)
-

-
-

- beta (incomplete) -

-
-

- 1.00
(470ns)
-

-
-

- 2.95
(1385ns)
-

-
-

- 1.58
(741ns)
-

-
-

- cbrt -

-
-

- 3.40
(51ns)
-

-
-

- 4.67
(70ns)
-

-
-

- 1.00
(15ns)
-

-
-

- cyl_bessel_i -

-
-

- 1.00
(281ns)
-

-
-

- 3.38
(949ns)
-

-
-

- 1.38
(387ns)
-

-
-

- cyl_bessel_i (integer order) -

-
-

- 1.00
(195ns)
-

-
-

- 3.06
(597ns)
-

-
-

- 1.00
(195ns)
-

-
-

- cyl_bessel_j -

-
-

- 1.00
(371ns)
-

-
-

- 2.39
(886ns)
-

-
-

- 1.35
(499ns)
-

-
-

- cyl_bessel_j (integer order) -

-
-

- 1.28
(123ns)
-

-
-

- 1.92
(184ns)
-

-
-

- 1.00
(96ns)
-

-
-

- cyl_bessel_k -

-
-

- 1.11
(385ns)
-

-
-

- 19.68
(6847ns)
-

-
-

- 1.00
(348ns)
-

-
-

- cyl_bessel_k (integer order) -

-
-

- 1.06
(217ns)
-

-
-

- 18.17
(3724ns)
-

-
-

- 1.00
(205ns)
-

-
-

- cyl_neumann -

-
-

- 1.17
(6696ns)
-

-
-

- 1.76
(10032ns)
-

-
-

- 1.00
(5715ns)
-

-
-

- cyl_neumann (integer order) -

-
-

- 1.00
(158ns)
-

-
-

- 2.20
(348ns)
-

-
-

- 1.59
(252ns)
-

-
-

- digamma -

-
-

- 1.00
(20ns)
-

-
-

- 3.45
(69ns)
-

-
-

- 2.30
(46ns)
-

-
-

- ellint_1 -

-
-

- 1.57
(390ns)
-

-
-

- 1.41
(349ns)
-

-
-

- 1.00
(248ns)
-

-
-

- ellint_1 (complete) -

-
-

- 1.64
(77ns)
-

-
-

- 1.64
(77ns)
-

-
-

- 1.00
(47ns)
-

-
-

- ellint_2 -

-
-

- 1.81
(702ns)
-

-
-

- 1.50
(583ns)
-

-
-

- 1.00
(388ns)
-

-
-

- ellint_2 (complete) -

-
-

- 3.11
(84ns)
-

-
-

- 2.11
(57ns)
-

-
-

- 1.00
(27ns)
-

-
-

- ellint_3 -

-
-

- 3.47
(1381ns)
-

-
-

- 1.68
(670ns)
-

-
-

- 1.00
(398ns)
-

-
-

- ellint_3 (complete) -

-
-

- inf
(802ns)
-

-
-

- -nan(ind)
(0ns)
-

-
-

- -nan(ind)
(0ns)
-

-
-

- ellint_rc -

-
-

- 1.55
(59ns)
-

-
-

- 2.21
(84ns)
-

-
-

- 1.00
(38ns)
-

-
-

- ellint_rd -

-
-

- 1.32
(271ns)
-

-
-

- 1.26
(260ns)
-

-
-

- 1.00
(206ns)
-

-
-

- ellint_rf -

-
-

- 1.27
(62ns)
-

-
-

- 1.94
(95ns)
-

-
-

- 1.00
(49ns)
-

-
-

- ellint_rj -

-
-

- 1.46
(264ns)
-

-
-

- 2.29
(414ns)
-

-
-

- 1.00
(181ns)
-

-
-

- erf -

-
-

- 1.30
(43ns)
-

-
-

- 1.85
(61ns)
-

-
-

- 1.00
(33ns)
-

-
-

- erfc -

-
-

- 1.06
(54ns)
-

-
-

- 1.76
(90ns)
-

-
-

- 1.00
(51ns)
-

-
-

- expint -

-
-

- 1.00
(27ns)
-

-
-

- 3.41
(92ns)
-

-
-

- 2.22
(60ns)
-

-
-

- expint (En) -

-
-

- 1.00
(106ns)
-

-
-

- 1.94
(206ns)
-

-
-

- 1.29
(137ns)
-

-
-

- expm1 -

-
-

- 1.00
(11ns)
-

-
-

- 3.00
(33ns)
-

-
-

- 2.36
(26ns)
-

-
-

- gamma_p -

-
-

- 1.00
(303ns)
-

-
-

- 2.00
(605ns)
-

-
-

- 1.17
(355ns)
-

-
-

- gamma_p_inv -

-
-

- 1.00
(1266ns)
-

-
-

- 1.85
(2341ns)
-

-
-

- 1.15
(1460ns)
-

-
-

- gamma_q -

-
-

- 1.00
(294ns)
-

-
-

- 2.10
(618ns)
-

-
-

- 1.21
(356ns)
-

-
-

- gamma_q_inv -

-
-

- 1.00
(1194ns)
-

-
-

- 1.66
(1987ns)
-

-
-

- 1.14
(1357ns)
-

-
-

- ibeta -

-
-

- 1.00
(512ns)
-

-
-

- 2.63
(1344ns)
-

-
-

- 1.31
(673ns)
-

-
-

- ibeta_inv -

-
-

- 1.00
(1910ns)
-

-
-

- 2.49
(4751ns)
-

-
-

- 1.48
(2822ns)
-

-
-

- ibetac -

-
-

- 1.00
(525ns)
-

-
-

- 2.60
(1365ns)
-

-
-

- 1.27
(668ns)
-

-
-

- ibetac_inv -

-
-

- 1.00
(1676ns)
-

-
-

- 2.85
(4778ns)
-

-
-

- 1.74
(2910ns)
-

-
-

- jacobi_cn -

-
-

- 1.00
(181ns)
-

-
-

- 3.10
(561ns)
-

-
-

- 2.00
(362ns)
-

-
-

- jacobi_dn -

-
-

- 1.00
(203ns)
-

-
-

- 3.03
(616ns)
-

-
-

- 1.93
(392ns)
-

-
-

- jacobi_sn -

-
-

- 1.00
(202ns)
-

-
-

- 2.81
(568ns)
-

-
-

- 1.73
(350ns)
-

-
-

- laguerre -

-
-

- 1.02
(107ns)
-

-
-

- 1.07
(112ns)
-

-
-

- 1.00
(105ns)
-

-
-

- legendre -

-
-

- 1.11
(283ns)
-

-
-

- 1.25
(320ns)
-

-
-

- 1.00
(255ns)
-

-
-

- legendre Q -

-
-

- 1.00
(309ns)
-

-
-

- 1.51
(466ns)
-

-
-

- 1.15
(354ns)
-

-
-

- lgamma -

-
-

- 1.00
(80ns)
-

-
-

- 2.67
(214ns)
-

-
-

- 2.00
(160ns)
-

-
-

- log1p -

-
-

- 1.00
(14ns)
-

-
-

- 2.07
(29ns)
-

-
-

- 1.21
(17ns)
-

-
-

- polygamma -

-
-

- 1.00
(4193ns)
-

-
-

- 1.85
(7743ns)
-

-
-

- 1.91
(8018ns)
-

-
-

- sph_bessel -

-
-

- 1.01
(668ns)
-

-
-

- 1.48
(975ns)
-

-
-

- 1.00
(661ns)
-

-
-

- sph_neumann -

-
-

- 1.07
(1138ns)
-

-
-

- 2.96
(3153ns)
-

-
-

- 1.00
(1064ns)
-

-
-

- tgamma -

-
-

- 1.00
(74ns)
-

-
-

- 3.50
(259ns)
-

-
-

- 2.14
(158ns)
-

-
-

- tgamma (incomplete) -

-
-

- 1.00
(208ns)
-

-
-

- 2.30
(478ns)
-

-
-

- 1.64
(342ns)
-

-
-

- trigamma -

-
-

- 1.00
(12ns)
-

-
-

- 2.83
(34ns)
-

-
-

- 1.17
(14ns)
-

-
-

- zeta -

-
-

- 1.00
(117ns)
-

-
-

- 2.65
(310ns)
-

-
-

- 1.89
(221ns)
-

-
-
-
-
-
- -
-

Table 2. Compiler Option Comparison on Windows x64

-
------ - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- cl /Od (x86 build) -

-
-

- cl /arch:sse2 /Ox (x86 build) -

-
-

- cl /Ox (x64 build) -

-
-

- boost::math::cbrt -

-
-

- 5.05
(202ns)
-

-
-

- 1.20
(48ns)
-

-
-

- 1.00
(40ns)
-

-
-

- boost::math::cyl_bessel_j (integer orders) -

-
-

- 4.38
(530ns)
-

-
-

- 1.00
(121ns)
-

-
-

- 1.02
(124ns)
-

-
-

- boost::math::ibeta_inv -

-
-

- 4.52
(8277ns)
-

-
-

- 1.11
(2042ns)
-

-
-

- 1.00
(1833ns)
-

-
-
-
-
-
- -
-

Table 3. Distribution performance comparison for different performance options - with GNU C++ version 9.2.0 on Windows x64

-
------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- boost 1.73 -

-
-

- Boost
promote_double<false> -

-
-

- Boost
promote_double<false>
digits10<10> -

-
-

- Boost
float
promote_float<false> -

-
-

- ArcSine (CDF) -

-
-

- 1.10
(22ns)
-

-
-

- 1.30
(26ns)
-

-
-

- 1.00
(20ns)
-

-
-

- 3.20
(64ns)
-

-
-

- ArcSine (PDF) -

-
-

- 1.00
(5ns)
-

-
-

- 1.00
(5ns)
-

-
-

- 1.00
(5ns)
-

-
-

- 1.60
(8ns)
-

-
-

- ArcSine (quantile) -

-
-

- 1.00
(53ns)
-

-
-

- 1.00
(53ns)
-

-
-

- 1.02
(54ns)
-

-
-

- 1.04
(55ns)
-

-
-

- Beta (CDF) -

-
-

- 2.32
(362ns)
-

-
-

- 1.31
(205ns)
-

-
-

- 1.17
(183ns)
-

-
-

- 1.00
(156ns)
-

-
-

- Beta (PDF) -

-
-

- 2.44
(302ns)
-

-
-

- 1.12
(139ns)
-

-
-

- 1.13
(140ns)
-

-
-

- 1.00
(124ns)
-

-
-

- Beta (quantile) -

-
-

- 1.76
(1968ns)
-

-
-

- 1.24
(1383ns)
-

-
-

- 1.00
(1118ns)
-

-
-

- 1.03
(1155ns)
-

-
-

- Binomial (CDF) -

-
-

- 3.57
(959ns)
-

-
-

- 1.30
(350ns)
-

-
-

- 1.27
(341ns)
-

-
-

- 1.00
(269ns)
-

-
-

- Binomial (PDF) -

-
-

- 2.39
(339ns)
-

-
-

- 1.00
(142ns)
-

-
-

- 1.20
(171ns)
-

-
-

- 1.04
(148ns)
-

-
-

- Binomial (quantile) -

-
-

- 3.20
(4255ns)
-

-
-

- 1.42
(1884ns)
-

-
-

- 1.19
(1582ns)
-

-
-

- 1.00
(1328ns)
-

-
-

- Cauchy (CDF) -

-
-

- 1.12
(19ns)
-

-
-

- 1.18
(20ns)
-

-
-

- 1.00
(17ns)
-

-
-

- 3.18
(54ns)
-

-
-

- Cauchy (PDF) -

-
-

- 1.33
(4ns)
-

-
-

- 1.67
(5ns)
-

-
-

- 1.00
(3ns)
-

-
-

- 1.33
(4ns)
-

-
-

- Cauchy (quantile) -

-
-

- 1.32
(25ns)
-

-
-

- 1.21
(23ns)
-

-
-

- 1.00
(19ns)
-

-
-

- 1.21
(23ns)
-

-
-

- ChiSquared (CDF) -

-
-

- 2.79
(953ns)
-

-
-

- 1.55
(529ns)
-

-
-

- 1.27
(434ns)
-

-
-

- 1.00
(341ns)
-

-
-

- ChiSquared (PDF) -

-
-

- 1.82
(189ns)
-

-
-

- 1.00
(104ns)
-

-
-

- 1.01
(105ns)
-

-
-

- 1.02
(106ns)
-

-
-

- ChiSquared (quantile) -

-
-

- 2.40
(1452ns)
-

-
-

- 1.49
(901ns)
-

-
-

- 1.19
(717ns)
-

-
-

- 1.00
(605ns)
-

-
-

- Exponential (CDF) -

-
-

- 1.14
(33ns)
-

-
-

- 1.00
(29ns)
-

-
-

- 1.03
(30ns)
-

-
-

- 1.00
(29ns)
-

-
-

- Exponential (PDF) -

-
-

- 1.08
(54ns)
-

-
-

- 1.02
(51ns)
-

-
-

- 1.00
(50ns)
-

-
-

- 1.04
(52ns)
-

-
-

- Exponential (quantile) -

-
-

- 1.89
(36ns)
-

-
-

- 1.00
(19ns)
-

-
-

- 1.05
(20ns)
-

-
-

- 1.21
(23ns)
-

-
-

- ExtremeValue (CDF) -

-
-

- 1.05
(104ns)
-

-
-

- 1.02
(101ns)
-

-
-

- 1.00
(99ns)
-

-
-

- 1.04
(103ns)
-

-
-

- ExtremeValue (PDF) -

-
-

- 1.04
(144ns)
-

-
-

- 1.04
(144ns)
-

-
-

- 1.00
(138ns)
-

-
-

- 1.03
(142ns)
-

-
-

- ExtremeValue (quantile) -

-
-

- 1.07
(64ns)
-

-
-

- 1.02
(61ns)
-

-
-

- 1.00
(60ns)
-

-
-

- 1.13
(68ns)
-

-
-

- F (CDF) -

-
-

- 3.55
(668ns)
-

-
-

- 1.58
(297ns)
-

-
-

- 1.23
(232ns)
-

-
-

- 1.00
(188ns)
-

-
-

- F (PDF) -

-
-

- 2.29
(291ns)
-

-
-

- 1.06
(135ns)
-

-
-

- 1.02
(129ns)
-

-
-

- 1.00
(127ns)
-

-
-

- F (quantile) -

-
-

- 2.17
(2215ns)
-

-
-

- 1.14
(1163ns)
-

-
-

- 1.00
(1023ns)
-

-
-

- 1.07
(1090ns)
-

-
-

- Gamma (CDF) -

-
-

- 1.94
(492ns)
-

-
-

- 1.19
(301ns)
-

-
-

- 1.10
(280ns)
-

-
-

- 1.00
(254ns)
-

-
-

- Gamma (PDF) -

-
-

- 1.55
(236ns)
-

-
-

- 1.00
(152ns)
-

-
-

- 1.00
(152ns)
-

-
-

- 1.01
(153ns)
-

-
-

- Gamma (quantile) -

-
-

- 1.95
(1204ns)
-

-
-

- 1.35
(837ns)
-

-
-

- 1.00
(619ns)
-

-
-

- 1.04
(644ns)
-

-
-

- Geometric (CDF) -

-
-

- 1.38
(40ns)
-

-
-

- 1.00
(29ns)
-

-
-

- 1.00
(29ns)
-

-
-

- 1.07
(31ns)
-

-
-

- Geometric (PDF) -

-
-

- 1.00
(46ns)
-

-
-

- 1.00
(46ns)
-

-
-

- 1.00
(46ns)
-

-
-

- 1.02
(47ns)
-

-
-

- Geometric (quantile) -

-
-

- 1.64
(36ns)
-

-
-

- 1.00
(22ns)
-

-
-

- 1.00
(22ns)
-

-
-

- 1.09
(24ns)
-

-
-

- Hypergeometric (CDF) -

-
-

- 1.11
(49938ns)
-

-
-

- 1.00
(45127ns)
-

-
-

- 1.01
(45445ns)
-

-
-

- 1.12
(50682ns)
-

-
-

- Hypergeometric (PDF) -

-
-

- 1.13
(53353ns)
-

-
-

- 1.04
(49364ns)
-

-
-

- 1.00
(47376ns)
-

-
-

- 1.20
(57034ns)
-

-
-

- Hypergeometric (quantile) -

-
-

- 1.00
(105555ns)
-

-
-

- 1.25
(132253ns)
-

-
-

- 1.36
(143254ns)
-

-
-

- 1.70
(179941ns)
-

-
-

- InverseChiSquared (CDF) -

-
-

- 3.48
(1326ns)
-

-
-

- 1.70
(647ns)
-

-
-

- 1.33
(508ns)
-

-
-

- 1.00
(381ns)
-

-
-

- InverseChiSquared (PDF) -

-
-

- 1.87
(217ns)
-

-
-

- 1.09
(126ns)
-

-
-

- 1.00
(116ns)
-

-
-

- 1.01
(117ns)
-

-
-

- InverseChiSquared (quantile) -

-
-

- 2.81
(1852ns)
-

-
-

- 1.57
(1035ns)
-

-
-

- 1.22
(800ns)
-

-
-

- 1.00
(658ns)
-

-
-

- InverseGamma (CDF) -

-
-

- 1.95
(516ns)
-

-
-

- 1.21
(320ns)
-

-
-

- 1.09
(289ns)
-

-
-

- 1.00
(264ns)
-

-
-

- InverseGamma (PDF) -

-
-

- 1.67
(256ns)
-

-
-

- 1.09
(167ns)
-

-
-

- 1.05
(161ns)
-

-
-

- 1.00
(153ns)
-

-
-

- InverseGamma (quantile) -

-
-

- 1.94
(1268ns)
-

-
-

- 1.36
(884ns)
-

-
-

- 1.00
(652ns)
-

-
-

- 1.02
(666ns)
-

-
-

- InverseGaussian (CDF) -

-
-

- 1.83
(172ns)
-

-
-

- 1.83
(172ns)
-

-
-

- 1.82
(171ns)
-

-
-

- 1.00
(94ns)
-

-
-

- InverseGaussian (PDF) -

-
-

- 1.00
(28ns)
-

-
-

- 1.14
(32ns)
-

-
-

- 1.00
(28ns)
-

-
-

- 1.07
(30ns)
-

-
-

- InverseGaussian (quantile) -

-
-

- 1.94
(2657ns)
-

-
-

- 1.93
(2635ns)
-

-
-

- 1.72
(2359ns)
-

-
-

- 1.00
(1368ns)
-

-
-

- Laplace (CDF) -

-
-

- 1.02
(50ns)
-

-
-

- 1.00
(49ns)
-

-
-

- 1.00
(49ns)
-

-
-

- 1.08
(53ns)
-

-
-

- Laplace (PDF) -

-
-

- 1.00
(49ns)
-

-
-

- 1.02
(50ns)
-

-
-

- 1.00
(49ns)
-

-
-

- 1.04
(51ns)
-

-
-

- Laplace (quantile) -

-
-

- 1.03
(33ns)
-

-
-

- 1.03
(33ns)
-

-
-

- 1.00
(32ns)
-

-
-

- 1.16
(37ns)
-

-
-

- LogNormal (CDF) -

-
-

- 1.73
(176ns)
-

-
-

- 1.25
(127ns)
-

-
-

- 1.28
(131ns)
-

-
-

- 1.00
(102ns)
-

-
-

- LogNormal (PDF) -

-
-

- 1.04
(87ns)
-

-
-

- 1.02
(86ns)
-

-
-

- 1.00
(84ns)
-

-
-

- 1.07
(90ns)
-

-
-

- LogNormal (quantile) -

-
-

- 1.23
(116ns)
-

-
-

- 1.00
(94ns)
-

-
-

- 1.01
(95ns)
-

-
-

- 1.06
(100ns)
-

-
-

- Logistic (CDF) -

-
-

- 1.00
(46ns)
-

-
-

- 1.02
(47ns)
-

-
-

- 1.00
(46ns)
-

-
-

- 1.02
(47ns)
-

-
-

- Logistic (PDF) -

-
-

- 1.00
(46ns)
-

-
-

- 1.02
(47ns)
-

-
-

- 1.02
(47ns)
-

-
-

- 1.07
(49ns)
-

-
-

- Logistic (quantile) -

-
-

- 1.00
(33ns)
-

-
-

- 1.03
(34ns)
-

-
-

- 1.00
(33ns)
-

-
-

- 1.15
(38ns)
-

-
-

- NegativeBinomial (CDF) -

-
-

- 3.95
(1158ns)
-

-
-

- 1.66
(485ns)
-

-
-

- 1.32
(386ns)
-

-
-

- 1.00
(293ns)
-

-
-

- NegativeBinomial (PDF) -

-
-

- 2.29
(307ns)
-

-
-

- 1.01
(135ns)
-

-
-

- 1.00
(134ns)
-

-
-

- 1.01
(136ns)
-

-
-

- NegativeBinomial (quantile) -

-
-

- 2.81
(6154ns)
-

-
-

- 1.19
(2608ns)
-

-
-

- 1.00
(2190ns)
-

-
-

- 1.26
(2752ns)
-

-
-

- NonCentralBeta (CDF) -

-
-

- 2.62
(1450ns)
-

-
-

- 1.46
(806ns)
-

-
-

- 1.28
(708ns)
-

-
-

- 1.00
(553ns)
-

-
-

- NonCentralBeta (PDF) -

-
-

- 2.58
(969ns)
-

-
-

- 1.31
(490ns)
-

-
-

- 1.15
(433ns)
-

-
-

- 1.00
(375ns)
-

-
-

- NonCentralBeta (quantile) -

-
-

- 3.69
(37583ns)
-

-
-

- 2.00
(20369ns)
-

-
-

- 1.81
(18498ns)
-

-
-

- 1.00
(10193ns)
-

-
-

- NonCentralChiSquared (CDF) -

-
-

- 2.22
(4037ns)
-

-
-

- 1.79
(3256ns)
-

-
-

- 1.28
(2332ns)
-

-
-

- 1.00
(1819ns)
-

-
-

- NonCentralChiSquared (PDF) -

-
-

- 1.58
(630ns)
-

-
-

- 1.29
(514ns)
-

-
-

- 1.00
(399ns)
-

-
-

- 1.03
(409ns)
-

-
-

- NonCentralChiSquared (quantile) -

-
-

- 3.14
(33255ns)
-

-
-

- 1.94
(20620ns)
-

-
-

- 1.26
(13388ns)
-

-
-

- 1.00
(10603ns)
-

-
-

- NonCentralF (CDF) -

-
-

- 2.48
(1426ns)
-

-
-

- 1.32
(762ns)
-

-
-

- 1.13
(652ns)
-

-
-

- 1.00
(576ns)
-

-
-

- NonCentralF (PDF) -

-
-

- 2.74
(1306ns)
-

-
-

- 1.37
(652ns)
-

-
-

- 1.15
(548ns)
-

-
-

- 1.00
(477ns)
-

-
-

- NonCentralF (quantile) -

-
-

- 2.64
(22025ns)
-

-
-

- 1.38
(11560ns)
-

-
-

- 1.12
(9319ns)
-

-
-

- 1.00
(8356ns)
-

-
-

- NonCentralT (CDF) -

-
-

- 3.75
(6473ns)
-

-
-

- 1.83
(3155ns)
-

-
-

- 1.63
(2819ns)
-

-
-

- 1.00
(1727ns)
-

-
-

- NonCentralT (PDF) -

-
-

- 2.81
(4098ns)
-

-
-

- 1.40
(2040ns)
-

-
-

- 1.42
(2066ns)
-

-
-

- 1.00
(1456ns)
-

-
-

- NonCentralT (quantile) -

-
-

- 3.80
(65926ns)
-

-
-

- 1.87
(32431ns)
-

-
-

- 1.37
(23756ns)
-

-
-

- 1.00
(17331ns)
-

-
-

- Normal (CDF) -

-
-

- 1.78
(135ns)
-

-
-

- 1.53
(116ns)
-

-
-

- 1.22
(93ns)
-

-
-

- 1.00
(76ns)
-

-
-

- Normal (PDF) -

-
-

- 1.00
(48ns)
-

-
-

- 1.23
(59ns)
-

-
-

- 1.19
(57ns)
-

-
-

- 1.33
(64ns)
-

-
-

- Normal (quantile) -

-
-

- 1.45
(80ns)
-

-
-

- 1.00
(55ns)
-

-
-

- 1.00
(55ns)
-

-
-

- 1.02
(56ns)
-

-
-

- Pareto (CDF) -

-
-

- 1.13
(59ns)
-

-
-

- 1.00
(52ns)
-

-
-

- 1.15
(60ns)
-

-
-

- 1.06
(55ns)
-

-
-

- Pareto (PDF) -

-
-

- 1.07
(96ns)
-

-
-

- 1.02
(92ns)
-

-
-

- 1.08
(97ns)
-

-
-

- 1.00
(90ns)
-

-
-

- Pareto (quantile) -

-
-

- 1.00
(82ns)
-

-
-

- 1.02
(84ns)
-

-
-

- 1.00
(82ns)
-

-
-

- 1.04
(85ns)
-

-
-

- Poisson (CDF) -

-
-

- 1.97
(254ns)
-

-
-

- 1.04
(134ns)
-

-
-

- 1.16
(150ns)
-

-
-

- 1.00
(129ns)
-

-
-

- Poisson (PDF) -

-
-

- 1.61
(171ns)
-

-
-

- 1.06
(112ns)
-

-
-

- 1.00
(106ns)
-

-
-

- 1.05
(111ns)
-

-
-

- Poisson (quantile) -

-
-

- 2.16
(1128ns)
-

-
-

- 1.23
(641ns)
-

-
-

- 1.26
(657ns)
-

-
-

- 1.00
(523ns)
-

-
-

- Rayleigh (CDF) -

-
-

- 1.24
(47ns)
-

-
-

- 1.00
(38ns)
-

-
-

- 1.03
(39ns)
-

-
-

- 1.08
(41ns)
-

-
-

- Rayleigh (PDF) -

-
-

- 1.00
(64ns)
-

-
-

- 1.09
(70ns)
-

-
-

- 1.03
(66ns)
-

-
-

- 1.09
(70ns)
-

-
-

- Rayleigh (quantile) -

-
-

- 2.00
(48ns)
-

-
-

- 1.00
(24ns)
-

-
-

- 1.08
(26ns)
-

-
-

- 1.29
(31ns)
-

-
-

- SkewNormal (CDF) -

-
-

- 1.40
(669ns)
-

-
-

- 1.32
(632ns)
-

-
-

- 1.15
(549ns)
-

-
-

- 1.00
(479ns)
-

-
-

- SkewNormal (PDF) -

-
-

- 1.27
(173ns)
-

-
-

- 1.17
(159ns)
-

-
-

- 1.15
(156ns)
-

-
-

- 1.00
(136ns)
-

-
-

- SkewNormal (quantile) -

-
-

- 2.15
(6968ns)
-

-
-

- 1.82
(5903ns)
-

-
-

- 1.32
(4287ns)
-

-
-

- 1.00
(3237ns)
-

-
-

- StudentsT (CDF) -

-
-

- 3.15
(1151ns)
-

-
-

- 1.98
(721ns)
-

-
-

- 2.03
(741ns)
-

-
-

- 1.00
(365ns)
-

-
-

- StudentsT (PDF) -

-
-

- 2.12
(360ns)
-

-
-

- 1.09
(186ns)
-

-
-

- 1.11
(188ns)
-

-
-

- 1.00
(170ns)
-

-
-

- StudentsT (quantile) -

-
-

- 1.70
(1461ns)
-

-
-

- 1.35
(1161ns)
-

-
-

- 1.28
(1099ns)
-

-
-

- 1.00
(859ns)
-

-
-

- Weibull (CDF) -

-
-

- 1.30
(96ns)
-

-
-

- 1.04
(77ns)
-

-
-

- 1.15
(85ns)
-

-
-

- 1.00
(74ns)
-

-
-

- Weibull (PDF) -

-
-

- 1.18
(164ns)
-

-
-

- 1.00
(139ns)
-

-
-

- 1.15
(160ns)
-

-
-

- 1.06
(148ns)
-

-
-

- Weibull (quantile) -

-
-

- 1.12
(133ns)
-

-
-

- 1.13
(134ns)
-

-
-

- 1.00
(119ns)
-

-
-

- 1.03
(123ns)
-

-
-
-
-
-
- -
-

Table 4. Distribution performance comparison for different performance options - with Microsoft Visual C++ version 14.2 on Windows x64

-
------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- boost 1.73 -

-
-

- Boost
promote_double<false>
digits10<10> -

-
-

- Boost
float
promote_float<false> -

-
-

- ArcSine (CDF) -

-
-

- 1.30
(43ns)
-

-
-

- 1.00
(33ns)
-

-
-

- 1.00
(33ns)
-

-
-

- ArcSine (PDF) -

-
-

- 1.00
(17ns)
-

-
-

- 1.06
(18ns)
-

-
-

- 1.00
(17ns)
-

-
-

- ArcSine (quantile) -

-
-

- 1.20
(30ns)
-

-
-

- 1.00
(25ns)
-

-
-

- 1.20
(30ns)
-

-
-

- Beta (CDF) -

-
-

- 1.37
(158ns)
-

-
-

- 1.22
(140ns)
-

-
-

- 1.00
(115ns)
-

-
-

- Beta (PDF) -

-
-

- 1.08
(104ns)
-

-
-

- 1.14
(109ns)
-

-
-

- 1.00
(96ns)
-

-
-

- Beta (quantile) -

-
-

- 1.07
(806ns)
-

-
-

- 1.11
(833ns)
-

-
-

- 1.00
(753ns)
-

-
-

- Binomial (CDF) -

-
-

- 1.80
(413ns)
-

-
-

- 1.50
(344ns)
-

-
-

- 1.00
(230ns)
-

-
-

- Binomial (PDF) -

-
-

- 1.01
(127ns)
-

-
-

- 1.41
(178ns)
-

-
-

- 1.00
(126ns)
-

-
-

- Binomial (quantile) -

-
-

- 1.38
(2024ns)
-

-
-

- 1.18
(1727ns)
-

-
-

- 1.00
(1466ns)
-

-
-

- Cauchy (CDF) -

-
-

- 1.00
(26ns)
-

-
-

- 1.04
(27ns)
-

-
-

- 1.23
(32ns)
-

-
-

- Cauchy (PDF) -

-
-

- 1.00
(8ns)
-

-
-

- 1.38
(11ns)
-

-
-

- 1.13
(9ns)
-

-
-

- Cauchy (quantile) -

-
-

- 1.37
(26ns)
-

-
-

- 1.00
(19ns)
-

-
-

- 1.37
(26ns)
-

-
-

- ChiSquared (CDF) -

-
-

- 1.35
(676ns)
-

-
-

- 1.59
(798ns)
-

-
-

- 1.00
(501ns)
-

-
-

- ChiSquared (PDF) -

-
-

- 1.00
(93ns)
-

-
-

- 1.27
(118ns)
-

-
-

- 1.22
(113ns)
-

-
-

- ChiSquared (quantile) -

-
-

- 1.62
(1073ns)
-

-
-

- 1.83
(1211ns)
-

-
-

- 1.00
(662ns)
-

-
-

- Exponential (CDF) -

-
-

- 1.70
(17ns)
-

-
-

- 1.10
(11ns)
-

-
-

- 1.00
(10ns)
-

-
-

- Exponential (PDF) -

-
-

- 1.50
(15ns)
-

-
-

- 1.70
(17ns)
-

-
-

- 1.00
(10ns)
-

-
-

- Exponential (quantile) -

-
-

- 1.18
(20ns)
-

-
-

- 1.00
(17ns)
-

-
-

- 1.00
(17ns)
-

-
-

- ExtremeValue (CDF) -

-
-

- 1.18
(26ns)
-

-
-

- 1.18
(26ns)
-

-
-

- 1.00
(22ns)
-

-
-

- ExtremeValue (PDF) -

-
-

- 1.08
(27ns)
-

-
-

- 1.04
(26ns)
-

-
-

- 1.00
(25ns)
-

-
-

- ExtremeValue (quantile) -

-
-

- 1.48
(34ns)
-

-
-

- 1.09
(25ns)
-

-
-

- 1.00
(23ns)
-

-
-

- F (CDF) -

-
-

- 1.56
(277ns)
-

-
-

- 1.28
(228ns)
-

-
-

- 1.00
(178ns)
-

-
-

- F (PDF) -

-
-

- 1.07
(97ns)
-

-
-

- 1.13
(103ns)
-

-
-

- 1.00
(91ns)
-

-
-

- F (quantile) -

-
-

- 1.17
(901ns)
-

-
-

- 1.00
(770ns)
-

-
-

- 1.08
(833ns)
-

-
-

- Gamma (CDF) -

-
-

- 1.30
(234ns)
-

-
-

- 1.29
(233ns)
-

-
-

- 1.00
(180ns)
-

-
-

- Gamma (PDF) -

-
-

- 1.25
(85ns)
-

-
-

- 1.25
(85ns)
-

-
-

- 1.00
(68ns)
-

-
-

- Gamma (quantile) -

-
-

- 1.64
(640ns)
-

-
-

- 1.28
(501ns)
-

-
-

- 1.00
(390ns)
-

-
-

- Geometric (CDF) -

-
-

- 1.13
(18ns)
-

-
-

- 1.00
(16ns)
-

-
-

- 1.19
(19ns)
-

-
-

- Geometric (PDF) -

-
-

- 1.85
(24ns)
-

-
-

- 1.54
(20ns)
-

-
-

- 1.00
(13ns)
-

-
-

- Geometric (quantile) -

-
-

- 1.18
(20ns)
-

-
-

- 1.00
(17ns)
-

-
-

- 1.00
(17ns)
-

-
-

- Hypergeometric (CDF) -

-
-

- 1.00
(244196ns)
-

-
-

- 1.07
(260490ns)
-

-
-

- 1.11
(271879ns)
-

-
-

- Hypergeometric (PDF) -

-
-

- 1.00
(272497ns)
-

-
-

- 1.04
(282183ns)
-

-
-

- 1.09
(296020ns)
-

-
-

- Hypergeometric (quantile) -

-
-

- 1.00
(308077ns)
-

-
-

- 1.00
(307365ns)
-

-
-

- 1.06
(326617ns)
-

-
-

- InverseChiSquared (CDF) -

-
-

- 1.65
(584ns)
-

-
-

- 1.30
(459ns)
-

-
-

- 1.00
(353ns)
-

-
-

- InverseChiSquared (PDF) -

-
-

- 1.37
(78ns)
-

-
-

- 1.32
(75ns)
-

-
-

- 1.00
(57ns)
-

-
-

- InverseChiSquared (quantile) -

-
-

- 1.68
(884ns)
-

-
-

- 1.30
(684ns)
-

-
-

- 1.00
(527ns)
-

-
-

- InverseGamma (CDF) -

-
-

- 1.36
(244ns)
-

-
-

- 1.17
(210ns)
-

-
-

- 1.00
(179ns)
-

-
-

- InverseGamma (PDF) -

-
-

- 1.36
(91ns)
-

-
-

- 1.39
(93ns)
-

-
-

- 1.00
(67ns)
-

-
-

- InverseGamma (quantile) -

-
-

- 1.58
(638ns)
-

-
-

- 1.12
(452ns)
-

-
-

- 1.00
(403ns)
-

-
-

- InverseGaussian (CDF) -

-
-

- 1.28
(109ns)
-

-
-

- 1.32
(112ns)
-

-
-

- 1.00
(85ns)
-

-
-

- InverseGaussian (PDF) -

-
-

- 1.09
(12ns)
-

-
-

- 1.18
(13ns)
-

-
-

- 1.00
(11ns)
-

-
-

- InverseGaussian (quantile) -

-
-

- 1.58
(1651ns)
-

-
-

- 1.15
(1209ns)
-

-
-

- 1.00
(1048ns)
-

-
-

- Laplace (CDF) -

-
-

- 1.00
(13ns)
-

-
-

- 1.00
(13ns)
-

-
-

- 1.00
(13ns)
-

-
-

- Laplace (PDF) -

-
-

- 1.08
(14ns)
-

-
-

- 1.46
(19ns)
-

-
-

- 1.00
(13ns)
-

-
-

- Laplace (quantile) -

-
-

- 1.08
(14ns)
-

-
-

- 1.00
(13ns)
-

-
-

- 1.00
(13ns)
-

-
-

- LogNormal (CDF) -

-
-

- 1.04
(79ns)
-

-
-

- 1.00
(76ns)
-

-
-

- 1.08
(82ns)
-

-
-

- LogNormal (PDF) -

-
-

- 1.25
(35ns)
-

-
-

- 1.07
(30ns)
-

-
-

- 1.00
(28ns)
-

-
-

- LogNormal (quantile) -

-
-

- 1.13
(61ns)
-

-
-

- 1.09
(59ns)
-

-
-

- 1.00
(54ns)
-

-
-

- Logistic (CDF) -

-
-

- 1.00
(14ns)
-

-
-

- 1.07
(15ns)
-

-
-

- 1.36
(19ns)
-

-
-

- Logistic (PDF) -

-
-

- 1.06
(18ns)
-

-
-

- 1.00
(17ns)
-

-
-

- 1.29
(22ns)
-

-
-

- Logistic (quantile) -

-
-

- 1.00
(15ns)
-

-
-

- 1.33
(20ns)
-

-
-

- 1.33
(20ns)
-

-
-

- NegativeBinomial (CDF) -

-
-

- 1.69
(481ns)
-

-
-

- 1.33
(378ns)
-

-
-

- 1.00
(285ns)
-

-
-

- NegativeBinomial (PDF) -

-
-

- 1.01
(114ns)
-

-
-

- 1.00
(113ns)
-

-
-

- 1.09
(123ns)
-

-
-

- NegativeBinomial (quantile) -

-
-

- 1.21
(2651ns)
-

-
-

- 1.00
(2186ns)
-

-
-

- 1.17
(2554ns)
-

-
-

- NonCentralBeta (CDF) -

-
-

- 1.90
(735ns)
-

-
-

- 1.54
(597ns)
-

-
-

- 1.00
(387ns)
-

-
-

- NonCentralBeta (PDF) -

-
-

- 1.62
(489ns)
-

-
-

- 1.56
(471ns)
-

-
-

- 1.00
(302ns)
-

-
-

- NonCentralBeta (quantile) -

-
-

- 2.35
(14689ns)
-

-
-

- 2.10
(13173ns)
-

-
-

- 1.00
(6263ns)
-

-
-

- NonCentralChiSquared (CDF) -

-
-

- 1.84
(2643ns)
-

-
-

- 1.45
(2087ns)
-

-
-

- 1.00
(1438ns)
-

-
-

- NonCentralChiSquared (PDF) -

-
-

- 1.36
(290ns)
-

-
-

- 1.28
(272ns)
-

-
-

- 1.00
(213ns)
-

-
-

- NonCentralChiSquared (quantile) -

-
-

- 2.49
(16692ns)
-

-
-

- 1.59
(10665ns)
-

-
-

- 1.00
(6699ns)
-

-
-

- NonCentralF (CDF) -

-
-

- 1.54
(608ns)
-

-
-

- 1.36
(538ns)
-

-
-

- 1.00
(396ns)
-

-
-

- NonCentralF (PDF) -

-
-

- 1.44
(467ns)
-

-
-

- 1.30
(420ns)
-

-
-

- 1.00
(324ns)
-

-
-

- NonCentralF (quantile) -

-
-

- 1.73
(9122ns)
-

-
-

- 1.44
(7572ns)
-

-
-

- 1.00
(5271ns)
-

-
-

- NonCentralT (CDF) -

-
-

- 1.65
(2375ns)
-

-
-

- 1.38
(1985ns)
-

-
-

- 1.00
(1441ns)
-

-
-

- NonCentralT (PDF) -

-
-

- 1.58
(1701ns)
-

-
-

- 1.34
(1440ns)
-

-
-

- 1.00
(1075ns)
-

-
-

- NonCentralT (quantile) -

-
-

- 1.93
(23683ns)
-

-
-

- 1.35
(16597ns)
-

-
-

- 1.00
(12284ns)
-

-
-

- Normal (CDF) -

-
-

- 1.09
(89ns)
-

-
-

- 1.00
(82ns)
-

-
-

- 1.29
(106ns)
-

-
-

- Normal (PDF) -

-
-

- 1.33
(28ns)
-

-
-

- 1.38
(29ns)
-

-
-

- 1.00
(21ns)
-

-
-

- Normal (quantile) -

-
-

- 1.02
(44ns)
-

-
-

- 1.00
(43ns)
-

-
-

- 1.02
(44ns)
-

-
-

- Pareto (CDF) -

-
-

- 1.26
(34ns)
-

-
-

- 1.30
(35ns)
-

-
-

- 1.00
(27ns)
-

-
-

- Pareto (PDF) -

-
-

- 1.50
(102ns)
-

-
-

- 1.56
(106ns)
-

-
-

- 1.00
(68ns)
-

-
-

- Pareto (quantile) -

-
-

- 1.79
(50ns)
-

-
-

- 1.36
(38ns)
-

-
-

- 1.00
(28ns)
-

-
-

- Poisson (CDF) -

-
-

- 1.11
(84ns)
-

-
-

- 1.00
(76ns)
-

-
-

- 1.01
(77ns)
-

-
-

- Poisson (PDF) -

-
-

- 1.40
(49ns)
-

-
-

- 1.43
(50ns)
-

-
-

- 1.00
(35ns)
-

-
-

- Poisson (quantile) -

-
-

- 1.10
(440ns)
-

-
-

- 1.00
(400ns)
-

-
-

- 1.10
(441ns)
-

-
-

- Rayleigh (CDF) -

-
-

- 1.25
(15ns)
-

-
-

- 1.08
(13ns)
-

-
-

- 1.00
(12ns)
-

-
-

- Rayleigh (PDF) -

-
-

- 1.08
(14ns)
-

-
-

- 1.08
(14ns)
-

-
-

- 1.00
(13ns)
-

-
-

- Rayleigh (quantile) -

-
-

- 1.15
(23ns)
-

-
-

- 1.15
(23ns)
-

-
-

- 1.00
(20ns)
-

-
-

- SkewNormal (CDF) -

-
-

- 1.01
(259ns)
-

-
-

- 1.00
(256ns)
-

-
-

- 1.13
(289ns)
-

-
-

- SkewNormal (PDF) -

-
-

- 1.03
(94ns)
-

-
-

- 1.00
(91ns)
-

-
-

- 1.08
(98ns)
-

-
-

- SkewNormal (quantile) -

-
-

- 1.47
(2843ns)
-

-
-

- 1.00
(1936ns)
-

-
-

- 1.24
(2391ns)
-

-
-

- StudentsT (CDF) -

-
-

- 1.83
(429ns)
-

-
-

- 1.85
(434ns)
-

-
-

- 1.00
(235ns)
-

-
-

- StudentsT (PDF) -

-
-

- 1.36
(146ns)
-

-
-

- 1.26
(135ns)
-

-
-

- 1.00
(107ns)
-

-
-

- StudentsT (quantile) -

-
-

- 1.53
(729ns)
-

-
-

- 1.57
(749ns)
-

-
-

- 1.00
(476ns)
-

-
-

- Weibull (CDF) -

-
-

- 1.62
(63ns)
-

-
-

- 1.51
(59ns)
-

-
-

- 1.00
(39ns)
-

-
-

- Weibull (PDF) -

-
-

- 1.75
(89ns)
-

-
-

- 1.76
(90ns)
-

-
-

- 1.00
(51ns)
-

-
-

- Weibull (quantile) -

-
-

- 1.63
(62ns)
-

-
-

- 1.55
(59ns)
-

-
-

- 1.00
(38ns)
-

-
-
-
-
-
- -
-

Table 5. Distribution performance comparison with GNU C++ version 9.2.0 on Windows - x64

-
----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- boost 1.73 -

-
-

- Boost
promote_double<false> -

-
-

- ArcSine (CDF) -

-
-

- 1.00
(22ns)
-

-
-

- 1.18
(26ns)
-

-
-

- ArcSine (PDF) -

-
-

- 1.00
(5ns)
-

-
-

- 1.00
(5ns)
-

-
-

- ArcSine (quantile) -

-
-

- 1.00
(53ns)
-

-
-

- 1.00
(53ns)
-

-
-

- Beta (CDF) -

-
-

- 1.77
(362ns)
-

-
-

- 1.00
(205ns)
-

-
-

- Beta (PDF) -

-
-

- 2.17
(302ns)
-

-
-

- 1.00
(139ns)
-

-
-

- Beta (quantile) -

-
-

- 1.42
(1968ns)
-

-
-

- 1.00
(1383ns)
-

-
-

- Binomial (CDF) -

-
-

- 2.74
(959ns)
-

-
-

- 1.00
(350ns)
-

-
-

- Binomial (PDF) -

-
-

- 2.39
(339ns)
-

-
-

- 1.00
(142ns)
-

-
-

- Binomial (quantile) -

-
-

- 2.26
(4255ns)
-

-
-

- 1.00
(1884ns)
-

-
-

- Cauchy (CDF) -

-
-

- 1.00
(19ns)
-

-
-

- 1.05
(20ns)
-

-
-

- Cauchy (PDF) -

-
-

- 1.00
(4ns)
-

-
-

- 1.25
(5ns)
-

-
-

- Cauchy (quantile) -

-
-

- 1.09
(25ns)
-

-
-

- 1.00
(23ns)
-

-
-

- ChiSquared (CDF) -

-
-

- 1.80
(953ns)
-

-
-

- 1.00
(529ns)
-

-
-

- ChiSquared (PDF) -

-
-

- 1.82
(189ns)
-

-
-

- 1.00
(104ns)
-

-
-

- ChiSquared (quantile) -

-
-

- 1.61
(1452ns)
-

-
-

- 1.00
(901ns)
-

-
-

- Exponential (CDF) -

-
-

- 1.14
(33ns)
-

-
-

- 1.00
(29ns)
-

-
-

- Exponential (PDF) -

-
-

- 1.06
(54ns)
-

-
-

- 1.00
(51ns)
-

-
-

- Exponential (quantile) -

-
-

- 1.89
(36ns)
-

-
-

- 1.00
(19ns)
-

-
-

- ExtremeValue (CDF) -

-
-

- 1.03
(104ns)
-

-
-

- 1.00
(101ns)
-

-
-

- ExtremeValue (PDF) -

-
-

- 1.00
(144ns)
-

-
-

- 1.00
(144ns)
-

-
-

- ExtremeValue (quantile) -

-
-

- 1.05
(64ns)
-

-
-

- 1.00
(61ns)
-

-
-

- F (CDF) -

-
-

- 2.25
(668ns)
-

-
-

- 1.00
(297ns)
-

-
-

- F (PDF) -

-
-

- 2.16
(291ns)
-

-
-

- 1.00
(135ns)
-

-
-

- F (quantile) -

-
-

- 1.90
(2215ns)
-

-
-

- 1.00
(1163ns)
-

-
-

- Gamma (CDF) -

-
-

- 1.63
(492ns)
-

-
-

- 1.00
(301ns)
-

-
-

- Gamma (PDF) -

-
-

- 1.55
(236ns)
-

-
-

- 1.00
(152ns)
-

-
-

- Gamma (quantile) -

-
-

- 1.44
(1204ns)
-

-
-

- 1.00
(837ns)
-

-
-

- Geometric (CDF) -

-
-

- 1.38
(40ns)
-

-
-

- 1.00
(29ns)
-

-
-

- Geometric (PDF) -

-
-

- 1.00
(46ns)
-

-
-

- 1.00
(46ns)
-

-
-

- Geometric (quantile) -

-
-

- 1.64
(36ns)
-

-
-

- 1.00
(22ns)
-

-
-

- Hypergeometric (CDF) -

-
-

- 1.11
(49938ns)
-

-
-

- 1.00
(45127ns)
-

-
-

- Hypergeometric (PDF) -

-
-

- 1.08
(53353ns)
-

-
-

- 1.00
(49364ns)
-

-
-

- Hypergeometric (quantile) -

-
-

- 1.00
(105555ns)
-

-
-

- 1.25
(132253ns)
-

-
-

- InverseChiSquared (CDF) -

-
-

- 2.05
(1326ns)
-

-
-

- 1.00
(647ns)
-

-
-

- InverseChiSquared (PDF) -

-
-

- 1.72
(217ns)
-

-
-

- 1.00
(126ns)
-

-
-

- InverseChiSquared (quantile) -

-
-

- 1.79
(1852ns)
-

-
-

- 1.00
(1035ns)
-

-
-

- InverseGamma (CDF) -

-
-

- 1.61
(516ns)
-

-
-

- 1.00
(320ns)
-

-
-

- InverseGamma (PDF) -

-
-

- 1.53
(256ns)
-

-
-

- 1.00
(167ns)
-

-
-

- InverseGamma (quantile) -

-
-

- 1.43
(1268ns)
-

-
-

- 1.00
(884ns)
-

-
-

- InverseGaussian (CDF) -

-
-

- 1.00
(172ns)
-

-
-

- 1.00
(172ns)
-

-
-

- InverseGaussian (PDF) -

-
-

- 1.00
(28ns)
-

-
-

- 1.14
(32ns)
-

-
-

- InverseGaussian (quantile) -

-
-

- 1.01
(2657ns)
-

-
-

- 1.00
(2635ns)
-

-
-

- Laplace (CDF) -

-
-

- 1.02
(50ns)
-

-
-

- 1.00
(49ns)
-

-
-

- Laplace (PDF) -

-
-

- 1.00
(49ns)
-

-
-

- 1.02
(50ns)
-

-
-

- Laplace (quantile) -

-
-

- 1.00
(33ns)
-

-
-

- 1.00
(33ns)
-

-
-

- LogNormal (CDF) -

-
-

- 1.39
(176ns)
-

-
-

- 1.00
(127ns)
-

-
-

- LogNormal (PDF) -

-
-

- 1.01
(87ns)
-

-
-

- 1.00
(86ns)
-

-
-

- LogNormal (quantile) -

-
-

- 1.23
(116ns)
-

-
-

- 1.00
(94ns)
-

-
-

- Logistic (CDF) -

-
-

- 1.00
(46ns)
-

-
-

- 1.02
(47ns)
-

-
-

- Logistic (PDF) -

-
-

- 1.00
(46ns)
-

-
-

- 1.02
(47ns)
-

-
-

- Logistic (quantile) -

-
-

- 1.00
(33ns)
-

-
-

- 1.03
(34ns)
-

-
-

- NegativeBinomial (CDF) -

-
-

- 2.39
(1158ns)
-

-
-

- 1.00
(485ns)
-

-
-

- NegativeBinomial (PDF) -

-
-

- 2.27
(307ns)
-

-
-

- 1.00
(135ns)
-

-
-

- NegativeBinomial (quantile) -

-
-

- 2.36
(6154ns)
-

-
-

- 1.00
(2608ns)
-

-
-

- NonCentralBeta (CDF) -

-
-

- 1.80
(1450ns)
-

-
-

- 1.00
(806ns)
-

-
-

- NonCentralBeta (PDF) -

-
-

- 1.98
(969ns)
-

-
-

- 1.00
(490ns)
-

-
-

- NonCentralBeta (quantile) -

-
-

- 1.85
(37583ns)
-

-
-

- 1.00
(20369ns)
-

-
-

- NonCentralChiSquared (CDF) -

-
-

- 1.24
(4037ns)
-

-
-

- 1.00
(3256ns)
-

-
-

- NonCentralChiSquared (PDF) -

-
-

- 1.23
(630ns)
-

-
-

- 1.00
(514ns)
-

-
-

- NonCentralChiSquared (quantile) -

-
-

- 1.61
(33255ns)
-

-
-

- 1.00
(20620ns)
-

-
-

- NonCentralF (CDF) -

-
-

- 1.87
(1426ns)
-

-
-

- 1.00
(762ns)
-

-
-

- NonCentralF (PDF) -

-
-

- 2.00
(1306ns)
-

-
-

- 1.00
(652ns)
-

-
-

- NonCentralF (quantile) -

-
-

- 1.91
(22025ns)
-

-
-

- 1.00
(11560ns)
-

-
-

- NonCentralT (CDF) -

-
-

- 2.05
(6473ns)
-

-
-

- 1.00
(3155ns)
-

-
-

- NonCentralT (PDF) -

-
-

- 2.01
(4098ns)
-

-
-

- 1.00
(2040ns)
-

-
-

- NonCentralT (quantile) -

-
-

- 2.03
(65926ns)
-

-
-

- 1.00
(32431ns)
-

-
-

- Normal (CDF) -

-
-

- 1.16
(135ns)
-

-
-

- 1.00
(116ns)
-

-
-

- Normal (PDF) -

-
-

- 1.00
(48ns)
-

-
-

- 1.23
(59ns)
-

-
-

- Normal (quantile) -

-
-

- 1.45
(80ns)
-

-
-

- 1.00
(55ns)
-

-
-

- Pareto (CDF) -

-
-

- 1.13
(59ns)
-

-
-

- 1.00
(52ns)
-

-
-

- Pareto (PDF) -

-
-

- 1.04
(96ns)
-

-
-

- 1.00
(92ns)
-

-
-

- Pareto (quantile) -

-
-

- 1.00
(82ns)
-

-
-

- 1.02
(84ns)
-

-
-

- Poisson (CDF) -

-
-

- 1.90
(254ns)
-

-
-

- 1.00
(134ns)
-

-
-

- Poisson (PDF) -

-
-

- 1.53
(171ns)
-

-
-

- 1.00
(112ns)
-

-
-

- Poisson (quantile) -

-
-

- 1.76
(1128ns)
-

-
-

- 1.00
(641ns)
-

-
-

- Rayleigh (CDF) -

-
-

- 1.24
(47ns)
-

-
-

- 1.00
(38ns)
-

-
-

- Rayleigh (PDF) -

-
-

- 1.00
(64ns)
-

-
-

- 1.09
(70ns)
-

-
-

- Rayleigh (quantile) -

-
-

- 2.00
(48ns)
-

-
-

- 1.00
(24ns)
-

-
-

- SkewNormal (CDF) -

-
-

- 1.06
(669ns)
-

-
-

- 1.00
(632ns)
-

-
-

- SkewNormal (PDF) -

-
-

- 1.09
(173ns)
-

-
-

- 1.00
(159ns)
-

-
-

- SkewNormal (quantile) -

-
-

- 1.18
(6968ns)
-

-
-

- 1.00
(5903ns)
-

-
-

- StudentsT (CDF) -

-
-

- 1.60
(1151ns)
-

-
-

- 1.00
(721ns)
-

-
-

- StudentsT (PDF) -

-
-

- 1.94
(360ns)
-

-
-

- 1.00
(186ns)
-

-
-

- StudentsT (quantile) -

-
-

- 1.26
(1461ns)
-

-
-

- 1.00
(1161ns)
-

-
-

- Weibull (CDF) -

-
-

- 1.25
(96ns)
-

-
-

- 1.00
(77ns)
-

-
-

- Weibull (PDF) -

-
-

- 1.18
(164ns)
-

-
-

- 1.00
(139ns)
-

-
-

- Weibull (quantile) -

-
-

- 1.00
(133ns)
-

-
-

- 1.01
(134ns)
-

-
-
-
-
-
- -
-

Table 6. Distribution performance comparison with Microsoft Visual C++ version - 14.2 on Windows x64

-
---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- boost 1.73 -

-
-

- ArcSine (CDF) -

-
-

- 1.00
(43ns)
-

-
-

- ArcSine (PDF) -

-
-

- 1.00
(17ns)
-

-
-

- ArcSine (quantile) -

-
-

- 1.00
(30ns)
-

-
-

- Beta (CDF) -

-
-

- 1.00
(158ns)
-

-
-

- Beta (PDF) -

-
-

- 1.00
(104ns)
-

-
-

- Beta (quantile) -

-
-

- 1.00
(806ns)
-

-
-

- Binomial (CDF) -

-
-

- 1.00
(413ns)
-

-
-

- Binomial (PDF) -

-
-

- 1.00
(127ns)
-

-
-

- Binomial (quantile) -

-
-

- 1.00
(2024ns)
-

-
-

- Cauchy (CDF) -

-
-

- 1.00
(26ns)
-

-
-

- Cauchy (PDF) -

-
-

- 1.00
(8ns)
-

-
-

- Cauchy (quantile) -

-
-

- 1.00
(26ns)
-

-
-

- ChiSquared (CDF) -

-
-

- 1.00
(676ns)
-

-
-

- ChiSquared (PDF) -

-
-

- 1.00
(93ns)
-

-
-

- ChiSquared (quantile) -

-
-

- 1.00
(1073ns)
-

-
-

- Exponential (CDF) -

-
-

- 1.00
(17ns)
-

-
-

- Exponential (PDF) -

-
-

- 1.00
(15ns)
-

-
-

- Exponential (quantile) -

-
-

- 1.00
(20ns)
-

-
-

- ExtremeValue (CDF) -

-
-

- 1.00
(26ns)
-

-
-

- ExtremeValue (PDF) -

-
-

- 1.00
(27ns)
-

-
-

- ExtremeValue (quantile) -

-
-

- 1.00
(34ns)
-

-
-

- F (CDF) -

-
-

- 1.00
(277ns)
-

-
-

- F (PDF) -

-
-

- 1.00
(97ns)
-

-
-

- F (quantile) -

-
-

- 1.00
(901ns)
-

-
-

- Gamma (CDF) -

-
-

- 1.00
(234ns)
-

-
-

- Gamma (PDF) -

-
-

- 1.00
(85ns)
-

-
-

- Gamma (quantile) -

-
-

- 1.00
(640ns)
-

-
-

- Geometric (CDF) -

-
-

- 1.00
(18ns)
-

-
-

- Geometric (PDF) -

-
-

- 1.00
(24ns)
-

-
-

- Geometric (quantile) -

-
-

- 1.00
(20ns)
-

-
-

- Hypergeometric (CDF) -

-
-

- 1.00
(244196ns)
-

-
-

- Hypergeometric (PDF) -

-
-

- 1.00
(272497ns)
-

-
-

- Hypergeometric (quantile) -

-
-

- 1.00
(308077ns)
-

-
-

- InverseChiSquared (CDF) -

-
-

- 1.00
(584ns)
-

-
-

- InverseChiSquared (PDF) -

-
-

- 1.00
(78ns)
-

-
-

- InverseChiSquared (quantile) -

-
-

- 1.00
(884ns)
-

-
-

- InverseGamma (CDF) -

-
-

- 1.00
(244ns)
-

-
-

- InverseGamma (PDF) -

-
-

- 1.00
(91ns)
-

-
-

- InverseGamma (quantile) -

-
-

- 1.00
(638ns)
-

-
-

- InverseGaussian (CDF) -

-
-

- 1.00
(109ns)
-

-
-

- InverseGaussian (PDF) -

-
-

- 1.00
(12ns)
-

-
-

- InverseGaussian (quantile) -

-
-

- 1.00
(1651ns)
-

-
-

- Laplace (CDF) -

-
-

- 1.00
(13ns)
-

-
-

- Laplace (PDF) -

-
-

- 1.00
(14ns)
-

-
-

- Laplace (quantile) -

-
-

- 1.00
(14ns)
-

-
-

- LogNormal (CDF) -

-
-

- 1.00
(79ns)
-

-
-

- LogNormal (PDF) -

-
-

- 1.00
(35ns)
-

-
-

- LogNormal (quantile) -

-
-

- 1.00
(61ns)
-

-
-

- Logistic (CDF) -

-
-

- 1.00
(14ns)
-

-
-

- Logistic (PDF) -

-
-

- 1.00
(18ns)
-

-
-

- Logistic (quantile) -

-
-

- 1.00
(15ns)
-

-
-

- NegativeBinomial (CDF) -

-
-

- 1.00
(481ns)
-

-
-

- NegativeBinomial (PDF) -

-
-

- 1.00
(114ns)
-

-
-

- NegativeBinomial (quantile) -

-
-

- 1.00
(2651ns)
-

-
-

- NonCentralBeta (CDF) -

-
-

- 1.00
(735ns)
-

-
-

- NonCentralBeta (PDF) -

-
-

- 1.00
(489ns)
-

-
-

- NonCentralBeta (quantile) -

-
-

- 1.00
(14689ns)
-

-
-

- NonCentralChiSquared (CDF) -

-
-

- 1.00
(2643ns)
-

-
-

- NonCentralChiSquared (PDF) -

-
-

- 1.00
(290ns)
-

-
-

- NonCentralChiSquared (quantile) -

-
-

- 1.00
(16692ns)
-

-
-

- NonCentralF (CDF) -

-
-

- 1.00
(608ns)
-

-
-

- NonCentralF (PDF) -

-
-

- 1.00
(467ns)
-

-
-

- NonCentralF (quantile) -

-
-

- 1.00
(9122ns)
-

-
-

- NonCentralT (CDF) -

-
-

- 1.00
(2375ns)
-

-
-

- NonCentralT (PDF) -

-
-

- 1.00
(1701ns)
-

-
-

- NonCentralT (quantile) -

-
-

- 1.00
(23683ns)
-

-
-

- Normal (CDF) -

-
-

- 1.00
(89ns)
-

-
-

- Normal (PDF) -

-
-

- 1.00
(28ns)
-

-
-

- Normal (quantile) -

-
-

- 1.00
(44ns)
-

-
-

- Pareto (CDF) -

-
-

- 1.00
(34ns)
-

-
-

- Pareto (PDF) -

-
-

- 1.00
(102ns)
-

-
-

- Pareto (quantile) -

-
-

- 1.00
(50ns)
-

-
-

- Poisson (CDF) -

-
-

- 1.00
(84ns)
-

-
-

- Poisson (PDF) -

-
-

- 1.00
(49ns)
-

-
-

- Poisson (quantile) -

-
-

- 1.00
(440ns)
-

-
-

- Rayleigh (CDF) -

-
-

- 1.00
(15ns)
-

-
-

- Rayleigh (PDF) -

-
-

- 1.00
(14ns)
-

-
-

- Rayleigh (quantile) -

-
-

- 1.00
(23ns)
-

-
-

- SkewNormal (CDF) -

-
-

- 1.00
(259ns)
-

-
-

- SkewNormal (PDF) -

-
-

- 1.00
(94ns)
-

-
-

- SkewNormal (quantile) -

-
-

- 1.00
(2843ns)
-

-
-

- StudentsT (CDF) -

-
-

- 1.00
(429ns)
-

-
-

- StudentsT (PDF) -

-
-

- 1.00
(146ns)
-

-
-

- StudentsT (quantile) -

-
-

- 1.00
(729ns)
-

-
-

- Weibull (CDF) -

-
-

- 1.00
(63ns)
-

-
-

- Weibull (PDF) -

-
-

- 1.00
(89ns)
-

-
-

- Weibull (quantile) -

-
-

- 1.00
(62ns)
-

-
-
-
-
-
- -
-

Table 7. Library Comparison with GNU C++ version 9.2.0 on Windows x64

-
------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- boost 1.73 -

-
-

- boost 1.73
promote_double<false> -

-
-

- tr1/cmath -

-
-

- math.h -

-
-

- assoc_laguerre
(2240/2240 tests selected) -

-
-

- 1.08
(137ns)
-

-
-

- 1.00
(127ns)
-

-
-

- 1.08
(137ns)
-

-
-

- - -

-
-

- assoc_legendre
(110/400 tests selected) -

-
-

- - -

-
-

- - -

-
-

- 1.00
(40ns)
-

-
-

- - -

-
-

- beta
(2204/2204 tests selected) -

-
-

- 1.60
(322ns)
-

-
-

- 1.18
(237ns)
-

-
-

- 1.00
(201ns)
-

-
-

- - -

-
-

- cbrt
(85/85 tests selected) -

-
-

- 4.67
(70ns)
-

-
-

- 1.00
(15ns)
-

-
-

- 2.00
(30ns)
-

-
-

- 2.13
(32ns)
-

-
-

- cyl_bessel_i (integer order)
(515/526 tests selected) -

-
-

- 3.06
(597ns)
-

-
-

- 1.00
(195ns)
-

-
-

- 1.01
(196ns)
-

-
-

- - -

-
-

- cyl_bessel_i
(215/240 tests selected) -

-
-

- 5.68
(949ns)
-

-
-

- 2.32
(387ns)
-

-
-

- 1.00
(167ns)
-

-
-

- - -

-
-

- cyl_bessel_j (integer order)
(253/268 tests selected) -

-
-

- 1.92
(184ns)
-

-
-

- 1.00
(96ns)
-

-
-

- 3.12
(300ns)
-

-
-

- 1.94
(186ns)
-

-
-

- cyl_bessel_j
(442/451 tests selected) -

-
-

- 2.15
(886ns)
-

-
-

- 1.21
(499ns)
-

-
-

- 1.00
(412ns)
-

-
-

- - -

-
-

- cyl_bessel_k (integer order)
(505/508 tests selected) -

-
-

- 18.17
(3724ns)
-

-
-

- 1.00
(205ns)
-

-
-

- 8.40
(1722ns)
-

-
-

- - -

-
-

- cyl_bessel_k
(187/279 tests selected) -

-
-

- 19.68
(6847ns)
-

-
-

- 1.00
(348ns)
-

-
-

- 6.31
(2196ns)
-

-
-

- - -

-
-

- cyl_neumann (integer order)
(424/428 tests selected) -

-
-

- 2.13
(348ns)
-

-
-

- 1.55
(252ns)
-

-
-

- 3.83
(624ns)
-

-
-

- 1.00
(163ns)
-

-
-

- cyl_neumann
(428/450 tests selected) -

-
-

- 12.46
(10032ns)
-

-
-

- 7.10
(5715ns)
-

-
-

- 1.00
(805ns)
-

-
-

- - -

-
-

- ellint_1 (complete)
(109/109 tests selected) -

-
-

- 1.64
(77ns)
-

-
-

- 1.00
(47ns)
-

-
-

- 2.36
(111ns)
-

-
-

- - -

-
-

- ellint_1
(627/629 tests selected) -

-
-

- 1.41
(349ns)
-

-
-

- 1.00
(248ns)
-

-
-

- 1.09
(270ns)
-

-
-

- - -

-
-

- ellint_2 (complete)
(110/110 tests selected) -

-
-

- 2.11
(57ns)
-

-
-

- 1.00
(27ns)
-

-
-

- 9.37
(253ns)
-

-
-

- - -

-
-

- ellint_2
(527/530 tests selected) -

-
-

- 1.50
(583ns)
-

-
-

- 1.00
(388ns)
-

-
-

- 1.06
(412ns)
-

-
-

- - -

-
-

- ellint_3 (complete)
(0/500 tests selected) -

-
-

- nan
(0ns)
-

-
-

- nan
(0ns)
-

-
-

- nan
(0ns)
-

-
-

- - -

-
-

- ellint_3
(22/845 tests selected) -

-
-

- 2.58
(670ns)
-

-
-

- 1.53
(398ns)
-

-
-

- 1.00
(260ns)
-

-
-

- - -

-
-

- erf
(950/950 tests selected) -

-
-

- 1.00
(33ns)
-

-
-

- - -

-
-

- 1.15
(38ns)
-

-
-

- 1.30
(43ns)
-

-
-

- erfc
(950/950 tests selected) -

-
-

- 1.76
(90ns)
-

-
-

- 1.00
(51ns)
-

-
-

- 1.08
(55ns)
-

-
-

- 1.25
(64ns)
-

-
-

- expint
(436/436 tests selected) -

-
-

- 1.53
(92ns)
-

-
-

- 1.00
(60ns)
-

-
-

- 1.83
(110ns)
-

-
-

- - -

-
-

- expm1
(80/80 tests selected) -

-
-

- 1.38
(33ns)
-

-
-

- 1.08
(26ns)
-

-
-

- 1.00
(24ns)
-

-
-

- 1.00
(24ns)
-

-
-

- laguerre
(280/280 tests selected) -

-
-

- 1.07
(112ns)
-

-
-

- 1.00
(105ns)
-

-
-

- 1.03
(108ns)
-

-
-

- - -

-
-

- legendre
(300/300 tests selected) -

-
-

- 1.25
(320ns)
-

-
-

- 1.00
(255ns)
-

-
-

- 1.27
(323ns)
-

-
-

- - -

-
-

- lgamma
(400/400 tests selected) -

-
-

- 3.40
(214ns)
-

-
-

- 2.54
(160ns)
-

-
-

- 1.00
(63ns)
-

-
-

- 1.02
(64ns)
-

-
-

- log1p
(80/80 tests selected) -

-
-

- 1.71
(29ns)
-

-
-

- 1.00
(17ns)
-

-
-

- 1.53
(26ns)
-

-
-

- 1.71
(29ns)
-

-
-

- sph_bessel
(483/483 tests selected) -

-
-

- 1.48
(975ns)
-

-
-

- 1.00
(661ns)
-

-
-

- 3.02
(1999ns)
-

-
-

- - -

-
-

- sph_neumann
(284/284 tests selected) -

-
-

- 2.96
(3153ns)
-

-
-

- 1.00
(1064ns)
-

-
-

- 2.73
(2906ns)
-

-
-

- - -

-
-

- tgamma
(400/400 tests selected) -

-
-

- 3.32
(259ns)
-

-
-

- 2.03
(158ns)
-

-
-

- 1.01
(79ns)
-

-
-

- 1.00
(78ns)
-

-
-

- zeta
(448/448 tests selected) -

-
-

- 1.40
(310ns)
-

-
-

- 1.00
(221ns)
-

-
-

- 918.24
(202930ns)
-

-
-

- - -

-
-
-
-
-
- -
-

Table 8. Library Comparison with Microsoft Visual C++ version 14.2 on Windows - x64

-
----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- boost 1.73 -

-
-

- math.h -

-
-

- cbrt
(85/85 tests selected) -

-
-

- 1.00
(51ns)
-

-
-

- 1.22
(62ns)
-

-
-

- cyl_bessel_j (integer order)
(267/268 tests selected) -

-
-

- 1.00
(123ns)
-

-
-

- 1.50
(185ns)
-

-
-

- cyl_neumann (integer order)
(428/428 tests selected) -

-
-

- 1.01
(158ns)
-

-
-

- 1.00
(156ns)
-

-
-

- erf
(950/950 tests selected) -

-
-

- 2.15
(43ns)
-

-
-

- 1.00
(20ns)
-

-
-

- erfc
(950/950 tests selected) -

-
-

- 1.00
(54ns)
-

-
-

- 1.09
(59ns)
-

-
-

- expm1
(80/80 tests selected) -

-
-

- 1.10
(11ns)
-

-
-

- 1.00
(10ns)
-

-
-

- lgamma
(400/400 tests selected) -

-
-

- 1.00
(80ns)
-

-
-

- 1.60
(128ns)
-

-
-

- log1p
(80/80 tests selected) -

-
-

- 1.00
(14ns)
-

-
-

- 1.07
(15ns)
-

-
-

- tgamma
(400/400 tests selected) -

-
-

- 1.00
(74ns)
-

-
-

- 12.53
(927ns)
-

-
-
-
-
-
- -
-

Table 9. Polynomial Arithmetic (GNU C++ version 9.2.0, Windows x64)

-
------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- boost::uint64_t -

-
-

- double -

-
-

- cpp_int -

-
-

- operator * -

-
-

- 1.00
(503ns)
-

-
-

- 1.00
(502ns)
-

-
-

- 15.20
(7629ns)
-

-
-

- operator * (int) -

-
-

- 1.05
(114ns)
-

-
-

- 1.00
(109ns)
-

-
-

- 6.04
(658ns)
-

-
-

- operator *= -

-
-

- 1.04
(223824ns)
-

-
-

- 1.00
(215955ns)
-

-
-

- 19.30
(4168184ns)
-

-
-

- operator *= (int) -

-
-

- 1.06
(13931ns)
-

-
-

- 1.00
(13163ns)
-

-
-

- 26.10
(343615ns)
-

-
-

- operator + -

-
-

- 1.00
(163ns)
-

-
-

- 1.14
(186ns)
-

-
-

- 6.04
(985ns)
-

-
-

- operator + (int) -

-
-

- 1.16
(116ns)
-

-
-

- 1.00
(100ns)
-

-
-

- 4.07
(407ns)
-

-
-

- operator += -

-
-

- 1.12
(18ns)
-

-
-

- 1.00
(16ns)
-

-
-

- 22.81
(365ns)
-

-
-

- operator += (int) -

-
-

- 1.33
(4ns)
-

-
-

- 1.00
(3ns)
-

-
-

- 33.00
(99ns)
-

-
-

- operator - -

-
-

- 1.00
(159ns)
-

-
-

- 1.16
(185ns)
-

-
-

- 6.66
(1059ns)
-

-
-

- operator - (int) -

-
-

- 1.11
(113ns)
-

-
-

- 1.00
(102ns)
-

-
-

- 3.75
(382ns)
-

-
-

- operator -= -

-
-

- 1.38
(22ns)
-

-
-

- 1.00
(16ns)
-

-
-

- 23.38
(374ns)
-

-
-

- operator -= (int) -

-
-

- 1.00
(3ns)
-

-
-

- 1.00
(3ns)
-

-
-

- 31.00
(93ns)
-

-
-

- operator / -

-
-

- 1.44
(767ns)
-

-
-

- 1.00
(533ns)
-

-
-

- 41.38
(22054ns)
-

-
-

- operator / (int) -

-
-

- 1.29
(138ns)
-

-
-

- 1.00
(107ns)
-

-
-

- 13.58
(1453ns)
-

-
-

- operator /= -

-
-

- 1.10
(11ns)
-

-
-

- 1.00
(10ns)
-

-
-

- 194.00
(1940ns)
-

-
-

- operator /= (int) -

-
-

- 1.00
(679ns)
-

-
-

- 21.14
(14351ns)
-

-
-

- 3447.12
(2340595ns)
-

-
-
-
-
-
- -
-

Table 10. Polynomial Arithmetic (Microsoft Visual C++ version 14.2, Windows x64)

-
------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- boost::uint64_t -

-
-

- double -

-
-

- cpp_int -

-
-

- operator * -

-
-

- 1.54
(951ns)
-

-
-

- 1.00
(617ns)
-

-
-

- 15.22
(9391ns)
-

-
-

- operator * (int) -

-
-

- 1.16
(135ns)
-

-
-

- 1.00
(116ns)
-

-
-

- 5.22
(605ns)
-

-
-

- operator *= -

-
-

- 1.30
(371957ns)
-

-
-

- 1.00
(286462ns)
-

-
-

- 17.11
(4901613ns)
-

-
-

- operator *= (int) -

-
-

- 1.00
(14157ns)
-

-
-

- 1.04
(14670ns)
-

-
-

- 19.69
(278738ns)
-

-
-

- operator + -

-
-

- 1.41
(273ns)
-

-
-

- 1.00
(194ns)
-

-
-

- 6.20
(1203ns)
-

-
-

- operator + (int) -

-
-

- 1.25
(126ns)
-

-
-

- 1.00
(101ns)
-

-
-

- 3.47
(350ns)
-

-
-

- operator += -

-
-

- 1.35
(42ns)
-

-
-

- 1.00
(31ns)
-

-
-

- 11.16
(346ns)
-

-
-

- operator += (int) -

-
-

- 1.25
(5ns)
-

-
-

- 1.00
(4ns)
-

-
-

- 25.50
(102ns)
-

-
-

- operator - -

-
-

- 1.20
(231ns)
-

-
-

- 1.00
(192ns)
-

-
-

- 6.44
(1236ns)
-

-
-

- operator - (int) -

-
-

- 1.20
(121ns)
-

-
-

- 1.00
(101ns)
-

-
-

- 3.34
(337ns)
-

-
-

- operator -= -

-
-

- 1.35
(42ns)
-

-
-

- 1.00
(31ns)
-

-
-

- 11.13
(345ns)
-

-
-

- operator -= (int) -

-
-

- 1.00
(4ns)
-

-
-

- 1.00
(4ns)
-

-
-

- 23.50
(94ns)
-

-
-

- operator / -

-
-

- 2.17
(1164ns)
-

-
-

- 1.00
(537ns)
-

-
-

- 51.34
(27568ns)
-

-
-

- operator / (int) -

-
-

- 1.17
(138ns)
-

-
-

- 1.00
(118ns)
-

-
-

- 9.73
(1148ns)
-

-
-

- operator /= -

-
-

- 1.08
(13ns)
-

-
-

- 1.00
(12ns)
-

-
-

- 192.42
(2309ns)
-

-
-

- operator /= (int) -

-
-

- 1.00
(697ns)
-

-
-

- 36.29
(25293ns)
-

-
-

- 2700.21
(1882045ns)
-

-
-
-
-
-
- -
-

Table 11. Polynomial Method Comparison with GNU C++ version 9.2.0 on Windows x64

-
----------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- Method 0
(Double Coefficients) -

-
-

- Method 0
(Integer Coefficients) -

-
-

- Method 1
(Double Coefficients) -

-
-

- Method 1
(Integer Coefficients) -

-
-

- Method 2
(Double Coefficients) -

-
-

- Method 2
(Integer Coefficients) -

-
-

- Method 3
(Double Coefficients) -

-
-

- Method 3
(Integer Coefficients) -

-
-

- Order 2 -

-
-

- - -

-
-

- - -

-
-

- 1.00
(6ns)
-

-
-

- 1.00
(6ns)
-

-
-

- 1.00
(6ns)
-

-
-

- 1.00
(6ns)
-

-
-

- 1.00
(6ns)
-

-
-

- 1.00
(6ns)
-

-
-

- Order 3 -

-
-

- 1.56
(14ns)
-

-
-

- 2.56
(23ns)
-

-
-

- 1.00
(9ns)
-

-
-

- 1.00
(9ns)
-

-
-

- 1.00
(9ns)
-

-
-

- 1.00
(9ns)
-

-
-

- 1.11
(10ns)
-

-
-

- 1.00
(9ns)
-

-
-

- Order 4 -

-
-

- 1.50
(18ns)
-

-
-

- 2.42
(29ns)
-

-
-

- 1.08
(13ns)
-

-
-

- 1.00
(12ns)
-

-
-

- 1.08
(13ns)
-

-
-

- 1.08
(13ns)
-

-
-

- 1.08
(13ns)
-

-
-

- 1.08
(13ns)
-

-
-

- Order 5 -

-
-

- 1.38
(22ns)
-

-
-

- 2.31
(37ns)
-

-
-

- 1.06
(17ns)
-

-
-

- 1.00
(16ns)
-

-
-

- 1.06
(17ns)
-

-
-

- 1.12
(18ns)
-

-
-

- 1.12
(18ns)
-

-
-

- 1.12
(18ns)
-

-
-

- Order 6 -

-
-

- 1.48
(31ns)
-

-
-

- 2.14
(45ns)
-

-
-

- 1.00
(21ns)
-

-
-

- 1.00
(21ns)
-

-
-

- 1.05
(22ns)
-

-
-

- 1.05
(22ns)
-

-
-

- 1.24
(26ns)
-

-
-

- 1.05
(22ns)
-

-
-

- Order 7 -

-
-

- 1.31
(34ns)
-

-
-

- 2.15
(56ns)
-

-
-

- 1.00
(26ns)
-

-
-

- 1.00
(26ns)
-

-
-

- 1.00
(26ns)
-

-
-

- 1.12
(29ns)
-

-
-

- 1.04
(27ns)
-

-
-

- 1.19
(31ns)
-

-
-

- Order 8 -

-
-

- 1.37
(41ns)
-

-
-

- 2.23
(67ns)
-

-
-

- 1.07
(32ns)
-

-
-

- 1.03
(31ns)
-

-
-

- 1.10
(33ns)
-

-
-

- 1.03
(31ns)
-

-
-

- 1.20
(36ns)
-

-
-

- 1.00
(30ns)
-

-
-

- Order 9 -

-
-

- 1.58
(52ns)
-

-
-

- 2.42
(80ns)
-

-
-

- 1.15
(38ns)
-

-
-

- 1.15
(38ns)
-

-
-

- 1.00
(33ns)
-

-
-

- 1.00
(33ns)
-

-
-

- 1.00
(33ns)
-

-
-

- 1.03
(34ns)
-

-
-

- Order 10 -

-
-

- 1.51
(56ns)
-

-
-

- 2.41
(89ns)
-

-
-

- 1.22
(45ns)
-

-
-

- 1.22
(45ns)
-

-
-

- 1.00
(37ns)
-

-
-

- 1.03
(38ns)
-

-
-

- 1.05
(39ns)
-

-
-

- 1.05
(39ns)
-

-
-

- Order 11 -

-
-

- 1.56
(64ns)
-

-
-

- 2.46
(101ns)
-

-
-

- 1.27
(52ns)
-

-
-

- 1.27
(52ns)
-

-
-

- 1.00
(41ns)
-

-
-

- 1.00
(41ns)
-

-
-

- 1.00
(41ns)
-

-
-

- 1.00
(41ns)
-

-
-

- Order 12 -

-
-

- 1.70
(78ns)
-

-
-

- 2.63
(121ns)
-

-
-

- 1.30
(60ns)
-

-
-

- 1.28
(59ns)
-

-
-

- 1.00
(46ns)
-

-
-

- 1.04
(48ns)
-

-
-

- 1.02
(47ns)
-

-
-

- 1.02
(47ns)
-

-
-

- Order 13 -

-
-

- 1.78
(87ns)
-

-
-

- 2.78
(136ns)
-

-
-

- 1.29
(63ns)
-

-
-

- 1.29
(63ns)
-

-
-

- 1.00
(49ns)
-

-
-

- 1.02
(50ns)
-

-
-

- 1.00
(49ns)
-

-
-

- 1.00
(49ns)
-

-
-

- Order 14 -

-
-

- 1.79
(95ns)
-

-
-

- 2.75
(146ns)
-

-
-

- 1.43
(76ns)
-

-
-

- 1.43
(76ns)
-

-
-

- 1.00
(53ns)
-

-
-

- 1.02
(54ns)
-

-
-

- 1.00
(53ns)
-

-
-

- 1.00
(53ns)
-

-
-

- Order 15 -

-
-

- 1.63
(103ns)
-

-
-

- 2.51
(158ns)
-

-
-

- 1.33
(84ns)
-

-
-

- 1.43
(90ns)
-

-
-

- 1.02
(64ns)
-

-
-

- 1.02
(64ns)
-

-
-

- 1.00
(63ns)
-

-
-

- 1.02
(64ns)
-

-
-

- Order 16 -

-
-

- 1.61
(119ns)
-

-
-

- 2.31
(171ns)
-

-
-

- 1.31
(97ns)
-

-
-

- 1.31
(97ns)
-

-
-

- 1.01
(75ns)
-

-
-

- 1.01
(75ns)
-

-
-

- 1.01
(75ns)
-

-
-

- 1.00
(74ns)
-

-
-

- Order 17 -

-
-

- 1.67
(127ns)
-

-
-

- 2.42
(184ns)
-

-
-

- 1.42
(108ns)
-

-
-

- 1.41
(107ns)
-

-
-

- 1.00
(76ns)
-

-
-

- 1.00
(76ns)
-

-
-

- 1.01
(77ns)
-

-
-

- 1.01
(77ns)
-

-
-

- Order 18 -

-
-

- 1.66
(136ns)
-

-
-

- 2.39
(196ns)
-

-
-

- 1.41
(116ns)
-

-
-

- 1.44
(118ns)
-

-
-

- 1.05
(86ns)
-

-
-

- 1.02
(84ns)
-

-
-

- 1.06
(87ns)
-

-
-

- 1.00
(82ns)
-

-
-

- Order 19 -

-
-

- 1.72
(146ns)
-

-
-

- 2.51
(213ns)
-

-
-

- 1.59
(135ns)
-

-
-

- 1.56
(133ns)
-

-
-

- 1.01
(86ns)
-

-
-

- 1.01
(86ns)
-

-
-

- 1.00
(85ns)
-

-
-

- 1.02
(87ns)
-

-
-

- Order 20 -

-
-

- 1.70
(158ns)
-

-
-

- 2.52
(234ns)
-

-
-

- 1.55
(144ns)
-

-
-

- 1.59
(148ns)
-

-
-

- 1.05
(98ns)
-

-
-

- 1.02
(95ns)
-

-
-

- 1.00
(93ns)
-

-
-

- 1.06
(99ns)
-

-
-
-
-
-
- -
-

Table 12. Polynomial Method Comparison with Microsoft Visual C++ version 14.2 - on Windows x64

-
----------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- Method 0
(Double Coefficients) -

-
-

- Method 0
(Integer Coefficients) -

-
-

- Method 1
(Double Coefficients) -

-
-

- Method 1
(Integer Coefficients) -

-
-

- Method 2
(Double Coefficients) -

-
-

- Method 2
(Integer Coefficients) -

-
-

- Method 3
(Double Coefficients) -

-
-

- Method 3
(Integer Coefficients) -

-
-

- Order 2 -

-
-

- - -

-
-

- - -

-
-

- 1.00
(6ns)
-

-
-

- 1.00
(6ns)
-

-
-

- 1.00
(6ns)
-

-
-

- 1.00
(6ns)
-

-
-

- 1.00
(6ns)
-

-
-

- 1.00
(6ns)
-

-
-

- Order 3 -

-
-

- 2.33
(21ns)
-

-
-

- 3.33
(30ns)
-

-
-

- 1.00
(9ns)
-

-
-

- 1.00
(9ns)
-

-
-

- 1.00
(9ns)
-

-
-

- 1.00
(9ns)
-

-
-

- 1.00
(9ns)
-

-
-

- 1.00
(9ns)
-

-
-

- Order 4 -

-
-

- 2.00
(24ns)
-

-
-

- 3.00
(36ns)
-

-
-

- 1.00
(12ns)
-

-
-

- 1.00
(12ns)
-

-
-

- 1.00
(12ns)
-

-
-

- 1.00
(12ns)
-

-
-

- 1.08
(13ns)
-

-
-

- 1.08
(13ns)
-

-
-

- Order 5 -

-
-

- 1.56
(25ns)
-

-
-

- 2.31
(37ns)
-

-
-

- 1.00
(16ns)
-

-
-

- 1.00
(16ns)
-

-
-

- 1.13
(18ns)
-

-
-

- 1.13
(18ns)
-

-
-

- 1.56
(25ns)
-

-
-

- 1.56
(25ns)
-

-
-

- Order 6 -

-
-

- 1.48
(31ns)
-

-
-

- 2.19
(46ns)
-

-
-

- 1.05
(22ns)
-

-
-

- 1.00
(21ns)
-

-
-

- 1.00
(21ns)
-

-
-

- 1.00
(21ns)
-

-
-

- 1.29
(27ns)
-

-
-

- 1.29
(27ns)
-

-
-

- Order 7 -

-
-

- 1.54
(37ns)
-

-
-

- 2.33
(56ns)
-

-
-

- 1.08
(26ns)
-

-
-

- 1.08
(26ns)
-

-
-

- 1.04
(25ns)
-

-
-

- 1.00
(24ns)
-

-
-

- 1.13
(27ns)
-

-
-

- 1.17
(28ns)
-

-
-

- Order 8 -

-
-

- 1.53
(46ns)
-

-
-

- 2.23
(67ns)
-

-
-

- 1.07
(32ns)
-

-
-

- 1.07
(32ns)
-

-
-

- 1.00
(30ns)
-

-
-

- 1.00
(30ns)
-

-
-

- 1.03
(31ns)
-

-
-

- 1.03
(31ns)
-

-
-

- Order 9 -

-
-

- 1.35
(46ns)
-

-
-

- 2.06
(70ns)
-

-
-

- 1.18
(40ns)
-

-
-

- 1.32
(45ns)
-

-
-

- 1.00
(34ns)
-

-
-

- 1.00
(34ns)
-

-
-

- 1.09
(37ns)
-

-
-

- 1.06
(36ns)
-

-
-

- Order 10 -

-
-

- 1.38
(54ns)
-

-
-

- 2.13
(83ns)
-

-
-

- 1.21
(47ns)
-

-
-

- 1.15
(45ns)
-

-
-

- 1.00
(39ns)
-

-
-

- 1.00
(39ns)
-

-
-

- 1.03
(40ns)
-

-
-

- 1.03
(40ns)
-

-
-

- Order 11 -

-
-

- 1.48
(62ns)
-

-
-

- 2.24
(94ns)
-

-
-

- 1.24
(52ns)
-

-
-

- 1.26
(53ns)
-

-
-

- 1.07
(45ns)
-

-
-

- 1.00
(42ns)
-

-
-

- 1.10
(46ns)
-

-
-

- 1.02
(43ns)
-

-
-

- Order 12 -

-
-

- 1.48
(71ns)
-

-
-

- 2.27
(109ns)
-

-
-

- 1.25
(60ns)
-

-
-

- 1.27
(61ns)
-

-
-

- 1.04
(50ns)
-

-
-

- 1.00
(48ns)
-

-
-

- 1.00
(48ns)
-

-
-

- 1.00
(48ns)
-

-
-

- Order 13 -

-
-

- 1.55
(76ns)
-

-
-

- 2.33
(114ns)
-

-
-

- 1.31
(64ns)
-

-
-

- 1.31
(64ns)
-

-
-

- 1.04
(51ns)
-

-
-

- 1.04
(51ns)
-

-
-

- 1.02
(50ns)
-

-
-

- 1.00
(49ns)
-

-
-

- Order 14 -

-
-

- 1.53
(84ns)
-

-
-

- 2.40
(132ns)
-

-
-

- 1.44
(79ns)
-

-
-

- 1.40
(77ns)
-

-
-

- 1.04
(57ns)
-

-
-

- 1.02
(56ns)
-

-
-

- 1.00
(55ns)
-

-
-

- 1.00
(55ns)
-

-
-

- Order 15 -

-
-

- 1.51
(95ns)
-

-
-

- 2.33
(147ns)
-

-
-

- 1.37
(86ns)
-

-
-

- 1.38
(87ns)
-

-
-

- 1.05
(66ns)
-

-
-

- 1.06
(67ns)
-

-
-

- 1.00
(63ns)
-

-
-

- 1.00
(63ns)
-

-
-

- Order 16 -

-
-

- 1.47
(106ns)
-

-
-

- 2.18
(157ns)
-

-
-

- 1.40
(101ns)
-

-
-

- 1.33
(96ns)
-

-
-

- 1.01
(73ns)
-

-
-

- 1.03
(74ns)
-

-
-

- 1.00
(72ns)
-

-
-

- 1.04
(75ns)
-

-
-

- Order 17 -

-
-

- 1.46
(114ns)
-

-
-

- 2.08
(162ns)
-

-
-

- 1.44
(112ns)
-

-
-

- 1.44
(112ns)
-

-
-

- 1.00
(78ns)
-

-
-

- 1.01
(79ns)
-

-
-

- 1.05
(82ns)
-

-
-

- 1.03
(80ns)
-

-
-

- Order 18 -

-
-

- 1.48
(126ns)
-

-
-

- 2.08
(177ns)
-

-
-

- 1.44
(122ns)
-

-
-

- 1.46
(124ns)
-

-
-

- 1.02
(87ns)
-

-
-

- 1.04
(88ns)
-

-
-

- 1.01
(86ns)
-

-
-

- 1.00
(85ns)
-

-
-

- Order 19 -

-
-

- 1.49
(136ns)
-

-
-

- 2.07
(188ns)
-

-
-

- 1.47
(134ns)
-

-
-

- 1.47
(134ns)
-

-
-

- 1.00
(91ns)
-

-
-

- 1.01
(92ns)
-

-
-

- 1.05
(96ns)
-

-
-

- 1.03
(94ns)
-

-
-

- Order 20 -

-
-

- 1.52
(150ns)
-

-
-

- 2.05
(203ns)
-

-
-

- 1.45
(144ns)
-

-
-

- 1.46
(145ns)
-

-
-

- 1.00
(99ns)
-

-
-

- 1.02
(101ns)
-

-
-

- 1.02
(101ns)
-

-
-

- 1.02
(101ns)
-

-
-
-
-
-
- -
-

Table 13. Rational Method Comparison with GNU C++ version 9.2.0 on Windows x64

-
----------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- Method 0
(Double Coefficients) -

-
-

- Method 0
(Integer Coefficients) -

-
-

- Method 1
(Double Coefficients) -

-
-

- Method 1
(Integer Coefficients) -

-
-

- Method 2
(Double Coefficients) -

-
-

- Method 2
(Integer Coefficients) -

-
-

- Method 3
(Double Coefficients) -

-
-

- Method 3
(Integer Coefficients) -

-
-

- Order 2 -

-
-

- - -

-
-

- - -

-
-

- 1.83
(22ns)
-

-
-

- 1.83
(22ns)
-

-
-

- 1.00
(12ns)
-

-
-

- 1.00
(12ns)
-

-
-

- 1.17
(14ns)
-

-
-

- 1.08
(13ns)
-

-
-

- Order 3 -

-
-

- 1.83
(33ns)
-

-
-

- 2.17
(39ns)
-

-
-

- 1.56
(28ns)
-

-
-

- 1.44
(26ns)
-

-
-

- 1.00
(18ns)
-

-
-

- 1.00
(18ns)
-

-
-

- 1.00
(18ns)
-

-
-

- 1.00
(18ns)
-

-
-

- Order 4 -

-
-

- 1.65
(43ns)
-

-
-

- 2.00
(52ns)
-

-
-

- 1.46
(38ns)
-

-
-

- 1.46
(38ns)
-

-
-

- 1.00
(26ns)
-

-
-

- 1.00
(26ns)
-

-
-

- 1.04
(27ns)
-

-
-

- 1.12
(29ns)
-

-
-

- Order 5 -

-
-

- 1.17
(56ns)
-

-
-

- 1.40
(67ns)
-

-
-

- 1.02
(49ns)
-

-
-

- 1.00
(48ns)
-

-
-

- 1.12
(54ns)
-

-
-

- 1.10
(53ns)
-

-
-

- 1.17
(56ns)
-

-
-

- 1.12
(54ns)
-

-
-

- Order 6 -

-
-

- 1.02
(62ns)
-

-
-

- 1.25
(76ns)
-

-
-

- 1.00
(61ns)
-

-
-

- 1.00
(61ns)
-

-
-

- 1.02
(62ns)
-

-
-

- 1.02
(62ns)
-

-
-

- 1.05
(64ns)
-

-
-

- 1.30
(79ns)
-

-
-

- Order 7 -

-
-

- 1.03
(74ns)
-

-
-

- 1.29
(93ns)
-

-
-

- 1.01
(73ns)
-

-
-

- 1.00
(72ns)
-

-
-

- 1.01
(73ns)
-

-
-

- 1.01
(73ns)
-

-
-

- 1.03
(74ns)
-

-
-

- 1.01
(73ns)
-

-
-

- Order 8 -

-
-

- 1.10
(90ns)
-

-
-

- 1.27
(104ns)
-

-
-

- 1.00
(82ns)
-

-
-

- 1.00
(82ns)
-

-
-

- 1.00
(82ns)
-

-
-

- 1.02
(84ns)
-

-
-

- 1.12
(92ns)
-

-
-

- 1.05
(86ns)
-

-
-

- Order 9 -

-
-

- 1.27
(119ns)
-

-
-

- 1.66
(156ns)
-

-
-

- 1.03
(97ns)
-

-
-

- 1.02
(96ns)
-

-
-

- 1.00
(94ns)
-

-
-

- 1.01
(95ns)
-

-
-

- 1.00
(94ns)
-

-
-

- 1.01
(95ns)
-

-
-

- Order 10 -

-
-

- 1.22
(128ns)
-

-
-

- 1.40
(147ns)
-

-
-

- 1.06
(111ns)
-

-
-

- 1.07
(112ns)
-

-
-

- 1.00
(105ns)
-

-
-

- 1.02
(107ns)
-

-
-

- 1.00
(105ns)
-

-
-

- 1.08
(113ns)
-

-
-

- Order 11 -

-
-

- 1.20
(140ns)
-

-
-

- 1.44
(169ns)
-

-
-

- 1.07
(125ns)
-

-
-

- 1.06
(124ns)
-

-
-

- 1.00
(117ns)
-

-
-

- 1.07
(125ns)
-

-
-

- 1.01
(118ns)
-

-
-

- 1.04
(122ns)
-

-
-

- Order 12 -

-
-

- 1.24
(155ns)
-

-
-

- 1.32
(165ns)
-

-
-

- 1.10
(137ns)
-

-
-

- 1.12
(140ns)
-

-
-

- 1.02
(128ns)
-

-
-

- 1.23
(154ns)
-

-
-

- 1.04
(130ns)
-

-
-

- 1.00
(125ns)
-

-
-

- Order 13 -

-
-

- 1.27
(171ns)
-

-
-

- 1.36
(183ns)
-

-
-

- 1.18
(159ns)
-

-
-

- 1.13
(153ns)
-

-
-

- 1.06
(143ns)
-

-
-

- 1.00
(135ns)
-

-
-

- 1.01
(136ns)
-

-
-

- 1.02
(138ns)
-

-
-

- Order 14 -

-
-

- 1.16
(178ns)
-

-
-

- 1.28
(196ns)
-

-
-

- 1.10
(168ns)
-

-
-

- 1.08
(166ns)
-

-
-

- 1.14
(174ns)
-

-
-

- 1.10
(168ns)
-

-
-

- 1.13
(173ns)
-

-
-

- 1.00
(153ns)
-

-
-

- Order 15 -

-
-

- 1.32
(196ns)
-

-
-

- 1.47
(217ns)
-

-
-

- 1.23
(182ns)
-

-
-

- 1.22
(181ns)
-

-
-

- 1.00
(148ns)
-

-
-

- 1.01
(150ns)
-

-
-

- 1.15
(170ns)
-

-
-

- 1.03
(152ns)
-

-
-

- Order 16 -

-
-

- 1.31
(209ns)
-

-
-

- 1.39
(223ns)
-

-
-

- 1.26
(202ns)
-

-
-

- 1.28
(205ns)
-

-
-

- 1.00
(160ns)
-

-
-

- 1.01
(161ns)
-

-
-

- 1.09
(174ns)
-

-
-

- 1.01
(161ns)
-

-
-

- Order 17 -

-
-

- 1.34
(221ns)
-

-
-

- 1.46
(241ns)
-

-
-

- 1.32
(217ns)
-

-
-

- 1.37
(226ns)
-

-
-

- 1.00
(165ns)
-

-
-

- 1.06
(175ns)
-

-
-

- 1.08
(178ns)
-

-
-

- 1.00
(165ns)
-

-
-

- Order 18 -

-
-

- 1.52
(264ns)
-

-
-

- 1.53
(266ns)
-

-
-

- 1.41
(246ns)
-

-
-

- 1.43
(249ns)
-

-
-

- 1.23
(214ns)
-

-
-

- 1.03
(179ns)
-

-
-

- 1.00
(174ns)
-

-
-

- 1.05
(182ns)
-

-
-

- Order 19 -

-
-

- 1.35
(252ns)
-

-
-

- 1.56
(292ns)
-

-
-

- 1.54
(288ns)
-

-
-

- 1.39
(259ns)
-

-
-

- 1.00
(187ns)
-

-
-

- 1.22
(228ns)
-

-
-

- 1.02
(191ns)
-

-
-

- 1.04
(195ns)
-

-
-

- Order 20 -

-
-

- 1.34
(271ns)
-

-
-

- 1.59
(322ns)
-

-
-

- 1.39
(280ns)
-

-
-

- 1.46
(294ns)
-

-
-

- 1.06
(214ns)
-

-
-

- 1.01
(205ns)
-

-
-

- 1.00
(202ns)
-

-
-

- 1.00
(202ns)
-

-
-
-
-
-
- -
-

Table 14. Rational Method Comparison with Microsoft Visual C++ version 14.2 on - Windows x64

-
----------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- Method 0
(Double Coefficients) -

-
-

- Method 0
(Integer Coefficients) -

-
-

- Method 1
(Double Coefficients) -

-
-

- Method 1
(Integer Coefficients) -

-
-

- Method 2
(Double Coefficients) -

-
-

- Method 2
(Integer Coefficients) -

-
-

- Method 3
(Double Coefficients) -

-
-

- Method 3
(Integer Coefficients) -

-
-

- Order 2 -

-
-

- - -

-
-

- - -

-
-

- 1.92
(23ns)
-

-
-

- 1.92
(23ns)
-

-
-

- 1.00
(12ns)
-

-
-

- 1.17
(14ns)
-

-
-

- 1.00
(12ns)
-

-
-

- 1.00
(12ns)
-

-
-

- Order 3 -

-
-

- 1.89
(34ns)
-

-
-

- 2.28
(41ns)
-

-
-

- 1.67
(30ns)
-

-
-

- 1.61
(29ns)
-

-
-

- 1.06
(19ns)
-

-
-

- 1.00
(18ns)
-

-
-

- 1.00
(18ns)
-

-
-

- 1.00
(18ns)
-

-
-

- Order 4 -

-
-

- 1.72
(43ns)
-

-
-

- 2.16
(54ns)
-

-
-

- 1.64
(41ns)
-

-
-

- 1.60
(40ns)
-

-
-

- 1.00
(25ns)
-

-
-

- 1.00
(25ns)
-

-
-

- 1.00
(25ns)
-

-
-

- 1.04
(26ns)
-

-
-

- Order 5 -

-
-

- 1.08
(53ns)
-

-
-

- 1.41
(69ns)
-

-
-

- 1.00
(49ns)
-

-
-

- 1.00
(49ns)
-

-
-

- 1.08
(53ns)
-

-
-

- 1.08
(53ns)
-

-
-

- 1.00
(49ns)
-

-
-

- 1.10
(54ns)
-

-
-

- Order 6 -

-
-

- 1.08
(65ns)
-

-
-

- 1.42
(85ns)
-

-
-

- 1.02
(61ns)
-

-
-

- 1.00
(60ns)
-

-
-

- 1.05
(63ns)
-

-
-

- 1.23
(74ns)
-

-
-

- 1.25
(75ns)
-

-
-

- 1.40
(84ns)
-

-
-

- Order 7 -

-
-

- 1.06
(75ns)
-

-
-

- 1.37
(97ns)
-

-
-

- 1.01
(72ns)
-

-
-

- 1.00
(71ns)
-

-
-

- 1.14
(81ns)
-

-
-

- 1.01
(72ns)
-

-
-

- 1.20
(85ns)
-

-
-

- 1.35
(96ns)
-

-
-

- Order 8 -

-
-

- 1.07
(87ns)
-

-
-

- 1.38
(112ns)
-

-
-

- 1.04
(84ns)
-

-
-

- 1.02
(83ns)
-

-
-

- 1.01
(82ns)
-

-
-

- 1.00
(81ns)
-

-
-

- 2.49
(202ns)
-

-
-

- 2.60
(211ns)
-

-
-

- Order 9 -

-
-

- 1.16
(103ns)
-

-
-

- 1.61
(143ns)
-

-
-

- 1.18
(105ns)
-

-
-

- 1.27
(113ns)
-

-
-

- 1.01
(90ns)
-

-
-

- 1.02
(91ns)
-

-
-

- 1.02
(91ns)
-

-
-

- 1.00
(89ns)
-

-
-

- Order 10 -

-
-

- 1.15
(115ns)
-

-
-

- 1.46
(146ns)
-

-
-

- 1.14
(114ns)
-

-
-

- 1.12
(112ns)
-

-
-

- 1.01
(101ns)
-

-
-

- 1.02
(102ns)
-

-
-

- 1.01
(101ns)
-

-
-

- 1.00
(100ns)
-

-
-

- Order 11 -

-
-

- 1.21
(131ns)
-

-
-

- 1.48
(160ns)
-

-
-

- 1.17
(126ns)
-

-
-

- 1.16
(125ns)
-

-
-

- 1.00
(108ns)
-

-
-

- 1.27
(137ns)
-

-
-

- 1.00
(108ns)
-

-
-

- 1.01
(109ns)
-

-
-

- Order 12 -

-
-

- 1.26
(148ns)
-

-
-

- 1.53
(179ns)
-

-
-

- 1.19
(139ns)
-

-
-

- 1.19
(139ns)
-

-
-

- 1.02
(119ns)
-

-
-

- 1.24
(145ns)
-

-
-

- 1.00
(117ns)
-

-
-

- 1.00
(117ns)
-

-
-

- Order 13 -

-
-

- 1.31
(163ns)
-

-
-

- 1.71
(212ns)
-

-
-

- 1.23
(153ns)
-

-
-

- 1.52
(189ns)
-

-
-

- 1.01
(125ns)
-

-
-

- 1.29
(160ns)
-

-
-

- 1.01
(125ns)
-

-
-

- 1.00
(124ns)
-

-
-

- Order 14 -

-
-

- 1.42
(190ns)
-

-
-

- 1.56
(209ns)
-

-
-

- 1.32
(177ns)
-

-
-

- 1.47
(197ns)
-

-
-

- 1.02
(137ns)
-

-
-

- 1.31
(175ns)
-

-
-

- 1.00
(134ns)
-

-
-

- 1.01
(136ns)
-

-
-

- Order 15 -

-
-

- 1.34
(194ns)
-

-
-

- 1.51
(219ns)
-

-
-

- 1.36
(197ns)
-

-
-

- 1.46
(212ns)
-

-
-

- 1.02
(148ns)
-

-
-

- 1.30
(188ns)
-

-
-

- 1.00
(145ns)
-

-
-

- 2.23
(323ns)
-

-
-

- Order 16 -

-
-

- 1.38
(216ns)
-

-
-

- 1.56
(244ns)
-

-
-

- 1.36
(212ns)
-

-
-

- 1.31
(204ns)
-

-
-

- 1.15
(179ns)
-

-
-

- 1.34
(209ns)
-

-
-

- 1.00
(156ns)
-

-
-

- 2.10
(328ns)
-

-
-

- Order 17 -

-
-

- 1.39
(227ns)
-

-
-

- 1.67
(273ns)
-

-
-

- 1.34
(218ns)
-

-
-

- 1.69
(275ns)
-

-
-

- 1.00
(163ns)
-

-
-

- 1.32
(215ns)
-

-
-

- 1.02
(167ns)
-

-
-

- 2.53
(412ns)
-

-
-

- Order 18 -

-
-

- 1.37
(242ns)
-

-
-

- 1.73
(306ns)
-

-
-

- 1.40
(248ns)
-

-
-

- 1.56
(276ns)
-

-
-

- 1.06
(187ns)
-

-
-

- 1.32
(233ns)
-

-
-

- 1.00
(177ns)
-

-
-

- 2.15
(380ns)
-

-
-

- Order 19 -

-
-

- 1.28
(254ns)
-

-
-

- 1.60
(319ns)
-

-
-

- 1.27
(253ns)
-

-
-

- 1.51
(300ns)
-

-
-

- 1.00
(199ns)
-

-
-

- 1.22
(243ns)
-

-
-

- 1.80
(359ns)
-

-
-

- 1.92
(382ns)
-

-
-

- Order 20 -

-
-

- 1.28
(268ns)
-

-
-

- 1.62
(338ns)
-

-
-

- 1.27
(265ns)
-

-
-

- 1.56
(325ns)
-

-
-

- 1.00
(209ns)
-

-
-

- 1.24
(259ns)
-

-
-

- 1.87
(391ns)
-

-
-

- 2.04
(427ns)
-

-
-
-
-
-
- -
-

Table 15. gcd method comparison with GNU C++ version 9.2.0 on Windows x64

-
--------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- gcd boost 1.73 -

-
-

- Euclid_gcd boost 1.73 -

-
-

- Stein_gcd boost 1.73 -

-
-

- mixed_binary_gcd boost 1.73 -

-
-

- Stein_gcd_textbook boost 1.73 -

-
-

- gcd_euclid_textbook boost 1.73 -

-
-

- gcd<boost::multiprecision::uint1024_t> (Trivial cases) -

-
-

- 1.00
(585ns)
-

-
-

- 1.30
(761ns)
-

-
-

- 3.82
(2237ns)
-

-
-

- 3.97
(2321ns)
-

-
-

- 1.43
(836ns)
-

-
-

- 1.10
(645ns)
-

-
-

- gcd<boost::multiprecision::uint1024_t> (adjacent Fibonacci - numbers) -

-
-

- 1.00
(9970176ns)
-

-
-

- 7.06
(70352275ns)
-

-
-

- 3.96
(39452018ns)
-

-
-

- 3.33
(33171075ns)
-

-
-

- 2.04
(20368737ns)
-

-
-

- 7.38
(73577712ns)
-

-
-

- gcd<boost::multiprecision::uint1024_t> (permutations of Fibonacci - numbers) -

-
-

- 3.58
(5700044700ns)
-

-
-

- 1.02
(1619575299ns)
-

-
-

- 15.19
(24170880700ns)
-

-
-

- 3.10
(4926301699ns)
-

-
-

- 7.61
(12103557199ns)
-

-
-

- 1.00
(1591386600ns)
-

-
-

- gcd<boost::multiprecision::uint1024_t> (random prime number - products) -

-
-

- 1.00
(776840ns)
-

-
-

- 1.83
(1420825ns)
-

-
-

- 7.78
(6040362ns)
-

-
-

- 2.39
(1853658ns)
-

-
-

- 4.19
(3251426ns)
-

-
-

- 1.96
(1522179ns)
-

-
-

- gcd<boost::multiprecision::uint1024_t> (uniform random numbers) -

-
-

- 1.00
(55462256ns)
-

-
-

- 2.02
(112246250ns)
-

-
-

- 2.55
(141227725ns)
-

-
-

- 2.21
(122643774ns)
-

-
-

- 1.49
(82400762ns)
-

-
-

- 1.99
(110242300ns)
-

-
-

- gcd<boost::multiprecision::uint256_t> (Trivial cases) -

-
-

- 1.00
(442ns)
-

-
-

- 1.08
(475ns)
-

-
-

- 4.12
(1815ns)
-

-
-

- 4.11
(1813ns)
-

-
-

- 1.17
(515ns)
-

-
-

- 1.00
(441ns)
-

-
-

- gcd<boost::multiprecision::uint256_t> (adjacent Fibonacci numbers) -

-
-

- 1.00
(4055238ns)
-

-
-

- 3.74
(15153867ns)
-

-
-

- 3.14
(12714485ns)
-

-
-

- 2.78
(11263817ns)
-

-
-

- 1.83
(7405233ns)
-

-
-

- 3.79
(15349360ns)
-

-
-

- gcd<boost::multiprecision::uint256_t> (permutations of Fibonacci - numbers) -

-
-

- 1.00
(2188053200ns)
-

-
-

- 2.24
(4905530400ns)
-

-
-

- 3.53
(7720779699ns)
-

-
-

- 2.26
(4951713400ns)
-

-
-

- 2.06
(4508168099ns)
-

-
-

- 2.60
(5692910900ns)
-

-
-

- gcd<boost::multiprecision::uint256_t> (random prime number - products) -

-
-

- 1.00
(788189ns)
-

-
-

- 1.65
(1298322ns)
-

-
-

- 4.56
(3592013ns)
-

-
-

- 1.51
(1186279ns)
-

-
-

- 2.77
(2184586ns)
-

-
-

- 1.70
(1337848ns)
-

-
-

- gcd<boost::multiprecision::uint256_t> (uniform random numbers) -

-
-

- 1.00
(5971862ns)
-

-
-

- 2.75
(16440456ns)
-

-
-

- 3.13
(18696806ns)
-

-
-

- 2.48
(14818301ns)
-

-
-

- 1.65
(9829225ns)
-

-
-

- 3.16
(18848609ns)
-

-
-

- gcd<boost::multiprecision::uint512_t> (Trivial cases) -

-
-

- 1.00
(473ns)
-

-
-

- 1.10
(522ns)
-

-
-

- 2.35
(1113ns)
-

-
-

- 2.54
(1201ns)
-

-
-

- 1.30
(617ns)
-

-
-

- 1.05
(497ns)
-

-
-

- gcd<boost::multiprecision::uint512_t> (adjacent Fibonacci numbers) -

-
-

- 1.00
(8919442ns)
-

-
-

- 4.88
(43541675ns)
-

-
-

- 4.74
(42250737ns)
-

-
-

- 3.64
(32424337ns)
-

-
-

- 1.68
(14998360ns)
-

-
-

- 4.90
(43720662ns)
-

-
-

- gcd<boost::multiprecision::uint512_t> (permutations of Fibonacci - numbers) -

-
-

- 1.00
(4874074099ns)
-

-
-

- 1.22
(5941210899ns)
-

-
-

- 3.28
(15985377299ns)
-

-
-

- 1.50
(7304170300ns)
-

-
-

- 1.76
(8559919799ns)
-

-
-

- 1.23
(6002105200ns)
-

-
-

- gcd<boost::multiprecision::uint512_t> (random prime number - products) -

-
-

- 1.00
(829159ns)
-

-
-

- 1.59
(1318798ns)
-

-
-

- 8.12
(6731670ns)
-

-
-

- 1.91
(1581731ns)
-

-
-

- 3.08
(2551970ns)
-

-
-

- 1.58
(1308443ns)
-

-
-

- gcd<boost::multiprecision::uint512_t> (uniform random numbers) -

-
-

- 1.00
(18120096ns)
-

-
-

- 2.35
(42631487ns)
-

-
-

- 3.97
(71846612ns)
-

-
-

- 3.10
(56237574ns)
-

-
-

- 1.49
(27081093ns)
-

-
-

- 2.66
(48247731ns)
-

-
-

- gcd<unsigned long long> (Trivial cases) -

-
-

- 1.85
(109ns)
-

-
-

- 2.44
(144ns)
-

-
-

- 1.00
(59ns)
-

-
-

- 1.88
(111ns)
-

-
-

- 1.68
(99ns)
-

-
-

- 2.08
(123ns)
-

-
-

- gcd<unsigned long long> (adjacent Fibonacci numbers) -

-
-

- 2.98
(17394ns)
-

-
-

- 14.61
(85221ns)
-

-
-

- 1.00
(5832ns)
-

-
-

- 2.98
(17351ns)
-

-
-

- 2.20
(12805ns)
-

-
-

- 14.60
(85125ns)
-

-
-

- gcd<unsigned long long> (permutations of Fibonacci numbers) -

-
-

- 1.04
(1203049ns)
-

-
-

- 1.30
(1508607ns)
-

-
-

- 1.13
(1307113ns)
-

-
-

- 1.00
(1159442ns)
-

-
-

- 2.23
(2585039ns)
-

-
-

- 1.26
(1455556ns)
-

-
-

- gcd<unsigned long long> (random prime number products) -

-
-

- 1.14
(267158ns)
-

-
-

- 1.88
(441001ns)
-

-
-

- 1.00
(234725ns)
-

-
-

- 1.07
(249997ns)
-

-
-

- 2.02
(473466ns)
-

-
-

- 1.78
(418669ns)
-

-
-

- gcd<unsigned long long> (uniform random numbers) -

-
-

- 1.39
(507147ns)
-

-
-

- 2.14
(784228ns)
-

-
-

- 1.00
(365889ns)
-

-
-

- 1.33
(488432ns)
-

-
-

- 1.75
(641184ns)
-

-
-

- 2.08
(760185ns)
-

-
-

- gcd<unsigned long> (Trivial cases) -

-
-

- 1.23
(70ns)
-

-
-

- 1.16
(66ns)
-

-
-

- 1.00
(57ns)
-

-
-

- 1.19
(68ns)
-

-
-

- 1.63
(93ns)
-

-
-

- 1.12
(64ns)
-

-
-

- gcd<unsigned long> (adjacent Fibonacci numbers) -

-
-

- 1.79
(2678ns)
-

-
-

- 10.20
(15231ns)
-

-
-

- 1.00
(1493ns)
-

-
-

- 1.85
(2765ns)
-

-
-

- 2.07
(3093ns)
-

-
-

- 9.50
(14177ns)
-

-
-

- gcd<unsigned long> (permutations of Fibonacci numbers) -

-
-

- 1.00
(130874ns)
-

-
-

- 1.43
(187180ns)
-

-
-

- 1.31
(171288ns)
-

-
-

- 1.01
(132289ns)
-

-
-

- 2.45
(321281ns)
-

-
-

- 1.30
(169852ns)
-

-
-

- gcd<unsigned long> (random prime number products) -

-
-

- 1.02
(132073ns)
-

-
-

- 1.56
(202025ns)
-

-
-

- 1.11
(143913ns)
-

-
-

- 1.00
(129448ns)
-

-
-

- 2.03
(263053ns)
-

-
-

- 1.40
(181659ns)
-

-
-

- gcd<unsigned long> (uniform random numbers) -

-
-

- 1.14
(209599ns)
-

-
-

- 1.61
(296090ns)
-

-
-

- 1.00
(183672ns)
-

-
-

- 1.17
(214530ns)
-

-
-

- 1.76
(322600ns)
-

-
-

- 1.55
(284838ns)
-

-
-

- gcd<unsigned short> (Trivial cases) -

-
-

- 1.19
(74ns)
-

-
-

- 1.05
(65ns)
-

-
-

- 1.00
(62ns)
-

-
-

- 1.29
(80ns)
-

-
-

- 1.53
(95ns)
-

-
-

- 1.08
(67ns)
-

-
-

- gcd<unsigned short> (adjacent Fibonacci numbers) -

-
-

- 1.55
(694ns)
-

-
-

- 6.51
(2915ns)
-

-
-

- 1.00
(448ns)
-

-
-

- 1.65
(737ns)
-

-
-

- 1.42
(634ns)
-

-
-

- 6.06
(2716ns)
-

-
-

- gcd<unsigned short> (permutations of Fibonacci numbers) -

-
-

- 1.31
(10776ns)
-

-
-

- 2.35
(19287ns)
-

-
-

- 1.00
(8206ns)
-

-
-

- 1.41
(11598ns)
-

-
-

- 1.63
(13337ns)
-

-
-

- 2.21
(18163ns)
-

-
-

- gcd<unsigned short> (random prime number products) -

-
-

- 1.04
(48625ns)
-

-
-

- 1.82
(84692ns)
-

-
-

- 1.03
(47933ns)
-

-
-

- 1.00
(46539ns)
-

-
-

- 2.94
(136663ns)
-

-
-

- 1.68
(78386ns)
-

-
-

- gcd<unsigned short> (uniform random numbers) -

-
-

- 1.05
(73231ns)
-

-
-

- 1.72
(120140ns)
-

-
-

- 1.00
(69680ns)
-

-
-

- 1.04
(72636ns)
-

-
-

- 2.51
(175204ns)
-

-
-

- 1.70
(118679ns)
-

-
-

- gcd<unsigned> (Trivial cases) -

-
-

- 1.30
(73ns)
-

-
-

- 1.14
(64ns)
-

-
-

- 1.00
(56ns)
-

-
-

- 1.23
(69ns)
-

-
-

- 1.62
(91ns)
-

-
-

- 1.14
(64ns)
-

-
-

- gcd<unsigned> (adjacent Fibonacci numbers) -

-
-

- 1.81
(2689ns)
-

-
-

- 10.14
(15051ns)
-

-
-

- 1.00
(1485ns)
-

-
-

- 1.92
(2845ns)
-

-
-

- 2.10
(3117ns)
-

-
-

- 9.74
(14464ns)
-

-
-

- gcd<unsigned> (permutations of Fibonacci numbers) -

-
-

- 1.00
(125228ns)
-

-
-

- 1.45
(182101ns)
-

-
-

- 1.36
(169753ns)
-

-
-

- 1.04
(130303ns)
-

-
-

- 2.50
(312889ns)
-

-
-

- 1.41
(176940ns)
-

-
-

- gcd<unsigned> (random prime number products) -

-
-

- 1.04
(133297ns)
-

-
-

- 1.55
(199022ns)
-

-
-

- 1.05
(134178ns)
-

-
-

- 1.00
(128319ns)
-

-
-

- 2.03
(260550ns)
-

-
-

- 1.53
(196665ns)
-

-
-

- gcd<unsigned> (uniform random numbers) -

-
-

- 1.15
(212670ns)
-

-
-

- 1.61
(298254ns)
-

-
-

- 1.00
(184955ns)
-

-
-

- 1.17
(216091ns)
-

-
-

- 1.80
(332689ns)
-

-
-

- 1.62
(299958ns)
-

-
-
-
-
-
- -
-

Table 16. gcd method comparison with Microsoft Visual C++ version 14.2 on Windows - x64

-
--------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

- Function -

-
-

- gcd boost 1.73 -

-
-

- Euclid_gcd boost 1.73 -

-
-

- Stein_gcd boost 1.73 -

-
-

- mixed_binary_gcd boost 1.73 -

-
-

- Stein_gcd_textbook boost 1.73 -

-
-

- gcd_euclid_textbook boost 1.73 -

-
-

- gcd<boost::multiprecision::uint1024_t> (Trivial cases) -

-
-

- 1.01
(811ns)
-

-
-

- 1.00
(806ns)
-

-
-

- 4.49
(3619ns)
-

-
-

- 4.37
(3524ns)
-

-
-

- 1.54
(1240ns)
-

-
-

- 1.17
(947ns)
-

-
-

- gcd<boost::multiprecision::uint1024_t> (adjacent Fibonacci - numbers) -

-
-

- 1.00
(17221009ns)
-

-
-

- 3.10
(53378856ns)
-

-
-

- 3.49
(60085356ns)
-

-
-

- 2.71
(46662362ns)
-

-
-

- 1.43
(24687809ns)
-

-
-

- 3.60
(62017387ns)
-

-
-

- gcd<boost::multiprecision::uint1024_t> (permutations of Fibonacci - numbers) -

-
-

- 4.79
(8947276300ns)
-

-
-

- 1.00
(1869827499ns)
-

-
-

- 16.49
(30836050300ns)
-

-
-

- 2.95
(5512590399ns)
-

-
-

- 9.35
(17476759399ns)
-

-
-

- 1.59
(2969003299ns)
-

-
-

- gcd<boost::multiprecision::uint1024_t> (random prime number - products) -

-
-

- 1.15
(1366950ns)
-

-
-

- 1.00
(1184715ns)
-

-
-

- 6.07
(7192390ns)
-

-
-

- 1.69
(2004764ns)
-

-
-

- 2.88
(3414226ns)
-

-
-

- 1.03
(1223450ns)
-

-
-

- gcd<boost::multiprecision::uint1024_t> (uniform random numbers) -

-
-

- 1.13
(94422587ns)
-

-
-

- 1.10
(91927462ns)
-

-
-

- 2.46
(205656225ns)
-

-
-

- 1.79
(150321950ns)
-

-
-

- 1.26
(105849675ns)
-

-
-

- 1.00
(83747287ns)
-

-
-

- gcd<boost::multiprecision::uint256_t> (Trivial cases) -

-
-

- 1.12
(529ns)
-

-
-

- 1.22
(578ns)
-

-
-

- 5.71
(2706ns)
-

-
-

- 5.01
(2376ns)
-

-
-

- 1.62
(768ns)
-

-
-

- 1.00
(474ns)
-

-
-

- gcd<boost::multiprecision::uint256_t> (adjacent Fibonacci numbers) -

-
-

- 1.00
(6910946ns)
-

-
-

- 2.03
(14038607ns)
-

-
-

- 4.15
(28656946ns)
-

-
-

- 2.36
(16280003ns)
-

-
-

- 1.83
(12632765ns)
-

-
-

- 1.79
(12358175ns)
-

-
-

- gcd<boost::multiprecision::uint256_t> (permutations of Fibonacci - numbers) -

-
-

- 1.00
(3546690299ns)
-

-
-

- 1.24
(4410071600ns)
-

-
-

- 4.54
(16088449000ns)
-

-
-

- 2.08
(7376147399ns)
-

-
-

- 1.87
(6630678299ns)
-

-
-

- 1.11
(3921678899ns)
-

-
-

- gcd<boost::multiprecision::uint256_t> (random prime number - products) -

-
-

- 1.24
(1402017ns)
-

-
-

- 1.19
(1342771ns)
-

-
-

- 10.57
(11937009ns)
-

-
-

- 2.30
(2592407ns)
-

-
-

- 3.17
(3578886ns)
-

-
-

- 1.00
(1129228ns)
-

-
-

- gcd<boost::multiprecision::uint256_t> (uniform random numbers) -

-
-

- 1.00
(9555357ns)
-

-
-

- 1.38
(13230160ns)
-

-
-

- 3.58
(34160918ns)
-

-
-

- 2.17
(20739521ns)
-

-
-

- 1.66
(15830168ns)
-

-
-

- 1.25
(11919907ns)
-

-
-

- gcd<boost::multiprecision::uint512_t> (Trivial cases) -

-
-

- 1.09
(610ns)
-

-
-

- 1.05
(586ns)
-

-
-

- 4.52
(2524ns)
-

-
-

- 5.42
(3032ns)
-

-
-

- 1.53
(858ns)
-

-
-

- 1.00
(559ns)
-

-
-

- gcd<boost::multiprecision::uint512_t> (adjacent Fibonacci numbers) -

-
-

- 1.00
(15008157ns)
-

-
-

- 2.19
(32823187ns)
-

-
-

- 3.54
(53103662ns)
-

-
-

- 2.51
(37681662ns)
-

-
-

- 1.67
(25128434ns)
-

-
-

- 2.06
(30897006ns)
-

-
-

- gcd<boost::multiprecision::uint512_t> (permutations of Fibonacci - numbers) -

-
-

- 1.70
(7824618799ns)
-

-
-

- 1.06
(4905917200ns)
-

-
-

- 6.42
(29578499900ns)
-

-
-

- 1.96
(9014054500ns)
-

-
-

- 2.82
(12972133700ns)
-

-
-

- 1.00
(4607798200ns)
-

-
-

- gcd<boost::multiprecision::uint512_t> (random prime number - products) -

-
-

- 1.20
(1429033ns)
-

-
-

- 1.00
(1192363ns)
-

-
-

- 6.71
(8006331ns)
-

-
-

- 1.66
(1983967ns)
-

-
-

- 3.05
(3641579ns)
-

-
-

- 1.00
(1193514ns)
-

-
-

- gcd<boost::multiprecision::uint512_t> (uniform random numbers) -

-
-

- 1.00
(28993946ns)
-

-
-

- 1.13
(32874618ns)
-

-
-

- 3.71
(107613600ns)
-

-
-

- 2.24
(64869562ns)
-

-
-

- 1.39
(40246987ns)
-

-
-

- 1.26
(36427993ns)
-

-
-

- gcd<unsigned long long> (Trivial cases) -

-
-

- 1.61
(143ns)
-

-
-

- 1.88
(167ns)
-

-
-

- 1.09
(97ns)
-

-
-

- 1.66
(148ns)
-

-
-

- 1.00
(89ns)
-

-
-

- 1.25
(111ns)
-

-
-

- gcd<unsigned long long> (adjacent Fibonacci numbers) -

-
-

- 1.65
(18657ns)
-

-
-

- 9.12
(102852ns)
-

-
-

- 1.00
(11278ns)
-

-
-

- 1.65
(18642ns)
-

-
-

- 1.36
(15386ns)
-

-
-

- 7.61
(85867ns)
-

-
-

- gcd<unsigned long long> (permutations of Fibonacci numbers) -

-
-

- 1.18
(1759315ns)
-

-
-

- 1.23
(1829739ns)
-

-
-

- 2.48
(3696867ns)
-

-
-

- 1.20
(1792095ns)
-

-
-

- 1.92
(2869829ns)
-

-
-

- 1.00
(1493466ns)
-

-
-

- gcd<unsigned long long> (random prime number products) -

-
-

- 1.03
(419624ns)
-

-
-

- 1.26
(513559ns)
-

-
-

- 1.66
(677592ns)
-

-
-

- 1.00
(407357ns)
-

-
-

- 1.24
(505557ns)
-

-
-

- 1.05
(426446ns)
-

-
-

- gcd<unsigned long long> (uniform random numbers) -

-
-

- 1.15
(802062ns)
-

-
-

- 1.29
(895731ns)
-

-
-

- 1.38
(959675ns)
-

-
-

- 1.16
(810488ns)
-

-
-

- 1.00
(696259ns)
-

-
-

- 1.10
(768043ns)
-

-
-

- gcd<unsigned long> (Trivial cases) -

-
-

- 2.05
(115ns)
-

-
-

- 1.61
(90ns)
-

-
-

- 1.80
(101ns)
-

-
-

- 1.98
(111ns)
-

-
-

- 1.55
(87ns)
-

-
-

- 1.00
(56ns)
-

-
-

- gcd<unsigned long> (adjacent Fibonacci numbers) -

-
-

- 1.26
(3438ns)
-

-
-

- 8.19
(22429ns)
-

-
-

- 1.00
(2739ns)
-

-
-

- 1.30
(3567ns)
-

-
-

- 1.15
(3146ns)
-

-
-

- 5.44
(14903ns)
-

-
-

- gcd<unsigned long> (permutations of Fibonacci numbers) -

-
-

- 1.17
(205858ns)
-

-
-

- 1.52
(268100ns)
-

-
-

- 2.43
(427978ns)
-

-
-

- 1.13
(198590ns)
-

-
-

- 2.02
(356193ns)
-

-
-

- 1.00
(175939ns)
-

-
-

- gcd<unsigned long> (random prime number products) -

-
-

- 1.01
(214230ns)
-

-
-

- 1.32
(278903ns)
-

-
-

- 1.93
(406951ns)
-

-
-

- 1.12
(237142ns)
-

-
-

- 1.70
(358996ns)
-

-
-

- 1.00
(211247ns)
-

-
-

- gcd<unsigned long> (uniform random numbers) -

-
-

- 1.29
(382560ns)
-

-
-

- 1.46
(431960ns)
-

-
-

- 1.77
(524430ns)
-

-
-

- 1.26
(373023ns)
-

-
-

- 1.27
(377903ns)
-

-
-

- 1.00
(296476ns)
-

-
-

- gcd<unsigned short> (Trivial cases) -

-
-

- 1.79
(118ns)
-

-
-

- 1.41
(93ns)
-

-
-

- 1.47
(97ns)
-

-
-

- 1.73
(114ns)
-

-
-

- 1.42
(94ns)
-

-
-

- 1.00
(66ns)
-

-
-

- gcd<unsigned short> (adjacent Fibonacci numbers) -

-
-

- 1.16
(821ns)
-

-
-

- 7.62
(5377ns)
-

-
-

- 1.00
(706ns)
-

-
-

- 1.17
(823ns)
-

-
-

- 1.15
(810ns)
-

-
-

- 5.04
(3557ns)
-

-
-

- gcd<unsigned short> (permutations of Fibonacci numbers) -

-
-

- 1.00
(11485ns)
-

-
-

- 3.82
(43640ns)
-

-
-

- 1.16
(13294ns)
-

-
-

- 1.00
(11428ns)
-

-
-

- 2.19
(25029ns)
-

-
-

- 2.11
(24145ns)
-

-
-

- gcd<unsigned short> (random prime number products) -

-
-

- 1.26
(123821ns)
-

-
-

- 1.92
(188438ns)
-

-
-

- 2.21
(216289ns)
-

-
-

- 1.12
(109274ns)
-

-
-

- 1.67
(163434ns)
-

-
-

- 1.00
(97914ns)
-

-
-

- gcd<unsigned short> (uniform random numbers) -

-
-

- 1.16
(169639ns)
-

-
-

- 1.44
(212132ns)
-

-
-

- 1.62
(237308ns)
-

-
-

- 1.16
(170196ns)
-

-
-

- 1.30
(191524ns)
-

-
-

- 1.00
(146827ns)
-

-
-

- gcd<unsigned> (Trivial cases) -

-
-

- 1.98
(117ns)
-

-
-

- 1.61
(95ns)
-

-
-

- 1.90
(112ns)
-

-
-

- 2.00
(118ns)
-

-
-

- 1.61
(95ns)
-

-
-

- 1.00
(59ns)
-

-
-

- gcd<unsigned> (adjacent Fibonacci numbers) -

-
-

- 1.28
(3381ns)
-

-
-

- 8.39
(22209ns)
-

-
-

- 1.00
(2648ns)
-

-
-

- 1.30
(3436ns)
-

-
-

- 1.34
(3540ns)
-

-
-

- 5.64
(14937ns)
-

-
-

- gcd<unsigned> (permutations of Fibonacci numbers) -

-
-

- 1.08
(197785ns)
-

-
-

- 1.47
(269176ns)
-

-
-

- 2.37
(435412ns)
-

-
-

- 1.12
(205095ns)
-

-
-

- 2.08
(382592ns)
-

-
-

- 1.00
(183636ns)
-

-
-

- gcd<unsigned> (random prime number products) -

-
-

- 1.09
(214890ns)
-

-
-

- 1.42
(279881ns)
-

-
-

- 1.99
(392760ns)
-

-
-

- 1.05
(206420ns)
-

-
-

- 1.61
(317337ns)
-

-
-

- 1.00
(197431ns)
-

-
-

- gcd<unsigned> (uniform random numbers) -

-
-

- 1.26
(385229ns)
-

-
-

- 1.35
(411167ns)
-

-
-

- 1.68
(512335ns)
-

-
-

- 1.23
(375323ns)
-

-
-

- 1.32
(402786ns)
-

-
-

- 1.00
(305574ns)
-

-
-
-
-
-
- - - -

Last revised: April 03, 2020 at 11:57:28 GMT

-
-
- - diff -Nru boost1.81-1.81.0/libs/mpi/build/__init__.py boost1.81-1.81.0/libs/mpi/build/__init__.py --- boost1.81-1.81.0/libs/mpi/build/__init__.py 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/mpi/build/__init__.py 2022-12-24 13:24:12.869577400 +0000 @@ -5,8 +5,6 @@ sys.setdlopenflags(dl.RTLD_NOW|dl.RTLD_GLOBAL) import mpi sys.setdlopenflags(flags) -if sys.platform == 'linux': - from . import mpi else: import mpi diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/acknowledgements.html boost1.81-1.81.0/libs/mpl/doc/tutorial/acknowledgements.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/acknowledgements.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/acknowledgements.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Acknowledgements - - - - - -
Front Page / Acknowledgements
-
-

Acknowledgements

-

Many, many people in one or another way contributed to the library development. The -list below is known to be incomplete and needs updating! We sincerely promise to -fix it in the near feature.

-

For bug reports, patches, suggestions and insightful discussions, our thanks go to:

-
    -
  • John Bandela
  • -
  • Fernando Cacciola
  • -
  • Peter Dimov
  • -
  • Eric Friedman
  • -
  • Arnaldur Gylfason
  • -
  • David B. Held
  • -
  • Vesa Karvonen
  • -
  • Mat Marcus
  • -
  • Hamish Mackenzie
  • -
  • Paul Mensonides
  • -
  • Emily Winch
  • -
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/apply-lambda-semantics.html boost1.81-1.81.0/libs/mpl/doc/tutorial/apply-lambda-semantics.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/apply-lambda-semantics.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/apply-lambda-semantics.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: apply/lambda Semantics - - - - - -
Front Page / Changelog & History / Changes in Boost 1.32.0 Release / apply/lambda Semantics
-
-

apply/lambda Semantics

-
    -
  1. Nullary metafunction classes are now consistent with all other -metafunction classes, rather than being identical to nullary -metafunctions:

    - ----- - - - - - - - - - - - - - - - - -

    Nullary...

    -

    Before

    -

    Now

    -

    Metafunction

    -

    f::type

    -

    f::type

    -

    Metafunction class

    -

    c::type

    -

    c::apply<>::type or -c::apply::type [7]

    -
    -

    This fixes a flaw in the metafunction class/metafunction algebra -that long has been a major source of other inconsistencies throughout -the library.

    -
  2. -
  3. The apply metafunction now automatically invokes lambda -on its first argument. For example, the following is well-formed now:

    -
    -typedef apply< plus<_1,_1>, int_<2> >::type four;
    -
    -

    apply_wrapn auxiliary metafunctions are available for rare cases -when it's crucial to eliminate the small overhead associated with lambda -expressions while still avoiding various compiler bugs known to -cause problems with -the obvious f::template apply<...>::type syntax.

    -
  4. -
  5. The lambda implementation for broken compilers has been -reworked to emulate the semantics of the full-fledged version -as closely as possible; consequently, any code out there that -was taking advantage of the semantic quirks of less complete -emulation in the previous release may stop working with the new -one.

    -
  6. -
-

To get a detailed picture of the new apply/lambda semantics, please -see the test case at -libs/mpl/test/apply.cpp -and the corresponding sections of the MPL reference manual.

- - - - - -
[7]The second form is available only on fully conforming compilers.
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/broken-integral-constant.html boost1.81-1.81.0/libs/mpl/doc/tutorial/broken-integral-constant.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/broken-integral-constant.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/broken-integral-constant.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Broken Integral Constant Expressions - - - - - -
Front Page / Technical Details / Portability / Broken Integral Constant Expressions
-
-

Broken Integral Constant Expressions

-

This is probably the most surprising of the portability issues -we're going to discuss, not least because for many C++ programmers, their everyday -experience seems to indicate no problems in this area whatsoever. After all, -integer compile-time computations along the lines of:

-
-enum flags {
-      flag1     = (1 << 0)
-    , flag2     = (1 << 1)
-    , flag3     = (1 << 2)
-    ...
-    };
-
-

are very commonplace in C++, and there is hardly a compiler out -there that cannot handle this correctly. While arithmetic by -itself is indeed rarely problematic, when you are trying to mix it -with templates on certain deficient compilers, all kinds of new -issues arise. Fortunately, as with the rest of the portability -issues we're discussing here, the problem fades into past as new -compiler versions are released. The majority of most recent -compilers of many vendors are already free from these issues.

-
-

The Problem

-

The problem is in fact multi-faceted; there are a number of -different subissues. Some are present in one set of compilers, -some are in another, and it's not uncommon for a code that works -for one compiler to break another one and vice-versa. If this -sounds like a maintenance nightmare to you, it is! If you are -interested in the specific list of issues, please refer to John -Maddock's excellent "Coding Guidelines for Integral Constant -Expressions" summary. For the purpose of our discission here, it -is sufficient to say that if your code has to work on one of the -compilers listed as problematic in this area, you can safely assume -that if you decide to fight them on a case-by-case basis, chances -are that you won't be able to maintain your sanity for very long.

-
-
-

The Symptoms

-

On the positive side, when you have an issue with integral -arithmetic, the diagnostics are almost always straightforward: -usually the error message refers you to the exact place in the code -that is causing problems, and the essence of issue is obvious from -the error's text, or it becomes obvious once you've encountered the -same error a couple of times. For instance, if we throw this -well-formed fragment at MSVC 7.1 (otherwise an excellent compiler!)

-
-void value();
-
-// compares two Integral Constants
-template< typename N1, typename N2 > struct less
-    : bool_< (N1::value < N2::value) > // line #8
-{
-};
-
-

we get:

-
-portability.cpp(8) : warning C4346: 'N2::value' : dependent name is not a type
-        prefix with 'typename' to indicate a type
-        portability.cpp(10) : see reference to class template instantiation 'less<N1,N2>' being compiled
-portability.cpp(8) : error C2143: syntax error : missing ',' before ')'
-portability.cpp(9) : error C2143: syntax error : missing ';' before '{'
-portability.cpp(10) : error C2143: syntax error : missing ';' before '}'
-portability.cpp(10) : fatal error C1004: unexpected end of file found
-
-

The errors themselves are far from being ideal, but at least we are -pointed at the correct line and even the correct part of the -line. The above basically reads as "something's wrong between the -parentheses", and that plus the "syntax error" part is usually -enough of the clue.

-
-
-

The Solution

-

Despite the fact the problems are so numerous and multi-faceted and -the workarounds are conflicting, the problems can be hidden -reliably beneath a library abstraction layer. The underlaying idea -is very simple: we can always wrap the constants in types and pass -those around. Then all that is left is to implement algebraic -metafunctions that operate on such wrappers, once, and we are home -safe.

-

If this sounds familiar to you, probably it's because you have -already took a look at the MPL and know that the approach we just -described is in fact the standard way of doing arithmetic in the -library. Although it's motivated by more general observations, -this fact comes very handy for the library users that care about -portability of their numerically-heavy metaprograms. The MPL -primitives are already there, and more importantly, they already -implement the necessary workarounds, so your numeric code just -works. In fact, if you stay within the library's type-wrapper -idioms, these particular problems never "leak" out of its -abstraction layer.

-

On a final note, there is a price of avoiding built-in arithmetics -altogether, namely decreased readability and, on some compilers, -increased compile-time overhead. Still, in majority of cases, the -benefits of type-based arithmetics overweight its small -shortcomings.

-
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/changelog-history.html boost1.81-1.81.0/libs/mpl/doc/tutorial/changelog-history.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/changelog-history.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/changelog-history.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Changelog & History - - - - - -
Front Page / Changelog & History
- - - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/changes-in-boost-1-32-0.html boost1.81-1.81.0/libs/mpl/doc/tutorial/changes-in-boost-1-32-0.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/changes-in-boost-1-32-0.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/changes-in-boost-1-32-0.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Changes in Boost 1.32.0 Release - - - - - -
Front Page / Changelog & History / Changes in Boost 1.32.0 Release
-
-

Changes in Boost 1.32.0 Release

-

The following summarizes major changes in the library interface and -implementation from the previous release. Note that this is not a -comprehensive list of all changes (yet).

- - -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/dependencies.html boost1.81-1.81.0/libs/mpl/doc/tutorial/dependencies.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/dependencies.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/dependencies.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Dependencies - - - - - -
Front Page / Technical Details / Dependencies
-
-

Dependencies

-

Besides Boost.Config headers, the MPL relies on three other header-only -libraries:

- -

These dependencies are essential and cannot be eliminated. The -library's tests and examples may depend on some additional Boost -libraries such as Boost.Bind; unless you are interested in actually -compiling these files, you can safely ignore those dependencies.

-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/details.html boost1.81-1.81.0/libs/mpl/doc/tutorial/details.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/details.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/details.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Details - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Details
-
-

Details

-

By now you should have a fairly complete view of the fundamental -concepts and language of both template metaprogramming in general -and of the Boost Metaprogramming Library. This section -reviews the highlights.

-
-
Metafunction forwarding.
-
The technique of using public derivation to -supply the nested type of a metafunction by accessing the one -provided by its base class.
-
Metafunction class.
-
The most basic way to formulate a compile-time -function so that it can be treated as polymorphic metadata; that -is, as a type. A metafunction class is a class with a nested -metafunction called apply.
-
MPL.
-

Most of this book's examples will use the Boost -Metaprogramming Library. Like the Boost type traits headers, -MPL -headers follow a simple convention:

-
-#include <boost/mpl/component-name.hpp>
-
-

If the component's name ends in an underscore, however, the -corresponding MPL header name does not include the trailing -underscore. For example, mpl::bool_ can be found in -<boost/mpl/bool.hpp>. Where the library deviates from this -convention, we'll be sure to point it out to you.

-
-
- -
-
Higher-order function.
-
A function that operates on or returns a function. Making -metafunctions polymorphic with other metadata is a key -ingredient in higher-order metaprogramming.
-
Lambda expression.
-
Simply put, a lambda expression is callable metadata. Without -some form of callable metadata, higher-order metafunctions -would be impossible. Lambda expressions have two basic forms: -metafunction classes and placeholder expressions.
-
Placeholder expression.
-

A kind of lambda expression that, through the use of -placeholders, enables in-place partial metafunction -application and metafunction composition. As you will see -throughout this book, these features give us the truly amazing -ability to build up almost any kind of complex type computation -from more primitive metafunctions, right at its point of use:

-
-// find the position of a type x in some_sequence such that:
-//         x is convertible to 'int'
-//      && x is not 'char'
-//      && x is not a floating type
-typedef mpl::find_if<
-      some_sequence
-    , mpl::and_<
-          boost::is_convertible<_1,int>
-        , mpl::not_<boost::is_same<_1,char> >
-        , mpl::not_<boost::is_float<_1> >
-      >
-    >::type iter;
-
-

Placeholder expressions make good on the promise of algorithm reuse -without forcing us to write new metafunction classes. The -corresponding capability is often sorely missed in the runtime -world of the STL, since it is often much easier to write a loop -by hand than it is to use standard algorithms, despite their -correctness and efficiency advantages.

-
-
- -
-
The lambda metafunction.
-
A metafunction that transforms a lambda expression into a -corresponding metafunction class. For detailed information on -lambda and the lambda evaluation process, -please see the the MPL reference manual.
-
The apply metafunction.
-
A metafunction that invokes its first argument, which must be a -lambda expression, on its remaining arguments. In general, to -invoke a lambda expression, you should always pass it to -mpl::apply along with the arguments you want to apply it -to in lieu of using lambda and invoking the result "manually."
-
Lazy evaluation.
-
A strategy of delaying evaluation until a result is -required, thereby avoiding any unnecessary computation and any -associated unnecessary errors. Metafunctions are only invoked -when we access their nested ::types, so we can supply all -of their arguments without performing any computation and -delay evaluation to the last possible moment.
-
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/dimensional-analysis.html boost1.81-1.81.0/libs/mpl/doc/tutorial/dimensional-analysis.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/dimensional-analysis.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/dimensional-analysis.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Dimensional Analysis - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Dimensional Analysis
-
-

Dimensional Analysis

-

The first rule of doing physical calculations -on paper is that the numbers being manipulated don't stand alone: -most quantities have attached dimensions, to be ignored at our -peril. As computations become more complex, keeping track of -dimensions is what keeps us from inadvertently assigning a mass to -what should be a length or adding acceleration to velocity — it -establishes a type system for numbers.

-

Manual checking of types is tedious, and as a result, it's also -error-prone. When human beings become bored, their attention -wanders and they tend to make mistakes. Doesn't type checking seem -like the sort of job a computer might be good at, though? If we -could establish a framework of C++ types for dimensions and -quantities, we might be able to catch errors in formulae before -they cause serious problems in the real world.

-

Preventing quantities with different dimensions from interoperating -isn't hard; we could simply represent dimensions as classes that -only work with dimensions of the same type. What makes this -problem interesting is that different dimensions can be combined, -via multiplication or division, to produce arbitrarily complex new -dimensions. For example, take Newton's law, which relates force to -mass and acceleration:

-
-F = ma
-

Since mass and acceleration have different dimensions, the -dimensions of force must somehow capture their combination. In -fact, the dimensions of acceleration are already just such a -composite, a change in velocity over time:

-
-dv/dt
-

Since velocity is just change in distance (l) over time (t), -the fundamental dimensions of acceleration are:

-
-(l/t)/t = l/t2
-

And indeed, acceleration is commonly measured in "meters per second -squared." It follows that the dimensions of force must be:

-
-ml/t2
- -

and force is commonly measured in kg(m/s2), or -"kilogram-meters per second squared." When multiplying quantities -of mass and acceleration, we multiply their dimensions as well and -carry the result along, which helps us to ensure that the result is -meaningful. The formal name for this bookkeeping is dimensional -analysis, and our next task will be to implement its rules in the C++ -type system. John Barton and Lee Nackman were the first to show -how to do this in their seminal book, Scientific and Engineering -C++ [BN94]. We will recast their approach here in -metaprogramming terms.

- - - - - -
[BN94]John J. Barton and Lee R. Nackman. Scientific and -Engineering C++: an Introduction with Advanced Techniques and -Examples. Reading, MA: Addison Wesley. ISBN -0-201-53393-6. 1994.
- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/eti.html boost1.81-1.81.0/libs/mpl/doc/tutorial/eti.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/eti.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/eti.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: ETI - - - - - -
Front Page / Technical Details / Portability / ETI
-
-

ETI

-

In context of C++ template problems, ETI is an abbreviation for "Early -Template Instantiation" — a Microsoft Visual C++ - specific issue that -has been a barrier to any serious work with templates on this platform until -Microsoft developers fixed it in Visual C++ 7.1 (2003 .NET). Although the -problem is relatively easy to work around if the right techniques -are applied systematically through the codebase, the approach is definitely -tedious and time-consuming. So, if one day you discover that you are spending -too much time dealing with the issue, consider upgrading to the -newer version of the compiler. In fact, seriously consider it regardless. -The benefits of saved time, money and frustration are well worth the price.

-
-

The Problem

-

Here is a short demonstration of the issue with MSVC 6.x:

-
-template< typename F, typename T > struct apply1
-{
-    typedef typename F::template apply<T>::type type;
-};
-
-

Trying to compiling this innocent-looking code, we get:

-
-portability.cpp(4) : error C2903: 'apply' : symbol is neither a class template 
-            nor a function template
-        portability.cpp(5) : see reference to class template instantiation 
-            'apply1<F,T>' being compiled
-portability.cpp(4) : error C2143: syntax error : missing ',' before '<'
-        portability.cpp(5) : see reference to class template instantiation 
-            'apply1<F,T>' being compiled
-portability.cpp(4) : error C2059: syntax error : '<'
-        portability.cpp(5) : see reference to class template instantiation 
-            'apply1<F,T>' being compiled
-
-

The "symbol is neither a class template nor a function template" part of the -diagnostics is actually often an indication of ETI-related problems. Another -typical error message usually says something about nested type such-and-such -not being a member of a global namespace.

-

Both cases are two sides of the same compiler bug, which we call -"Early template instantiation": the compiler, for internal -purposes, in order to process class template definitions, -instantiates class templates with dummy template parameters -(int's). That can happen both during parsing of template -definitions (and such errors are most easy to identify and fix — -the template definition itself just doesn't compile; the example -above falls into this category), or later during template -instantiation, and these one are hard to detect — the bug will -only be triggered in some particular context.

- -

ETI is always performed during parsing of the namespace-scope -template definition, which basically means that any template -definition that is rendered invalid by substituting its template -parameters by ints might not compile, as it happened with our -example:

-
-template< typename F, typename T > struct apply1
-{
-    // typedef typename F::template apply<T>::type type;
-    // ETI generates this: 
-    typedef typename int::template apply<int>::type type;
-};
-
-

If you compile this, you'll get exactly the same diagnostics as we've just seen.

-

Note that we've said "might not compile", because... well, the short answer is, -"it depends". We haven't analyzed things to the point that we could tell you the -exact condition when ETI leads to an error and when it doesn't, but -that's not very important anyway — if it's an error, you just fix it (we'll show you how -in a second), and if it's not, then you leave things as is. If one day the -potential issue turns into a real one, then you apply the workaround we are about -to give you.

-
-
-

The Symptoms

-

We've already looked at the typical diagnostics, so we won't repeat -ourselves. Instead we'll -just mention that many MSVC's INTERNAL COMPILER ERRORs (ICEs) are, in fact, caused -by an ETI-related problem somewhere deep down the instantiation stack.

-
-
-

The Solution

-

There is no way we can change the compiler's behavior in this case, so what we have -to do is to adjust to it and still make our templates do what we want. Surprisingly, -in most cases it's quite simple to achieve:

-
-// potentially unsafe
-template< typename F > struct apply0
-{
-    typedef typename F::type type;
-};
-
-// now ETI-safe
-template<> struct apply0<int>
-{
-    typedef int type;
-};
-
-

Since the original template could have never been instantiated with int, -providing a stub int specialization is completely innocent.

- -
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/exercises.html boost1.81-1.81.0/libs/mpl/doc/tutorial/exercises.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/exercises.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/exercises.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Exercises - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Exercises
-
-

Exercises

-
-
1-0.
-
Use BOOST_STATIC_ASSERT to add error checking to the binary -template presented in section 1.4.1 so -that binary<N>::value causes a compilation error if N -contains digits other than 0 or 1.
-
1-1.
-
Turn vector_c<int,1,2,3> into a type sequence with elements -(2,3,4) using transform.
-
1-2.
-
Turn vector_c<int,1,2,3> into a type sequence with elements -(1,4,9) using transform.
-
1-3.
-
Turn T into T**** by using twice twice.
-
1-4.
-
Turn T into T**** using twice on itself.
-
1-5.
-

There's still a problem with the dimensional analysis code in -section 1.1. -Hint: What happens when you do:

-
-f = f + m * a;
-
-

Repair this example using techniques shown in this -chapter.

- -
-
1-6.
-
Build a lambda expression that has functionality equivalent to -twice. Hint: mpl::apply is a metafunction!
-
1-7*.
-

What do you think would be the semantics of the following -constructs:

-
-typedef mpl::lambda<mpl::lambda<_1> >::type t1;
-typedef mpl::apply<_1,mpl::plus<_1,_2> >::type t2;
-typedef mpl::apply<_1,std::vector<int> >::type t3;
-typedef mpl::apply<_1,std::vector<_1> >::type t4;
-typedef mpl::apply<mpl::lambda<_1>,std::vector<int> >::type t5;
-typedef mpl::apply<mpl::lambda<_1>,std::vector<_1> >::type t6;
-typedef mpl::apply<mpl::lambda<_1>,mpl::plus<_1,_2> >::type t7;
-typedef mpl::apply<_1,mpl::lambda< mpl::plus<_1,_2> > >::type t8;
-
- -

Show the steps used to -arrive at your answers and write tests verifying your assumptions. -Did the library behavior match your reasoning? If not, analyze the -failed tests to discover the actual expression semantics. -Explain why your assumptions were different, what -behavior you find more coherent, and why.

-
-
1-8*.
-
Our dimensional analysis framework dealt with dimensions, but it -entirely ignored the issue of units. A length can be -represented in inches, feet, or meters. A force can be -represented in newtons or in kg m/sec2. Add the -ability to specify units and test your code. Try to make your -interface as syntactically friendly as possible for the user.
-
- - - - - - -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/handling-placeholders.html boost1.81-1.81.0/libs/mpl/doc/tutorial/handling-placeholders.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/handling-placeholders.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/handling-placeholders.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Handling Placeholders - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Handling Placeholders
-
-

Handling Placeholders

-

Our implementation of twice already works with metafunction -classes. Ideally, we would -like it to work with placeholder expressions too, much the same as -mpl::transform allows us to pass either form. For example, we -would like to be able to write:

-
-template <class X>
-struct two_pointers
-    : twice<boost::add_pointer<_1>, X>
-{};
-
- -

But when we look at the implementation of boost::add_pointer, -it becomes clear that the current definition of twice can't -work that way.

-
-template <class T>
-struct add_pointer
-{
-    typedef T* type;
-};
-
- -

To be invokable by twice, boost::add_pointer<_1> would have -to be a metafunction class, along the lines of add_pointer_f. -Instead, it's just a nullary metafunction returning the almost -senseless type _1*. Any attempt to use two_pointers will -fail when apply1 reaches for a nested ::apply -metafunction in boost::add_pointer<_1> and finds that it -doesn't exist.

-

We've determined that we don't get the behavior we want -automatically, so what next? Since mpl::transform can do this -sort of thing, there ought to be a way for us to do it too — and -so there is.

- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/higher-order.html boost1.81-1.81.0/libs/mpl/doc/tutorial/higher-order.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/higher-order.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/higher-order.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Higher-Order Metafunctions - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Higher-Order Metafunctions
-
-

Higher-Order Metafunctions

-

In the previous section we used two different forms — -metafunction classes and placeholder expressions — -to pass and return metafunctions just like any other metadata. -Bundling metafunctions into "first class metadata" allows -transform to perform an infinite variety of different -operations: in our case, multiplication and division of dimensions. -Though the idea of using functions to manipulate other functions -may seem simple, its great power and flexibility [Hudak89] has -earned it a fancy title: higher-order functional programming. -A function that operates on another function is known as a -higher-order function. It follows that transform is a -higher-order -metafunction: a metafunction that operates on another metafunction.

- - - - - -
[Hudak89]Paul Hudak. "Conception, Evolution, and Application of -Functional Programming Languages," ACM Computing Surveys 21, -no. 3 Pages: 359 - 411. New York: ACM Press. 1989. -ISSN:0360-0300. http://doi.acm.org/10.1145/72551.72554.
-

Now that we've seen the power of higher-order metafunctions at -work, it would be good to be able to create new ones. In order to -explore the basic mechanisms, let's try a simple example. Our task -is to write a metafunction called twice, which — given a unary -metafunction f and arbitrary metadata x — computes:

-
-twice(f, x) := f(f(x))
-

This might seem like a trivial example, and in fact it is. You -won't find much use for twice in real code. We hope you'll -bear with us anyway: Because it doesn't do much more than accept -and invoke a metafunction, twice captures all the essential -elements of "higher-orderness" without any distracting details.

-

If f is a metafunction class, the definition of twice is -straightforward:

-
-template <class F, class X>
-struct twice
-{
-    typedef typename F::template apply<X>::type once;    // f(x)
-    typedef typename F::template apply<once>::type type; // f(f(x))
-};
-
- - -

Or, applying metafunction forwarding:

-
-template <class F, class X>
-struct twice
-  : F::template apply<
-       typename F::template apply<X>::type
-    >
-{};
-
- -
-

C++ Language Note

-

The C++ standard requires the template keyword when we use a -dependent name that refers to a member template. -F::apply may or may not name a template, depending on the -particular F that is passed. See the book's Appendix B for more -information about template.

-
-

Given the need to sprinkle our code with the template keyword, -it would be nice to reduce the syntactic burden of invoking -metafunction classes. As usual, the solution is to factor the -pattern into a metafunction:

-
-template <class UnaryMetaFunctionClass, class Arg>
-struct apply1
-  : UnaryMetaFunctionClass::template apply<Arg>
-{};
-
-

Now twice is just:

-
-template <class F, class X>
-struct twice
-  : apply1<F, typename apply1<F,X>::type>
-{};
-
-

To see twice at work, we can apply it to a little metafunction -class built around the add_pointer metafunction:

-
-struct add_pointer_f
-{
-    template <class T>
-    struct apply : boost::add_pointer<T> {};
-};
-
- -

Now we can use twice with add_pointer_f to build -pointers-to-pointers:

-
-BOOST_STATIC_ASSERT((
-    boost::is_same<
-         twice<add_pointer_f, int>::type
-       , int**
-    >::value
-));
-
- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing-addition-and.html boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing-addition-and.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing-addition-and.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing-addition-and.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Implementing Addition and Subtraction - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Dimensional Analysis / Implementing Addition and Subtraction
-
-

Implementing Addition and Subtraction

-

We can now easily write the rules for addition and subtraction, -since the dimensions of the arguments must always match.

-
-template <class T, class D>
-quantity<T,D>
-operator+(quantity<T,D> x, quantity<T,D> y)
-{
-  return quantity<T,D>(x.value() + y.value());
-}
-
-template <class T, class D>
-quantity<T,D>
-operator-(quantity<T,D> x, quantity<T,D> y)
-{
-  return quantity<T,D>(x.value() - y.value());
-}
-
- -

These operators enable us to write code like:

-
-quantity<float,length> len1( 1.0f );
-quantity<float,length> len2( 2.0f );
-
-len1 = len1 + len2;   // OK
-
- -

but prevent us from trying to add incompatible dimensions:

-
-len1 = len2 + quantity<float,mass>( 3.7f ); // error
-
- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing-division.html boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing-division.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing-division.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing-division.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,166 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Implementing Division - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Dimensional Analysis / Implementing Division
-
-

Implementing Division

-

Division is similar to multiplication, but instead of adding -exponents, we must subtract them. Rather than writing out a near -duplicate of plus_f, we can use the following trick to make -minus_f much simpler:

-
-struct minus_f
-{
-    template <class T1, class T2>
-    struct apply
-      : mpl::minus<T1,T2> {};
-};
-
- -

Here minus_f::apply uses inheritance to expose the nested -type of its base class, mpl::minus, so we don't have to -write:

-
-typedef typename ...::type type
-
- -

We don't have to write -typename here (in fact, it would be illegal), because the -compiler knows that dependent names in apply's initializer -list must be base classes. [2] This powerful -simplification is known as metafunction forwarding; we'll apply -it often as the book goes on. [3]

- - - - - -
[2]In case you're wondering, the same approach could -have been applied to plus_f, but since it's a little subtle, -we introduced the straightforward but verbose formulation -first.
- - - - - -
[3]Users of EDG-based compilers should consult the book's Appendix C -for a caveat about metafunction forwarding. You can tell whether -you have an EDG compiler by checking the preprocessor symbol -__EDG_VERSION__, which is defined by all EDG-based compilers.
-

Syntactic tricks notwithstanding, writing trivial classes to wrap -existing metafunctions is going to get boring pretty quickly. Even -though the definition of minus_f was far less verbose than that -of plus_f, it's still an awful lot to type. Fortunately, MPL gives -us a much simpler way to pass metafunctions around. Instead of -building a whole metafunction class, we can invoke transform -this way:

-
-typename mpl::transform<D1,D2, mpl::minus<_1,_2> >::type
-
- -

Those funny looking arguments (_1 and _2) are known as -placeholders, and they signify that when the transform's -BinaryOperation is invoked, its first and second arguments will -be passed on to minus in the positions indicated by _1 and -_2, respectively. The whole type mpl::minus<_1,_2> is -known as a placeholder expression.

-
-

Note

-

MPL's placeholders are in the mpl::placeholders -namespace and defined in boost/mpl/placeholders.hpp. In -this book we will usually assume that you have written:

-
-#include<boost/mpl/placeholders.hpp>
-using namespace mpl::placeholders;
-
-

so that they can be accessed without qualification.

-
- -

Here's our division operator written using placeholder -expressions:

-
-template <class T, class D1, class D2>
-quantity< 
-    T
-  , typename mpl::transform<D1,D2,mpl::minus<_1,_2> >::type
->
-operator/(quantity<T,D1> x, quantity<T,D2> y)
-{
-   typedef typename 
-     mpl::transform<D1,D2,mpl::minus<_1,_2> >::type dim;
-
-   return quantity<T,dim>( x.value() / y.value() );
-}
-
- -

This code is considerably simpler. We can simplify it even further -by factoring the code that calculates the new dimensions into its -own metafunction:

-
-template <class D1, class D2>
-struct divide_dimensions
-  : mpl::transform<D1,D2,mpl::minus<_1,_2> > // forwarding again
-{};
-
-template <class T, class D1, class D2>
-quantity<T, typename divide_dimensions<D1,D2>::type>
-operator/(quantity<T,D1> x, quantity<T,D2> y)
-{
-   return quantity<T, typename divide_dimensions<D1,D2>::type>(
-      x.value() / y.value());
-}
-
- -

Now we can verify our "force-on-a-laptop" computation by reversing -it, as follows:

-
-quantity<float,mass> m2 = f/a;
-float rounding_error = std::abs((m2 - m).value());
-
- -

If we got everything right, rounding_error should be very close -to zero. These are boring calculations, but they're just the sort -of thing that could ruin a whole program (or worse) if you got them -wrong. If we had written a/f instead of f/a, there would have -been a compilation error, preventing a mistake from propagating -throughout our program.

-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing.html boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/implementing.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,268 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Implementing Multiplication - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Dimensional Analysis / Implementing Multiplication
-
-

Implementing Multiplication

-

Multiplication is a bit more complicated than addition and -subtraction. So far, the dimensions of the arguments and results have -all been identical, but when multiplying, the result will usually -have different dimensions from either of the arguments. For -multiplication, the relation:

-
-(xa)(xb) == x (a + b)
- -

implies that the exponents of the result dimensions should be the -sum of corresponding exponents from the argument -dimensions. Division is similar, except that the sum is replaced by -a difference.

-

To combine corresponding elements from two sequences, we'll use -MPL's transform algorithm. transform is a metafunction -that iterates through two input sequences in parallel, passing an -element from each sequence to an arbitrary binary metafunction, and -placing the result in an output sequence.

-
-template <class Sequence1, class Sequence2, class BinaryOperation>
-struct transform;  // returns a Sequence
-
-

The signature above should look familiar if you're acquainted with the -STL transform algorithm that accepts two runtime sequences -as inputs:

-
-template <
-    class InputIterator1, class InputIterator2
-  , class OutputIterator, class BinaryOperation
->
-void transform(
-    InputIterator1 start1, InputIterator2 finish1
-  , InputIterator2 start2
-  , OutputIterator result, BinaryOperation func);
-
- -

Now we just need to pass a BinaryOperation that adds or -subtracts in order to multiply or divide dimensions with -mpl::transform. If you look through the the MPL reference manual, you'll -come across plus and minus metafunctions that do just what -you'd expect:

-
-#include <boost/static_assert.hpp>
-#include <boost/mpl/plus.hpp>
-#include <boost/mpl/int.hpp>
-namespace mpl = boost::mpl;
-
-BOOST_STATIC_ASSERT(( 
-    mpl::plus<
-        mpl::int_<2>
-      , mpl::int_<3>
-    >::type::value == 5
-));
-
- - - -

At this point it might seem as though we have a solution, but we're -not quite there yet. A naive attempt to apply the transform -algorithm in the implementation of operator* yields a compiler -error:

-
-#include <boost/mpl/transform.hpp>
-
-template <class T, class D1, class D2>
-quantity< 
-    T
-  , typename mpl::transform<D1,D2,mpl::plus>::type
->
-operator*(quantity<T,D1> x, quantity<T,D2> y) { ... }
-
- - -

It fails because the protocol says that metafunction arguments -must be types, and plus is not a type, but a class template. -Somehow we need to make metafunctions like plus fit the -metadata mold.

-

One natural way to introduce polymorphism between metafunctions and -metadata is to employ the wrapper idiom that gave us polymorphism -between types and integral constants. Instead of a nested integral -constant, we can use a class template nested within a -metafunction class:

-
-struct plus_f
-{
-    template <class T1, class T2>
-    struct apply
-    {
-       typedef typename mpl::plus<T1,T2>::type type;
-    };
-};
-
-
-

Definition

-

A Metafunction Class is a class with a publicly accessible -nested metafunction called apply.

-
-

Whereas a metafunction is a template but not a type, a -metafunction class wraps that template within an ordinary -non-templated class, which is a type. Since metafunctions -operate on and return types, a metafunction class can be passed as -an argument to, or returned from, another metafunction.

-

Finally, we have a BinaryOperation type that we can pass to -transform without causing a compilation error:

-
-template <class T, class D1, class D2>
-quantity< 
-    T
-  , typename mpl::transform<D1,D2,plus_f>::type  // new dimensions
->
-operator*(quantity<T,D1> x, quantity<T,D2> y)
-{
-    typedef typename mpl::transform<D1,D2,plus_f>::type dim;
-    return quantity<T,dim>( x.value() * y.value() );
-}
-
-

Now, if we want to compute the force exterted by gravity on a 5 kilogram -laptop computer, that's just the acceleration due to gravity (9.8 -m/sec2) times the mass of the laptop:

-
-quantity<float,mass> m(5.0f);
-quantity<float,acceleration> a(9.8f);
-std::cout << "force = " << (m * a).value();
-
- -

Our operator* multiplies the runtime values (resulting in -6.0f), and our metaprogram code uses transform to sum the -meta-sequences of fundamental dimension exponents, so that the -result type contains a representation of a new list of exponents, -something like:

-
-mpl::vector_c<int,1,1,-2,0,0,0,0>
-
- - -

However, if we try to write:

-
-quantity<float,force> f = m * a;
-
- - -

we'll run into a little problem. Although the result of -m * a does indeed represent a force with exponents of mass, -length, and time 1, 1, and -2 respectively, the type returned by -transform isn't a specialization of vector_c. Instead, -transform works generically on the elements of its inputs and -builds a new sequence with the appropriate elements: a type with -many of the same sequence properties as -mpl::vector_c<int,1,1,-2,0,0,0,0>, but with a different C++ type -altogether. If you want to see the type's full name, you can try -to compile the example yourself and look at the error message, but -the exact details aren't important. The point is that -force names a different type, so the assignment above will fail.

-

In order to resolve the problem, we can add an implicit conversion -from the multiplication's result type to quantity<float,force>. -Since we can't predict the exact types of the dimensions involved -in any computation, this conversion will have to be templated, -something like:

-
-template <class T, class Dimensions>
-struct quantity
-{
-    // converting constructor
-    template <class OtherDimensions>
-    quantity(quantity<T,OtherDimensions> const& rhs)
-      : m_value(rhs.value())
-    {
-    }
-    ...
-
- -

Unfortunately, such a general conversion undermines our whole -purpose, allowing nonsense such as:

-
-// Should yield a force, not a mass!
-quantity<float,mass> bogus = m * a;
-
- -

We can correct that problem using another MPL algorithm, -equal, which tests that two sequences have the same elements:

-
-template <class OtherDimensions>
-quantity(quantity<T,OtherDimensions> const& rhs)
-  : m_value(rhs.value())
-{
-    BOOST_STATIC_ASSERT((
-       mpl::equal<Dimensions,OtherDimensions>::type::value
-    ));
-}
-
- -

Now, if the dimensions of the two quantities fail to match, the -assertion will cause a compilation error.

-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/incomplete-support-for.html boost1.81-1.81.0/libs/mpl/doc/tutorial/incomplete-support-for.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/incomplete-support-for.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/incomplete-support-for.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,129 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Incomplete Support for Lambda Expressions - - - - - -
Front Page / Technical Details / Portability / Incomplete Support for Lambda Expressions
-
-

Incomplete Support for Lambda Expressions

-

Seasoned MPL users will agree with us that if there is -anything in the MPL that is seemingly magical both in power and -its nature, then it's MPL lambda expressions. In reality, the -mechanism that bring this to life is very straightforward and -probably can be explained to anyone generally familiar with C++ -templates in less than 10 minutes.

- - -

Unfortunately, this mechanism also happens to rely on support for -partial template specialization and template template parameters. -Among the so-called deficient compilers — basically, most of the -compilers released before the year 2000 — the chances are poor -that you'll find complete support for both of these features. -Please see our compatibility table for the list of the products -which fall into this category.

-

Although it's not possible to implement fully transparent lambda -expressions without these two features, a slightly more limited -implementation that requires some manual assistance from the -metafunction author is possible. This section describes the manual -work required and the limitations of the result.

-
-

The Problem

-

If your compiler falls into the "deficient" category, the following -valid MPL metaprogram will fail to compile for you:

-
-#include <boost/mpl/apply.hpp>
-
-using namespace boost::mpl;
-
-template< typename T > struct add_const
-{
-    typedef T const type;
-};
-
-typedef apply1< add_const<_1>,int >::type t; // t == int const
-
-

Worse yet, chances are it wil fail with a diagnostic backtrace -leading you into the inside of the library and possibly creating an -impression that there's something's wrong there. The fact is, both -the program and the library are defect free (for the -purpose of this particular demonstraction), and it's your compiler -that is to blame.

-
-
-

The Solution

-

As previously mentioned, the solution requires some work from -metafunction authors, but for the users of those metafunctions, the -result is relatively transparent. Here's what we have to do to our -earlier example:

-
-#include <boost/mpl/apply.hpp>
-#include <boost/mpl/aux_/lambda_support.hpp>
-
-using namespace boost::mpl;
-
-template< typename T > struct add_const
-{
-    typedef T const type;
-    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, add_const, (T))
-};
-
-typedef apply1< add_const<_1>,int >::type t; // t == int const
-
-

With these two modifications, now the compiler that has been barking at us now -happily accepts it. "Hey, that's not that bad at all!" you might say. Just put a -little macro inside and be happy again.

-
-
-

Limitations

-

Unfortunately, that's not quite the end of the story. There are -still cases where the above approach will fail and we will have to -resort to writing out-of-line metafunction class. Here are the -details:

-
-

To make the lambda expression work without partial template -specialization and -template template parameters, the MPL has to implement some other way of -pulling apart the template instantiations' expression tree, and the only way -to do it is through an intrusive metafunction introspection -mechanism. That's what hidden behind the BOOST_MPL_AUX_LAMBDA_SUPPORT macro -we've seen above.

-

But then, after we've got the information we need (the metafunction's arity -and its exact template arguments) stored inside the metafunction itself, -the only way for the library to access it is to look inside the metafunction. -The latter, in its turn, means instantiating the metafunction, prematurely, -before the actuall call, with one or more placeholder arguments. This last -part is a potential problem.

-
-

In other words, the mechanism works as long as your metafunction is -"placeholder-safe" (can be safely instantiated on placeholder -arguments), which comes down to the follwing two criteria:

-
    -
  1. The metafunction doesn't access its arguments' nested members, or
  2. -
  3. The only accessed members are types named ::tag or ::type (the -placeholders do contain these).
  4. -
-

If these two hold, you can safely put BOOST_MPL_AUX_LAMBDA_SUPPORT inside -your metafunction and forget about the issue. If not, you are out of luck and -probably have to write a metafunction class instead.

-

The good news are that most of the MPL's own metafunctions and Boost.Type Traits -templates are "placeholder-safe" and have the workaround applied to them, so -even on broken compilers things "just work" in about 90% of use cases.

-

Please refer to the MPL reference manual for the details on the -BOOST_MPL_AUX_LAMBDA_SUPPORT macro.

-
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/iterator-protocol.html boost1.81-1.81.0/libs/mpl/doc/tutorial/iterator-protocol.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/iterator-protocol.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/iterator-protocol.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Iterator Protocol - - - - - -
Front Page / Changelog & History / Changes in Boost 1.32.0 Release / Iterator Protocol
-
-

Iterator Protocol

-

The library no longer guarantees or relies on the direct presence -of advance / distance / next / prior / type -members in iterator types; the following table summarises the new -requirements:

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - -
BeforeNow
i::typederef<i>::type
i::nextnext<i>::type
i::priorprior<i>::type
i::advance<n>::typeadvance<i,n>::type
i::distance<j>::typedistance<i,j>::type
i::categoryi::category
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/lambda-and-non.html boost1.81-1.81.0/libs/mpl/doc/tutorial/lambda-and-non.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/lambda-and-non.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/lambda-and-non.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Lambda and Non-Metafunction Templates - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Lambda Details / Lambda and Non-Metafunction Templates
-
-

Lambda and Non-Metafunction Templates

-

There is just one detail of placeholder expressions that we haven't -discussed yet. MPL uses a special rule to make it easier to -integrate ordinary templates into metaprograms: After all of the -placeholders have been replaced with actual -arguments, if the resulting template specialization X doesn't -have a nested ::type, the result is just -X itself.

-

For example, mpl::apply<std::vector<_>, T> is always just -std::vector<T>. If it weren't for this behavior, we would -have to build trivial metafunctions to create ordinary template -specializations in lambda expressions:

-
-// trivial std::vector generator
-template<class U> 
-struct make_vector { typedef std::vector<U> type; };
-
-typedef mpl::apply<make_vector<_>, T>::type vector_of_t;
-
-

Instead, we can simply write:

-
-typedef mpl::apply<std::vector<_>, T>::type vector_of_t;
-
- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/lambda-details.html boost1.81-1.81.0/libs/mpl/doc/tutorial/lambda-details.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/lambda-details.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/lambda-details.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Lambda Details - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Lambda Details
-
-

Lambda Details

-

Now that you have an idea of the semantics of MPL's lambda -facility, let's formalize that understanding and look at things a -little more deeply.

- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/metafunction-composition.html boost1.81-1.81.0/libs/mpl/doc/tutorial/metafunction-composition.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/metafunction-composition.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/metafunction-composition.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Metafunction Composition - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / More Lambda Capabilities / Metafunction Composition
-
-

Metafunction Composition

-

Lambda expressions can also be used to assemble more interesting -computations from simple metafunctions. For example, the following -expression, which multiplies the sum of two numbers by their -difference, is a composition of the three metafunctions multiplies, -plus, and minus:

-
-mpl::multiplies<mpl::plus<_1,_2>, mpl::minus<_1,_2> >
-
- -

When evaluating a lambda expression, MPL checks to see if any of its -arguments are themselves lambda expressions, and evaluates each one -that it finds. The results of these inner evaluations are substituted -into the outer expression before it is evaluated.

-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/miscellaneous.html boost1.81-1.81.0/libs/mpl/doc/tutorial/miscellaneous.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/miscellaneous.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/miscellaneous.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Miscellaneous - - - - - -
Front Page / Changelog & History / Changes in Boost 1.32.0 Release / Miscellaneous
-
-

Miscellaneous

-
    -
  1. vector has been re-implemented to support constant-time -insertion at both the beginning and the end. For example, this is now -well-formed for a vector v:

    -
    -typedef push_back<v,int>::type v1;
    -typedef push_front<v1,int>::type v2;
    -
    -
  2. -
  3. The interfaces of some sequence building algorithms such as -copy have been changed. Please see the reference manual for the -details of the new interface.

    -
  4. -
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/more-lambda-capabilities.html boost1.81-1.81.0/libs/mpl/doc/tutorial/more-lambda-capabilities.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/more-lambda-capabilities.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/more-lambda-capabilities.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: More Lambda Capabilities - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / More Lambda Capabilities
-
-

More Lambda Capabilities

-

Lambda expressions provide much more than just the ability to pass a -metafunction as an argument. The two capabilities described next -combine to make lambda expressions an invaluable part of almost every -metaprogramming task.

- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/numeric-metafunction.html boost1.81-1.81.0/libs/mpl/doc/tutorial/numeric-metafunction.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/numeric-metafunction.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/numeric-metafunction.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Numeric Metafunction Protocol/Infrastructure - - - - - -
Front Page / Changelog & History / Changes in Boost 1.32.0 Release / Numeric Metafunction Protocol/Infrastructure
-
-

Numeric Metafunction Protocol/Infrastructure

-

The arithmetic, comparison and bitwise metafunctions are now -polymorphic, and can operate on a variety of numeric types, -including rational, fixed-point and complex numbers. They allow -mixed arithmetic, meaning that you can perform an operation on -arguments of different types, and the result will yield the -largest/most general of the argument types. The infrastructure -allows user-defined numeric types to be freely intermixed with -predefined library types. See -libs/mpl/test/numeric_ops.cpp -for an illustrative example, and the reference manual for -the formal infrastructure specification.

-

If you were using MPL numeric metafunctions on your own integral -wrapper class similar to mpl::int_, you can plug your class -into the new infrastructure by extending it with the following -member:

-
-typedef mpl::integral_c_tag tag;
-
-

For example:

- ---- - - - - - - - - - - -
BeforeNow
-template< int n > struct my_int
-{
-    static int const value = n;
-    typedef my_int type;
-};
-
-
-template< int n > struct my_int
-{
-    typedef mpl::integral_c_tag tag;
-    static int const value = n;
-    typedef my_int type;
-};
-
-
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/partial-metafunction.html boost1.81-1.81.0/libs/mpl/doc/tutorial/partial-metafunction.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/partial-metafunction.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/partial-metafunction.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Partial Metafunction Application - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / More Lambda Capabilities / Partial Metafunction Application
-
-

Partial Metafunction Application

-

Consider the lambda expression mpl::plus<_1,_1>. A single -argument is directed to both of plus's parameters, thereby -adding a number to itself. Thus, a binary metafunction, -plus, is used to build a unary lambda expression. In other -words, we've created a whole new computation! We're not done yet, -though: By supplying a non-placeholder as one of the arguments, we -can build a unary lambda expression that adds a fixed value, say -42, to its argument:

-
-mpl::plus<_1, mpl::int_<42> >
-
- -

The process of binding argument values to a subset of a function's -parameters is known in the world of functional programming as -partial function application.

-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/physical-structure.html boost1.81-1.81.0/libs/mpl/doc/tutorial/physical-structure.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/physical-structure.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/physical-structure.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Physical Structure - - - - - -
Front Page / Technical Details / Physical Structure
-
-

Physical Structure

-

The library uses a fine-grained header structure with one header per public -component (class/function template), with the header named after the component. For example, -boost::mpl::apply is defined in the header <boost/mpl/apply.hpp>. This -scheme ensures both that we don't pay for what we don't use in terms of compilation time -and header dependencies, and frees us from memorizing the -relationship between a given header and the components it -provides. For entities that are likely to be used together, -such as arithmetic -metafunctions (plus, minus, times, et. al.), the library also supplies -appropriately-named composite headers -(<boost/mpl/airthmetic.hpp>) as a convenience.

-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/placeholder-expression.html boost1.81-1.81.0/libs/mpl/doc/tutorial/placeholder-expression.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/placeholder-expression.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/placeholder-expression.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Placeholder Expression Definition - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Lambda Details / Placeholder Expression Definition
-
-

Placeholder Expression Definition

-

Now that you know just what placeholder means, we can define -placeholder expression:

-
-

Definition

-

A placeholder expression is either:

-
-
-
    -
  • a placeholder
  • -
-
-

or

-
-
    -
  • a template specialization with at least one argument that -is a placeholder expression.
  • -
-
-
-
-

In other words, a placeholder expression always involves a -placeholder.

- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/placeholders.html boost1.81-1.81.0/libs/mpl/doc/tutorial/placeholders.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/placeholders.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/placeholders.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,165 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Placeholders - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Lambda Details / Placeholders
-
-

Placeholders

-

The definition of "placeholder" may surprise you:

-
-

Definition

-

A placeholder is a metafunction class of the form mpl::arg<X>.

-
-
-

Implementation

-

The convenient names _1, _2,... _5 are actually -typedefs for specializations of mpl::arg that simply -select the Nth argument for any N. [6] The -implementation of placeholders looks something like this:

- - - - - -
[6]MPL provides five placeholders by default. See -the Configuration Macros section of the MPL reference manual for a -description of how to change the number of placeholders -provided.
-
-namespace boost { namespace mpl { namespace placeholders {
-
-template <int N> struct arg; // forward declarations
-struct void_;
-
-template <>
-struct arg<1>
-{
-    template <
-      class A1, class A2 = void_, ... class Am = void_>
-    struct apply
-    {
-        typedef A1 type; // return the first argument
-    };
-};
-typedef arg<1> _1;
-
-template <>
-struct arg<2>
-{
-    template <
-      class A1, class A2, class A3 = void_, ...class Am = void_
-    >
-    struct apply
-    {
-        typedef A2 type; // return the second argument
-    };
-};
-typedef arg<2> _2;
-
-more specializations and typedefs...
-
-}}}
-
- -

Remember that invoking a metafunction class is the same as invoking -its nested apply metafunction. When a placeholder in a lambda -expression is evaluated, it is invoked on the expression's actual -arguments, returning just one of them. The results are then -substituted back into the lambda expression and the evaluation -process continues.

-
-
-

The Unnamed Placeholder

-

There's one special placeholder, known as the unnamed -placeholder, that we haven't yet defined:

-
-namespace boost { namespace mpl { namespace placeholders {
-
-typedef arg<-1> _; // the unnamed placeholder
-
-}}}
-
- -

The details of its implementation aren't important; all you really -need to know about the unnamed placeholder is that it gets special -treatment. When a lambda expression is being transformed into a -metafunction class by mpl::lambda,

-
-the nth appearance of the unnamed placeholder in a given -template specialization is replaced with _n.
-

So, for example, every row of Table 1.1 -below contains two equivalent lambda expressions.

- - ---- - - - - - - - - - - - -
Unnamed Placeholder Semantics
-mpl::plus<_,_>
-
-
-mpl::plus<_1,_2>
-
-
-boost::is_same<
-    _
-  , boost::add_pointer<_>
->
-
-
-boost::is_same<
-    _1
-  , boost::add_pointer<_1>
->
-
-
-mpl::multiplies<
-   mpl::plus<_,_>
- , mpl::minus<_,_>
->
-
-
-mpl::multiplies<
-   mpl::plus<_1,_2>
- , mpl::minus<_1,_2>
->
-
-
- -

Especially when used in simple lambda expressions, the unnamed -placeholder often eliminates just enough syntactic "noise" to -significantly improve readability.

-
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/portability.html boost1.81-1.81.0/libs/mpl/doc/tutorial/portability.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/portability.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/portability.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,138 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Portability - - - - - -
Front Page / Technical Details / Portability
-
-

Portability

-

It has always been a major goal of MPL development that a program -using the MPL should compile and run without modification on a wide -variety of compilers. To this end, the library goes to great -lengths to hide the quirks of less-than-perfect compilers. Of -course, there is only that much that you can do about an utterly -broken compiler. This section describes the places where those -quirks "leak out" of the library abstraction layer, and what you can -do about it when they do.

-

With respect to MPL compatibility we divide C++ compilers roughly -into three categories:

-
    -
  1. Reasonably conforming compilers that "just work" with the MPL.
  2. -
  3. Not-so-conforming compilers that work but require some workarounds in user code.
  4. -
  5. Compilers that are so broken that it's not practical to use them for any serious -metaprogramming work.
  6. -
-

We haven't tested every compiler in existence (simply because we don't have access to -all of them), but chances are the table below -will give you the information you are looking for. Please note that -the fact that one version of a compiler appears -in this list as "Not supported" does not mean that future versions are also -unworkable — some vendors are working hard to correct the -problems... and, as of this writing (late 2004), some are not.

-

Please keep in mind that this is not a complete list!

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CompilerVersionsCategoryProblematic Areas (if any)
Borland C++5.6.4BLambda Expressions, Integral Constant Expressions
Borland C++5.6.1CNot supported
Comeau C/C++4.2.45, -4.3.3A 
Compaq C++ (Tru64 UNIX)6.5A 
GCC3.2.2, -3.3.1, 3.4A 
GCC2.95.3BIntegral Constant Expressions
HP aCC3.55CNot supported
Intel C++7.1, 8.0A 
Metrowerks CodeWarrior8.3, 9.2A 
Microsoft Visual C++7.1A 
Microsoft Visual C++6.0 sp5, -7.0BLambda Expressions, ETI, Integral Constant Expressions
SGI MIPSpro7.3BIntegral Constant Expressions
Sun CC5.6CNot supported
- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/reference-manual.html boost1.81-1.81.0/libs/mpl/doc/tutorial/reference-manual.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/reference-manual.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/reference-manual.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Reference Manual - - - - - -
Front Page / Reference Manual
-
-

Reference Manual

-

The MPL reference manual is an annotated formal specification of the -library's public interface. The manual is available in two forms:

-
    -
  • A fully cross-referenced set of HTML pages.
  • -
  • A cross-referenced, printer-ready PDF.
  • -
-

Please choose the form that is most convenient for you, and enjoy!

-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/renaming-cleanup.html boost1.81-1.81.0/libs/mpl/doc/tutorial/renaming-cleanup.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/renaming-cleanup.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/renaming-cleanup.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Renaming/Cleanup - - - - - -
Front Page / Changelog & History / Changes in Boost 1.32.0 Release / Renaming/Cleanup
-
-

Renaming/Cleanup

-
    -
  1. The apply_if metafunction has been renamed to eval_if.

    -
  2. -
  3. All _backward algorithm counterparts have been renamed to use reverse_ -prefix; e.g. fold_backward became reverse_fold.

    -
  4. -
  5. The <boost/mpl/aux_/has_xxx.hpp> header has been made public and became -<boost/mpl/has_xxx.hpp>; correspondingly, the BOOST_MPL_NO_AUX_HAS_XXX -macro was renamed to BOOST_MPL_CFG_NO_HAS_XXX.

    -
  6. -
  7. <boost/mpl/assert_is_same.hpp> header has been replaced by a more -general <mpl/assert.hpp>; the new asserts provide a significantly -higher-quality diagnostics. See the table below for new equivalents of -the old macros:

    - ---- - - - - - - - - - - - - - -

    Before

    -

    Now

    -

    BOOST_MPL_ASSERT_IS_SAME(t1, t2)

    -

    BOOST_MPL_ASSERT(( boost::is_same<t1,t2> ))

    -

    BOOST_MPL_ASSERT_IS_NOT_SAME(t1, t2)

    -

    BOOST_MPL_ASSERT_NOT(( boost::is_same<t1,t2> ))

    -
    -

    The "Macros/Asserts" section of the reference manual provides a -complete formal specification of the new macros' semantics.

    -
  8. -
  9. All configuration macros have been renamed to include the CFG prefix; in -particular, BOOST_MPL_NO_FULL_LAMBDA_SUPPORT has become -BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT.

    -
  10. -
  11. The following public headers/components have been renamed or removed as -obsolete:

    -
    -iterator_tag.hpp (renamed to iterator_tags.hpp)
    -project1st.hpp
    -project2nd.hpp
    -select1st.hpp
    -select2nd.hpp
    -
    -
  12. -
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/representing-dimensions.html boost1.81-1.81.0/libs/mpl/doc/tutorial/representing-dimensions.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/representing-dimensions.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/representing-dimensions.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,156 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Representing Dimensions - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Dimensional Analysis / Representing Dimensions
-
-

Representing Dimensions

-

An international standard called Système -International d'Unites (SI), breaks every quantity down into a -combination of the dimensions mass, length (or position), -time, charge, temperature, intensity, and angle. To be -reasonably general, our system would have to be able to -represent seven or more fundamental dimensions. It also needs -the ability to represent composite dimensions that, like force, -are built through multiplication or division of the fundamental -ones.

-

In general, a composite dimension is the product of powers of -fundamental dimensions. [1] If we were going to represent -these powers for manipulation at runtime, we could use an array of -seven ints, with each position in the array holding the power -of a different fundamental dimension:

-
-typedef int dimension[7]; // m  l  t  ...
-dimension const mass      = {1, 0, 0, 0, 0, 0, 0};
-dimension const length    = {0, 1, 0, 0, 0, 0, 0};
-dimension const time      = {0, 0, 1, 0, 0, 0, 0};
-...
-
- - - - - -
[1]Divisors just contribute negative exponents, since -1/x = x-1.
-

In that representation, force would be:

-
-dimension const force  = {1, 1, -2, 0, 0, 0, 0};
-
- - -

that is, mlt-2. However, if we want to get dimensions into the -type system, these arrays won't do the trick: they're all -the same type! Instead, we need types that themselves represent -sequences of numbers, so that two masses have the same type and a -mass is a different type from a length.

-

Fortunately, the MPL provides us with a collection of type -sequences. For example, we can build a sequence of the built-in -signed integral types this way:

-
-#include <boost/mpl/vector.hpp>
-
-typedef boost::mpl::vector<
-     signed char, short, int, long> signed_types;
-
-

How can we use a type sequence to represent numbers? Just as -numerical metafunctions pass and return wrapper types having a -nested ::value, so numerical sequences are really sequences of -wrapper types (another example of polymorphism). To make this sort -of thing easier, MPL supplies the int_<N> class template, which -presents its integral argument as a nested ::value:

-
-#include <boost/mpl/int.hpp>
-
-namespace mpl = boost::mpl; // namespace alias
-static int const five = mpl::int_<5>::value;
-
- - -

In fact, the library contains a whole suite of integral constant -wrappers such as long_ and bool_, each one wrapping a -different type of integral constant within a class template.

-

Now we can build our fundamental dimensions:

-
-typedef mpl::vector<
-   mpl::int_<1>, mpl::int_<0>, mpl::int_<0>, mpl::int_<0>
- , mpl::int_<0>, mpl::int_<0>, mpl::int_<0>
-> mass;
-
-typedef mpl::vector<
-   mpl::int_<0>, mpl::int_<1>, mpl::int_<0>, mpl::int_<0>
- , mpl::int_<0>, mpl::int_<0>, mpl::int_<0>
-> length;
-...
-
- -

Whew! That's going to get tiring pretty quickly. Worse, it's hard -to read and verify: The essential information, the powers of each -fundamental dimension, is buried in repetitive syntactic "noise." -Accordingly, MPL supplies integral sequence wrappers that allow -us to write:

-
-#include <boost/mpl/vector_c.hpp>
-
-typedef mpl::vector_c<int,1,0,0,0,0,0,0> mass;
-typedef mpl::vector_c<int,0,1,0,0,0,0,0> length; // or position 
-typedef mpl::vector_c<int,0,0,1,0,0,0,0> time;
-typedef mpl::vector_c<int,0,0,0,1,0,0,0> charge;
-typedef mpl::vector_c<int,0,0,0,0,1,0,0> temperature;
-typedef mpl::vector_c<int,0,0,0,0,0,1,0> intensity;
-typedef mpl::vector_c<int,0,0,0,0,0,0,1> angle;
-
-

Even though they have different types, you can think of these -mpl::vector_c specializations as being equivalent to the more -verbose versions above that use mpl::vector.

-

If we want, we can also define a few composite dimensions:

-
-// base dimension:        m l  t ... 
-typedef mpl::vector_c<int,0,1,-1,0,0,0,0> velocity;     // l/t
-typedef mpl::vector_c<int,0,1,-2,0,0,0,0> acceleration; // l/(t2)
-typedef mpl::vector_c<int,1,1,-1,0,0,0,0> momentum;     // ml/t
-typedef mpl::vector_c<int,1,1,-2,0,0,0,0> force;        // ml/(t2)
-
-

And, incidentally, the dimensions of scalars (like pi) can be -described as:

-
-typedef mpl::vector_c<int,0,0,0,0,0,0,0> scalar;
-
- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/representing-quantities.html boost1.81-1.81.0/libs/mpl/doc/tutorial/representing-quantities.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/representing-quantities.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/representing-quantities.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Representing Quantities - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Dimensional Analysis / Representing Quantities
-
-

Representing Quantities

-

The types listed above are still pure metadata; to typecheck real -computations we'll need to somehow bind them to our runtime data. -A simple numeric value wrapper, parameterized on the number type T -and on its dimensions, fits the bill:

-
-template <class T, class Dimensions>
-struct quantity
-{
-    explicit quantity(T x)
-       : m_value(x)
-    {}
-
-    T value() const { return m_value; }
- private:
-    T m_value;
-};
-
- -

Now we have a way to represent numbers associated with dimensions. -For instance, we can say:

-
-quantity<float,length> l( 1.0f );
-quantity<float,mass> m( 2.0f );
-
-

Note that Dimensions doesn't appear anywhere in the definition -of quantity outside the template parameter list; its only -role is to ensure that l and m have different types. -Because they do, we cannot make the mistake of assigning a length -to a mass:

-
-m = l;    // compile-time type error
-
- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/resources.html boost1.81-1.81.0/libs/mpl/doc/tutorial/resources.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/resources.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/resources.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Resources - - - - - -
Front Page / Resources
-
-

Resources

-"C++ Template Metaprogramming" cover

For those of you whose interest in metaprogramming is not fully -satisfied by this documentation, we've collected a few references -to other resources that we think you are likely to fancy. Most -notably, a book named "C++ Template Metaprogramming: Concepts, -Tools, and Techniques from Boost and Beyond" by David Abrahams -and Aleksey Gurtovoy is considered to be the most authoritative and -up-do-date treatment of the subject as of today. The tutorial -included with this documentation is in fact an excerpt from this -work.

-

Other notable book resources include Andrei Alexandrescu's "Modern C++ Design: Generic -Programming and Design Patterns Applied", in which -Andrei explorers the appication of C++ metaprogramming techniques to implementing -highly reusable and configurable generic designs, and "C++ Templates - The -Complete Guide", by David Vandevoorde and Nicolai M. Josuttis — the book -on the details and workings of the C++ template system.

-

We can also recommend a number online resources:

- - -

Finally, if you come accross a high-quality, notable work on the -topic that you think should be listed here, please let us know!

-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/tag-dispatching-protocol.html boost1.81-1.81.0/libs/mpl/doc/tutorial/tag-dispatching-protocol.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/tag-dispatching-protocol.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/tag-dispatching-protocol.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Tag Dispatching Protocol - - - - - -
Front Page / Changelog & History / Changes in Boost 1.32.0 Release / Tag Dispatching Protocol
-
-

Tag Dispatching Protocol

-

The mechanism used to select algorithm implementations based on -sequence family has been changed to use metafunction classes:

- ---- - - - - - - - - - - -
BeforeNow
name_traits<Tag>::algorithm<...>::typename_impl<Tag>::apply<...>::type
-

If your code implemented a custom sequence, it needs to be adjusted -according to the above table; for example:

- ---- - - - - - - - - - - -
BeforeNow
-template<> struct begin_traits<my_tag>
-{
-    template< typename S > struct algorithm
-    {
-        typedef ... type;
-    };
-};
-
-
-template<> struct begin_impl<my_tag>
-{
-    template< typename S > struct apply
-    {
-        typedef ... type;
-    };
-};
-
-
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/technical-details.html boost1.81-1.81.0/libs/mpl/doc/tutorial/technical-details.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/technical-details.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/technical-details.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Technical Details - - - - - -
Front Page / Technical Details
-
-

Technical Details

-

This section collects a few technical details on the library's organization that -do not belong into the reference manual.

- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/the-apply-metafunction.html boost1.81-1.81.0/libs/mpl/doc/tutorial/the-apply-metafunction.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/the-apply-metafunction.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/the-apply-metafunction.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: The apply Metafunction - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Handling Placeholders / The apply Metafunction
-
-

The apply Metafunction

-

Invoking the result of lambda is such a common pattern -that MPL provides an apply metafunction to do just -that. Using mpl::apply, our flexible version of twice -becomes:

-
-#include <boost/mpl/apply.hpp>
-
-template <class F, class X>
-struct twice
-   : mpl::apply<F, typename mpl::apply<F,X>::type>
-{};
-
- -

You can think of mpl::apply as being just like the apply1 -template that we wrote, with two additional features:

-
    -
  1. While apply1 operates only on metafunction classes, the first -argument to mpl::apply can be any lambda expression -(including those built with placeholders).

    -
  2. -
  3. While apply1 accepts only one additional argument to which -the metafunction class will be applied, mpl::apply can -invoke its first argument on any number from zero to five -additional arguments. [5] For example:

    -
    -// binary lambda expression applied to 2 additional arguments
    -mpl::apply<
    -    mpl::plus<_1,_2>   
    -  , mpl::int_<6>
    -  , mpl::int_<7>
    ->::type::value // == 13
    -
    -
  4. -
- - - - - -
[5]See the Configuration Macros section of the the MPL reference manual -for a description of how to change the maximum number of -arguments handled by mpl::apply.
- -
-

Guideline

-

When writing a metafunction that invokes one of its arguments, -use mpl::apply so that it works with lambda expressions.

-
-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/the-importance-of-being.html boost1.81-1.81.0/libs/mpl/doc/tutorial/the-importance-of-being.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/the-importance-of-being.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/the-importance-of-being.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: The Importance of Being Lazy - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Lambda Details / The Importance of Being Lazy
-
-

The Importance of Being Lazy

-

Recall the definition of always_int from the previous chapter:

-
-struct always_int
-{
-    typedef int type;
-};
-
-

Nullary metafunctions might not seem very important at first, since -something like add_pointer<int> could be replaced by int* in -any lambda expression where it appears. Not all nullary -metafunctions are that simple, though:

-
-typedef mpl::vector<int, char*, double&> seq;
-typedef mpl::transform<seq, boost::add_pointer<_> > calc_ptr_seq;
-
- -

Note that calc_ptr_seq is a nullary metafunction, since it has -transform's nested ::type. A C++ template is not -instantiated until we actually "look inside it," though. Just -naming calc_ptr_seq does not cause it to be evaluated, since we -haven't accessed its ::type yet.

-

Metafunctions can be invoked lazily, rather than immediately upon -supplying all of their arguments. We can use lazy evaluation to -improve compilation time when a metafunction result is only going -to be used conditionally. We can sometimes also avoid contorting -program structure by naming an invalid computation without -actually performing it. That's what we've done with -calc_ptr_seq above, since you can't legally form double&*. -Laziness and all of its virtues will be a recurring theme -throughout this book.

-
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/the-lambda-metafunction.html boost1.81-1.81.0/libs/mpl/doc/tutorial/the-lambda-metafunction.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/the-lambda-metafunction.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/the-lambda-metafunction.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: The lambda Metafunction - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Handling Placeholders / The lambda Metafunction
-
-

The lambda Metafunction

-

We can generate a metafunction class from -boost::add_pointer<_1>, using MPL's lambda metafunction:

-
-template <class X>
-struct two_pointers
-  : twice<typename mpl::lambda<boost::add_pointer<_1> >::type, X>
-{};
-
-BOOST_STATIC_ASSERT((
-    boost::is_same<
-        two_pointers<int>::type
-      , int**
-    >::value
-));
-
- -

We'll refer to metafunction classes like add_pointer_f and -placeholder expressions like boost::add_pointer<_1> -as lambda expressions. The term, meaning "unnamed function -object," was introduced in the 1930s by the logician Alonzo Church -as part of a fundamental theory of computation he called the -lambda-calculus. [4] MPL uses the somewhat obscure word -lambda because of its well-established precedent in functional -programming languages.

- - - - - -
[4]See http://en.wikipedia.org/wiki/Lambda_calculus for -an in-depth treatment, including a reference to Church's paper -proving that the equivalence of lambda expressions is in general -not decidable.
-

Although its primary purpose is to turn placeholder expressions -into metafunction classes, mpl::lambda can accept any lambda -expression, even if it's already a metafunction class. In that -case, lambda returns its argument unchanged. MPL algorithms -like transform call lambda internally, before invoking the -resulting metafunction class, so that they work equally well with -either kind of lambda expression. We can apply the same strategy -to twice:

-
-template <class F, class X>
-struct twice
-   : apply1<
-         typename mpl::lambda<F>::type
-       , typename apply1<
-             typename mpl::lambda<F>::type
-           , X
-         >::type
-     >
-{};
-
-

Now we can use twice with metafunction classes and -placeholder expressions:

-
-int* x;
-
-twice<add_pointer_f, int>::type           p = &x;
-twice<boost::add_pointer<_1>, int>::type q = &x;
-
- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/tutorial-metafunctions.html boost1.81-1.81.0/libs/mpl/doc/tutorial/tutorial-metafunctions.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/tutorial-metafunctions.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/tutorial-metafunctions.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Tutorial: Metafunctions and Higher-Order Metaprogramming - - - - - -
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming
-
-

Tutorial: Metafunctions and Higher-Order Metaprogramming

- --- - - - -
Note:The following material is an excerpt from Chapter 3 of "C++ Template Metaprogramming", -by David Abrahams and Aleksey Gurtovoy, ISBN 0321227255, http://www.awprofessional.com/titles/0321227255. -Copyright (c) 2005 by Pearson Education, Inc. Reprinted with permission.
-

With the foundation laid so far, we're ready to explore one of the -most basic uses for template metaprogramming techniques: adding -static type checking to traditionally unchecked operations. We'll -look at a practical example from science and engineering that can -find applications in almost any numerical code. -Along the way you'll learn some important new concepts and -get a taste of metaprogramming at a high level using the MPL.

- -
- - - - - diff -Nru boost1.81-1.81.0/libs/mpl/doc/tutorial/tutorial_toc.html boost1.81-1.81.0/libs/mpl/doc/tutorial/tutorial_toc.html --- boost1.81-1.81.0/libs/mpl/doc/tutorial/tutorial_toc.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/mpl/doc/tutorial/tutorial_toc.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ - - - - - - - - - -THE BOOST MPL LIBRARY: Full TOC - - - - -
-

Table of Contents

- - - - - - diff -Nru boost1.81-1.81.0/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp boost1.81-1.81.0/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp --- boost1.81-1.81.0/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp 2022-12-24 13:24:13.685583400 +0000 @@ -28,10 +28,10 @@ double dmode; } rounding_mode_struct; -static const rounding_mode_struct mode_upward = { (::boost::long_long_type)0xFFF8000000000002LL }; -static const rounding_mode_struct mode_downward = { (::boost::long_long_type)0xFFF8000000000003LL }; -static const rounding_mode_struct mode_to_nearest = { (::boost::long_long_type)0xFFF8000000000000LL }; -static const rounding_mode_struct mode_toward_zero = { (::boost::long_long_type)0xFFF8000000000001LL }; +static const rounding_mode_struct mode_upward = { 0xFFF8000000000002LL }; +static const rounding_mode_struct mode_downward = { 0xFFF8000000000003LL }; +static const rounding_mode_struct mode_to_nearest = { 0xFFF8000000000000LL }; +static const rounding_mode_struct mode_toward_zero = { 0xFFF8000000000001LL }; struct ppc_rounding_control { diff -Nru boost1.81-1.81.0/libs/numeric/odeint/doc/reference.xml boost1.81-1.81.0/libs/numeric/odeint/doc/reference.xml --- boost1.81-1.81.0/libs/numeric/odeint/doc/reference.xml 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/numeric/odeint/doc/reference.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,5105 +0,0 @@ - -odeint Reference
- - - -Adapter to combine observer and checker. Observer -Checker - -voidconst State &Time - -observer_type &checker_type & -ControlledStepperCheckercontrolled_stepper_tagAdapter to combine controlled stepper and checker. ControlledStepper -Checker -stepper_type::state_type -stepper_type::value_type -stepper_type::deriv_type -stepper_type::time_type - -controlled_step_resultSystemStateInOut &time_type &time_type &forward of the do_step method - -stepper_type &checker_type &Construct the checked_stepper. -DenseOutStepperCheckerdense_output_stepper_tagAdapter to combine dense out stepper and checker. DenseOutStepper -Checker -stepper_type::state_type -stepper_type::value_type -stepper_type::deriv_type -stepper_type::time_type - -std::pair< time_type, time_type >System -voidconst StateType &time_typetime_type -voidtime_typeStateOut & -voidtime_typeconst StateOut & -const state_type &void -time_typevoid -const state_type &void -time_typevoid -time_typevoid - -stepper_type &checker_type &Construct the checked_stepper. -StepperCheckerstepper_tagAdapter to combine basic stepper and checker. Stepper -Checker -stepper_type::state_type -stepper_type::value_type -stepper_type::deriv_type -stepper_type::time_type - -voidSystemStateInOut &const time_typeconst time_typeforward of the do_step method - -stepper_type &checker_type &Construct the checked_stepper. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -boost::enable_if< typename has_value_type< State >::type, size_t >::typeSystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. State &The initial state. TimeStart time of the integration. TimeEnd time of the integration. TimeInitial step size, will be adjusted during the integration. ObserverObserver that will be called after each time step. Integrates the ODE. Integrates the ODE given by system from start_time to end_time starting with start_state as initial condition and dt as initial time step. This function uses a dense output dopri5 stepper and performs an adaptive integration with step size control, thus dt changes during the integration. This method uses standard error bounds of 1E-6. After each step, the observer is called.A second version of this function template exists which explicitly expects the value type as template parameter, i.e. integrate< double >( sys , x , t0 , t1 , dt , obs ); - - - -The number of steps performed. - -size_tSystemState &TimeTimeTimeObserver -size_tSystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. State &The initial state. TimeStart time of the integration. TimeEnd time of the integration. TimeInitial step size, will be adjusted during the integration. Integrates the ODE without observer calls. Integrates the ODE given by system from start_time to end_time starting with start_state as initial condition and dt as initial time step. This function uses a dense output dopri5 stepper and performs an adaptive integration with step size control, thus dt changes during the integration. This method uses standard error bounds of 1E-6. No observer is called.A second version of this function template exists which explicitly expects the value type as template parameter, i.e. integrate< double >( sys , x , t0 , t1 , dt ); - - - -The number of steps performed. - -size_tSystemState &TimeTimeTime - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - -size_tStepperThe stepper to be used for numerical integration. SystemFunction/Functor defining the rhs of the ODE. State &The initial condition x0. TimeThe initial time t0. TimeThe final integration time tend. TimeThe time step between observer calls, not necessarily the time step of the integration. ObserverFunction/Functor called at equidistant time intervals. Integrates the ODE with adaptive step size. This function integrates the ODE given by system with the given stepper. The observer is called after each step. If the stepper has no error control, the step size remains constant and the observer is called at equidistant time points t0+n*dt. If the stepper is a ControlledStepper, the step size is adjusted and the observer is called in non-equidistant intervals. - -The number of steps performed. - -size_tStepperSystemconst State &TimeTimeTimeObserverSecond version to solve the forwarding problem, can be called with Boost.Range as start_state. -size_tStepperSystemState &TimeTimeTimeintegrate_adaptive without an observer. -size_tStepperSystemconst State &TimeTimeTimeSecond version to solve the forwarding problem, can be called with Boost.Range as start_state. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - -size_tStepperThe stepper to be used for numerical integration. SystemFunction/Functor defining the rhs of the ODE. State &The initial condition x0. TimeThe initial time t0. TimeThe final integration time tend. TimeThe time step between observer calls, not necessarily the time step of the integration. Observer[optional] Function/Functor called at equidistant time intervals. StepOverflowChecker[optional] Functor to check for step count overflows, if no checker is provided, no exception is thrown. Integrates the ODE with constant step size. Integrates the ODE defined by system using the given stepper. This method ensures that the observer is called at constant intervals dt. If the Stepper is a normal stepper without step size control, dt is also used for the numerical scheme. If a ControlledStepper is provided, the algorithm might reduce the step size to meet the error bounds, but it is ensured that the observer is always called at equidistant time points t0 + n*dt. If a DenseOutputStepper is used, the step size also may vary and the dense output is used to call the observer at equidistant time points. If a max_step_checker is provided as StepOverflowChecker, a no_progress_error is thrown if too many steps (default: 500) are performed without progress, i.e. in between observer calls. If no checker is provided, no such overflow check is performed. - -The number of steps performed. - -size_tStepperSystemconst State &TimeTimeTimeObserverStepOverflowCheckerSecond version to solve the forwarding problem, can be called with Boost.Range as start_state. -size_tStepperSystemState &TimeTimeTimeObserverintegrate_const without step overflow checker -size_tStepperSystemconst State &TimeTimeTimeObserverSecond version to solve the forwarding problem, can be called with Boost.Range as start_state. -size_tStepperSystemState &TimeTimeTimeintegrate_const without observer calls -size_tStepperSystemconst State &TimeTimeTimeSecond version to solve the forwarding problem, can be called with Boost.Range as start_state. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - -TimeStepperSystemState &TimeTimesize_tObserverStepOverflowChecker -TimeStepperSystemconst State &TimeTimesize_tObserverStepOverflowCheckerSolves the forwarding problem, can be called with Boost.Range as start_state. -TimeStepperThe stepper to be used for numerical integration. SystemFunction/Functor defining the rhs of the ODE. State &The initial condition x0. TimeThe initial time t0. TimeThe time step between observer calls, not necessarily the time step of the integration. size_tNumber of steps to be performed ObserverFunction/Functor called at equidistant time intervals. The same function as above, but without checker. Integrates the ODE with constant step size.This function is similar to integrate_const. The observer is called at equidistant time intervals t0 + n*dt. If the Stepper is a normal stepper without step size control, dt is also used for the numerical scheme. If a ControlledStepper is provided, the algorithm might reduce the step size to meet the error bounds, but it is ensured that the observer is always called at equidistant time points t0 + n*dt. If a DenseOutputStepper is used, the step size also may vary and the dense output is used to call the observer at equidistant time points. The final integration time is always t0 + num_of_steps*dt. If a max_step_checker is provided as StepOverflowChecker, a no_progress_errror is thrown if too many steps (default: 500) are performed without progress, i.e. in between observer calls. If no checker is provided, no such overflow check is performed. - -The number of steps performed. - -TimeStepperSystemconst State &TimeTimesize_tObserverSolves the forwarding problem, can be called with Boost.Range as start_state. -TimeStepperSystemState &TimeTimesize_tThe same function as above, but without observer calls. -TimeStepperSystemconst State &TimeTimesize_tSolves the forwarding problem, can be called with Boost.Range as start_state. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -size_tStepperSystemState &TimeIteratorTimeIteratorTimeObserverStepOverflowChecker -size_tStepperSystemconst State &TimeIteratorTimeIteratorTimeObserverStepOverflowCheckerSolves the forwarding problem, can be called with Boost.Range as start_state. -size_tStepperSystemState &const TimeRange &TimeObserverStepOverflowCheckerThe same function as above, but with the observation times given as range. -size_tStepperSystemconst State &const TimeRange &TimeObserverStepOverflowCheckerSolves the forwarding problem, can be called with Boost.Range as start_state. -size_tStepperThe stepper to be used for numerical integration. SystemFunction/Functor defining the rhs of the ODE. State &The initial condition x0. TimeIteratorIterator to the start time TimeIteratorIterator to the end time TimeThe time step between observer calls, not necessarily the time step of the integration. ObserverFunction/Functor called at equidistant time intervals. Integrates the ODE with observer calls at given time points. Integrates the ODE given by system using the given stepper. This function does observer calls at the subsequent time points given by the range times_start, times_end. If the stepper has not step size control, the step size might be reduced occasionally to ensure observer calls exactly at the time points from the given sequence. If the stepper is a ControlledStepper, the step size is adjusted to meet the error bounds, but also might be reduced occasionally to ensure correct observer calls. If a DenseOutputStepper is provided, the dense output functionality is used to call the observer at the given times. The end time of the integration is always *(end_time-1). If a max_step_checker is provided as StepOverflowChecker, a no_progress_error is thrown if too many steps (default: 500) are performed without progress, i.e. in between observer calls. If no checker is provided, no such overflow check is performed. - -The number of steps performed. - -size_tStepperSystemconst State &TimeIteratorTimeIteratorTimeObserverSolves the forwarding problem, can be called with Boost.Range as start_state. -size_tStepperSystemState &const TimeRange &TimeObserverThe same function as above, but with the observation times given as range. -size_tStepperSystemconst State &const TimeRange &TimeObserverSolves the forwarding problem, can be called with Boost.Range as start_state. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -boost::numeric::odeint::max_step_checkerA class for performing overflow checks on the failed step count in step size adjustments. Used internally within the dense output stepper and integrate routines. -voidvoidIncreases the counter and performs the iteration check. -voidResets the max_step_checker by setting the internal counter to 0. - -const int500Construct the failed_step_checker. max_steps is the maximal number of iterations allowed before runtime_error is thrown. -A class for performing overflow checks on the step count in integrate functions. Provide an instance of this class to integrate functions if you want to throw a runtime error if too many steps are performed without progress during the integrate routine. -voidResets the max_step_checker by setting the internal counter to 0. -voidvoidIncreases the counter and performs the iteration check. - -const int500Construct the max_step_checker. max_steps is the maximal number of iterations allowed before runtime_error is thrown. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -ODE Iterator with adaptive step size. The value type of this iterator is the state type of the stepper. Implements an iterator representing the solution of an ODE from t_start to t_end evaluated at steps with an adaptive step size dt. After each iteration the iterator dereferences to the state x at the next time t+dt where dt is controlled by the stepper. This iterator can be used with ControlledSteppers and DenseOutputSteppers and it always makes use of the all the given steppers capabilities. A for_each over such an iterator range behaves similar to the integrate_adaptive routine.adaptive_iterator is a model of single-pass iterator.The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time. - - -StepperSystemState &time_typetime_typetime_type -StepperSystemState & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -adaptive_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe end time, at which the iteration should stop. typename traits::time_type< Stepper >::typeThe initial time step. Factory function for adaptive_iterator. Constructs a begin iterator. - -The adaptive iterator. - -adaptive_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. Factory function for adaptive_iterator. Constructs a end iterator. - -The adaptive iterator. - -std::pair< adaptive_iterator< Stepper, System, State >, adaptive_iterator< Stepper, System, State > >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe end time, at which the iteration should stop. typename traits::time_type< Stepper >::typeThe initial time step. Factory function to construct a single pass range of adaptive iterators. A range is here a pair of adaptive_iterator. - -The adaptive range. - - - - -
-
- - - -ODE Iterator with adaptive step size. The value type of this iterator is a std::pair containing state and time. Implements an iterator representing the solution of an ODE from t_start to t_end evaluated at steps with an adaptive step size dt. After each iteration the iterator dereferences to a pair containing state and time at the next time point t+dt where dt is controlled by the stepper. This iterator can be used with ControlledSteppers and DenseOutputSteppers and it always makes use of the all the given steppers capabilities. A for_each over such an iterator range behaves similar to the integrate_adaptive routine.adaptive_iterator is a model of single-pass iterator.The value type of this iterator is a std::pair of state and time of the stepper. - - -StepperSystemState &time_typetime_typetime_type -StepperSystemState & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -adaptive_time_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. adaptive_time_iterator stores a reference of s and changes its value during the iteration. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe end time, at which the iteration should stop. typename traits::time_type< Stepper >::typeThe initial time step. Factory function for adaptive_time_iterator. Constructs a begin iterator. - -The adaptive time iterator. - -adaptive_time_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. adaptive_time_iterator stores a reference of s and changes its value during the iteration. Factory function for adaptive_time_iterator. Constructs a end iterator. - -The adaptive time iterator. - -std::pair< adaptive_time_iterator< Stepper, System, State >, adaptive_time_iterator< Stepper, System, State > >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. adaptive_time_iterator stores a reference of s and changes its value during the iteration. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe end time, at which the iteration should stop. typename traits::time_type< Stepper >::typeThe initial time step. Factory function to construct a single pass range of adaptive time iterators. A range is here a pair of adaptive_time_iterators. - -The adaptive time range. - - - - - - - -
-
- - - -ODE Iterator with constant step size. The value type of this iterator is the state type of the stepper. Implements an iterator representing the solution of an ODE from t_start to t_end evaluated at steps with constant step size dt. After each iteration the iterator dereferences to the state x at the next time t+dt. This iterator can be used with Steppers and DenseOutputSteppers and it always makes use of the all the given steppers capabilities. A for_each over such an iterator range behaves similar to the integrate_const routine.const_step_iterator is a model of single-pass iterator.The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time. - - -StepperSystemState &time_typetime_typetime_type -StepperSystemState & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const_step_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator stores a reference of s and changes its value during the iteration. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe end time, at which the iteration should stop. typename traits::time_type< Stepper >::typeThe initial time step. Factory function for const_step_iterator. Constructs a begin iterator. - -The const step iterator. - -const_step_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator stores a reference of s and changes its value during the iteration. Factory function for const_step_iterator. Constructs a end iterator. - -The const_step_iterator. - -std::pair< const_step_iterator< Stepper, System, State >, const_step_iterator< Stepper, System, State > >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator store a reference of s and changes its value during the iteration. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe end time, at which the iteration should stop. typename traits::time_type< Stepper >::typeThe initial time step. Factory function to construct a single pass range of const step iterators. A range is here a pair of const_step_iterator. - -The const step range. - - - - - - - - - - -
-
- - - -ODE Iterator with constant step size. The value type of this iterator is a std::pair containing state and time. Implements an iterator representing the solution of an ODE from t_start to t_end evaluated at steps with constant step size dt. After each iteration the iterator dereferences to a pair containing state and time at the next time point t+dt.. This iterator can be used with Steppers and DenseOutputSteppers and it always makes use of the all the given steppers capabilities. A for_each over such an iterator range behaves similar to the integrate_const routine.const_step_time_iterator is a model of single-pass iterator.The value type of this iterator is a pair with the state type and time type of the stepper. - - -StepperSystemState &time_typetime_typetime_type -StepperSystemState & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const_step_time_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_time_iterator stores a reference of s and changes its value during the iteration. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe end time, at which the iteration should stop. typename traits::time_type< Stepper >::typeThe initial time step. Factory function for const_step_time_iterator. Constructs a begin iterator. - -The const step time iterator. - -const_step_time_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_time_iterator store a reference of s and changes its value during the iteration. Factory function for const_step_time_iterator. Constructs a end iterator. - -The const step time iterator. - -std::pair< const_step_time_iterator< Stepper, System, State >, const_step_time_iterator< Stepper, System, State > >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_time_iterator stores a reference of s and changes its value during the iteration. typename traits::time_type< Stepper >::typetypename traits::time_type< Stepper >::typeThe end time, at which the iteration should stop. typename traits::time_type< Stepper >::typeThe initial time step. Factory function to construct a single pass range of const_step_time_iterator. A range is here a pair of const_step_time_iterator. - -The const step time range. - - - - - - - - - - - - - -
-
- - - -ODE Iterator with constant step size. The value type of this iterator is the state type of the stepper. Implements an iterator representing the solution of an ODE starting from t with n steps and a constant step size dt. After each iteration the iterator dereferences to the state x at the next time t+dt. This iterator can be used with Steppers and DenseOutputSteppers and it always makes use of the all the given steppers capabilities. A for_each over such an iterator range behaves similar to the integrate_n_steps routine.n_step_iterator is a model of single-pass iterator.The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time. - - -StepperSystemState &time_typetime_typesize_t -StepperSystemState & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -n_step_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator stores a reference of s and changes its value during the iteration. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe initial time step. size_tThe number of steps to be executed. Factory function for n_step_iterator. Constructs a begin iterator. - -The n-step iterator. - -n_step_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator stores a reference of s and changes its value during the iteration. Factory function for n_step_iterator. Constructs an end iterator. - -The const_step_iterator. - -std::pair< n_step_iterator< Stepper, System, State >, n_step_iterator< Stepper, System, State > >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator store a reference of s and changes its value during the iteration. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe initial time step. size_tThe number of steps to be executed. Factory function to construct a single pass range of n-step iterators. A range is here a pair of n_step_iterator. - -The n-step range. - - - - - - - - - - - - - - - - -
-
- - - -ODE Iterator with constant step size. The value type of this iterator is a std::pair containing state and time. Implements an iterator representing the solution of an ODE starting from t with n steps and a constant step size dt. After each iteration the iterator dereferences to a pair of state and time at the next time t+dt. This iterator can be used with Steppers and DenseOutputSteppers and it always makes use of the all the given steppers capabilities. A for_each over such an iterator range behaves similar to the integrate_n_steps routine.n_step_time_iterator is a model of single-pass iterator.The value type of this iterator is pair of state and time. - - -StepperSystemState &time_typetime_typesize_t -StepperSystemState & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -n_step_time_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator stores a reference of s and changes its value during the iteration. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe initial time step. size_tThe number of steps to be executed. Factory function for n_step_time_iterator. Constructs a begin iterator. - -The n-step iterator. - -n_step_time_iterator< Stepper, System, State >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator stores a reference of s and changes its value during the iteration. Factory function for n_step_time_iterator. Constructs an end iterator. - -The const_step_iterator. - -std::pair< n_step_time_iterator< Stepper, System, State >, n_step_time_iterator< Stepper, System, State > >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator store a reference of s and changes its value during the iteration. typename traits::time_type< Stepper >::typeThe initial time. typename traits::time_type< Stepper >::typeThe initial time step. size_tThe number of steps to be executed. Factory function to construct a single pass range of n-step iterators. A range is here a pair of n_step_time_iterator. - -The n-step range. - - - - - - - - - - - - - - - - - - - -
-
- - - -ODE Iterator with given evaluation points. The value type of this iterator is the state type of the stepper. Implements an iterator representing the solution of an ODE from *t_start to *t_end evaluated at time points given by the sequence t_start to t_end. t_start and t_end are iterators representing a sequence of time points where the solution of the ODE should be evaluated. After each iteration the iterator dereferences to the state x at the next time *t_start++ until t_end is reached. This iterator can be used with Steppers, ControlledSteppers and DenseOutputSteppers and it always makes use of the all the given steppers capabilities. A for_each over such an iterator range behaves similar to the integrate_times routine.times_iterator is a model of single-pass iterator.The value type of this iterator is the state type of the stepper. Hence one can only access the state and not the current time. - - -StepperSystemState &TimeIteratorTimeIteratortime_type -StepperSystemState & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -times_iterator< Stepper, System, State, TimeIterator >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator stores a reference of s and changes its value during the iteration. TimeIteratorBegin iterator of the sequence of evaluation time points. TimeIteratorEnd iterator of the sequence of evaluation time points. typename traits::time_type< Stepper >::typeThe initial time step. Factory function for times_iterator. Constructs a begin iterator. - -The times iterator. - -times_iterator< Stepper, System, State, TimeIterator >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator stores a reference of s and changes its value during the iteration. Factory function for times_iterator. Constructs an end iterator. - - -This function needs the TimeIterator type specifically defined as a template parameter. The times iterator. - -std::pair< times_iterator< Stepper, System, State, TimeIterator >, times_iterator< Stepper, System, State, TimeIterator > >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator store a reference of s and changes its value during the iteration. TimeIteratorBegin iterator of the sequence of evaluation time points. TimeIteratorEnd iterator of the sequence of evaluation time points. typename traits::time_type< Stepper >::typeThe initial time step. Factory function to construct a single pass range of times iterators. A range is here a pair of times_iterator. - -The times iterator range. - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -ODE Iterator with given evaluation points. The value type of this iterator is a std::pair containing state and time. Implements an iterator representing the solution of an ODE from *t_start to *t_end evaluated at time points given by the sequence t_start to t_end. t_start and t_end are iterators representing a sequence of time points where the solution of the ODE should be evaluated. After each iteration the iterator dereferences to a pair with the state and the time at the next evaluation point *t_start++ until t_end is reached. This iterator can be used with Steppers, ControlledSteppers and DenseOutputSteppers and it always makes use of the all the given steppers capabilities. A for_each over such an iterator range behaves similar to the integrate_times routine.times_time_iterator is a model of single-pass iterator.The value type of this iterator is a pair of state and time type. - - -StepperSystemState &TimeIteratorTimeIteratortime_type -StepperSystemState & - - - - - - - - - - - - - - - - - - - - - - - - - - - - -times_time_iterator< Stepper, System, State, TimeIterator >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator stores a reference of s and changes its value during the iteration. TimeIteratorBegin iterator of the sequence of evaluation time points. TimeIteratorEnd iterator of the sequence of evaluation time points. typename traits::time_type< Stepper >::typeThe initial time step. Factory function for times_time_iterator. Constructs a begin iterator. - -The times_time iterator. - -times_time_iterator< Stepper, System, State, TimeIterator >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator stores a reference of s and changes its value during the iteration. Factory function for times_time_iterator. Constructs an end iterator. - - -This function needs the TimeIterator type specifically defined as a template parameter. The times_time iterator. - -std::pair< times_time_iterator< Stepper, System, State, TimeIterator >, times_time_iterator< Stepper, System, State, TimeIterator > >StepperThe stepper to use during the iteration. SystemThe system function (ODE) to solve. State &The initial state. const_step_iterator store a reference of s and changes its value during the iteration. TimeIteratorBegin iterator of the sequence of evaluation time points. TimeIteratorEnd iterator of the sequence of evaluation time points. typename traits::time_type< Stepper >::typeThe initial time step. Factory function to construct a single pass range of times_time iterators. A range is here a pair of times_iterator. - -The times_time iterator range. - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -algebra_stepper_base< Algebra, Operations >The Adams-Bashforth multistep algorithm. The Adams-Bashforth method is a multi-step algorithm with configurable step number. The step number is specified as template parameter Steps and it then uses the result from the previous Steps steps. See also en.wikipedia.org/wiki/Linear_multistep_method. Currently, a maximum of Steps=8 is supported. The method is explicit and fulfills the Stepper concept. Step size control or continuous output are not provided.This class derives from algebra_base and inherits its interface via CRTP (current recurring template pattern). For more details see algebra_stepper_base. -State -state_wrapper< state_type > -Value -Deriv -state_wrapper< deriv_type > -Time -Resizer -stepper_tag -InitializingStepper -algebra_stepper_base< Algebra, Operations > -algebra_stepper_base_type::algebra_type -algebra_stepper_base_type::operations_type -unsigned short -unspecified -const size_t -const order_type - -order_typevoidReturns the order of the algorithm, which is equal to the number of steps. -order of the method. - -voidSystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Simple System concept. StateInOut &The state of the ODE which should be solved. After calling do_step the result is updated in x. time_typeThe value of the time, at which the step should be performed. time_typeThe step size. This method performs one step. It transforms the result in-place. - -voidSystemconst StateInOut &time_typetime_typeSecond version to solve the forwarding problem, can be called with Boost.Range as StateInOut. -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. The method performs one step with the stepper passed by Stepper. The state of the ODE is updated out-of-place. - -voidSystemconst StateIn &time_typeconst StateOut &time_typeSecond version to solve the forwarding problem, can be called with Boost.Range as StateOut. -voidconst StateType &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - -const step_storage_type &voidReturns the storage of intermediate results. -The storage of intermediate results. - -step_storage_type &voidReturns the storage of intermediate results. -The storage of intermediate results. - -voidExplicitStepperthe stepper used to fill the buffer of previous step results SystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Simple System concept. StateIn &The state of the ODE which should be solved. After calling do_step the result is updated in x. time_type &The value of the time, at which the step should be performed. time_typeThe step size. Initialized the stepper. Does Steps-1 steps with the explicit_stepper to fill the buffer. - -voidSystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Simple System concept. StateIn &The initial state of the ODE which should be solved, updated in this method. time_type &The initial value of the time, updated in this method. time_typeThe step size. Initialized the stepper. Does Steps-1 steps with an internal instance of InitializingStepper to fill the buffer. The state x and time t are updated to the values after Steps-1 initial steps. - - - -voidvoidResets the internal buffer of the stepper. -boolvoidReturns true if the stepper has been initialized. -bool true if stepper is initialized, false otherwise - -const initializing_stepper_type &voidReturns the internal initializing stepper instance. -initializing_stepper - -initializing_stepper_type &voidReturns the internal initializing stepper instance. -initializing_stepper - - -const algebra_type &algebra_type()A copy of algebra is made and stored. Constructs the adams_bashforth class. This constructor can be used as a default constructor if the algebra has a default constructor. - - -voidSystemconst StateIn &time_typeStateOut &time_type -boolconst StateIn & - -boost::mpl::max::type< mpl::eval_if< mpl::equal_to< mpl::modulus< int_< N >, int_< 2 > >, int_< 0 > >, int_< N >, int_< N+1 > >::type, int_< 4 > > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -The Adams-Bashforth-Moulton multistep algorithm. The Adams-Bashforth method is a multi-step predictor-corrector algorithm with configurable step number. The step number is specified as template parameter Steps and it then uses the result from the previous Steps steps. See also en.wikipedia.org/wiki/Linear_multistep_method. Currently, a maximum of Steps=8 is supported. The method is explicit and fulfills the Stepper concept. Step size control or continuous output are not provided.This class derives from algebra_base and inherits its interface via CRTP (current recurring template pattern). For more details see algebra_stepper_base. -State -state_wrapper< state_type > -Value -Deriv -state_wrapper< deriv_type > -Time -Algebra -Operations -Resizer -stepper_tag -InitializingStepper -unsigned short -const size_t -const order_type - -order_typevoidReturns the order of the algorithm, which is equal to the number of steps+1. -order of the method. - -voidSystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Simple System concept. StateInOut &The state of the ODE which should be solved. After calling do_step the result is updated in x. time_typeThe value of the time, at which the step should be performed. time_typeThe step size. This method performs one step. It transforms the result in-place. - -voidSystemconst StateInOut &time_typetime_typeSecond version to solve the forwarding problem, can be called with Boost.Range as StateInOut. -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method time_typeThe value of the time, at which the step should be performed. const StateOut &The result of the step is written in out. time_typeThe step size. The method performs one step with the stepper passed by Stepper. The state of the ODE is updated out-of-place. - -voidSystemconst StateIn &time_typeStateOut &time_typeSecond version to solve the forwarding problem, can be called with Boost.Range as StateOut. -voidconst StateType &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - -voidExplicitStepperthe stepper used to fill the buffer of previous step results SystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Simple System concept. StateIn &The initial state of the ODE which should be solved, updated after in this method. time_type &The initial time, updated in this method. time_typeThe step size. Initialized the stepper. Does Steps-1 steps with the explicit_stepper to fill the buffer. The state x and time t are updated to the values after Steps-1 initial steps. - - - -voidSystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Simple System concept. StateIn &The state of the ODE which should be solved. After calling do_step the result is updated in x. time_type &The value of the time, at which the step should be performed. time_typeThe step size. Initialized the stepper. Does Steps-1 steps using the standard initializing stepper of the underlying adams_bashforth stepper. - -voidvoidResets the internal buffers of the stepper. - -voidConstructs the adams_bashforth class. -const algebra_type &A copy of algebra is made and stored. Constructs the adams_bashforth class. This constructor can be used as a default constructor if the algebra has a default constructor. - - -voidSystemStateInOut &time_typetime_type -voidSystemStateIn const &time_typeStateInOut &time_type -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -State -state_wrapper< state_type > -Value -Deriv -state_wrapper< deriv_type > -Time -Algebra -Operations -Resizer -stepper_tag -adams_moulton< Steps, State, Value, Deriv, Time, Algebra, Operations, Resizer > -unsigned short -unspecified -const size_t -const order_type - -order_typevoid -voidSystemStateInOut &StateIn const &time_typetime_typeconst ABBuf & -voidSystemconst StateInOut &StateIn const &time_typetime_typeconst ABBuf & -voidSystemconst StateIn &const PredIn &time_typeStateOut &time_typeconst ABBuf & -voidSystemconst StateIn &const PredIn &time_typeconst StateOut &time_typeconst ABBuf & -voidconst StateType & -algebra_type & -const algebra_type & - - -algebra_type & -adams_moulton &const adams_moulton & - -voidSystemconst StateIn &const PredIn &time_typeStateOut &time_typeconst ABBuf & -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -algebra_stepper_base< Algebra, Operations >unsigned short -State -Value -Deriv -Time -state_wrapper< state_type > -state_wrapper< deriv_type > -algebra_stepper_base< Algebra, Operations > -algebra_stepper_base_type::algebra_type -algebra_stepper_base_type::operations_type -Resizer -error_stepper_tag -unspecified -adaptive_adams_bashforth_moulton< Steps, State, Value, Deriv, Time, Algebra, Operations, Resizer > -const size_t -const order_type - -order_type -order_type -order_type -voidSystemstate_type &time_typetime_type -voidSystemconst state_type &time_typestate_type &time_type -voidSystemstate_type &time_typetime_typestate_type & -voidSystemconst state_type &time_typestate_type &time_typestate_type & -voidExplicitStepperSystemstate_type &time_type &time_type -voidSystemstate_type &time_type &time_type -voidSystemconst state_type &time_typestate_type &time_type &state_type & -const coeff_type & -coeff_type & -void -const deriv_type & - -const algebra_type &algebra_type() - -boolconst StateType & -boolconst StateType & -boolconst StateType & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -The Bulirsch-Stoer algorithm. The Bulirsch-Stoer is a controlled stepper that adjusts both step size and order of the method. The algorithm uses the modified midpoint and a polynomial extrapolation compute the solution. -State -Value -Deriv -Time -Algebra -Operations -Resizer -const size_t - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. StateInOut &The state of the ODE which should be solved. Overwritten if the step is successful. time_type &The value of the time. Updated if the step is successful. time_type &The step size. Updated. Tries to perform one step. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. Also, the internal order of the stepper is adjusted if required. - -success if the step was accepted, fail otherwise. - -controlled_step_resultSystemconst StateInOut &time_type &time_type &Second version to solve the forwarding problem, can be used with Boost.Range as StateInOut. -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. StateInOut &The state of the ODE which should be solved. Overwritten if the step is successful. const DerivIn &The derivative of state. time_type &The value of the time. Updated if the step is successful. time_type &The step size. Updated. Tries to perform one step. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. Also, the internal order of the stepper is adjusted if required. - -success if the step was accepted, fail otherwise. - -boost::disable_if< boost::is_same< StateIn, time_type >, controlled_step_result >::typeSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. time_type &The value of the time. Updated if the step is successful. StateOut &Used to store the result of the step. time_type &The step size. Updated. Tries to perform one step. This method is disabled if state_type=time_type to avoid ambiguity. - -This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. Also, the internal order of the stepper is adjusted if required. - -success if the step was accepted, fail otherwise. - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. const DerivIn &The derivative of state. time_type &The value of the time. Updated if the step is successful. StateOut &Used to store the result of the step. time_type &The step size. Updated. Tries to perform one step. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. Also, the internal order of the stepper is adjusted if required. - -success if the step was accepted, fail otherwise. - -voidResets the internal state of the stepper. -voidconst StateIn &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -value_type1E-6Absolute tolerance level. value_type1E-6Relative tolerance level. value_type1.0Factor for the weight of the state. value_type1.0Factor for the weight of the derivative. time_typestatic_cast< time_type >(0)Constructs the bulirsch_stoer class, including initialization of the error bounds. - - -boolconst StateIn & -boolconst StateIn & -boolconst StateIn & -controlled_step_resultSystemStateInOut &time_type &time_type & -voidsize_tstate_table_type &const value_matrix &StateInOut & -time_typetime_typevalue_typesize_t -controlled_step_resultsize_tconst inv_time_vector &const time_vector &time_type & -boolsize_t -boolvalue_typesize_t - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -The Bulirsch-Stoer algorithm. The Bulirsch-Stoer is a controlled stepper that adjusts both step size and order of the method. The algorithm uses the modified midpoint and a polynomial extrapolation compute the solution. This class also provides dense output facility. -State -Value -Deriv -Time -Algebra -Operations -Resizer -dense_output_stepper_tag -const size_t - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. const DerivIn &The derivative of state. time_type &The value of the time. Updated if the step is successful. StateOut &Used to store the result of the step. DerivOut &time_type &The step size. Updated. Tries to perform one step. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. Also, the internal order of the stepper is adjusted if required. - -success if the step was accepted, fail otherwise. - -voidconst StateType &The initial state. const time_type &The initial time. const time_type &The initial time step. Initializes the dense output stepper. - -std::pair< time_type, time_type >SystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Simple System concept. Does one time step. This is the main method that should be used to integrate an ODE with this stepper. initialize has to be called before using this method to set the initial conditions x,t and the stepsize. - - - -Pair with start and end time of the integration step. - -voidtime_typeThe time at which the solution should be calculated, has to be in the current time interval. StateOut &The output variable where the result is written into. Calculates the solution at an intermediate point within the last step. - -const state_type &voidReturns the current state of the solution. -The current state of the solution x(t). - -time_typevoidReturns the current time of the solution. -The current time of the solution t. - -const state_type &voidReturns the last state of the solution. -The last state of the solution x(t-dt). - -time_typevoidReturns the last time of the solution. -The last time of the solution t-dt. - -time_typevoidReturns the current step size. -The current step size. - -voidResets the internal state of the stepper. -voidconst StateIn &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -value_type1E-6Absolute tolerance level. value_type1E-6Relative tolerance level. value_type1.0Factor for the weight of the state. value_type1.0Factor for the weight of the derivative. time_typestatic_cast< time_type >(0)boolfalseSet true to additionally control the error of the interpolation. Constructs the bulirsch_stoer class, including initialization of the error bounds. - - -voidsize_tStateVector &const value_matrix &StateInOut &size_t0 -voidsize_tStateVector &const value_matrix &size_t0 -time_typetime_typevalue_typesize_t -boolsize_t -boolvalue_typesize_t -value_typeintconst StateIn1 &const DerivIn1 &const StateIn2 &const DerivIn2 &time_type -voidsize_tsize_tvalue_typeconst DerivIn & -voidtime_typeStateOut & -boolconst StateIn & -state_type &void -const state_type &void -state_type &void -const state_type &void -deriv_type &void -const deriv_type &void -deriv_type &void -const deriv_type &void -voidvoid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -ErrorStepper -stepper_type::state_type -stepper_type::value_type -stepper_type::deriv_type -stepper_type::time_type -stepper_type::algebra_type -stepper_type::operations_type -Resizer -StepAdjuster -OrderAdjuster -controlled_stepper_tag -stepper_type::wrapped_state_type -stepper_type::wrapped_deriv_type -boost::array< wrapped_state_type, 4 > -stepper_type::coeff_type -controlled_adams_bashforth_moulton< ErrorStepper, StepAdjuster, OrderAdjuster, Resizer > -const stepper_type::order_type - -voidExplicitStepperSystemstate_type &time_type &time_type -voidSystemstate_type &time_type &time_type -voidExplicitStepperSystemstate_type &time_type &time_type & -controlled_step_resultSystemstate_type &time_type &time_type & -controlled_step_resultSystemconst state_type &time_type &state_type &time_type & -void - -step_adjuster_typestep_adjuster_type() - -boolconst StateType & -boolconst StateType & -boolconst StateType & - -State -Value -state_wrapper< state_type > -Algebra - -size_tsize_tsize_tboost::array< wrapped_state_type, 4 > & - -const algebra_type &algebra_type() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -ErrorStepperErrorCheckerStepAdjusterResizerexplicit_error_stepper_fsal_tagImplements step size control for Runge-Kutta FSAL steppers with error estimation. This class implements the step size control for FSAL Runge-Kutta steppers with error estimation. -ErrorStepper -stepper_type::state_type -stepper_type::value_type -stepper_type::deriv_type -stepper_type::time_type -stepper_type::algebra_type -stepper_type::operations_type -Resizer -ErrorChecker -StepAdjuster -explicit_controlled_stepper_fsal_tag - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. StateInOut &The state of the ODE which should be solved. Overwritten if the step is successful. time_type &The value of the time. Updated if the step is successful. time_type &The step size. Updated. Tries to perform one step. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. - -success if the step was accepted, fail otherwise. - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateInOut &The state of the ODE which should be solved. Overwritten if the step is successful. Can be a boost range. time_type &The value of the time. Updated if the step is successful. time_type &The step size. Updated. Tries to perform one step. Solves the forwarding problem and allows for using boost range as state_type. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. - -success if the step was accepted, fail otherwise. - -boost::disable_if< boost::is_same< StateIn, time_type >, controlled_step_result >::typeSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. time_type &The value of the time. Updated if the step is successful. StateOut &Used to store the result of the step. time_type &The step size. Updated. Tries to perform one step. This method is disabled if state_type=time_type to avoid ambiguity. - -This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. - -success if the step was accepted, fail otherwise. - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. StateInOut &The state of the ODE which should be solved. Overwritten if the step is successful. DerivInOut &The derivative of state. time_type &The value of the time. Updated if the step is successful. time_type &The step size. Updated. Tries to perform one step. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. - -success if the step was accepted, fail otherwise. - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. const DerivIn &time_type &The value of the time. Updated if the step is successful. StateOut &Used to store the result of the step. DerivOut &time_type &The step size. Updated. Tries to perform one step. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. - -success if the step was accepted, fail otherwise. - -voidvoidResets the internal state of the underlying FSAL stepper. -voidconst DerivIn &The initial derivative of the ODE. Initializes the internal state storing an internal copy of the derivative. - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The initial state of the ODE which should be solved. time_typeThe initial time. Initializes the internal state storing an internal copy of the derivative. - -boolvoidReturns true if the stepper has been initialized, false otherwise. -true, if the stepper has been initialized, false otherwise. - -voidconst StateType &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - -stepper_type &voidReturns the instance of the underlying stepper. -The instance of the underlying stepper. - -const stepper_type &voidReturns the instance of the underlying stepper. -The instance of the underlying stepper. - - -const error_checker_type &error_checker_type()An instance of the error checker. const step_adjuster_type &step_adjuster_type()const stepper_type &stepper_type()An instance of the underlying stepper. Constructs the controlled Runge-Kutta stepper. - - -boolconst StateIn & -boolconst StateIn & -boolconst StateIn & -boolconst StateIn & -controlled_step_resultSystemStateInOut &time_type &time_type & - -ErrorStepperErrorCheckerStepAdjusterResizerexplicit_error_stepper_tagImplements step size control for Runge-Kutta steppers with error estimation. This class implements the step size control for standard Runge-Kutta steppers with error estimation. -ErrorStepper -stepper_type::state_type -stepper_type::value_type -stepper_type::deriv_type -stepper_type::time_type -stepper_type::algebra_type -stepper_type::operations_type -Resizer -ErrorChecker -StepAdjuster -explicit_controlled_stepper_tag - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. StateInOut &The state of the ODE which should be solved. Overwritten if the step is successful. time_type &The value of the time. Updated if the step is successful. time_type &The step size. Updated. Tries to perform one step. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. - -success if the step was accepted, fail otherwise. - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateInOut &The state of the ODE which should be solved. Overwritten if the step is successful. Can be a boost range. time_type &The value of the time. Updated if the step is successful. time_type &The step size. Updated. Tries to perform one step. Solves the forwarding problem and allows for using boost range as state_type. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. - -success if the step was accepted, fail otherwise. - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. StateInOut &The state of the ODE which should be solved. Overwritten if the step is successful. const DerivIn &The derivative of state. time_type &The value of the time. Updated if the step is successful. time_type &The step size. Updated. Tries to perform one step. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. - -success if the step was accepted, fail otherwise. - -boost::disable_if< boost::is_same< StateIn, time_type >, controlled_step_result >::typeSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. time_type &The value of the time. Updated if the step is successful. StateOut &Used to store the result of the step. time_type &The step size. Updated. Tries to perform one step. This method is disabled if state_type=time_type to avoid ambiguity. - -This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. - -success if the step was accepted, fail otherwise. - -controlled_step_resultSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. const DerivIn &The derivative of state. time_type &The value of the time. Updated if the step is successful. StateOut &Used to store the result of the step. time_type &The step size. Updated. Tries to perform one step. This method tries to do one step with step size dt. If the error estimate is to large, the step is rejected and the method returns fail and the step size dt is reduced. If the error estimate is acceptably small, the step is performed, success is returned and dt might be increased to make the steps as large as possible. This method also updates t if a step is performed. - -success if the step was accepted, fail otherwise. - -voidconst StateType &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - -stepper_type &voidReturns the instance of the underlying stepper. -The instance of the underlying stepper. - -const stepper_type &voidReturns the instance of the underlying stepper. -The instance of the underlying stepper. - - -const error_checker_type &error_checker_type()An instance of the error checker. const step_adjuster_type &step_adjuster_type()const stepper_type &stepper_type()An instance of the underlying stepper. Constructs the controlled Runge-Kutta stepper. - - -controlled_step_resultSystemStateInOut &time_type &time_type & -boolconst StateIn & -boolconst StateIn & -boolconst StateIn & - -The default error checker to be used with Runge-Kutta error steppers. This class provides the default mechanism to compare the error estimates reported by Runge-Kutta error steppers with user defined error bounds. It is used by the controlled_runge_kutta steppers. -Value -Algebra -Operations - -value_typeconst State &const Deriv &Err &Time -value_typealgebra_type &const State &const Deriv &Err &Time - -value_typestatic_cast< value_type >(1.0e-6)value_typestatic_cast< value_type >(1.0e-6)value_typestatic_cast< value_type >(1)value_typestatic_cast< value_type >(1) -Time -Value - -time_typetime_typeconst value_typeconst int -time_typetime_typevalue_typeconst int -boolconst time_type -time_type - -const time_typestatic_cast< time_type >(0) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -The trial step was successful, hence the state and the time have been advanced. The step was not successful and might possibly be repeated with a small step size. Enum representing the return values of the controlled steppers. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Stepperexplicit_controlled_stepper_fsal_tagThe class representing dense-output Runge-Kutta steppers with FSAL property. The interface is the same as for dense_output_runge_kutta< Stepper , stepper_tag >. This class provides dense output functionality based on methods with step size controlled -Stepper -controlled_stepper_type::stepper_type -stepper_type::state_type -stepper_type::wrapped_state_type -stepper_type::value_type -stepper_type::deriv_type -stepper_type::wrapped_deriv_type -stepper_type::time_type -stepper_type::algebra_type -stepper_type::operations_type -stepper_type::resizer_type -dense_output_stepper_tag -dense_output_runge_kutta< Stepper > - -voidconst StateType &time_typetime_type -std::pair< time_type, time_type >System -voidtime_typeStateOut & -voidtime_typeconst StateOut & -boolconst StateIn & -voidconst StateType & -const state_type &void -time_typevoid -const state_type &void -time_typevoid -time_typevoid - -const controlled_stepper_type &controlled_stepper_type() - -state_type &void -const state_type &void -state_type &void -const state_type &void -deriv_type &void -const deriv_type &void -deriv_type &void -const deriv_type &void -voidvoid - -Stepperstepper_tagThe class representing dense-output Runge-Kutta steppers. In this stepper, the initialize method has to be called before using the do_step method. - -The dense-output functionality allows to interpolate the solution between subsequent integration points using intermediate results obtained during the computation. This version works based on a normal stepper without step-size control. -Stepper -stepper_type::state_type -stepper_type::wrapped_state_type -stepper_type::value_type -stepper_type::deriv_type -stepper_type::wrapped_deriv_type -stepper_type::time_type -stepper_type::algebra_type -stepper_type::operations_type -stepper_type::resizer_type -dense_output_stepper_tag -dense_output_runge_kutta< Stepper > - -voidconst StateType &The initial state of the ODE which should be solved. time_typeThe initial time, at which the step should be performed. time_typeThe step size. Initializes the stepper. Has to be called before do_step can be used to set the initial conditions and the step size. - -std::pair< time_type, time_type >SystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Simple System concept. Does one time step. initialize has to be called before using this method to set the initial conditions x,t and the stepsize. - - - -Pair with start and end time of the integration step. - -voidtime_typeThe time at which the solution should be calculated, has to be in the current time interval. StateOut &The output variable where the result is written into. Calculates the solution at an intermediate point. - -voidtime_typeThe time at which the solution should be calculated, has to be in the current time interval. const StateOut &The output variable where the result is written into, can be a boost range. Calculates the solution at an intermediate point. Solves the forwarding problem. - -voidconst StateType &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - -const state_type &voidReturns the current state of the solution. -The current state of the solution x(t). - -time_typevoidReturns the current time of the solution. -The current time of the solution t. - -const state_type &voidReturns the last state of the solution. -The last state of the solution x(t-dt). - -time_typevoidReturns the last time of the solution. -The last time of the solution t-dt. - -time_typevoidReturns the current time step. -dt. - - -const stepper_type &stepper_type()An instance of the underlying stepper. Constructs the dense_output_runge_kutta class. An instance of the underlying stepper can be provided. - - -state_type &void -const state_type &void -state_type &void -const state_type &void -voidvoid -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -explicit_stepper_baseAn implementation of the Euler method. The Euler method is a very simply solver for ordinary differential equations. This method should not be used for real applications. It is only useful for demonstration purposes. Step size control is not provided but trivial continuous output is available.This class derives from explicit_stepper_base and inherits its interface via CRTP (current recurring template pattern), see explicit_stepper_base -explicit_stepper_base< euler< ... >,... > -stepper_base_type::state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type - -voidSystemconst StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeStateOut &The result of the step is written in out. time_typeThe step size. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out of place, hence the input is in in and the output in out. Access to this step functionality is provided by explicit_stepper_base and do_step_impl should not be called directly. - -voidStateOut &time_typeconst StateIn1 &time_typeconst StateIn2 &time_typeThis method is used for continuous output and it calculates the state x at a time t from the knowledge of two states old_state and current_state at time points t_old and t_new. -voidconst StateType &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the euler class. This constructor can be used as a default constructor of the algebra has a default constructor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -explicit_error_stepper_baseA generic implementation of explicit Runge-Kutta algorithms with error estimation. This class is as a base class for all explicit Runge-Kutta steppers with error estimation. This class implements the explicit Runge-Kutta algorithms with error estimation in a generic way. The Butcher tableau is passed to the stepper which constructs the stepper scheme with the help of a template-metaprogramming algorithm. ToDo : Add example!This class derives explicit_error_stepper_base which provides the stepper interface. -explicit_stepper_base< ... > -stepper_base_type::state_type -stepper_base_type::wrapped_state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::wrapped_deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type -unspecified -rk_algorithm_type::coef_a_type -rk_algorithm_type::coef_b_type -rk_algorithm_type::coef_c_type -const size_t - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. Err &The result of the error estimation is written in xerr. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out-of-place, hence the input is in in and the output in out. Futhermore, an estimation of the error is stored in xerr. do_step_impl is used by explicit_error_stepper_base. - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out-of-place, hence the input is in in and the output in out. Access to this step functionality is provided by explicit_stepper_base and do_step_impl should not be called directly. - -voidconst StateIn &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -const coef_a_type &Triangular matrix of parameters b in the Butcher tableau. const coef_b_type &Last row of the butcher tableau. const coef_b_type &Parameters for lower-order evaluation to estimate the error. const coef_c_type &Parameters to calculate the time points in the Butcher tableau. const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the explicit_error_generik_rk class with the given parameters a, b, b2 and c. See examples section for details on the coefficients. - - -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -explicit_stepper_baseA generic implementation of explicit Runge-Kutta algorithms. This class is as a base class for all explicit Runge-Kutta steppers. This class implements the explicit Runge-Kutta algorithms without error estimation in a generic way. The Butcher tableau is passed to the stepper which constructs the stepper scheme with the help of a template-metaprogramming algorithm. ToDo : Add example!This class derives explicit_stepper_base which provides the stepper interface. -explicit_stepper_base< ... > -stepper_base_type::state_type -stepper_base_type::wrapped_state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::wrapped_deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type -unspecified -rk_algorithm_type::coef_a_type -rk_algorithm_type::coef_b_type -rk_algorithm_type::coef_c_type - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out of place, hence the input is in in and the output in out. Access to this step functionality is provided by explicit_stepper_base and do_step_impl should not be called directly. - -voidconst StateIn &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -const coef_a_type &Triangular matrix of parameters b in the Butcher tableau. const coef_b_type &Last row of the butcher tableau. const coef_c_type &Parameters to calculate the time points in the Butcher tableau. const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the explicit_generic_rk class. See examples section for details on the coefficients. - - -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -explicit_error_stepper_baseExtrapolation stepper with configurable order, and error estimation. The extrapolation stepper is a stepper with error estimation and configurable order. The order is given as template parameter and needs to be an odd number. The stepper is based on several executions of the modified midpoint method and a Richardson extrapolation. This is essentially the same technique as for bulirsch_stoer, but without the variable order.The Order parameter has to be an even number greater 2. - -explicit_error_stepper_base< extrapolation_stepper< ... >,... > -stepper_base_type::state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type -unsigned short -const order_type -const order_type -const order_type -const size_t - -((Order % 2)==0) &&(Order > 2)"extrapolation_stepper requires even Order larger than 2" -boolconst StateIn & -boolconst StateIn & -voidsize_tstate_table_type &const value_matrix &StateInOut & - - -voidSystemconst StateIn &const DerivIn &time_typeStateOut &time_typeErr & -voidSystemStateInOut &const DerivIn &time_typetime_typeErr & -voidSystemconst StateIn &const DerivIn &time_typeStateOut &time_type -voidSystemStateInOut &const DerivIn &time_typetime_type -voidSystemStateInOut &const DerivIn &time_typetime_type -voidSystemconst StateIn &const DerivIn &time_typeStateOut &time_type -voidconst StateIn & - -const algebra_type &algebra_type() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - -ValueType -value_type -boost::numeric::ublas::vector< value_type > -state_wrapper< state_type > -state_type -state_wrapper< deriv_type > -boost::numeric::ublas::matrix< value_type > -state_wrapper< matrix_type > -boost::numeric::ublas::permutation_matrix< size_t > -state_wrapper< pmatrix_type > -Resizer -stepper_tag -implicit_euler< ValueType, Resizer > - -voidSystemstate_type &time_typetime_type -voidconst StateType & - -value_type1E-6 - -boolconst StateIn & -voidstate_type &matrix_type & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -explicit_stepper_baseImplementation of the modified midpoint method with a configurable number of intermediate steps. This class is used by the Bulirsch-Stoer algorithm and is not meant for direct usage. explicit_stepper_base< modified_midpoint< State, Value, Deriv, Time, Algebra, Operations, Resizer >, 2, State, Value, Deriv, Time, Algebra, Operations, Resizer > -stepper_base_type::state_type -stepper_base_type::wrapped_state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::wrapped_deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type -stepper_base_type::stepper_type - -voidSystemconst StateIn &const DerivIn &time_typeStateOut &time_type -voidunsigned short -unsigned shortvoid -voidconst StateIn & - -unsigned short2const algebra_type &algebra_type() - -boolconst StateIn & - -Implementation of the modified midpoint method with a configurable number of intermediate steps. This class is used by the dense output Bulirsch-Stoer algorithm and is not meant for direct usage. This stepper is for internal use only and does not meet any stepper concept. - -State -Value -Deriv -Time -Algebra -Operations -Resizer -state_wrapper< state_type > -state_wrapper< deriv_type > -modified_midpoint_dense_out< State, Value, Deriv, Time, Algebra, Operations, Resizer > -std::vector< wrapped_deriv_type > - -voidSystemconst StateIn &const DerivIn &time_typeStateOut &time_typestate_type &deriv_table_type & -voidunsigned short -unsigned shortvoid -boolconst StateIn & -voidconst StateIn & - -unsigned short2const algebra_type &algebra_type() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Value -unsigned short -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const value_type -const order_type -const order_type - - -void -Value -boost::numeric::ublas::vector< value_type > -state_type -value_type -boost::numeric::ublas::matrix< value_type > -boost::numeric::ublas::permutation_matrix< size_t > -Resizer -Coefficients -stepper_tag -unsigned short -state_wrapper< state_type > -state_wrapper< deriv_type > -state_wrapper< matrix_type > -state_wrapper< pmatrix_type > -rosenbrock4< Value, Coefficients, Resizer > -const order_type -const order_type - -order_type -voidSystemconst state_type &time_typestate_type &time_typestate_type & -voidSystemstate_type &time_typetime_typestate_type & -voidSystemconst state_type &time_typestate_type &time_type -voidSystemstate_type &time_typetime_type -void -voidtime_typestate_type &const state_type &time_typeconst state_type &time_type -voidconst StateType & - -void - -boolconst StateIn & -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -Stepper -stepper_type::value_type -stepper_type::state_type -stepper_type::wrapped_state_type -stepper_type::time_type -stepper_type::deriv_type -stepper_type::wrapped_deriv_type -stepper_type::resizer_type -controlled_stepper_tag -rosenbrock4_controller< Stepper > - -value_typeconst state_type &const state_type &const state_type & -value_typevoid -boost::numeric::odeint::controlled_step_resultSystemstate_type &time_type &time_type & -boost::numeric::odeint::controlled_step_resultSystemconst state_type &time_type &state_type &time_type & -voidconst StateType & -stepper_type &void -const stepper_type &void - -value_type1.0e-6value_type1.0e-6const stepper_type &stepper_type() -value_typevalue_typetime_typeconst stepper_type &stepper_type() - -boolconst StateIn & -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -ControlledStepper -unwrap_reference< controlled_stepper_type >::type -unwrapped_controlled_stepper_type::stepper_type -stepper_type::value_type -stepper_type::state_type -stepper_type::wrapped_state_type -stepper_type::time_type -stepper_type::deriv_type -stepper_type::wrapped_deriv_type -stepper_type::resizer_type -dense_output_stepper_tag -rosenbrock4_dense_output< ControlledStepper > - -voidconst StateType &time_typetime_type -std::pair< time_type, time_type >System -voidtime_typeStateOut & -voidtime_typeconst StateOut & -voidconst StateType & -const state_type &void -time_typevoid -const state_type &void -time_typevoid -time_typevoid - -const controlled_stepper_type &controlled_stepper_type() - -state_type &void -const state_type &void -state_type &void -const state_type &void -voidvoid -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -boost::numeric::odeint::explicit_generic_rk< StageCount, Order, State, Value, Deriv, Time, Algebra, Operations, Resizer >The classical Runge-Kutta stepper of fourth order. The Runge-Kutta method of fourth order is one standard method for solving ordinary differential equations and is widely used, see also en.wikipedia.org/wiki/Runge-Kutta_methods The method is explicit and fulfills the Stepper concept. Step size control or continuous output are not provided.This class derives from explicit_stepper_base and inherits its interface via CRTP (current recurring template pattern). Furthermore, it derivs from explicit_generic_rk which is a generic Runge-Kutta algorithm. For more details see explicit_stepper_base and explicit_generic_rk. -stepper_base_type::state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out of place, hence the input is in in and the output in out. Access to this step functionality is provided by explicit_stepper_base and do_step_impl should not be called directly. - -voidconst StateIn &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the runge_kutta4 class. This constructor can be used as a default constructor if the algebra has a default constructor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -explicit_stepper_baseThe classical Runge-Kutta stepper of fourth order. The Runge-Kutta method of fourth order is one standard method for solving ordinary differential equations and is widely used, see also en.wikipedia.org/wiki/Runge-Kutta_methods The method is explicit and fulfills the Stepper concept. Step size control or continuous output are not provided. This class implements the method directly, hence the generic Runge-Kutta algorithm is not used.This class derives from explicit_stepper_base and inherits its interface via CRTP (current recurring template pattern). For more details see explicit_stepper_base. -explicit_stepper_base< runge_kutta4_classic< ... >,... > -stepper_base_type::state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out of place, hence the input is in in and the output in out. Access to this step functionality is provided by explicit_stepper_base and do_step_impl should not be called directly. - -voidconst StateType &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the runge_kutta4_classic class. This constructor can be used as a default constructor if the algebra has a default constructor. - - -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -boost::numeric::odeint::explicit_error_generic_rk< StageCount, Order, StepperOrder, ErrorOrder, State, Value, Deriv, Time, Algebra, Operations, Resizer >The Runge-Kutta Cash-Karp method. The Runge-Kutta Cash-Karp method is one of the standard methods for solving ordinary differential equations, see en.wikipedia.org/wiki/Cash-Karp_methods. The method is explicit and fulfills the Error Stepper concept. Step size control is provided but continuous output is not available for this method.This class derives from explicit_error_stepper_base and inherits its interface via CRTP (current recurring template pattern). Furthermore, it derivs from explicit_error_generic_rk which is a generic Runge-Kutta algorithm with error estimation. For more details see explicit_error_stepper_base and explicit_error_generic_rk. -stepper_base_type::state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. Err &The result of the error estimation is written in xerr. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out-of-place, hence the input is in in and the output in out. Futhermore, an estimation of the error is stored in xerr. do_step_impl is used by explicit_error_stepper_base. - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out-of-place, hence the input is in in and the output in out. Access to this step functionality is provided by explicit_stepper_base and do_step_impl should not be called directly. - -voidconst StateIn &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the runge_kutta_cash_karp54 class. This constructor can be used as a default constructor if the algebra has a default constructor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -explicit_error_stepper_baseThe Runge-Kutta Cash-Karp method implemented without the generic Runge-Kutta algorithm. The Runge-Kutta Cash-Karp method is one of the standard methods for solving ordinary differential equations, see en.wikipedia.org/wiki/Cash-Karp_method. The method is explicit and fulfills the Error Stepper concept. Step size control is provided but continuous output is not available for this method.This class derives from explicit_error_stepper_base and inherits its interface via CRTP (current recurring template pattern). This class implements the method directly, hence the generic Runge-Kutta algorithm is not used. -explicit_error_stepper_base< runge_kutta_cash_karp54_classic< ... >,... > -stepper_base_type::state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. Err &The result of the error estimation is written in xerr. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out-of-place, hence the input is in in and the output in out. Futhermore, an estimation of the error is stored in xerr. Access to this step functionality is provided by explicit_error_stepper_base and do_step_impl should not be called directly. - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out-of-place, hence the input is in in and the output in out. Access to this step functionality is provided by explicit_error_stepper_base and do_step_impl should not be called directly. - -voidconst StateIn &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the runge_kutta_cash_karp54_classic class. This constructor can be used as a default constructor if the algebra has a default constructor. - - -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -explicit_error_stepper_fsal_baseThe Runge-Kutta Dormand-Prince 5 method. The Runge-Kutta Dormand-Prince 5 method is a very popular method for solving ODEs, see . The method is explicit and fulfills the Error Stepper concept. Step size control is provided but continuous output is available which make this method favourable for many applications.This class derives from explicit_error_stepper_fsal_base and inherits its interface via CRTP (current recurring template pattern). The method possesses the FSAL (first-same-as-last) property. See explicit_error_stepper_fsal_base for more details. -explicit_error_stepper_fsal_base< runge_kutta_dopri5< ... >,... > -stepper_base_type::state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. dxdt_in is not modified by this method time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. DerivOut &The result of the new derivative at time t+dt. time_typeThe step size. This method performs one step. The derivative dxdt_in of in at the time t is passed to the method. The result is updated out-of-place, hence the input is in in and the output in out. Furthermore, the derivative is update out-of-place, hence the input is assumed to be in dxdt_in and the output in dxdt_out. Access to this step functionality is provided by explicit_error_stepper_fsal_base and do_step_impl should not be called directly. - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. dxdt_in is not modified by this method time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. DerivOut &The result of the new derivative at time t+dt. time_typeThe step size. Err &An estimation of the error. This method performs one step. The derivative dxdt_in of in at the time t is passed to the method. The result is updated out-of-place, hence the input is in in and the output in out. Furthermore, the derivative is update out-of-place, hence the input is assumed to be in dxdt_in and the output in dxdt_out. Access to this step functionality is provided by explicit_error_stepper_fsal_base and do_step_impl should not be called directly. An estimation of the error is calculated. - -voidtime_typeStateOut &const StateIn1 &const DerivIn1 &time_typeconst StateIn2 &const DerivIn2 &time_typeThis method is used for continuous output and it calculates the state x at a time t from the knowledge of two states old_state and current_state at time points t_old and t_new. It also uses internal variables to calculate the result. Hence this method must be called after two successful do_step calls. -voidconst StateIn &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the runge_kutta_dopri5 class. This constructor can be used as a default constructor if the algebra has a default constructor. - - -boolconst StateIn & -boolconst StateIn & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -boost::numeric::odeint::explicit_error_generic_rk< StageCount, Order, StepperOrder, ErrorOrder, State, Value, Deriv, Time, Algebra, Operations, Resizer >The Runge-Kutta Fehlberg 78 method. The Runge-Kutta Fehlberg 78 method is a standard method for high-precision applications. The method is explicit and fulfills the Error Stepper concept. Step size control is provided but continuous output is not available for this method.This class derives from explicit_error_stepper_base and inherits its interface via CRTP (current recurring template pattern). Furthermore, it derivs from explicit_error_generic_rk which is a generic Runge-Kutta algorithm with error estimation. For more details see explicit_error_stepper_base and explicit_error_generic_rk. -stepper_base_type::state_type -stepper_base_type::value_type -stepper_base_type::deriv_type -stepper_base_type::time_type -stepper_base_type::algebra_type -stepper_base_type::operations_type -stepper_base_type::resizer_type - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. Err &The result of the error estimation is written in xerr. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out-of-place, hence the input is in in and the output in out. Futhermore, an estimation of the error is stored in xerr. do_step_impl is used by explicit_error_stepper_base. - -voidSystemThe system function to solve, hence the r.h.s. of the ODE. It must fulfill the Simple System concept. const StateIn &The state of the ODE which should be solved. in is not modified in this method const DerivIn &The derivative of x at t. time_typeThe value of the time, at which the step should be performed. StateOut &The result of the step is written in out. time_typeThe step size. This method performs one step. The derivative dxdt of in at the time t is passed to the method. The result is updated out-of-place, hence the input is in in and the output in out. Access to this step functionality is provided by explicit_stepper_base and do_step_impl should not be called directly. - -voidconst StateIn &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - - -const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the runge_kutta_cash_fehlberg78 class. This constructor can be used as a default constructor if the algebra has a default constructor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -controlled_stepper_tagcontrolled_stepper_tag -dense_output_stepper_tagdense_output_stepper_tag -error_stepper_tagstepper_tag -explicit_controlled_stepper_fsal_tagcontrolled_stepper_tag -explicit_controlled_stepper_tagcontrolled_stepper_tag -explicit_error_stepper_fsal_tagstepper_tag -explicit_error_stepper_tagstepper_tag -stepper_tagstepper_tag -boost::numeric::odeint::stepper_tagboost::numeric::odeint::controlled_stepper_tagboost::numeric::odeint::controlled_stepper_tagboost::numeric::odeint::error_stepper_tagboost::numeric::odeint::error_stepper_tag - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -symplectic_nystroem_stepper_baseImplementation of the symplectic Euler method. The method is of first order and has one stage. It is described HERE. -stepper_base_type::algebra_type -stepper_base_type::value_type - - -const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the symplectic_euler. This constructor can be used as a default constructor if the algebra has a default constructor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -symplectic_nystroem_stepper_baseImplementation of the symmetric B3A Runge-Kutta Nystroem method of fifth order. The method is of fourth order and has five stages. It is described HERE. This method can be used with multiprecision types since the coefficients are defined analytically.ToDo: add reference to paper. -stepper_base_type::algebra_type -stepper_base_type::value_type - - -const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the symplectic_rkn_sb3a_m4_mclachlan. This constructor can be used as a default constructor if the algebra has a default constructor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -symplectic_nystroem_stepper_baseImplement of the symmetric B3A method of Runge-Kutta-Nystroem method of sixth order. The method is of fourth order and has six stages. It is described HERE. This method cannot be used with multiprecision types since the coefficients are not defined analytically.ToDo Add reference to the paper. -stepper_base_type::algebra_type -stepper_base_type::value_type - - -const algebra_type &algebra_type()A copy of algebra is made and stored inside explicit_stepper_base. Constructs the symplectic_rkn_sb3a_mclachlan. This constructor can be used as a default constructor if the algebra has a default constructor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -algebra_stepper_base< Algebra, Operations >The Velocity-Verlet algorithm. The Velocity-Verlet algorithm is a method for simulation of molecular dynamics systems. It solves the ODE a=f(r,v',t) where r are the coordinates, v are the velocities and a are the accelerations, hence v = dr/dt, a=dv/dt. -algebra_stepper_base< Algebra, Operations > -algebra_stepper_base_type::algebra_type -algebra_stepper_base_type::operations_type -Coor -Velocity -Acceleration -std::pair< coor_type, velocity_type > -std::pair< velocity_type, acceleration_type > -state_wrapper< acceleration_type > -Value -Time -TimeSq -Resizer -stepper_tag -unsigned short -const order_type - -order_typevoid -Returns the order of the stepper. - -voidSystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Second Order System concept. StateInOut &The state of the ODE which should be solved. The state is pair of Coor and Velocity. time_typeThe value of the time, at which the step should be performed. time_typeThe step size. This method performs one step. It transforms the result in-place. It can be used like pair< coordinates , velocities > state; -stepper.do_step( sys , x , t , dt ); - - -voidSystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Second Order System concept. const StateInOut &The state of the ODE which should be solved. The state is pair of Coor and Velocity. time_typeThe value of the time, at which the step should be performed. time_typeThe step size. This method performs one step. It transforms the result in-place. It can be used like pair< coordinates , velocities > state; -stepper.do_step( sys , x , t , dt ); - - -voidSystemThe system function to solve, hence the r.h.s. of the ordinary differential equation. It must fulfill the Second Order System concept. CoorIn const &VelocityIn const &AccelerationIn const &CoorOut &VelocityOut &AccelerationOut &time_typeThe value of the time, at which the step should be performed. time_typeThe step size. This method performs one step. It transforms the result in-place. Additionally to the other methods the coordinates, velocities and accelerations are passed directly to do_step and they are transformed out-of-place. It can be used like coordinates qin , qout; -velocities pin , pout; -accelerations ain, aout; -stepper.do_step( sys , qin , pin , ain , qout , pout , aout , t , dt ); - - -voidconst StateIn &A state from which the size of the temporaries to be resized is deduced. Adjust the size of all temporaries in the stepper manually. - -voidvoidResets the internal state of this stepper. After calling this method it is safe to use all do_step method without explicitly initializing the stepper. -voidconst AccelerationIn &Initializes the internal state of the stepper. - -voidSystemThe system function for the next calls of do_step. const CoorIn &The current coordinates of the ODE. const VelocityIn &The current velocities of the ODE. time_typeThe current time of the ODE. Initializes the internal state of the stepper. This method is equivalent to Acceleration a; -system( qin , pin , a , t ); -stepper.initialize( a ); - - -boolvoid -Returns if the stepper is initialized. - - -const algebra_type &algebra_type()A copy of algebra is made and stored. Constructs the velocity_verlet class. This constructor can be used as a default constructor if the algebra has a default constructor. - - -voidSystemconst CoorIn &const VelocityIn &time_type -voidSystemStateInOut &time_typetime_type -boolconst StateIn & -acceleration_type &void -const acceleration_type &void -acceleration_type &void -const acceleration_type &void -voidvoid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/numeric/odeint/performance/fortran_lorenz.f90 boost1.81-1.81.0/libs/numeric/odeint/performance/fortran_lorenz.f90 --- boost1.81-1.81.0/libs/numeric/odeint/performance/fortran_lorenz.f90 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/numeric/odeint/performance/fortran_lorenz.f90 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -program main - implicit none - - integer, parameter :: dp = 8 - real(dp), dimension(1:3) :: x - integer, parameter :: nstep = 20000000 - real(dp) :: t = 0.0_dp - real(dp) :: h = 1.0e-10_dp - integer, parameter :: nb_loops = 21 - integer, parameter :: n = 3 - integer :: k - integer :: time_begin - integer :: time_end - integer :: count_rate - real(dp) :: time - real(dp) :: min_time = 100.0 - - do k = 1, nb_loops - x = [ 8.5_dp, 3.1_dp, 1.2_dp ] - call system_clock(time_begin, count_rate) - call rk4sys(n, t, x, h, nstep) - call system_clock(time_end, count_rate) - time = real(time_end - time_begin, dp) / real(count_rate, dp) - min_time = min(time, min_time) - write (*,*) time, x(1) - end do - write (*,*) "Minimal Runtime:", min_time -contains - subroutine xpsys(x,f) - real(dp), dimension(1:3), intent(in) :: x - real(dp), dimension(1:3), intent(out) :: f - f(1) = 10.0_dp * ( x(2) - x(1) ) - f(2) = 28.0_dp * x(1) - x(2) - x(1) * x(3) - f(3) = x(1) * x(2) - (8.0_dp / 3.0_dp) * x(3) - end subroutine xpsys - - subroutine rk4sys(n, t, x, h, nstep) - integer, intent(in) :: n - real(dp), intent(in) :: t - real(dp), dimension(1:n), intent(inout) :: x - real(dp), intent(in) :: h - integer, intent(in) :: nstep - ! Local variables - real(dp) :: h2 - real(dp), dimension(1:n) :: y, f1, f2, f3, f4 - integer :: i, k - - h2 = 0.5_dp * h - do k = 1, nstep - call xpsys(x, f1) - y = x + h2 * f1 - call xpsys(y, f2) - y = x + h2 * f2 - call xpsys(y, f3) - y = x + h * f3 - call xpsys(y, f4) - x = x + h * (f1 + 2.0_dp * (f2 + f3) + f4) / 6.0_dp - end do - end subroutine rk4sys -end program main diff -Nru boost1.81-1.81.0/libs/outcome/doc/html/tutorial/advanced.html boost1.81-1.81.0/libs/outcome/doc/html/tutorial/advanced.html --- boost1.81-1.81.0/libs/outcome/doc/html/tutorial/advanced.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/outcome/doc/html/tutorial/advanced.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ - - -Advanced - Boost.Outcome documentation - - - - - -
-Prev - Up - HomeNext
- -

Advanced

-
  1. - Custom payloads -

    Success-or-failure return types where extra information in addition to the error code accompanies failure.

    1. - The Filesystem TS
    2. - Upgrading the Filesystem TS
    3. - Auto-throwing filesystem_error
  2. - Result returning constructors -

    How to metaprogram construction of objects which use result to return failure instead of throwing a C++ exception.

    1. - Two phase construction
    2. - A file handle
    3. - Phase 2 construction
    4. - Phase 3
    5. - construct
    6. - Alternatives
  3. - Hooking events -

    Intercepting useful events such as initial construction, copies and moves so you can capture backtraces, fire debug breakpoints etc.

    1. - Keeping state
    2. - ADL bridging
    3. - Hook result
    4. - Custom exception ptr
    5. - Hook outcome
  4. - Interoperation -

    Interoperating with std::expected and other ValueOrError concept matching types.

    1. - Incommensurate E types
    2. - value_or_error Concept
    3. - The HTTP library
    4. - The HTMLTidy library
    5. - The File I/O library
    6. - The Application
    7. - Mapping the HTTP library into the Application 1/2
    8. - Mapping the HTTP library into the Application 2/2
    9. - Mapping the File I/O library into the Application
    10. - Mapping the HTMLTidy library into the Application
    11. - In use
    12. - Conclusion
- - - - - - - - -

Last revised: February 08, 2019 at 22:18:08 UTC

-
-
-Prev - Up - HomeNext
- diff -Nru boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/before.html boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/before.html --- boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/before.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/before.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ - - -Before we begin - Boost.Outcome documentation - - - - - -
-Prev - Up - HomeNext
-

Before we begin

- - -

Outcome v2 namespace

- -

It is recommended that you refer to entities from this Outcome v2 via the following namespace alias:

- -
namespace outcome = BOOST_OUTCOME_V2_NAMESPACE;
-
View this code on Github
- - -

On standalone Outcome only, as patches and modifications are applied to this library, -namespaces get permuted in order to not to cause binary incompatibility. At some point -namespace outcome_v2 will be defined, and this will be the preferred namespace. -Until then BOOST_OUTCOME_V2_NAMESPACE denotes the most recently -updated version, getting closer to outcome_v2.

- -

On Boost.Outcome only, as Boost provides no binary compatibility across releases, -BOOST_OUTCOME_V2_NAMESPACE always expands into boost::outcome_v2.

- -

Online compilers

- -

If you’ve never used them before, you will find -Godbolt and Wandbox invaluable. -These let you play with C++ inside your web browser.

- -

Most of the source code snippets in Outcome have a link in their top right to -the original source code on github. You can copy and paste this source code into -Godbolt (if you wish to study the assembler generated) or Wandbox (if you -wish to run the program).

- -

Godbolt

- -

Godbolt is invaluable for visualising online the assembler generated for a -piece of C++, for all the major compilers and CPU architectures.

- -

Standalone Outcome is built into Godbolt! In the right hand pane toolbar, click the -libraries dropdown (currently third from the right, looks like a book), find -Outcome and choose the version you want.

- -

After this is selected, you can #include any of these editions of Outcome:

- -
-
<outcome-basic.hpp>
-
An inclusion of basic_outcome.hpp + try.hpp which includes as few - system headers as possible in order to give an absolute minimum compile time - impact edition of Outcome. See https://github.com/ned14/stl-header-heft. -
-
<outcome-experimental.hpp>
-
An inclusion of experimental/status_outcome.hpp + try.hpp which - is the low compile time impact of the basic edition combined with - status_code from https://ned14.github.io/status-code/. If you are on an - embedded system where binary bloat must be absolutely avoided, and don't - mind the potentially unstable status_code, this is definitely the edition - for you. -
-
<outcome.hpp>
-
An inclusion of outcome.hpp which brings in all the specialisations - for the std STL types, plus iostreams support. If you don't know which - edition to use, you should use this one, it ought to "just work".
-
- -

Here is the first tutorial topic’s source code loaded into Godbolt: https://godbolt.org/z/4of3c8

- -

Wandbox

- -

Wandbox lets you place a third party header into a separate tab. It also -comes with a recent Boost libraries. Either technique can be used to -explore Outcome.

- -

Here is the first tutorial topic’s source code loaded into Wandbox: https://wandbox.org/permlink/sJoeKHXSyCU5Avft

- - -

Last revised: December 15, 2020 at 12:22:39 UTC

-
-
-Prev - Up - HomeNext
- diff -Nru boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/conventions.html boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/conventions.html --- boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/conventions.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/conventions.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ - - -Conventions - Boost.Outcome documentation - - - - - -
-Prev - Up - HomeNext
- -

Conventions

- - -

You now know everything you need to get started with using Outcome -immediately.

- -

The initial temptation for most beginners will be to use a bespoke -strongly typed enumeration on a case by case basis i.e. a “once off” -custom E type. This is usually due to experience in other languages -with sum types e.g. Rust, Haskell, Swift etc.

- -

However this is C++! Not Rust, not Swift, not Haskell! I must caution you to always avoid using -custom E types in public APIs. The reason is that every time -library A using custom E1 type must interface with library B -using custom E2 type, you must map between those E1 and E2 -types.

- -

This is information lossy, i.e. fidelity of failure gets lost -after multiple translations. It involves writing, and then -maintaining, a lot of annoying boilerplate. It leaks internal -implementation detail, and fails to separate concerns. And one -cannot use BOOST_OUTCOME_TRYV(expr)/BOOST_OUTCOME_TRY(expr) - -if there is no convertibility between E types.

- -

The C++ 11 standard library, and Boost, -specifically ships <system_error> for the purpose of wrapping up -individual custom E types into a generic framework, where disparate -custom E types can discover and interact with one another. -That ships with every C++ compiler.

- -

For all these reasons, this is why result and outcome default -the EC type to error code. You should leave that default alone -where possible.

- -
- -

tl;dr;

- -

Please plug your library into std::error_code, -or equivalent, and do not expose -custom E types in ANY public API. result and outcome default -EC to an error code for good reason.

- - - -

Last revised: February 09, 2019 at 15:18:26 UTC

-
-
-Prev - Up - HomeNext
- diff -Nru boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/coroutines.html boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/coroutines.html --- boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/coroutines.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/coroutines.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ - - -Coroutines - Boost.Outcome documentation - - - - - -
-Prev - Up - HomeNext
- -

Coroutines

-

In v2.1.2 Outcome published official support for using -Outcome within C++ coroutines. This page documents that support.

- -

All standard C++ Coroutines have the following form:

-
// Coroutine functions MUST return an AWAITABLE type
-AWAITABLE<int> function_name(Args ...)
-{
-  ... ordinary C++ ...
-  if(!...)
-  {
-    co_return 5;  // CANNOT use ordinary 'return' from coroutines
-  }
-  ...
-  // Possibly suspend this coroutine's execution until the
-  // awaitable resumes execution of dependent code
-  auto x = co_await expr_resulting_in_AWAITABLE;
-  ...
-}
-
-

The type AWAITABLE<T> is any type which publishes the Coroutine protocol telling -C++ how to suspend and resume execution of a coroutine which returns a T. It is out of scope of -this page to document how to do this, however note that the eager<T, Executor = void> and lazy<T, Executor = void> -types below are completely generic awaitables suitable for use in ANY code. -They only behave differently if T, the type being returned by the awaitable, -is an Outcome type e.g. outcome::basic_result or outcome::basic_outcome.

- - - -

Last revised: March 18, 2022 at 14:45:32 UTC

-
-
-Prev - Up - HomeNext
- diff -Nru boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/no-value.html boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/no-value.html --- boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/no-value.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/no-value.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ - - -No-value policies - Boost.Outcome documentation - - - - - -
-Prev - Up - HomeNext
- -

No-value policies

-

In the previous section we have seen that it would be useful if calling member -function .value() on object of type outcome<T> that did not contain a value, -would cause an exception to be thrown according to some user-defined policy.

- -

Let us consider result<T> first. It is an alias to basic_result<T, E, NoValuePolicy> -, -where E is the type storing error information and defaulted to -std::error_code/boost::system::error_code, and NoValuePolicy -is a no-value policy defaulted to default_policy<T, EC, EP> -.

- -

The semantics of basic_result::value() are:

- -
    -
  1. Calls NoValuePolicy::wide_value_check(*this).
  2. -
  3. Return a reference to the contained value. If no value is actually stored, -your program has entered undefined behaviour.
  4. -
- -

Thus, the semantics of function .value() depend on the no-value policy. The -default policy (policy::default_policy<T, EC, void>) for EC of type -std::error_code1 does the following:

- -
    -
  • If r.has_value() == false throws exception std::system_error{r.error()},
  • -
  • otherwise no effect.
  • -
- -
-
note
-

Class templates basic_result<T, E, NoValuePolicy> - and basic_outcome<T, EC, EP, NoValuePolicy>

- -

never use exceptions. Any exception-related logic is provided exclusively -through no-value policies.

-
-
- - -

When designing your own success-or-failure type using templates -basic_result<> or basic_outcome<> you have to decide what no-value policy -you want to use. Either create your own, or use one of the predefined policies.

- -

You can also use one of the two other predefined aliases for basic_result<>:

- - -
- -
- -
    -
  1. Similar overloads exist for throwing boost::system::system_error when EC is boost::system::error_code. - [return]
  2. -
-
- - - -

Last revised: February 08, 2019 at 22:18:08 UTC

-
-
-Prev - Up - HomeNext
- diff -Nru boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/outcome.html boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/outcome.html --- boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/outcome.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/outcome.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ - - -outcome<> - Boost.Outcome documentation - - - - - -
-Prev - Up - HomeNext
- -

outcome<>

- - -

Type outcome<T, EC = varies, EP = varies, NoValuePolicy = policy::default_policy<T, EC, EP>> - represents either a successfully computed value of type T, or one or two reasons for failure. Failure can be represented by EC, or EP, or both, although usually it will either be an EC or an EP. -Similarly to result, EC defaults to std::error_code/boost::system::error_code, and EP defaults to std::exception_ptr/boost::exception_ptr.

- -

The distinction is made into two types, EC and EP:

- - - -

It should be emphasised that this distinction is by convention only, but it will be confusing to your -users if you deviate significantly from this convention.

- -
- -

Legacy codebases

- -

outcome is useful for transporting exceptions across layers of the program that were never designed with exception safety in mind.

- -

Consider a program consisting of three layers:

- - -
- -

The highest-level layer, Layer3, uses exceptions for signalling failures. The middle layer, Layer2_old, -was not designed with exception safety in mind and functions need to return information about failures in return value. -But down in the implementation details, in Layer1, another library is used that again throws exceptions. The goal is -to be able to transfer an exception thrown in Layer1 through Layer2_old, which is not exception-safe, -and be able to rethrow it in Layer3.

- -

In Layer1 we have two functions from two libraries: one reports failures by throwing exceptions, the other by returning result<>:

- -
auto f() -> int;  // throws on failure
-auto g() noexcept -> outcome::result<int>;
-
View this code on Github
- - -

In Layer2_old we cannot use exceptions, so its function h uses return type outcome<> to report failures. It is using functions f and g and reports their failures inside outcome<>:

- -
auto old::h() noexcept -> outcome::outcome<int>
-{
-  BOOST_OUTCOME_TRY(auto i, (g()));             // #1
-    
-  try {
-    return i + f();
-  }
-  catch (...) {
-    return std::current_exception(); // #2
-  }
-}
-
View this code on Github
- - -

#1. Operator TRY can forward failures encoded in result<T, EC> as outcome<T, EC, EP> without any loss in information. You can also use TRY to forward failure from one outcome<> to another.

- -

#2. You can store the current exception through std::exception_ptr inside outcome<T, EC, EP> without any loss in information - (provided that EP is std::exception_ptr).

- - - -

Last revised: March 19, 2019 at 22:57:48 +0100

-
-
-Prev - Up - HomeNext
- diff -Nru boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/result.html boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/result.html --- boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/result.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential/result.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ - - -result<> - Boost.Outcome documentation - - - - - -
-Prev - Up - HomeNext
- -

result<>

-

We will define a function that converts a std::string to an int. This function can fail for a number of reasons; -if it does we want to communicate the failure reason.

- -
outcome::result<int> convert(const std::string& str) noexcept;
-
View this code on Github
- - -

Template alias result<T, E = varies, NoValuePolicy = policy::default_policy<T, E, void>> - -has three template parameters, but the last two have default values. The first -(T) represents the type of the object returned from the function upon success. -The second (EC) is the type of object containing information about the reason -for failure when the function fails. A result object stores either a T or an -EC at any given moment, and is therefore conceptually similar to variant<T, EC>. -EC is defaulted to std::error_code in standalone Outcome, or to boost::system::error_code -in Boost.Outcome1. The third parameter (NoValuePolicy) is called a -no-value policy. We will cover it later.

- -

If both T and EC are trivially copyable, result<T, EC, NVP> is also trivially copyable. -Triviality, complexity and constexpr-ness of each operation (construction, copy construction, assignment, -destruction etc) is always the intersection of the corresponding operation in T and EC, -so for example if both T and EC are literal types, so will be result<T, EC, NVP>. -Additionally, if both T and EC have standard layout, result<T, EC, NVP> has standard layout; -thus if both T and EC are C-compatible, so will result<T, EC, NVP> be C-compatible.

- -

Now, we will define an enumeration describing different failure situations during conversion.

- -
enum class ConversionErrc
-{
-  Success     = 0, // 0 should not represent an error
-  EmptyString = 1, // (for rationale, see tutorial on error codes)
-  IllegalChar = 2,
-  TooLong     = 3,
-};
-
-// all boilerplate necessary to plug ConversionErrc
-// into std::error_code framework
-
View this code on Github
- - -

Assume we have plugged it into std::error_code framework, as described in this section.

- -

One notable effect of such plugging is that ConversionErrc is now convertible to std::error_code. -Now we can implement function convert as follows:

- -
outcome::result<int> convert(const std::string& str) noexcept
-{
-  if (str.empty())
-    return ConversionErrc::EmptyString;
-
-  if (!std::all_of(str.begin(), str.end(), ::isdigit))
-    return ConversionErrc::IllegalChar;
-
-  if (str.length() > 9)
-    return ConversionErrc::TooLong;
-
-  return atoi(str.c_str());
-}
-
View this code on Github
- - -

result<T, EC> is convertible from any T2 convertible to T as well as any EC2 convertible to EC, -provided that there is no constructability possible in either direction between T and EC. If there is, -all implicit conversion is disabled, and you will need to use one of the tagged constructors:

- -
outcome::result<int> r {outcome::in_place_type<std::error_code>, ConversionErrc::EmptyString};
-outcome::result<int> s {outcome::in_place_type<int>, 1};
-
View this code on Github
- - -

Or use helper functions:

- -
outcome::result<int> r = outcome::failure(ConversionErrc::EmptyString);
-outcome::result<int> s = outcome::success(1);
-
View this code on Github
- - -
-
note
-

The functions auto failure(T &&, …) - and auto success(T &&, …) - return special -types implicitly convertible to failed or successful result (and outcome).

-
-
- -
- -
- -
    -
  1. You can mandate a choice using std_result<T> or boost_result<T>. - [return]
  2. -
-
- - - -

Last revised: February 23, 2021 at 17:37:27 UTC

-
-
-Prev - Up - HomeNext
- diff -Nru boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential.html boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential.html --- boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/outcome/doc/html/tutorial/essential.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ - - -Essential - Boost.Outcome documentation - - - - - -
-Prev - Up - HomeNext
- -

Essential

-
  1. - Before we begin -

    Essential information before you begin the tutorial.

  2. - result<> -

    Gentle introduction to writing code with simple success-or-failure return types.

    1. - Inspecting result
    2. - TRY operations
    3. - TRY is greedy
    4. - TRY avoiding copy/move
  3. - outcome<> -

    Success-or-failure return types where failure can take two forms, expected/handled failure and unexpected/abort failure.

    1. - Inspecting outcome
  4. - No-value policies -

    Describes the concept of NoValuePolicy and how to use no-value policies.

    1. - A custom no-value policy
    2. - Built-in policies
  5. - Coroutines -

    Using Outcome in C++ Coroutines

    1. - Coroutine TRY operation
    2. - Coroutine awaitables
    3. - Returning Outcome types from Coroutines
    4. - operator co_await as TRY operator
  6. - Conventions -

    Why you should avoid custom E types in public APIs.

- - - - - - - - -

Last revised: February 08, 2019 at 22:18:08 UTC

-
-
-Prev - Up - HomeNext
- diff -Nru boost1.81-1.81.0/libs/parameter/include/boost/parameter/aux_/python/invoker.hpp boost1.81-1.81.0/libs/parameter/include/boost/parameter/aux_/python/invoker.hpp --- boost1.81-1.81.0/libs/parameter/include/boost/parameter/aux_/python/invoker.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/parameter/include/boost/parameter/aux_/python/invoker.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ -// Copyright Daniel Wallin 2005. Use, modification and distribution is -// subject to the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#ifndef BOOST_PARAMETER_INVOKER_051210_HPP -# define BOOST_PARAMETER_INVOKER_051210_HPP - -# include -# include -# include -# include -# include -# include - -namespace boost { namespace parameter { namespace python { namespace aux { - -template -struct invoker; - -template -struct make_invoker -{ - template - struct apply - { - typedef invoker< - mpl::size::value, M, R, Args - > type; - }; -}; - -template -struct member_invoker; - -template -struct make_member_invoker -{ - template - struct apply - { - typedef member_invoker< - mpl::size::value, M, R, T, Args - > type; - }; -}; - -template -struct call_invoker; - -template -struct make_call_invoker -{ - template - struct apply - { - typedef call_invoker< - mpl::size::value, T, R, Args - > type; - }; -}; - -template -struct init_invoker; - -template -struct make_init_invoker -{ - template - struct apply - { - typedef init_invoker< - mpl::size::value, T, Args - > type; - }; -}; - -template -struct invoker<0, M, R, Args> -{ - static R execute() - { - return M()(boost::type()); - } -}; - -template -struct member_invoker<0, M, R, T, Args> -{ - static R execute(T& self) - { - return M()(boost::type(), self); - } -}; - -template -struct call_invoker<0, T, R, Args> -{ - static R execute(T& self) - { - return self(); - } -}; - -template -struct init_invoker<0, T, Args> -{ - static T* execute(T& self) - { - return new T; - } -}; - -# define BOOST_PP_ITERATION_PARAMS_1 (4, \ - (1, BOOST_PARAMETER_MAX_ARITY, , 1)) -# include BOOST_PP_ITERATE() - -# define BOOST_PP_ITERATION_PARAMS_1 (4, \ - (1, BOOST_PARAMETER_MAX_ARITY, , 2)) -# include BOOST_PP_ITERATE() - -# define BOOST_PP_ITERATION_PARAMS_1 (4, \ - (1, BOOST_PARAMETER_MAX_ARITY, , 3)) -# include BOOST_PP_ITERATE() - -# define BOOST_PP_ITERATION_PARAMS_1 (4, \ - (1, BOOST_PARAMETER_MAX_ARITY, , 4)) -# include BOOST_PP_ITERATE() - -}}}} // namespace boost::parameter::python::aux - -#endif // BOOST_PARAMETER_INVOKER_051210_HPP - diff -Nru boost1.81-1.81.0/libs/parameter/include/boost/parameter/aux_/python/invoker_iterate.hpp boost1.81-1.81.0/libs/parameter/include/boost/parameter/aux_/python/invoker_iterate.hpp --- boost1.81-1.81.0/libs/parameter/include/boost/parameter/aux_/python/invoker_iterate.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/parameter/include/boost/parameter/aux_/python/invoker_iterate.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -// Copyright Daniel Wallin 2005. Use, modification and distribution is -// subject to the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include -#include - -#define N BOOST_PP_ITERATION() - -#define BOOST_PARAMETER_PY_ARG_TYPES(z, n, _) \ - typedef typename mpl::next< \ - BOOST_PP_CAT(iter,BOOST_PP_DEC(n)) \ - >::type BOOST_PP_CAT(iter,n); \ - \ - typedef typename mpl::deref::type BOOST_PP_CAT(spec,n); \ - typedef typename mpl::if_< \ - mpl::and_< \ - mpl::not_ \ - , typename BOOST_PP_CAT(spec,n)::optimized_default \ - > \ - , parameter::aux::maybe \ - , typename BOOST_PP_CAT(spec,n)::type \ - >::type BOOST_PP_CAT(arg,n); \ - typedef typename BOOST_PP_CAT(spec,n)::keyword BOOST_PP_CAT(kw,n); - -#if BOOST_PP_ITERATION_FLAGS() == 1 -template -struct invoker -#elif BOOST_PP_ITERATION_FLAGS() == 2 -template -struct call_invoker -#elif BOOST_PP_ITERATION_FLAGS() == 3 -template -struct init_invoker -#elif BOOST_PP_ITERATION_FLAGS() == 4 -template -struct member_invoker -#endif -{ - typedef typename mpl::begin::type iter0; - typedef typename mpl::deref::type spec0; - typedef typename mpl::if_< - mpl::and_< - mpl::not_ - , typename spec0::optimized_default - > - , parameter::aux::maybe - , typename spec0::type - >::type arg0; - typedef typename spec0::keyword kw0; - - BOOST_PP_REPEAT_FROM_TO(1, N, BOOST_PARAMETER_PY_ARG_TYPES, ~) - - static -#if BOOST_PP_ITERATION_FLAGS() == 3 - T* -#else - R -#endif - execute( -#if BOOST_PP_ITERATION_FLAGS() == 2 || BOOST_PP_ITERATION_FLAGS() == 4 - T& self - , -#endif - BOOST_PP_ENUM_BINARY_PARAMS(N, arg, a) - ) - { - return -#if BOOST_PP_ITERATION_FLAGS() == 1 || BOOST_PP_ITERATION_FLAGS() == 4 - M()( - boost::type() -# if BOOST_PP_ITERATION_FLAGS() == 4 - , self -# endif - , BOOST_PP_ENUM_BINARY_PARAMS(N, parameter::keyword::get() = a) - ); -#elif BOOST_PP_ITERATION_FLAGS() == 2 - self( - BOOST_PP_ENUM_BINARY_PARAMS(N, parameter::keyword::get() = a) - ); -#elif BOOST_PP_ITERATION_FLAGS() == 3 - new T( - BOOST_PP_ENUM_BINARY_PARAMS(N, parameter::keyword::get() = a) - ); -#endif - } -}; - -#undef BOOST_PARAMETER_PY_ARG_TYPES -#undef N - diff -Nru boost1.81-1.81.0/libs/phoenix/include/boost/phoenix/stl/tuple.hpp boost1.81-1.81.0/libs/phoenix/include/boost/phoenix/stl/tuple.hpp --- boost1.81-1.81.0/libs/phoenix/include/boost/phoenix/stl/tuple.hpp 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/phoenix/include/boost/phoenix/stl/tuple.hpp 2022-12-24 13:24:14.129586500 +0000 @@ -110,7 +110,7 @@ namespace placeholders { #define BOOST_PP_LOCAL_LIMITS (1, BOOST_PHOENIX_ARG_LIMIT) #define BOOST_PP_LOCAL_MACRO(N) \ - auto const uarg##N = \ + auto uarg##N = \ boost::phoenix::get_<(N)-1>(boost::phoenix::placeholders::arg1); #include BOOST_PP_LOCAL_ITERATE() } diff -Nru boost1.81-1.81.0/libs/preprocessor/index.html boost1.81-1.81.0/libs/preprocessor/index.html --- boost1.81-1.81.0/libs/preprocessor/index.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/preprocessor/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ - - - - - -Automatic redirection failed, please go to -doc/index.html. - - - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/program_options/doc/autodoc.xml boost1.81-1.81.0/libs/program_options/doc/autodoc.xml --- boost1.81-1.81.0/libs/program_options/doc/autodoc.xml 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/program_options/doc/autodoc.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,592 +0,0 @@ - -
- - - -= 1Allow "--long_name" style. = allow_long << 1Allow "-<single character" style. = allow_short << 1Allow "-" in short options. = allow_dash_for_short << 1Allow "/" in short options. = allow_slash_for_short << 1Allow option parameter in the same token for long option, like in --foo=10 = long_allow_adjacent << 1Allow option parameter in the next token for long options. = long_allow_next << 1Allow option parameter in the same token for short options. = short_allow_adjacent << 1Allow option parameter in the next token for short options. = short_allow_next << 1Allow to merge several short options together, so that "-s -k" become "-sk". All of the options but last should accept no parameter. For example, if "-s" accept a parameter, then "k" will be taken as parameter, not another short option. Dos-style short options cannot be sticky. = allow_sticky << 1Allow abbreviated spellings for long options, if they unambiguously identify long option. No long option name should be prefix of other long option name if guessing is in effect. = allow_guessing << 1Ignore the difference in case for long options. = long_case_insensitive << 1Ignore the difference in case for short options. = (long_case_insensitive | short_case_insensitive)Ignore the difference in case for all options. = short_case_insensitive << 1Allow long options with single option starting character, e.g -foo=10 = (allow_short | short_allow_adjacent | short_allow_next - | allow_long | long_allow_adjacent | long_allow_next - | allow_sticky | allow_guessing - | allow_dash_for_short)The more-or-less traditional unix style. = unix_styleThe default style. Various possible styles of options.There are "long" options, which start with "--" and "short", which start with either "-" or "/". Both kinds can be allowed or disallowed, see allow_long and allow_short. The allowed character for short options is also configurable.Option's value can be specified in the same token as name ("--foo=bar"), or in the next token.It's possible to introduce long options by the same character as short options, see allow_long_disguise.Finally, guessing (specifying only prefix of option) and case insensitive processing are supported. - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
- -boost::eof_iterator< environment_iterator, std::pair< std::string, std::string > > -void - -char ** - - -
-
- -iterator_facade< Derived, const ValueType, forward_traversal_tag >The 'eof_iterator' class is useful for constructing forward iterators in cases where iterator extract data from some source and it's easy to detect 'eof' -- i.e. the situation where there's no data. One apparent example is reading lines from a file.Implementing such iterators using 'iterator_facade' directly would require to create class with three core operation, a couple of constructors. When using 'eof_iterator', the derived class should define only one method to get new value, plus a couple of constructors.The basic idea is that iterator has 'eof' bit. Two iterators are equal only if both have their 'eof' bits set. The 'get' method either obtains the new value or sets the 'eof' bit.Specifically, derived class should define: -A default constructor, which creates iterator with 'eof' bit set. The constructor body should call 'found_eof' method defined here. -Some other constructor. It should initialize some 'data pointer' used in iterator operation and then call 'get'. -The 'get' method. It should operate this way: -look at some 'data pointer' to see if new element is available; if not, it should call 'found_eof'. -extract new element and store it at location returned by the 'value' method. -advance the data pointer. - - - -Essentially, the 'get' method has the functionality of both 'increment' and 'dereference'. It's very good for the cases where data extraction implicitly moves data pointer, like for stream operation. - - - -ValueType &Returns the reference which should be used by derived class to store the next value. -voidShould be called by derived class to indicate that it can't produce next element. - - -void -boolconst eof_iterator & -const ValueType & - - -
-
- - -boost::program_options::error_with_no_option_nameClass thrown when there's ambiguity amoung several possible options. -const std::vector< std::string > & - -const std::vector< std::string > & - - -voidconst std::string &Makes all substitutions using the template - -logic_errorBase class for all errors in the library. - -const std::string & -boost::program_options::error_with_option_nameBase class of unparsable options, when the desired option cannot be identified.It makes no sense to have an option name, when we can't match an option to the parameterHaving this a part of the error_with_option_name hierachy makes error handling a lot easier, even if the name indicates some sort of conceptual dissonance! -voidconst std::string &Does NOT set option name, because no option name makes sense - -const std::string &const std::string &"" - -boost::program_options::errorBase class for most exceptions in the library.Substitutes the values for the parameter name placeholders in the template to create the human readable error messagePlaceholders are surrounded by % signs: example% Poor man's version of boost::formatIf a parameter name is absent, perform default substitutions instead so ugly placeholders are never left in-place.Options are displayed in "canonical" form This is the most unambiguous form of the parsed option name and would correspond to option_description::format_name() i.e. what is shown by print_usage()The "canonical" form depends on whether the option is specified in short or long form, using dashes or slashes or without a prefix (from a configuration file) std::stringtemplate with placeholders - -voidconst std::string &const std::string &Substitute parameter_name->value to create the error message from the error template -voidconst std::string &const std::string &const std::string &If the parameter is missing, then make the from->to substitution instead -voidconst std::string &const std::string &intAdd context to an exception -voidint -voidconst std::string &Overridden in error_with_no_option_name -std::string -voidconst std::string & -const char *Creates the error_message on the fly Currently a thin wrapper for substitute_placeholders() - -const std::string &const std::string &""const std::string &""int0 -gcc says that throw specification on dtor is loosened without this line - -voidconst std::string &Makes all substitutions using the template -voidconst std::string &const std::string & -std::stringConstruct option name in accordance with the appropriate prefix style: i.e. long dash or short slash etc -std::string - -boost::program_options::validation_errorClass thrown if there is an invalid bool value given - -const std::string & -boost::program_options::errorClass thrown when there are programming error related to style - -const std::string & -boost::program_options::invalid_syntaxClass thrown when there are syntax errors in given command line - -kind_tconst std::string &""const std::string &""int0 - -boost::program_options::invalid_syntax -std::stringConvenience functions for backwards compatibility - -const std::string &kind_t - -boost::program_options::validation_errorClass thrown if there is an invalid option value given - -const std::string & -const std::wstring & -boost::program_options::error_with_option_nameClass thrown when there's syntax error either for command line or config file options. See derived children for concrete classes. = 30 - -kind_t -std::stringConvenience functions for backwards compatibility - -kind_tconst std::string &""const std::string &""int0 - - -std::stringkind_tUsed to convert kind_t to a related error text - -boost::program_options::error_with_option_nameClass thrown when there are several occurrences of an option, but user called a method which cannot return them all. - - - -boost::program_options::error_with_option_nameClass thrown when there are several option values, but user called a method which cannot return them all. - - - -boost::program_options::errorClass thrown if config file can not be read - -const char * -boost::program_options::error_with_option_nameClass thrown when a required/mandatory option is missing - -const std::string & - -boost::program_options::errorClass thrown when there are too many positional options. This is a programming error. - - -boost::program_options::error_with_no_option_nameClass thrown when option name is not recognized. - -const std::string &"" - -boost::program_options::error_with_option_nameClass thrown when value of option is incorrect. = 30 - -kind_t - -kind_tconst std::string &""const std::string &""int0 - - -std::stringkind_tUsed to convert kind_t to a related error text - - - - - - - - - - - - - - - - - - - -std::stringconst std::string & - - -
-
- - -Option found in input source. Contains a key and a value. The key, in turn, can be a string (name of an option), or an integer (position in input source) -- in case no name is specified. The latter is only possible for command line. The template parameter specifies the type of char used for storing the option's value. std::stringString key of this option. Intentionally independent of the template parameter. -intPosition key of this option. All options without an explicit name are sequentially numbered starting from 0. If an option has explicit name, 'position_key' is equal to -1. It is possible that both position_key and string_key is specified, in case name is implicitly added. -std::vector< std::basic_string< charT > >Option's value -std::vector< std::basic_string< charT > >The original unchanged tokens this option was created from. -boolTrue if option was not recognized. In that case, 'string_key' and 'value' are results of purely syntactic parsing of source. The original tokens can be recovered from the "original_tokens" member. -boolTrue if string_key has to be handled case insensitive. - - - -const std::string &const std::vector< std::string > & -basic_option< char > -basic_option< wchar_t > - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::program_options::errorClass thrown when duplicate option description is found. - -const std::string & -Describes one possible command line/config file option. There are two kinds of properties of an option. First describe it syntactically and are used only to validate input. Second affect interpretation of the option, for example default value for it or function that should be called when the value is finally known. Routines which perform parsing never use second kind of properties -- they are side effect free. See Also:options_description - - - -match_resultconst std::string &boolboolboolGiven 'option', specified in the input source, returns 'true' if 'option' specifies *this. -const std::string &const std::string &Returns the key that should identify the option, in particular in the variables_map class. The 'option' parameter is the option spelling from the input source. If option name contains '*', returns 'option'. If long name was specified, it's the long name, otherwise it's a short name with prepended '-'. -std::stringint0Returns the canonical name for the option description to enable the user to recognised a matching option. 1) For short options ('-', '/'), returns the short name prefixed. 2) For long options ('–' / '-') returns the first long name prefixed 3) All other cases, returns the first long name (if present) or the short name, unprefixed. -const std::string & -const std::pair< const std::string *, std::size_t > -const std::string &Explanation of this option. -shared_ptr< const value_semantic >Semantic of option's value. -std::stringReturns the option name, formatted suitably for usage message. -std::stringReturns the parameter name and properties, formatted suitably for usage message. - - -const char *const value_semantic *Initializes the object with the passed data.Note: it would be nice to make the second parameter auto_ptr, to explicitly pass ownership. Unfortunately, it's often needed to create objects of types derived from 'value_semantic': options_description d; d.add_options()("a", parameter<int>("n")->default_value(1)); Here, the static type returned by 'parameter' should be derived from value_semantic.Alas, derived->base conversion for auto_ptr does not really work, see http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2000/n1232.pdf http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#84So, we have to use plain old pointers. Besides, users are not expected to use the constructor directly.The 'name' parameter is interpreted by the following rules: -if there's no "," character in 'name', it specifies long name -otherwise, the part before "," specifies long name and the part after -- short name. - - -const char *const value_semantic *const char *Initializes the class with the passed data. - - -option_description &const char * - -A set of option descriptions. This provides convenient interface for adding new option (the add_options) method, and facilities to search for options by name.See here for option adding interface discussion. See Also:option_description - -const unsigned - -voidshared_ptr< option_description >Adds new variable description. Throws duplicate_variable_error if either short or long name matches that of already present one. -options_description &const options_description &Adds a group of option description. This has the same effect as adding all option_descriptions in 'desc' individually, except that output operator will show a separate group. Returns *this. -unsignedFind the maximum width of the option column, including options in groups. -options_description_easy_initReturns an object of implementation-defined type suitable for adding options to options_description. The returned object will have overloaded operator() with parameter type matching 'option_description' constructors. Calling the operator will create new option_description instance and add it. -const option_description &const std::string &boolboolfalseboolfalse -const option_description *const std::string &boolboolfalseboolfalse -const std::vector< shared_ptr< option_description > > & -voidstd::ostream &unsigned0Outputs 'desc' to the specified stream, calling 'f' to output each option_description element. - -unsignedm_default_line_lengthunsignedm_default_line_length/2Creates the instance. -const std::string &unsignedm_default_line_lengthunsignedm_default_line_length/2Creates the instance. The 'caption' parameter gives the name of this 'options_description' instance. Primarily useful for output. The 'description_length' specifies the number of columns that should be reserved for the description text; if the option text encroaches into this, then the description will start on the next line. - -friend BOOST_PROGRAM_OPTIONS_DECL std::ostream &std::ostream &const options_description &Produces a human readable output of 'desc', listing options, their descriptions and allowed parameters. Other options_description instances previously passed to add will be output separately. - -Class which provides convenient creation syntax to option_description. -options_description_easy_init &const char *const char * -options_description_easy_init &const char *const value_semantic * -options_description_easy_init &const char *const value_semantic *const char * - -options_description * - - - - - - - - - - - - - - - - - - - - - -
-
- - -cmdlineCommand line parser.The class allows one to specify all the information needed for parsing and to parse the command line. It is primarily needed to emulate named function parameters -- a regular function with 5 parameters will be hard to use and creating overloads with a smaller number of parameters will be confusing.For the most common case, the function parse_command_line is a better alternative.There are two typedefs -- command_line_parser and wcommand_line_parser, for charT == char and charT == wchar_t cases. -basic_command_line_parser &const options_description &Sets options descriptions to use. -basic_command_line_parser &const positional_options_description &Sets positional options description to use. -basic_command_line_parser &intSets the command line style. -basic_command_line_parser &ext_parserSets the extra parsers. -basic_parsed_options< charT >Parses the options and returns the result of parsing. Throws on error. -basic_command_line_parser &Specifies that unregistered options are allowed and should be passed though. For each command like token that looks like an option but does not contain a recognized name, an instance of basic_option<charT> will be added to result, with 'unrecognized' field set to 'true'. It's possible to collect all unrecognized options with the 'collect_unrecognized' funciton. -basic_command_line_parser &style_parser - -const std::vector< std::basic_string< charT > > &Creates a command line parser for the specified arguments list. The 'args' parameter should not include program name. -intconst charT *constCreates a command line parser for the specified arguments list. The parameters should be the same as passed to 'main'. -wchar_tSpecialization of basic_parsed_options which: -provides convenient conversion from basic_parsed_options<char> -stores the passed char-based options for later use. - -std::vector< basic_option< wchar_t > > -const options_description * -basic_parsed_options< char >Stores UTF8 encoded options that were passed to constructor, to avoid reverse conversion in some cases. -intMainly used for the diagnostic messages in exceptions. The canonical option prefix for the parser which generated these results, depending on the settings for basic_command_line_parser::style() or cmdline::style(). In order of precedence of command_line_style enums: allow_long allow_long_disguise allow_dash_for_short allow_slash_for_short - - -const basic_parsed_options< char > &Constructs wrapped options from options in UTF8 encoding. -Controls if the 'collect_unregistered' function should include positional options, or not. -basic_parsed_options< char > -basic_parsed_options< wchar_t > -Augments basic_parsed_options<wchar_t> with conversion from 'parsed_options' function1< std::pair< std::string, std::string >, const std::string & > -basic_command_line_parser< char > -basic_command_line_parser< wchar_t > - - - - - - - - - -basic_parsed_options< charT >intconst charT *constconst options_description &int0function1< std::pair< std::string, std::string >, const std::string & >ext_parser()Creates instance of 'command_line_parser', passes parameters to it, and returns the result of calling the 'run' method. -BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options< charT >std::basic_istream< charT > &const options_description &boolfalseParse a config file.Read from given stream. -BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options< charT >const char *const options_description &boolfalseParse a config file.Read from file with the given name. The character type is passed to the file stream. -std::vector< std::basic_string< charT > >const std::vector< basic_option< charT > > &enum collect_unrecognized_modeCollects the original tokens for all named options with 'unregistered' flag set. If 'mode' is 'include_positional' also collects all positional options. Returns the vector of origianl tokens for all collected options. -BOOST_PROGRAM_OPTIONS_DECL parsed_optionsconst options_description &const function1< std::string, std::string > &Parse environment.For each environment variable, the 'name_mapper' function is called to obtain the option name. If it returns empty string, the variable is ignored.This is done since naming of environment variables is typically different from the naming of command line options. -BOOST_PROGRAM_OPTIONS_DECL parsed_optionsconst options_description &const std::string &Parse environment.Takes all environment variables which start with 'prefix'. The option name is obtained from variable name by removing the prefix and converting the remaining string into lower case. -BOOST_PROGRAM_OPTIONS_DECL parsed_optionsconst options_description &const char *This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. This function exists to resolve ambiguity between the two above functions when second argument is of 'char*' type. There's implicit conversion to both function1 and string. -BOOST_PROGRAM_OPTIONS_DECL std::vector< std::string >const std::string &const std::string &" \t"const std::string &"'\""const std::string &"\\"BOOST_PROGRAM_OPTIONS_DECL std::vector< std::wstring >const std::wstring &const std::wstring &L" \t"const std::wstring &L"'\""const std::wstring &L"\\"Splits a given string to a collection of single strings which can be passed to command_line_parser. The second parameter is used to specify a collection of possible seperator chars used for splitting. The seperator is defaulted to space " ". Splitting is done in a unix style way, with respect to quotes '"' and escape characters '\' - - - - -
-
- - -Describes positional options.The class allows to guess option names for positional options, which are specified on the command line and are identified by the position. The class uses the information provided by the user to associate a name with every positional option, or tell that no name is known.The primary assumption is that only the relative order of the positional options themselves matters, and that any interleaving ordinary options don't affect interpretation of positional options.The user initializes the class by specifying that first N positional options should be given the name X1, following M options should be given the name X2 and so on. -positional_options_description &const char *intSpecies that up to 'max_count' next positional options should be given the 'name'. The value of '-1' means 'unlimited'. No calls to 'add' can be made after call with 'max_value' equal to '-1'. -unsignedReturns the maximum number of positional options that can be present. Can return (numeric_limits<unsigned>::max)() to indicate unlimited number. -const std::string &unsignedReturns the name that should be associated with positional options at 'position'. Precondition: position < max_total_count() - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -boost::program_options::value_semantic_codecvt_helper< charT >boost::program_options::typed_value_baseClass which handles value of a specific type. -typed_value *const T &Specifies default value, which will be used if none is explicitly specified. The type 'T' should provide operator<< for ostream. -typed_value *const T &const std::string &Specifies default value, which will be used if none is explicitly specified. Unlike the above overload, the type 'T' need not provide operator<< for ostream, but textual representation of default value must be provided by the user. -typed_value *const T &Specifies an implicit value, which will be used if the option is given, but without an adjacent value. Using this implies that an explicit value is optional, -typed_value *const std::string &Specifies the name used to to the value in help message. -typed_value *const T &const std::string &Specifies an implicit value, which will be used if the option is given, but without an adjacent value. Using this implies that an explicit value is optional, but if given, must be strictly adjacent to the option, i.e.: '-ovalue' or '–option=value'. Giving '-o' or '–option' will cause the implicit value to be applied. Unlike the above overload, the type 'T' need not provide operator<< for ostream, but textual representation of default value must be provided by the user. -typed_value *function1< void, const T & >Specifies a function to be called when the final value is determined. -typed_value *Specifies that the value is composing. See the 'is_composing' method for explanation. -typed_value *Specifies that the value can span multiple tokens. -typed_value *Specifies that no tokens may be provided as the value of this option, which means that only presense of the option is significant. For such option to be useful, either the 'validate' function should be specialized, or the 'implicit_value' method should be also used. In most cases, you can use the 'bool_switch' function instead of using this method. -typed_value *Specifies that the value must occur. -std::string -bool -unsigned -unsigned -bool -voidboost::any &const std::vector< std::basic_string< charT > > &Creates an instance of the 'validator' class and calls its operator() to perform the actual conversion. -boolboost::any &If default value was specified via previous call to 'default_value', stores that value into 'value_store'. Returns true if default value was stored. -voidconst boost::any &If an address of variable to store value was specified when creating *this, stores the value there. Otherwise, does nothing. -const std::type_info & - -T *Ctor. The 'store_to' parameter tells where to store the value when it's known. The parameter can be NULL. -Base class for all option that have a fixed type, and are willing to announce this type to the outside world. Any 'value_semantics' for which you want to find out the type can be dynamic_cast-ed to typed_value_base. If conversion succeeds, the 'type' method can be called. -const std::type_info & - - -boost::program_options::value_semantic_codecvt_helper< char >Class which specifies a simple handling of a value: the value will have string type and only one token is allowed. -std::stringReturns the name of the option. The name is only meaningful for automatic help message. -unsignedThe minimum number of tokens for this option that should be present on the command line. -unsignedThe maximum number of tokens for this option that should be present on the command line. -boolReturns true if values from different sources should be composed. Otherwise, value from the first source is used and values from other sources are discarded. -boolReturns true if value must be given. Non-optional value -voidboost::any &const std::vector< std::string > &If 'value_store' is already initialized, or new_tokens has more than one elements, throws. Otherwise, assigns the first string from 'new_tokens' to 'value_store', without any modifications. -boolboost::any &Does nothing. -voidconst boost::any &Does nothing. - -boolfalse -Class which specifies how the option's value is to be parsed and converted into C++ types. -std::stringReturns the name of the option. The name is only meaningful for automatic help message. -unsignedThe minimum number of tokens for this option that should be present on the command line. -unsignedThe maximum number of tokens for this option that should be present on the command line. -boolReturns true if values from different sources should be composed. Otherwise, value from the first source is used and values from other sources are discarded. -boolReturns true if value must be given. Non-optional value -voidboost::any &const std::vector< std::string > &boolParses a group of tokens that specify a value of option. Stores the result in 'value_store', using whatever representation is desired. May be be called several times if value of the same option is specified more than once. -boolboost::any &Called to assign default value to 'value_store'. Returns true if default value is assigned, and false if no default value exists. -voidconst boost::any &Called when final value of an option is determined. - - -Helper class which perform necessary character conversions in the 'parse' method and forwards the data further. charboost::program_options::value_semanticHelper conversion class for values that accept ascii strings as input. Overrides the 'parse' method and defines new 'xparse' method taking std::string. Depending on whether input to parse is ascii or UTF8, will pass it to xparse unmodified, or with UTF8->ascii conversion. -voidboost::any &const std::vector< std::string > &boolParses a group of tokens that specify a value of option. Stores the result in 'value_store', using whatever representation is desired. May be be called several times if value of the same option is specified more than once. - - -voidboost::any &const std::vector< std::string > & - -wchar_tboost::program_options::value_semanticHelper conversion class for values that accept ascii strings as input. Overrides the 'parse' method and defines new 'xparse' method taking std::wstring. Depending on whether input to parse is ascii or UTF8, will recode input to Unicode, or pass it unmodified. -voidboost::any &const std::vector< std::string > &boolParses a group of tokens that specify a value of option. Stores the result in 'value_store', using whatever representation is desired. May be be called several times if value of the same option is specified more than once. - - -voidboost::any &const std::vector< std::wstring > & - - - - -typed_value< T > *typed_value< T > *T *Creates a typed_value<T> instance. This function is the primary method to create value_semantic instance for a specific type, which can later be passed to 'option_description' constructor. The second overload is used when it's additionally desired to store the value of option into program variable. - -typed_value< T, wchar_t > *typed_value< T, wchar_t > *T *Creates a typed_value<T> instance. This function is the primary method to create value_semantic instance for a specific type, which can later be passed to 'option_description' constructor. - -BOOST_PROGRAM_OPTIONS_DECL typed_value< bool > *BOOST_PROGRAM_OPTIONS_DECL typed_value< bool > *bool *Works the same way as the 'value<bool>' function, but the created value_semantic won't accept any explicit value. So, if the option is present on the command line, the value will be 'true'. - - - - - - - - - - - - - -
-
- - -Implements string->string mapping with convenient value casting facilities. -const variable_value &const std::string &Obtains the value of variable 'name', from *this and possibly from the chain of variable maps. -if there's no value in *this. -if there's next variable map, returns value from it -otherwise, returns empty value - - -if there's defaulted value -if there's next variable map, which has a non-defaulted value, return that -otherwise, return value from *this - - -if there's a non-defaulted value, returns it. - - -voidabstract_variables_map *Sets next variable map, which will be used to find variables not found in *this. - - -const abstract_variables_map * - - -const variable_value &const std::string &Returns value of variable 'name' stored in *this, or empty value otherwise. - -Results of parsing an input source. The primary use of this class is passing information from parsers component to value storage component. This class does not makes much sense itself. - -const options_description *int0 -Class holding value of option. Contains details about how the value is set and allows to conveniently obtain the value. -friend BOOST_PROGRAM_OPTIONS_DECL voidconst basic_parsed_options< char > &variables_map &boolStores in 'm' all options that are defined in 'options'. If 'm' already has a non-defaulted value of an option, that value is not changed, even if 'options' specify some value. - - -const T &If stored value if of type T, returns that value. Otherwise, throws boost::bad_any_cast exception. -T &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -boolReturns true if no value is stored. -boolReturns true if the value was not explicitly given, but has default value. -const boost::any &Returns the contained value. -boost::any &Returns the contained value. - - -const boost::any &bool -boost::program_options::abstract_variables_mapstd::map< std::string, variable_value >Concrete variables map which store variables in real map.This class is derived from std::map<std::string, variable_value>, so you can use all map operators to examine its content. -const variable_value &const std::string & -void -void - - -const abstract_variables_map * - -const variable_value &const std::string &Implementation of abstract_variables_map::get which does 'find' in *this. - - -friend BOOST_PROGRAM_OPTIONS_DECL voidconst basic_parsed_options< char > &variables_map &boolStores in 'm' all options that are defined in 'options'. If 'm' already has a non-defaulted value of an option, that value is not changed, even if 'options' specify some value. - -BOOST_PROGRAM_OPTIONS_DECL voidconst basic_parsed_options< char > &variables_map &boolfalseStores in 'm' all options that are defined in 'options'. If 'm' already has a non-defaulted value of an option, that value is not changed, even if 'options' specify some value. -BOOST_PROGRAM_OPTIONS_DECL voidconst basic_parsed_options< wchar_t > &variables_map &Stores in 'm' all options that are defined in 'options'. If 'm' already has a non-defaulted value of an option, that value is not changed, even if 'options' specify some value. This is wide character variant. -BOOST_PROGRAM_OPTIONS_DECL voidvariables_map &Runs all 'notify' function for options in 'm'. - - - - - - - - - - - - - - - - - - -
-
-The version of the source interface. The value will be incremented whenever a change is made which might cause compilation errors for existing code. - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/program_options/doc/index.html boost1.81-1.81.0/libs/program_options/doc/index.html --- boost1.81-1.81.0/libs/program_options/doc/index.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/program_options/doc/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ - - - - - -Automatic redirection failed, please go to -../../../doc/html/program_options.html
-

© Copyright Beman Dawes, 2001

-

Distributed under the Boost Software License, Version 1.0. (See accompanying -file LICENSE_1_0.txt or copy -at www.boost.org/LICENSE_1_0.txt)

- - diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/basic_reduce.hpp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/basic_reduce.hpp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/basic_reduce.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/basic_reduce.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -// Copyright 2005 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -#ifndef BOOST_PARALLEL_BASIC_REDUCE_HPP -#define BOOST_PARALLEL_BASIC_REDUCE_HPP - -namespace boost { namespace parallel { - -/** Reduction operation used to reconcile differences between local - * and remote values for a particular key in a property map. The - * type @c T is typically the @c value_type of the property - * map. This basic reduction returns a default-constructed @c T as - * the default value and always resolves to the remote value. - */ -template -struct basic_reduce -{ - BOOST_STATIC_CONSTANT(bool, non_default_resolver = false); - - /// Returns a default-constructed T object - template - T operator()(const Key&) const { return T(); } - - /// Returns the remote value - template - const T& operator()(const Key&, const T&, const T& remote) const - { return remote; } -}; - -} } // end namespace boost::parallel - -#endif // BOOST_PARALLEL_BASIC_REDUCE_HPP diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/caching_property_map.hpp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/caching_property_map.hpp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/caching_property_map.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/caching_property_map.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -// Copyright 2004 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_PARALLEL_CACHING_PROPERTY_MAP_HPP -#define BOOST_PARALLEL_CACHING_PROPERTY_MAP_HPP - -#include - -namespace boost { - -// This probably doesn't belong here -template -inline void local_put(dummy_property_map, const Key&, const Value&) {} - -namespace parallel { - -/** Property map that caches values placed in it but does not - * broadcast values to remote processors. This class template is - * meant as an adaptor for @ref distributed_property_map that - * suppresses communication in the event of a remote @c put operation - * by mapping it to a local @c put operation. - * - * @todo Find a better name for @ref caching_property_map - */ -template -class caching_property_map -{ -public: - typedef typename property_traits::key_type key_type; - typedef typename property_traits::value_type value_type; - typedef typename property_traits::reference reference; - typedef typename property_traits::category category; - - explicit caching_property_map(const PropertyMap& property_map) - : property_map(property_map) {} - - PropertyMap& base() { return property_map; } - const PropertyMap& base() const { return property_map; } - - template - void set_reduce(const Reduce& reduce) - { property_map.set_reduce(reduce); } - - void reset() { property_map.reset(); } - -#if 0 - reference operator[](const key_type& key) const - { - return property_map[key]; - } -#endif - -private: - PropertyMap property_map; -}; - -template -inline typename caching_property_map::value_type -get(const caching_property_map& pm, const Key& key) -{ return get(pm.base(), key); } - -template -inline void -local_put(const caching_property_map& pm, const Key& key, - const Value& value) -{ local_put(pm.base(), key, value); } - -template -inline void -cache(const caching_property_map& pm, const Key& key, - const Value& value) -{ cache(pm.base(), key, value); } - -template -inline void -put(const caching_property_map& pm, const Key& key, - const Value& value) -{ local_put(pm.base(), key, value); } - -template -inline caching_property_map -make_caching_property_map(const PropertyMap& pm) -{ return caching_property_map(pm); } - -} } // end namespace boost::parallel - -#endif // BOOST_PARALLEL_CACHING_PROPERTY_MAP_HPP diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/detail/untracked_pair.hpp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/detail/untracked_pair.hpp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/detail/untracked_pair.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/detail/untracked_pair.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -// Copyright (C) 2007 Matthias Troyer -// -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// -// This file contains helper data structures for use in transmitting -// properties. The basic idea is to optimize away any storage for the -// properties when no properties are specified. -#ifndef BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP -#define BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP - -#include -#include // for std::pair -#include - -namespace boost { namespace parallel { namespace detail { - -/** - * This structure is like std::pair, with the only difference - * that tracking in the serialization library is turned off. - */ - -template -struct untracked_pair : public std::pair -{ - untracked_pair() {} - - untracked_pair(const T& t, const U& u) - : std::pair(t,u) {} - - template - untracked_pair(std::pair const& p) - : std::pair(p) {} -}; - -template -inline untracked_pair -make_untracked_pair(const T& t, const U& u) -{ - return untracked_pair(t,u); -} - -} } } // end namespace boost::parallel::detail - -namespace boost { namespace mpi { - -template -struct is_mpi_datatype > - : is_mpi_datatype > {}; - -} } // end namespace boost::mpi - -namespace boost { namespace serialization { - -// pair -template -inline void serialize( - Archive & ar, - boost::parallel::detail::untracked_pair & p, - const unsigned int /* file_version */ -){ - ar & boost::serialization::make_nvp("first", p.first); - ar & boost::serialization::make_nvp("second", p.second); -} - -template -struct is_bitwise_serializable< - boost::parallel::detail::untracked_pair > - : is_bitwise_serializable > {}; - -template -struct implementation_level > - : mpl::int_ {} ; - -template -struct tracking_level > - : mpl::int_ {} ; - -} } // end namespace boost::serialization - -#endif // BOOST_PARALLEL_DETAIL_UNTRACKED_PAIR_HPP diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/global_index_map.hpp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/global_index_map.hpp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/global_index_map.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/global_index_map.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -// Copyright 2005 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_PARALLEL_GLOBAL_INDEX_MAP_HPP -#define BOOST_PARALLEL_GLOBAL_INDEX_MAP_HPP - -#include -#include -#include - -namespace boost { namespace parallel { - -template -class global_index_map -{ -public: - typedef typename property_traits::key_type key_type; - typedef typename property_traits::value_type value_type; - typedef value_type reference; - typedef readable_property_map_tag category; - - template - global_index_map(ProcessGroup pg, value_type num_local_indices, - IndexMap index_map, GlobalMap global) - : index_map(index_map), global(global) - { - typedef typename ProcessGroup::process_id_type process_id_type; - starting_index.reset(new std::vector(num_processes(pg) + 1)); - send(pg, 0, 0, num_local_indices); - synchronize(pg); - - // Populate starting_index in all processes - if (process_id(pg) == 0) { - (*starting_index)[0] = 0; - for (process_id_type src = 0; src < num_processes(pg); ++src) { - value_type n; - receive(pg, src, 0, n); - (*starting_index)[src + 1] = (*starting_index)[src] + n; - } - for (process_id_type dest = 1; dest < num_processes(pg); ++dest) - send(pg, dest, 1, &starting_index->front(), num_processes(pg)); - synchronize(pg); - } else { - synchronize(pg); - receive(pg, 0, 1, &starting_index->front(), num_processes(pg)); - } - } - - friend inline value_type - get(const global_index_map& gim, const key_type& x) - { - using boost::get; - return (*gim.starting_index)[get(gim.global, x).first] - + get(gim.index_map, x); - } - -private: - shared_ptr > starting_index; - IndexMap index_map; - GlobalMap global; -}; - -} } // end namespace boost::parallel - -#endif // BOOST_PARALLEL_GLOBAL_INDEX_MAP_HPP diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/impl/distributed_property_map.ipp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/impl/distributed_property_map.ipp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/impl/distributed_property_map.ipp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/impl/distributed_property_map.ipp 1970-01-01 00:00:00.000000000 +0000 @@ -1,423 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Nick Edmonds -// Andrew Lumsdaine -#include -#include -#include -#include -#include - -namespace boost { namespace parallel { - -template -template -PBGL_DISTRIB_PMAP -::distributed_property_map(const ProcessGroup& pg, const GlobalMap& global, - const StorageMap& pm, const Reduce& reduce) - : data(new data_t(pg, global, pm, reduce, Reduce::non_default_resolver)) -{ - typedef handle_message Handler; - - data->ghost_cells.reset(new ghost_cells_type()); - data->reset = &data_t::template do_reset; - data->process_group.replace_handler(Handler(data, reduce)); - data->process_group.template get_receiver() - ->setup_triggers(data->process_group); -} - -template -PBGL_DISTRIB_PMAP::~distributed_property_map() { } - -template -template -void -PBGL_DISTRIB_PMAP::set_reduce(const Reduce& reduce) -{ - typedef handle_message Handler; - data->process_group.replace_handler(Handler(data, reduce)); - Handler* handler = data->process_group.template get_receiver(); - BOOST_ASSERT(handler); - handler->setup_triggers(data->process_group); - data->get_default_value = reduce; - data->has_default_resolver = Reduce::non_default_resolver; - int model = data->model; - data->reset = &data_t::template do_reset; - set_consistency_model(model); -} - -template -void PBGL_DISTRIB_PMAP::prune_ghost_cells() const -{ - if (data->max_ghost_cells == 0) - return; - - while (data->ghost_cells->size() > data->max_ghost_cells) { - // Evict the last ghost cell - - if (data->model & cm_flush) { - // We need to flush values when we evict them. - boost::parallel::detail::untracked_pair const& victim - = data->ghost_cells->back(); - send(data->process_group, get(data->global, victim.first).first, - property_map_put, victim); - } - - // Actually remove the ghost cell - data->ghost_cells->pop_back(); - } -} - -template -typename PBGL_DISTRIB_PMAP::value_type& -PBGL_DISTRIB_PMAP::cell(const key_type& key, bool request_if_missing) const -{ - // Index by key - ghost_cells_key_index_type const& key_index - = data->ghost_cells->template get<1>(); - - // Search for the ghost cell by key, and project back to the sequence - iterator ghost_cell - = data->ghost_cells->template project<0>(key_index.find(key)); - if (ghost_cell == data->ghost_cells->end()) { - value_type value; - if (data->has_default_resolver) - // Since we have a default resolver, use it to create a default - // value for this ghost cell. - value = data->get_default_value(key); - else if (request_if_missing) - // Request the actual value of this key from its owner - send_oob_with_reply(data->process_group, get(data->global, key).first, - property_map_get, key, value); - else - value = value_type(); - - // Create a ghost cell containing the new value - ghost_cell - = data->ghost_cells->push_front(std::make_pair(key, value)).first; - - // If we need to, prune the ghost cells - if (data->max_ghost_cells > 0) - prune_ghost_cells(); - } else if (data->max_ghost_cells > 0) - // Put this cell at the beginning of the MRU list - data->ghost_cells->relocate(data->ghost_cells->begin(), ghost_cell); - - return const_cast(ghost_cell->second); -} - -template -template -void -PBGL_DISTRIB_PMAP -::handle_message::operator()(process_id_type source, int tag) -{ - BOOST_ASSERT(false); -} - -template -template -void -PBGL_DISTRIB_PMAP::handle_message:: -handle_put(int /*source*/, int /*tag*/, - const boost::parallel::detail::untracked_pair& req, trigger_receive_context) -{ - using boost::get; - - shared_ptr data(data_ptr); - - owner_local_pair p = get(data->global, req.first); - BOOST_ASSERT(p.first == process_id(data->process_group)); - - detail::maybe_put(data->storage, p.second, - reduce(req.first, - get(data->storage, p.second), - req.second)); -} - -template -template -typename PBGL_DISTRIB_PMAP::value_type -PBGL_DISTRIB_PMAP::handle_message:: -handle_get(int source, int /*tag*/, const key_type& key, - trigger_receive_context) -{ - using boost::get; - - shared_ptr data(data_ptr); - BOOST_ASSERT(data); - - owner_local_pair p = get(data->global, key); - return get(data->storage, p.second); -} - -template -template -void -PBGL_DISTRIB_PMAP::handle_message:: -handle_multiget(int source, int tag, const std::vector& keys, - trigger_receive_context) -{ - shared_ptr data(data_ptr); - BOOST_ASSERT(data); - - typedef boost::parallel::detail::untracked_pair key_value; - std::vector results; - std::size_t n = keys.size(); - results.reserve(n); - - using boost::get; - - for (std::size_t i = 0; i < n; ++i) { - local_key_type local_key = get(data->global, keys[i]).second; - results.push_back(key_value(keys[i], get(data->storage, local_key))); - } - send(data->process_group, source, property_map_multiget_reply, results); -} - -template -template -void -PBGL_DISTRIB_PMAP::handle_message:: -handle_multiget_reply - (int source, int tag, - const std::vector >& msg, - trigger_receive_context) -{ - shared_ptr data(data_ptr); - BOOST_ASSERT(data); - - // Index by key - ghost_cells_key_index_type const& key_index - = data->ghost_cells->template get<1>(); - - std::size_t n = msg.size(); - for (std::size_t i = 0; i < n; ++i) { - // Search for the ghost cell by key, and project back to the sequence - iterator position - = data->ghost_cells->template project<0>(key_index.find(msg[i].first)); - - if (position != data->ghost_cells->end()) - const_cast(position->second) = msg[i].second; - } -} - -template -template -void -PBGL_DISTRIB_PMAP::handle_message:: -handle_multiput - (int source, int tag, - const std::vector >& values, - trigger_receive_context) -{ - using boost::get; - - shared_ptr data(data_ptr); - BOOST_ASSERT(data); - - std::size_t n = values.size(); - for (std::size_t i = 0; i < n; ++i) { - local_key_type local_key = values[i].first; - value_type local_value = get(data->storage, local_key); - detail::maybe_put(data->storage, values[i].first, - reduce(values[i].first, - local_value, - values[i].second)); - } -} - -template -template -void -PBGL_DISTRIB_PMAP::handle_message:: -setup_triggers(process_group_type& pg) -{ - using boost::parallel::simple_trigger; - - simple_trigger(pg, property_map_put, this, &handle_message::handle_put); - simple_trigger(pg, property_map_get, this, &handle_message::handle_get); - simple_trigger(pg, property_map_multiget, this, - &handle_message::handle_multiget); - simple_trigger(pg, property_map_multiget_reply, this, - &handle_message::handle_multiget_reply); - simple_trigger(pg, property_map_multiput, this, - &handle_message::handle_multiput); -} - -template -void -PBGL_DISTRIB_PMAP -::on_synchronize::operator()() -{ - int stage=0; // we only get called at the start now - shared_ptr data(data_ptr); - BOOST_ASSERT(data); - - // Determine in which stage backward consistency messages should be sent. - int backward_stage = -1; - if (data->model & cm_backward) { - if (data->model & cm_flush) backward_stage = 1; - else backward_stage = 0; - } - - // Flush results in first stage - if (stage == 0 && data->model & cm_flush) - data->flush(); - - // Backward consistency - if (stage == backward_stage && !(data->model & (cm_clear | cm_reset))) - data->refresh_ghost_cells(); - - // Optionally clear results - if (data->model & cm_clear) - data->clear(); - - // Optionally reset results - if (data->model & cm_reset) { - if (data->reset) ((*data).*data->reset)(); - } -} - - -template -void -PBGL_DISTRIB_PMAP::set_consistency_model(int model) -{ - data->model = model; - - bool need_on_synchronize = (model != cm_forward); - - // Backward consistency is a two-stage process. - if (model & cm_backward) { - // For backward consistency to work, we absolutely cannot throw - // away any ghost cells. - data->max_ghost_cells = 0; - } - - // attach the on_synchronize handler. - if (need_on_synchronize) - data->process_group.replace_on_synchronize_handler(on_synchronize(data)); -} - -template -void -PBGL_DISTRIB_PMAP::set_max_ghost_cells(std::size_t max_ghost_cells) -{ - if ((data->model & cm_backward) && max_ghost_cells > 0) - boost::throw_exception(std::runtime_error("distributed_property_map::set_max_ghost_cells: " - "cannot limit ghost-cell usage with a backward " - "consistency model")); - - if (max_ghost_cells == 1) - // It is not safe to have only 1 ghost cell; the cell() method - // will fail. - max_ghost_cells = 2; - - data->max_ghost_cells = max_ghost_cells; - prune_ghost_cells(); -} - -template -void PBGL_DISTRIB_PMAP::clear() -{ - data->clear(); -} - -template -void PBGL_DISTRIB_PMAP::data_t::clear() -{ - ghost_cells->clear(); -} - -template -void PBGL_DISTRIB_PMAP::reset() -{ - if (data->reset) ((*data).*data->reset)(); -} - -template -void PBGL_DISTRIB_PMAP::flush() -{ - data->flush(); -} - -template -void PBGL_DISTRIB_PMAP::data_t::refresh_ghost_cells() -{ - using boost::get; - - std::vector > keys; - keys.resize(num_processes(process_group)); - - // Collect the set of keys for which we will request values - for (iterator i = ghost_cells->begin(); i != ghost_cells->end(); ++i) - keys[get(global, i->first).first].push_back(i->first); - - // Send multiget requests to each of the other processors - typedef typename ProcessGroup::process_size_type process_size_type; - process_size_type n = num_processes(process_group); - process_id_type id = process_id(process_group); - for (process_size_type p = (id + 1) % n ; p != id ; p = (p + 1) % n) { - if (!keys[p].empty()) - send(process_group, p, property_map_multiget, keys[p]); - } -} - -template -void PBGL_DISTRIB_PMAP::data_t::flush() -{ - using boost::get; - - int n = num_processes(process_group); - std::vector > > values; - values.resize(n); - - // Collect all of the flushed values - for (iterator i = ghost_cells->begin(); i != ghost_cells->end(); ++i) { - std::pair g = get(global, i->first); - values[g.first].push_back(std::make_pair(g.second, i->second)); - } - - // Transmit flushed values - for (int p = 0; p < n; ++p) { - if (!values[p].empty()) - send(process_group, p, property_map_multiput, values[p]); - } -} - -template -void PBGL_DISTRIB_PMAP::do_synchronize() -{ - if (data->model & cm_backward) { - synchronize(data->process_group); - return; - } - - // Request refreshes of the values of our ghost cells - data->refresh_ghost_cells(); - - // Allows all of the multigets to get to their destinations - synchronize(data->process_group); - - // Allows all of the multiget responses to get to their destinations - synchronize(data->process_group); -} - -template -template -void PBGL_DISTRIB_PMAP::data_t::do_reset() -{ - Resolver* resolver = get_default_value.template target(); - BOOST_ASSERT(resolver); - - for (iterator i = ghost_cells->begin(); i != ghost_cells->end(); ++i) - const_cast(i->second) = (*resolver)(i->first); -} - -} } // end namespace boost::parallel diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/local_property_map.hpp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/local_property_map.hpp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/local_property_map.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/local_property_map.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -// Copyright (C) 2004-2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -// The placement of this #include probably looks very odd relative to -// the #ifndef/#define pair below. However, this placement is -// extremely important to allow the various property map headers to be -// included in any order. -#include - -#ifndef BOOST_PARALLEL_LOCAL_PROPERTY_MAP_HPP -#define BOOST_PARALLEL_LOCAL_PROPERTY_MAP_HPP - -#include - -namespace boost { - /** Property map that accesses an underlying, local property map - * using a subset of the global keys. - */ - template - class local_property_map - { - typedef typename property_traits::value_type owner_local_pair; - - public: - typedef ProcessGroup process_group_type; - typedef typename property_traits::value_type value_type; - typedef typename property_traits::key_type key_type; - typedef typename property_traits::reference reference; - typedef typename property_traits::category category; - - local_property_map() { } - - local_property_map(const ProcessGroup& process_group, - const GlobalMap& global, const StorageMap& storage) - : process_group_(process_group), global_(global), storage(storage) { } - - reference operator[](const key_type& key) - { - owner_local_pair p = get(global_, key); - BOOST_ASSERT(p.first == process_id(process_group_)); - return storage[p.second]; - } - - GlobalMap& global() const { return global_; } - StorageMap& base() const { return storage; } - - ProcessGroup& process_group() { return process_group_; } - const ProcessGroup& process_group() const { return process_group_; } - - private: - ProcessGroup process_group_; - mutable GlobalMap global_; - mutable StorageMap storage; - }; - - template - inline - typename local_property_map::reference - get(const local_property_map& pm, - typename local_property_map::key_type - const & key) - - { - typename property_traits::value_type p = get(pm.global(), key); - return get(pm.base(), p.second); - } - - template - inline void - put(const local_property_map& pm, - typename local_property_map - ::key_type const & key, - typename local_property_map - ::value_type const& v) - { - typename property_traits::value_type p = get(pm.global(), key); - BOOST_ASSERT(p.first == process_id(pm.process_group())); - put(pm.base(), p.second, v); - } -} // end namespace boost -#endif // BOOST_PARALLEL_LOCAL_PROPERTY_MAP_HPP diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/parallel_property_maps.hpp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/parallel_property_maps.hpp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/parallel_property_maps.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/parallel_property_maps.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,231 +0,0 @@ -// (C) Copyright Jeremy Siek 1999-2001. -// Copyright (C) 2006 Trustees of Indiana University -// Authors: Douglas Gregor and Jeremy Siek - -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org/libs/property_map for documentation. - -#ifndef BOOST_PROPERTY_MAP_PARALLEL_PROPERTY_MAPS_HPP -#define BOOST_PROPERTY_MAP_PARALLEL_PROPERTY_MAPS_HPP - -// Parallel property maps moved over from -// as part of refactoring out all parallel code from sequential property map -// library. - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace boost { -/** Distributed iterator property map. - * - * This specialization of @ref iterator_property_map builds a - * distributed iterator property map given the local index maps - * generated by distributed graph types that automatically have index - * properties. - * - * This specialization is useful when creating external distributed - * property maps via the same syntax used to create external - * sequential property maps. - */ -template -class iterator_property_map - , - ValueType, Reference> - : public parallel::distributed_property_map - > -{ - typedef iterator_property_map local_iterator_map; - - typedef parallel::distributed_property_map inherited; - - typedef local_property_map - index_map_type; - typedef iterator_property_map self_type; - -public: - iterator_property_map() { } - - iterator_property_map(RandomAccessIterator cc, const index_map_type& id) - : inherited(id.process_group(), id.global(), - local_iterator_map(cc, id.base())) { } -}; - -/** Distributed iterator property map. - * - * This specialization of @ref iterator_property_map builds a - * distributed iterator property map given a distributed index - * map. Only the local portion of the distributed index property map - * is utilized. - * - * This specialization is useful when creating external distributed - * property maps via the same syntax used to create external - * sequential property maps. - */ -template -class iterator_property_map< - RandomAccessIterator, - parallel::distributed_property_map, - ValueType, Reference - > - : public parallel::distributed_property_map - > -{ - typedef iterator_property_map local_iterator_map; - - typedef parallel::distributed_property_map inherited; - - typedef parallel::distributed_property_map - index_map_type; - -public: - iterator_property_map() { } - - iterator_property_map(RandomAccessIterator cc, const index_map_type& id) - : inherited(id.process_group(), id.global(), - local_iterator_map(cc, id.base())) { } -}; - -namespace parallel { -// Generate an iterator property map with a specific kind of ghost -// cells -template -distributed_property_map > -make_iterator_property_map(RandomAccessIterator cc, - local_property_map index_map) -{ - typedef distributed_property_map< - ProcessGroup, GlobalMap, - iterator_property_map > - result_type; - return result_type(index_map.process_group(), index_map.global(), - make_iterator_property_map(cc, index_map.base())); -} - -} // end namespace parallel - -/** Distributed safe iterator property map. - * - * This specialization of @ref safe_iterator_property_map builds a - * distributed iterator property map given the local index maps - * generated by distributed graph types that automatically have index - * properties. - * - * This specialization is useful when creating external distributed - * property maps via the same syntax used to create external - * sequential property maps. - */ -template -class safe_iterator_property_map - , - ValueType, Reference> - : public parallel::distributed_property_map - > -{ - typedef safe_iterator_property_map local_iterator_map; - - typedef parallel::distributed_property_map inherited; - - typedef local_property_map index_map_type; - -public: - safe_iterator_property_map() { } - - safe_iterator_property_map(RandomAccessIterator cc, std::size_t n, - const index_map_type& id) - : inherited(id.process_group(), id.global(), - local_iterator_map(cc, n, id.base())) { } -}; - -/** Distributed safe iterator property map. - * - * This specialization of @ref safe_iterator_property_map builds a - * distributed iterator property map given a distributed index - * map. Only the local portion of the distributed index property map - * is utilized. - * - * This specialization is useful when creating external distributed - * property maps via the same syntax used to create external - * sequential property maps. - */ -template -class safe_iterator_property_map< - RandomAccessIterator, - parallel::distributed_property_map, - ValueType, Reference> - : public parallel::distributed_property_map - > -{ - typedef safe_iterator_property_map local_iterator_map; - - typedef parallel::distributed_property_map inherited; - - typedef parallel::distributed_property_map - index_map_type; - -public: - safe_iterator_property_map() { } - - safe_iterator_property_map(RandomAccessIterator cc, std::size_t n, - const index_map_type& id) - : inherited(id.process_group(), id.global(), - local_iterator_map(cc, n, id.base())) { } -}; - -} - -#include -#include - -#endif /* BOOST_PROPERTY_MAP_PARALLEL_PROPERTY_MAPS_HPP */ diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/process_group.hpp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/process_group.hpp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/process_group.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/process_group.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,97 +0,0 @@ -// Copyright 2004 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine -#ifndef BOOST_PROPERTY_MAP_PARALLEL_PROCESS_GROUP_HPP -#define BOOST_PROPERTY_MAP_PARALLEL_PROCESS_GROUP_HPP - -#include -#include - -namespace boost { namespace parallel { - -/** - * A special type used as a flag to a process group constructor that - * indicates that the copy of a process group will represent a new - * distributed data structure. - */ -struct attach_distributed_object { }; - -/** - * Describes the context in which a trigger is being invoked to - * receive a message. - */ -enum trigger_receive_context { - /// No trigger is active at this time. - trc_none, - /// The trigger is being invoked during synchronization, at the end - /// of a superstep. - trc_in_synchronization, - /// The trigger is being invoked as an "early" receive of a message - /// that was sent through the normal "send" operations to be - /// received by the end of the superstep, but the process group sent - /// the message earlier to clear its buffers. - trc_early_receive, - /// The trigger is being invoked for an out-of-band message, which - /// must be handled immediately. - trc_out_of_band, - /// The trigger is being invoked for an out-of-band message, which - /// must be handled immediately and has alredy been received by - /// an MPI_IRecv call. - trc_irecv_out_of_band -}; - -// Process group tags -struct process_group_tag {}; -struct linear_process_group_tag : virtual process_group_tag {}; -struct messaging_process_group_tag : virtual process_group_tag {}; -struct immediate_process_group_tag : virtual messaging_process_group_tag {}; -struct bsp_process_group_tag : virtual messaging_process_group_tag {}; -struct batch_process_group_tag : virtual messaging_process_group_tag {}; -struct locking_process_group_tag : virtual process_group_tag {}; -struct spawning_process_group_tag : virtual process_group_tag {}; - -struct process_group_archetype -{ - typedef int process_id_type; -}; - -void wait(process_group_archetype&); -void synchronize(process_group_archetype&); -int process_id(const process_group_archetype&); -int num_processes(const process_group_archetype&); - -template void send(process_group_archetype&, int, int, const T&); - -template -process_group_archetype::process_id_type -receive(const process_group_archetype& pg, - process_group_archetype::process_id_type source, int tag, T& value); - -template -std::pair -receive(const process_group_archetype& pg, int tag, T values[], std::size_t n); - -template -std::pair -receive(const process_group_archetype& pg, - process_group_archetype::process_id_type source, int tag, T values[], - std::size_t n); - -} } // end namespace boost::parallel - -namespace boost { namespace graph { namespace distributed { - using boost::parallel::trigger_receive_context; - using boost::parallel::trc_early_receive; - using boost::parallel::trc_out_of_band; - using boost::parallel::trc_irecv_out_of_band; - using boost::parallel::trc_in_synchronization; - using boost::parallel::trc_none; - using boost::parallel::attach_distributed_object; -} } } // end namespace boost::graph::distributed - -#endif // BOOST_PROPERTY_MAP_PARALLEL_PROCESS_GROUP_HPP diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/simple_trigger.hpp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/simple_trigger.hpp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/simple_trigger.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/simple_trigger.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -// Copyright (C) 2007 Douglas Gregor - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// This file contains a simplification of the "trigger" method for -// process groups. The simple trigger handles the common case where -// the handler associated with a trigger is a member function bound to -// a particular pointer. - -#ifndef BOOST_PROPERTY_MAP_PARALLEL_SIMPLE_TRIGGER_HPP -#define BOOST_PROPERTY_MAP_PARALLEL_SIMPLE_TRIGGER_HPP - -#include - -namespace boost { namespace parallel { - -namespace detail { - -/** - * INTERNAL ONLY - * - * The actual function object that bridges from the normal trigger - * interface to the simplified interface. This is the equivalent of - * bind(pmf, self, _1, _2, _3, _4), but without the compile-time - * overhead of bind. - */ -template -class simple_trigger_t -{ -public: - simple_trigger_t(Class* self, - Result (Class::*pmf)(int, int, const T&, - trigger_receive_context)) - : self(self), pmf(pmf) { } - - Result - operator()(int source, int tag, const T& data, - trigger_receive_context context) const - { - return (self->*pmf)(source, tag, data, context); - } - -private: - Class* self; - Result (Class::*pmf)(int, int, const T&, trigger_receive_context); -}; - -} // end namespace detail - -/** - * Simplified trigger interface that reduces the amount of code - * required to connect a process group trigger to a handler that is - * just a bound member function. - * - * INTERNAL ONLY - */ -template -inline void -simple_trigger(ProcessGroup& pg, int tag, Class* self, - void (Class::*pmf)(int source, int tag, const T& data, - trigger_receive_context context), int) -{ - pg.template trigger(tag, - detail::simple_trigger_t(self, pmf)); -} - -/** - * Simplified trigger interface that reduces the amount of code - * required to connect a process group trigger with a reply to a - * handler that is just a bound member function. - * - * INTERNAL ONLY - */ -template -inline void -simple_trigger(ProcessGroup& pg, int tag, Class* self, - Result (Class::*pmf)(int source, int tag, const T& data, - trigger_receive_context context), long) -{ - pg.template trigger_with_reply - (tag, detail::simple_trigger_t(self, pmf)); -} - -/** - * Simplified trigger interface that reduces the amount of code - * required to connect a process group trigger to a handler that is - * just a bound member function. - */ -template -inline void -simple_trigger(ProcessGroup& pg, int tag, Class* self, - Result (Class::*pmf)(int source, int tag, const T& data, - trigger_receive_context context)) -{ - // We pass 0 (an int) to help VC++ disambiguate calls to simple_trigger - // with Result=void. - simple_trigger(pg, tag, self, pmf, 0); -} - -} } // end namespace boost::parallel - -namespace boost { namespace graph { namespace parallel { using boost::parallel::simple_trigger; } } } - -#endif // BOOST_PROPERTY_MAP_PARALLEL_SIMPLE_TRIGGER_HPP diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/unsafe_serialize.hpp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/unsafe_serialize.hpp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/unsafe_serialize.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/unsafe_serialize.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -// Copyright (C) 2006 The Trustees of Indiana University. - -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Authors: Douglas Gregor -// Andrew Lumsdaine - -// This file contains the "unsafe_serialize" routine, which transforms -// types they may not be serializable (such as void*) into -// serializable equivalents. -#ifndef BOOST_PROPERTY_MAP_UNSAFE_SERIALIZE_HPP -#define BOOST_PROPERTY_MAP_UNSAFE_SERIALIZE_HPP - -#include -#include -#include -#include -#include -#include -#include -#include - -BOOST_IS_BITWISE_SERIALIZABLE(void*) -namespace boost { namespace mpi { - template<> struct is_mpi_datatype : mpl::true_ { }; -} } // end namespace boost::mpi - -namespace boost { - typedef mpl::if_c<(sizeof(int) == sizeof(void*)), - int, - mpl::if_c<(sizeof(long) == sizeof(void*)), - long, - mpl::if_c<(sizeof(void*) <= sizeof(boost::intmax_t)), - boost::intmax_t, - void>::type - >::type - >::type ptr_serialize_type; - - BOOST_STATIC_ASSERT ((!boost::is_void::value)); - - template inline T& unsafe_serialize(T& x) { return x; } - - inline ptr_serialize_type& unsafe_serialize(void*& x) - { return reinterpret_cast(x); } - - // Force Boost.MPI to serialize a void* like a ptr_serialize_type - namespace mpi { - template<> inline MPI_Datatype get_mpi_datatype(void* const& x) - { - return get_mpi_datatype(); - } - } - - template - struct unsafe_pair - { - unsafe_pair() { } - unsafe_pair(const T& t, const U& u) : first(t), second(u) { } - unsafe_pair(const std::pair& p) : first(p.first), second(p.second) { } - T first; - U second; - - template - void serialize(Archiver& ar, const unsigned /*version*/) - { - ar & unsafe_serialize(first) & unsafe_serialize(second); - } - }; - - template - bool operator<(unsafe_pair const& x, unsafe_pair const& y) - { - return std::make_pair(x.first, x.second) < - std::make_pair(y.first, y.second); - } - -} // end namespace boost - -#endif // BOOST_PROPERTY_MAP_UNSAFE_SERIALIZE_HPP diff -Nru boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/vector_property_map.hpp boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/vector_property_map.hpp --- boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/vector_property_map.hpp 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/property_map/include/boost/property_map/parallel/vector_property_map.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,104 +0,0 @@ -// Copyright (C) Vladimir Prus 2003. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -// -// See http://www.boost.org/libs/graph/vector_property_map.html for -// documentation. -// - -#ifndef BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04 -#define BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04 - -#include -#include -#include -#include -#include - -namespace boost { - -/** Distributed vector property map. - * - * This specialization of @ref vector_property_map builds a - * distributed vector property map given the local index maps - * generated by distributed graph types that automatically have index - * properties. - * - * This specialization is useful when creating external distributed - * property maps via the same syntax used to create external - * sequential property maps. - */ -template -class vector_property_map > - : public parallel::distributed_property_map< - ProcessGroup, GlobalMap, vector_property_map > -{ - typedef vector_property_map local_iterator_map; - - typedef parallel::distributed_property_map inherited; - - typedef local_property_map index_map_type; - -public: - vector_property_map(const index_map_type& index = index_map_type()) - : inherited(index.process_group(), index.global(), - local_iterator_map(index.base())) { } - - vector_property_map(unsigned inital_size, - const index_map_type& index = index_map_type()) - : inherited(index.process_group(), index.global(), - local_iterator_map(inital_size, index.base())) { } -}; - -/** Distributed vector property map. - * - * This specialization of @ref vector_property_map builds a - * distributed vector property map given the local index maps - * generated by distributed graph types that automatically have index - * properties. - * - * This specialization is useful when creating external distributed - * property maps via the same syntax used to create external - * sequential property maps. - */ -template -class vector_property_map< - T, - parallel::distributed_property_map< - ProcessGroup, - GlobalMap, - StorageMap - > - > - : public parallel::distributed_property_map< - ProcessGroup, GlobalMap, vector_property_map > -{ - typedef vector_property_map local_iterator_map; - - typedef parallel::distributed_property_map inherited; - - typedef parallel::distributed_property_map - index_map_type; - -public: - vector_property_map(const index_map_type& index = index_map_type()) - : inherited(index.process_group(), index.global(), - local_iterator_map(index.base())) { } - - vector_property_map(unsigned inital_size, - const index_map_type& index = index_map_type()) - : inherited(index.process_group(), index.global(), - local_iterator_map(inital_size, index.base())) { } -}; - -} - -#endif // BOOST_PROPERTY_MAP_PARALLEL_VECTOR_PROPERTY_MAP_HPP_VP_2003_03_04 diff -Nru boost1.81-1.81.0/libs/python/doc/index.html boost1.81-1.81.0/libs/python/doc/index.html --- boost1.81-1.81.0/libs/python/doc/index.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/python/doc/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ - - - - - - - Automatic redirection failed, click this - link  
-

© Copyright Stefan Seefeld, 2015

-

Distributed under the Boost Software License, Version 1.0. (See accompanying - file http://www.boost.org/LICENSE_1_0.txt)

- - diff -Nru boost1.81-1.81.0/libs/python/doc/internals.html boost1.81-1.81.0/libs/python/doc/internals.html --- boost1.81-1.81.0/libs/python/doc/internals.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/python/doc/internals.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,186 +0,0 @@ - - - - - - -Boost.Python Internals Boost - - - - - - - - diff -Nru boost1.81-1.81.0/libs/python/include/boost/python/detail/python22_fixed.h boost1.81-1.81.0/libs/python/include/boost/python/detail/python22_fixed.h --- boost1.81-1.81.0/libs/python/include/boost/python/detail/python22_fixed.h 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/python/include/boost/python/detail/python22_fixed.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,152 +0,0 @@ -// This file is a modified version of Python 2.2/2.2.1 Python.h. As -// such it is: -// -// Copyright (c) 2001, 2002 Python Software Foundation; All Rights -// Reserved -// -// boostinspect:nolicense (don't complain about the lack of a Boost license) -// -// Changes from the original: -// 1. #includes for Python 2.2.1 -// 2. Provides missing extern "C" wrapper for "iterobject.h" and "descrobject.h". -// - -// Changes marked with "Boost.Python modification" -#ifndef Py_PYTHON_H -#define Py_PYTHON_H -/* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */ - - -/* Enable compiler features; switching on C lib defines doesn't work - here, because the symbols haven't necessarily been defined yet. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -/* Forcing SUSv2 compatibility still produces problems on some - platforms, True64 and SGI IRIX begin two of them, so for now the - define is switched off. */ -#if 0 -#ifndef _XOPEN_SOURCE -# define _XOPEN_SOURCE 500 -#endif -#endif - -/* Include nearly all Python header files */ - -#include "patchlevel.h" -#include "pyconfig.h" - -#ifdef HAVE_LIMITS_H -#include -#endif - -/* pyconfig.h may or may not define DL_IMPORT */ -#ifndef DL_IMPORT /* declarations for DLL import/export */ -#define DL_IMPORT(RTYPE) RTYPE -#endif -#ifndef DL_EXPORT /* declarations for DLL import/export */ -#define DL_EXPORT(RTYPE) RTYPE -#endif - -#if defined(__sgi) && defined(WITH_THREAD) && !defined(_SGI_MP_SOURCE) -#define _SGI_MP_SOURCE -#endif - -#include -#ifndef NULL -# error "Python.h requires that stdio.h define NULL." -#endif - -#include -#include -#ifdef HAVE_STDLIB_H -#include -#endif -#if PY_MICRO_VERSION == 1 // Boost.Python modification: emulate Python 2.2 -#ifdef HAVE_UNISTD_H -#include -#endif -#endif // Boost.Python modification: emulate Python 2.2 - -/* CAUTION: Build setups should ensure that NDEBUG is defined on the - * compiler command line when building Python in release mode; else - * assert() calls won't be removed. - */ -#include - -#include "pyport.h" - -#include "pymem.h" - -#include "object.h" -#include "objimpl.h" - -#include "pydebug.h" - -#include "unicodeobject.h" -#include "intobject.h" -#include "longobject.h" -#include "floatobject.h" -#ifndef WITHOUT_COMPLEX -#include "complexobject.h" -#endif -#include "rangeobject.h" -#include "stringobject.h" -#include "bufferobject.h" -#include "tupleobject.h" -#include "listobject.h" -#include "dictobject.h" -#include "methodobject.h" -#include "moduleobject.h" -#include "funcobject.h" -#include "classobject.h" -#include "fileobject.h" -#include "cobject.h" -#include "traceback.h" -#include "sliceobject.h" -#include "cellobject.h" -extern "C" { // Boost.Python modification: provide missing extern "C" -#include "iterobject.h" -#include "descrobject.h" -} // Boost.Python modification: provide missing extern "C" -#include "weakrefobject.h" - -#include "codecs.h" -#include "pyerrors.h" - -#include "pystate.h" - -#include "modsupport.h" -#include "pythonrun.h" -#include "ceval.h" -#include "sysmodule.h" -#include "intrcheck.h" -#include "import.h" - -#include "abstract.h" - -#define PyArg_GetInt(v, a) PyArg_Parse((v), "i", (a)) -#define PyArg_NoArgs(v) PyArg_Parse(v, "") - -/* Convert a possibly signed character to a nonnegative int */ -/* XXX This assumes characters are 8 bits wide */ -#ifdef __CHAR_UNSIGNED__ -#define Py_CHARMASK(c) (c) -#else -#define Py_CHARMASK(c) ((c) & 0xff) -#endif - -#include "pyfpe.h" - -/* These definitions must match corresponding definitions in graminit.h. - There's code in compile.c that checks that they are the same. */ -#define Py_single_input 256 -#define Py_file_input 257 -#define Py_eval_input 258 - -#ifdef HAVE_PTH -/* GNU pth user-space thread support */ -#include -#endif -#endif /* !Py_PYTHON_H */ diff -Nru boost1.81-1.81.0/libs/random/doc/reference.xml boost1.81-1.81.0/libs/random/doc/reference.xml --- boost1.81-1.81.0/libs/random/doc/reference.xml 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/random/doc/reference.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,3037 +0,0 @@ - -Headers
-
-
- - -An instantiation of class template additive_combine_engine models a pseudo-random number generator . It combines two multiplicative linear_congruential_engine number generators, i.e. those with c = 0. It is described in
"Efficient and Portable Combined Random Number Generators", Pierre L'Ecuyer, Communications of the ACM, Vol. 31, No. 6, June 1988, pp. 742-749, 774
The template parameters MLCG1 and MLCG2 shall denote two different linear_congruential_engine number generators, each with c = 0. Each invocation returns a random number X(n) := (MLCG1(n) - MLCG2(n)) mod (m1 - 1), where m1 denotes the modulus of MLCG1.
MLCG1 -MLCG2 -MLCG1::result_type -const bool - -constexpr result_typeReturns the smallest value that the generator can produce -constexpr result_typeReturns the largest value that the generator can produce - - -voidSeeds an additive_combine_engine using the default seeds of the two base generators. -voidresult_typeSeeds an additive_combine_engine, using seed as the seed for both base generators. -voidSeedSeq &Seeds an additive_combine_engine, using seq to seed both base generators.See the warning on the corresponding constructor. -voidtypename MLCG1::result_typetypename MLCG2::result_typeSeeds an additive_combine generator, using seed1 and seed2 as the seeds to the first and second base generators, respectively. -voidIt &ItSeeds an additive_combine_engine with values from the range defined by the input iterators first and last. first will be modified to point to the element after the last one used.Throws: std::invalid_argument if the input range is too small.Exception Safety: Basic -result_typeReturns the next value of the generator. -voidIterIterFills a range with random values -voidboost::uintmax_tAdvances the state of the generator by z. - -Constructs an additive_combine_engine using the default constructors of the two base generators. -result_typeConstructs an additive_combine_engine, using seed as the constructor argument for both base generators. -SeedSeq &Constructs an additive_combine_engine, using seq as the constructor argument for both base generators. The semantics of this function are liable to change. A seed_seq is designed to generate all the seeds in one shot, but this seeds the two base engines independantly and probably ends up giving the same sequence to both. -typename MLCG1::result_typetypename MLCG2::result_typeConstructs an additive_combine_engine, using seed1 and seed2 as the constructor argument to the first and second base generators, respectively. -It &ItContructs an additive_combine_engine with values from the range defined by the input iterators first and last. first will be modified to point to the element after the last one used.Throws: std::invalid_argument if the input range is too small.Exception Safety: Basic - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const additive_combine_engine &Writes the state of an additive_combine_engine to a std::ostream. The textual representation of an additive_combine_engine is the textual representation of the first base generator followed by the textual representation of the second base generator. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const additive_combine_engine &Reads the state of an additive_combine_engine from a std::istream. -friend boolconst additive_combine_engine &const additive_combine_engine &Returns: true iff the two additive_combine_engines will produce the same sequence of values. -friend boolconst additive_combine_engine &const additive_combine_engine &Returns: true iff the two additive_combine_engines will produce different sequences of values. - -
The specialization ecuyer1988 was suggested in
"Efficient and Portable Combined Random Number Generators", Pierre L'Ecuyer, Communications of the ACM, Vol. 31, No. 6, June 1988, pp. 742-749, 774
additive_combine_engine< linear_congruential_engine< uint32_t, 40014, 0, 2147483563 >, linear_congruential_engine< uint32_t, 40692, 0, 2147483399 >>
- -
-
-
-
- - -Instantiations of class template bernoulli_distribution model a random distribution . Such a random distribution produces bool values distributed with probabilities P(true) = p and P(false) = 1-p. p is the parameter of the distribution. bernoulli_distribution - -RealTypeReturns the p parameter of the distribution. - -RealType0.5Constructs the parameters of the distribution.Requires: 0 <= p <= 1 - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes the parameters to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const param_type &Reads the parameters from a std::istream. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are equal. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are different. - -int -bool - -RealTypeReturns: The "p" parameter of the distribution. -boolReturns the smallest value that the distribution can produce. -boolReturns the largest value that the distribution can produce. -param_typeReturns the parameters of the distribution. -voidconst param_type &Sets the parameters of the distribution. -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. -boolEngine &Returns: a random variate distributed according to the bernoulli_distribution . -boolEngine &const param_type &Returns: a random variate distributed according to the bernoulli_distribution with parameters specified by param. - -const RealType &0.5Constructs a bernoulli_distribution object. p is the parameter of the distribution.Requires: 0 <= p <= 1 -const param_type &Constructs bernoulli_distribution from its parameters - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const bernoulli_distribution &Writes the parameters of the distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const bernoulli_distribution &Reads the parameters of the distribution from a std::istream. -friend boolconst bernoulli_distribution &const bernoulli_distribution &Returns true iff the two distributions will produce identical sequences of values given equal generators. -friend boolconst bernoulli_distribution &const bernoulli_distribution &Returns true iff the two distributions will produce different sequences of values given equal generators. - - - - -
-
- - -The beta distribution is a real-valued distribution which produces values in the range [0, 1]. It has two parameters, alpha and beta.It has $\displaystyle p(x) = \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha, \beta)}$$\displaystyle p(x) = \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha, \beta)}$. beta_distribution - -RealTypeReturns the "alpha" parameter of the distribtuion. -RealTypeReturns the "beta" parameter of the distribution. - -RealType1.0RealType1.0Constructs a param_type from the "alpha" and "beta" parameters of the distribution.Requires: alpha > 0, beta > 0 - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes a param_type to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const param_type &Reads a param_type from a std::istream. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are the same. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are the different. - -RealType -RealType - -RealTypeURNG &Returns a random variate distributed according to the beta distribution. -RealTypeURNG &const param_type &Returns a random variate distributed accordint to the beta distribution with parameters specified by param. -RealTypeReturns the "alpha" parameter of the distribution. -RealTypeReturns the "beta" parameter of the distribution. -RealTypeReturns the smallest value that the distribution can produce. -RealTypeReturns the largest value that the distribution can produce. -param_typeReturns the parameters of the distribution. -voidconst param_type &Sets the parameters of the distribution. -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. - -RealType1.0RealType1.0Constructs an beta_distribution from its "alpha" and "beta" parameters.Requires: alpha > 0, beta > 0 -const param_type &Constructs an beta_distribution from its parameters. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const beta_distribution &Writes an beta_distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const beta_distribution &Reads an beta_distribution from a std::istream. -friend boolconst beta_distribution &const beta_distribution &Returns true if the two instances of beta_distribution will return identical sequences of values given equal generators. -friend boolconst beta_distribution &const beta_distribution &Returns true if the two instances of beta_distribution will return different sequences of values given equal generators. - - - - -
-
- - -The binomial distribution is an integer valued distribution with two parameters, t and p. The values of the distribution are within the range [0,t].The distribution function is $\displaystyle P(k) = {t \choose k}p^k(1-p)^{t-k}$$\displaystyle P(k) = {t \choose k}p^k(1-p)^{t-k}$.The algorithm used is the BTRD algorithm described in
"The generation of binomial random variates", Wolfgang Hormann, Journal of Statistical Computation and Simulation, Volume 46, Issue 1 & 2 April 1993 , pages 101 - 110
binomial_distribution - -IntTypeReturns the t parameter of the distribution. -RealTypeReturns the p parameter of the distribution. - -IntType1RealType0.5Construct a param_type object. t and p are the parameters of the distribution.Requires: t >=0 && 0 <= p <= 1 - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes the parameters of the distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &param_type &Reads the parameters of the distribution from a std::istream. -friend boolconst param_type &const param_type &Returns true if the parameters have the same values. -friend boolconst param_type &const param_type &Returns true if the parameters have different values. - -IntType -RealType - -IntTypeURNG &Returns a random variate distributed according to the binomial distribution. -IntTypeURNG &const param_type &Returns a random variate distributed according to the binomial distribution with parameters specified by param. -IntTypeReturns the t parameter of the distribution. -RealTypeReturns the p parameter of the distribution. -IntTypeReturns the smallest value that the distribution can produce. -IntTypeReturns the largest value that the distribution can produce. -param_typeReturns the parameters of the distribution. -voidconst param_type &Sets parameters of the distribution. -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. - -IntType1RealType0.5Construct a binomial_distribution object. t and p are the parameters of the distribution.Requires: t >=0 && 0 <= p <= 1 -const param_type &Construct an binomial_distribution object from the parameters. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const binomial_distribution &Writes the parameters of the distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &binomial_distribution &Reads the parameters of the distribution from a std::istream. -friend boolconst binomial_distribution &const binomial_distribution &Returns true if the two distributions will produce the same sequence of values, given equal generators. -friend boolconst binomial_distribution &const binomial_distribution &Returns true if the two distributions could produce different sequences of values, given equal generators. - -
-
-
-
-
- - -The cauchy distribution is a continuous distribution with two parameters, median and sigma.It has $\displaystyle p(x) = \frac{\sigma}{\pi(\sigma^2 + (x-m)^2)}$$\displaystyle p(x) = \frac{\sigma}{\pi(\sigma^2 + (x-m)^2)}$ cauchy_distribution - -RealTypeReturns the median of the distribution. -RealTypeReturns the sigma parameter of the distribution. -RealTypeReturns the median of the distribution. -RealTypeReturns the sigma parameter of the distribution. - -RealType0.0RealType1.0Constructs the parameters of the cauchy distribution. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes the parameters to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const param_type &Reads the parameters from a std::istream. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are equal. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are different. - -RealType -RealType - -RealTypeReturns: the "median" parameter of the distribution -RealTypeReturns: the "sigma" parameter of the distribution -RealTypeReturns: the "median" parameter of the distribution -RealTypeReturns: the "sigma" parameter of the distribution -RealTypeReturns the smallest value that the distribution can produce. -RealTypeReturns the largest value that the distribution can produce. -param_type -voidconst param_type & -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. -result_typeEngine &Returns: A random variate distributed according to the cauchy distribution. -result_typeEngine &const param_type &Returns: A random variate distributed according to the cauchy distribution with parameters specified by param. - -RealType0.0RealType1.0Constructs a cauchy_distribution with the paramters median and sigma. -const param_type &Constructs a cauchy_distribution from it's parameters. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const cauchy_distribution &Writes the distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const cauchy_distribution &Reads the distribution from a std::istream. -friend boolconst cauchy_distribution &const cauchy_distribution &Returns true if the two distributions will produce identical sequences of values, given equal generators. -friend boolconst cauchy_distribution &const cauchy_distribution &Returns true if the two distributions may produce different sequences of values, given equal generators. - - - - -
-
- - -The chi squared distribution is a real valued distribution with one parameter, n. The distribution produces values > 0.The distribution function is $\displaystyle P(x) = \frac{x^{(n/2)-1}e^{-x/2}}{\Gamma(n/2)2^{n/2}}$$\displaystyle P(x) = \frac{x^{(n/2)-1}e^{-x/2}}{\Gamma(n/2)2^{n/2}}$. chi_squared_distribution - -RealTypeReturns the n parameter of the distribution. - -RealType1Construct a param_type object. n is the parameter of the distribution.Requires: t >=0 && 0 <= p <= 1 - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes the parameters of the distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &param_type &Reads the parameters of the distribution from a std::istream. -friend boolconst param_type &const param_type &Returns true if the parameters have the same values. -friend boolconst param_type &const param_type &Returns true if the parameters have different values. - -RealType -RealType - -RealTypeURNG &Returns a random variate distributed according to the chi squared distribution. -RealTypeURNG &const param_type &Returns a random variate distributed according to the chi squared distribution with parameters specified by param. -RealTypeReturns the n parameter of the distribution. -RealTypeReturns the smallest value that the distribution can produce. -RealTypeReturns the largest value that the distribution can produce. -param_typeReturns the parameters of the distribution. -voidconst param_type &Sets parameters of the distribution. -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. - -RealType1Construct a chi_squared_distribution object. n is the parameter of the distribution.Requires: t >=0 && 0 <= p <= 1 -const param_type &Construct an chi_squared_distribution object from the parameters. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const chi_squared_distribution &Writes the parameters of the distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &chi_squared_distribution &Reads the parameters of the distribution from a std::istream. -friend boolconst chi_squared_distribution &const chi_squared_distribution &Returns true if the two distributions will produce the same sequence of values, given equal generators. -friend boolconst chi_squared_distribution &const chi_squared_distribution &Returns true if the two distributions could produce different sequences of values, given equal generators. - - - - -
-
- - -The class template discard_block_engine is a model of pseudo-random number generator . It modifies another generator by discarding parts of its output. Out of every block of p results, the first r will be returned and the rest discarded.Requires: 0 < p <= r UniformRandomNumberGenerator -base_type::result_type -const std::size_t -const std::size_t -const bool -const std::size_t -const std::size_t - -voiddefault seeds the underlying generator. -voidseed_typeSeeds the underlying generator with s. -voidSeedSeq &Seeds the underlying generator with seq. -voidIt &ItSeeds the underlying generator with first and last. -const base_type &Returns the underlying engine. -result_typeReturns the next value of the generator. -voidboost::uintmax_t -voidItIt - -Uses the default seed for the base generator. -const base_type &Constructs a new discard_block_engine with a copy of rng. -base_type &&Constructs a new discard_block_engine with rng. -seed_typeCreates a new discard_block_engine and seeds the underlying generator with value -SeedSeq &Creates a new discard_block_engine and seeds the underlying generator with seq -It &ItCreates a new discard_block_engine and seeds the underlying generator with first and last. - -constexpr result_typeReturns the smallest value that the generator can produce. This is the same as the minimum of the underlying generator. -constexpr result_typeReturns the largest value that the generator can produce. This is the same as the maximum of the underlying generator. - - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const discard_block_engine &Writes a discard_block_engine to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &discard_block_engine &Reads a discard_block_engine from a std::istream. -friend boolconst discard_block_engine &const discard_block_engine &Returns true if the two generators will produce identical sequences. -friend boolconst discard_block_engine &const discard_block_engine &Returns true if the two generators will produce different sequences. - - - - -
-
- - -The class discrete_distribution models a random distribution . It produces integers in the range [0, n) with the probability of producing each value is specified by the parameters of the distribution. discrete_distribution - -std::vector< WeightType >Returns a vector containing the probabilities of each possible value of the distribution. - -Constructs a param_type object, representing a distribution with $p(0) = 1$$p(0) = 1$ and $p(k|k>0) = 0$$p(k|k>0) = 0$. -IterIterIf first == last, equivalent to the default constructor. Otherwise, the values of the range represent weights for the possible values of the distribution. -const std::initializer_list< WeightType > &If wl.size() == 0, equivalent to the default constructor. Otherwise, the values of the initializer_list represent weights for the possible values of the distribution. -const Range &If the range is empty, equivalent to the default constructor. Otherwise, the elements of the range represent weights for the possible values of the distribution. -std::size_tdoubledoubleFuncIf nw is zero, equivalent to the default constructor. Otherwise, the range of the distribution is [0, nw), and the weights are found by calling fw with values evenly distributed between $\mbox{xmin} + \delta/2$$\mbox{xmin} + \delta/2$ and $\mbox{xmax} - \delta/2$$\mbox{xmax} - \delta/2$, where $\delta = (\mbox{xmax} - \mbox{xmin})/\mbox{nw}$$\delta = (\mbox{xmax} - \mbox{xmin})/\mbox{nw}$. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes the parameters to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const param_type &Reads the parameters from a std::istream. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are the same. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are different. - -WeightType -IntType - -IntTypeURNG &Returns a value distributed according to the parameters of the discrete_distribution. -IntTypeURNG &const param_type &Returns a value distributed according to the parameters specified by param. -result_typeReturns the smallest value that the distribution can produce. -result_typeReturns the largest value that the distribution can produce. -std::vector< WeightType >Returns a vector containing the probabilities of each value of the distribution. For example, givendiscrete_distribution<> dist = { 1, 4, 5 }; -std::vector<double> p = dist.param(); -the vector, p will contain {0.1, 0.4, 0.5}.If WeightType is integral, then the weights will be returned unchanged. -param_typeReturns the parameters of the distribution. -voidconst param_type &Sets the parameters of the distribution. -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. - -Creates a new discrete_distribution object that has $p(0) = 1$$p(0) = 1$ and $p(i|i>0) = 0$$p(i|i>0) = 0$. -IterIterConstructs a discrete_distribution from an iterator range. If first == last, equivalent to the default constructor. Otherwise, the values of the range represent weights for the possible values of the distribution. -std::initializer_list< WeightType >Constructs a discrete_distribution from a std::initializer_list. If the initializer_list is empty, equivalent to the default constructor. Otherwise, the values of the initializer_list represent weights for the possible values of the distribution. For example, given the distributiondiscrete_distribution<> dist{1, 4, 5}; -The probability of a 0 is 1/10, the probability of a 1 is 2/5, the probability of a 2 is 1/2, and no other values are possible. -const Range &Constructs a discrete_distribution from a Boost.Range range. If the range is empty, equivalent to the default constructor. Otherwise, the values of the range represent weights for the possible values of the distribution. -std::size_tdoubledoubleFuncConstructs a discrete_distribution that approximates a function. If nw is zero, equivalent to the default constructor. Otherwise, the range of the distribution is [0, nw), and the weights are found by calling fw with values evenly distributed between $\mbox{xmin} + \delta/2$$\mbox{xmin} + \delta/2$ and $\mbox{xmax} - \delta/2$$\mbox{xmax} - \delta/2$, where $\delta = (\mbox{xmax} - \mbox{xmin})/\mbox{nw}$$\delta = (\mbox{xmax} - \mbox{xmin})/\mbox{nw}$. -const param_type &Constructs a discrete_distribution from its parameters. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const discrete_distribution &Writes a distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const discrete_distribution &Reads a distribution from a std::istream -friend boolconst discrete_distribution &const discrete_distribution &Returns true if the two distributions will return the same sequence of values, when passed equal generators. -friend boolconst discrete_distribution &const discrete_distribution &Returns true if the two distributions may return different sequences of values, when passed equal generators. - - - - -
-
- - -The exponential distribution is a model of random distribution with a single parameter lambda.It has $\displaystyle p(x) = \lambda e^{-\lambda x}$$\displaystyle p(x) = \lambda e^{-\lambda x}$The implementation uses the "ziggurat" algorithm, as described in
"The Ziggurat Method for Generating Random Variables", George Marsaglia and Wai Wan Tsang, Journal of Statistical Software Volume 5, Number 8 (2000), 1-7.
exponential_distribution - -RealTypeReturns the lambda parameter of the distribution. - -RealType1.0Constructs parameters with a given lambda.Requires: lambda > 0 - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes the parameters to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const param_type &Reads the parameters from a std::istream. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are equal. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are different. - -RealType -RealType - -RealTypeReturns the lambda parameter of the distribution. -RealTypeReturns the smallest value that the distribution can produce. -RealTypeReturns the largest value that the distribution can produce. -param_typeReturns the parameters of the distribution. -voidconst param_type &Sets the parameters of the distribution. -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. -result_typeEngine &Returns a random variate distributed according to the exponential distribution. -result_typeEngine &const param_type &Returns a random variate distributed according to the exponential distribution with parameters specified by param. - -RealType1.0Constructs an exponential_distribution with a given lambda.Requires: lambda > 0 -const param_type &Constructs an exponential_distribution from its parameters - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const exponential_distribution &Writes the distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const exponential_distribution &Reads the distribution from a std::istream. -friend boolconst exponential_distribution &const exponential_distribution &Returns true iff the two distributions will produce identical sequences of values given equal generators. -friend boolconst exponential_distribution &const exponential_distribution &Returns true iff the two distributions will produce different sequences of values given equal generators. - -
-
-
-
-
- - -The extreme value distribution is a real valued distribution with two parameters a and b.It has $\displaystyle p(x) = \frac{1}{b}e^{\frac{a-x}{b} - e^\frac{a-x}{b}}$$\displaystyle p(x) = \frac{1}{b}e^{\frac{a-x}{b} - e^\frac{a-x}{b}}$. extreme_value_distribution - -RealTypeReturns the "a" parameter of the distribtuion. -RealTypeReturns the "b" parameter of the distribution. - -RealType1.0RealType1.0Constructs a param_type from the "a" and "b" parameters of the distribution.Requires: b > 0 - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes a param_type to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const param_type &Reads a param_type from a std::istream. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are the same. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are the different. - -RealType -RealType - -RealTypeURNG &Returns a random variate distributed according to the extreme_value_distribution. -RealTypeURNG &const param_type &Returns a random variate distributed accordint to the extreme value distribution with parameters specified by param. -RealTypeReturns the "a" parameter of the distribution. -RealTypeReturns the "b" parameter of the distribution. -RealTypeReturns the smallest value that the distribution can produce. -RealTypeReturns the largest value that the distribution can produce. -param_typeReturns the parameters of the distribution. -voidconst param_type &Sets the parameters of the distribution. -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. - -RealType1.0RealType1.0Constructs an extreme_value_distribution from its "a" and "b" parameters.Requires: b > 0 -const param_type &Constructs an extreme_value_distribution from its parameters. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const extreme_value_distribution &Writes an extreme_value_distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const extreme_value_distribution &Reads an extreme_value_distribution from a std::istream. -friend boolconst extreme_value_distribution &const extreme_value_distribution &Returns true if the two instances of extreme_value_distribution will return identical sequences of values given equal generators. -friend boolconst extreme_value_distribution &const extreme_value_distribution &Returns true if the two instances of extreme_value_distribution will return different sequences of values given equal generators. - - - - -
-
- - -Instantiations of class template faure_engine model a quasi-random number generator . The faure_engine uses the algorithm described in
Henri Faure, Discrepance de suites associees a un systeme de numeration (en dimension s), Acta Arithmetica, Volume 41, 1982, pages 337-351.
Bennett Fox, Algorithm 647: Implementation and Relative Efficiency of Quasirandom Sequence Generators, ACM Transactions on Mathematical Software, Volume 12, Number 4, December 1986, pages 362-376.
In the following documentation X denotes the concrete class of the template faure_engine returning objects of type RealType, u and v are the values of X.Some member functions may throw exceptions of type std::bad_alloc.
RealType - -friend boolconst faure_engine &const faure_engine &Returns true if the two generators will produce identical sequences of outputs. -friend boolconst faure_engine &const faure_engine &Returns true if the two generators will produce different sequences of outputs. -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const faure_engine &Writes the textual representation of the generator to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const faure_engine &Reads the textual representation of the generator from a std::istream. - - -constexpr result_typeReturns: Tight lower bound on the set of values returned by operator().Throws: nothing. -constexpr result_typeReturns: Tight upper bound on the set of values returned by operator().Throws: nothing. - - -voidSeqSizeT0Effects: Effectively sets the quasi-random number generator state to the init-th vector in the s-dimensional quasi-random domain, where s == X::dimension(). X u, v; -for(int i = 0; i < N; ++i) - for( std::size_t j = 0; j < u.dimension(); ++j ) - u(); -v.seed(N); -assert(u() == v()); - Throws: bad_alloc. -std::size_tReturns: The dimension of of the quasi-random domain.Throws: nothing. -result_typeReturns: Returns a successive element of an s-dimensional (s = X::dimension()) vector at each invocation. When all elements are exhausted, X::operator() begins anew with the starting element of a subsequent s-dimensional vector.Throws: range_error. -voidboost::uintmax_tEffects: Advances *this state as if z consecutive X::operator() invocations were executed. X u = v; -for(int i = 0; i < N; ++i) - u(); -v.discard(N); -assert(u() == v()); -Throws: range_error. Throws: bad_alloc. - -std::size_tEffects: Constructs the s-dimensional default Faure quasi-random number generator.Throws: bad_alloc, invalid_argument. -
This specialization of faure_engine supports up to 1117 dimensions. - -However, it is possible to provide your own prime table to faure_engine should the default one be insufficient. faure_engine< double, boost::uint_least64_t, default_faure_prime_table > - -
-
-
-
- - -The Fisher F distribution is a real valued distribution with two parameters m and n.It has $\displaystyle p(x) = \frac{\Gamma((m+n)/2)}{\Gamma(m/2)\Gamma(n/2)} \left(\frac{m}{n}\right)^{m/2} x^{(m/2)-1} \left(1+\frac{mx}{n}\right)^{-(m+n)/2} $$\displaystyle p(x) = \frac{\Gamma((m+n)/2)}{\Gamma(m/2)\Gamma(n/2)} \left(\frac{m}{n}\right)^{m/2} x^{(m/2)-1} \left(1+\frac{mx}{n}\right)^{-(m+n)/2} $. fisher_f_distribution - -RealTypeReturns the "m" parameter of the distribtuion. -RealTypeReturns the "n" parameter of the distribution. - -RealType1.0RealType1.0Constructs a param_type from the "m" and "n" parameters of the distribution.Requires: m > 0 and n > 0 - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes a param_type to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const param_type &Reads a param_type from a std::istream. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are the same. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are the different. - -RealType -RealType - -RealTypeURNG &Returns a random variate distributed according to the F distribution. -RealTypeURNG &const param_type &Returns a random variate distributed according to the F distribution with parameters specified by param. -RealTypeReturns the "m" parameter of the distribution. -RealTypeReturns the "n" parameter of the distribution. -RealTypeReturns the smallest value that the distribution can produce. -RealTypeReturns the largest value that the distribution can produce. -param_typeReturns the parameters of the distribution. -voidconst param_type &Sets the parameters of the distribution. -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. - -RealType1.0RealType1.0Constructs a fisher_f_distribution from its "m" and "n" parameters.Requires: m > 0 and n > 0 -const param_type &Constructs an fisher_f_distribution from its parameters. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const fisher_f_distribution &Writes an fisher_f_distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const fisher_f_distribution &Reads an fisher_f_distribution from a std::istream. -friend boolconst fisher_f_distribution &const fisher_f_distribution &Returns true if the two instances of fisher_f_distribution will return identical sequences of values given equal generators. -friend boolconst fisher_f_distribution &const fisher_f_distribution &Returns true if the two instances of fisher_f_distribution will return different sequences of values given equal generators. - - - - -
-
- - -The gamma distribution is a continuous distribution with two parameters alpha and beta. It produces values > 0.It has $\displaystyle p(x) = x^{\alpha-1}\frac{e^{-x/\beta}}{\beta^\alpha\Gamma(\alpha)}$$\displaystyle p(x) = x^{\alpha-1}\frac{e^{-x/\beta}}{\beta^\alpha\Gamma(\alpha)}$. gamma_distribution - -RealTypeReturns the "alpha" parameter of the distribution. -RealTypeReturns the "beta" parameter of the distribution. - -const RealType &1.0const RealType &1.0Constructs a param_type object from the "alpha" and "beta" parameters.Requires: alpha > 0 && beta > 0 - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes the parameters to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &param_type &Reads the parameters from a std::istream. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are the same. -friend boolconst param_type &const param_type &Returns true if the two sets fo parameters are different. - -RealType -RealType - -RealTypeReturns the "alpha" paramter of the distribution. -RealTypeReturns the "beta" parameter of the distribution. -RealTypeReturns the smallest value that the distribution can produce. -RealType -param_typeReturns the parameters of the distribution. -voidconst param_type &Sets the parameters of the distribution. -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. -result_typeEngine &Returns a random variate distributed according to the gamma distribution. -RealTypeURNG &const param_type & - -const result_type &1.0const result_type &1.0Creates a new gamma_distribution with parameters "alpha" and "beta".Requires: alpha > 0 && beta > 0 -const param_type &Constructs a gamma_distribution from its parameters. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const gamma_distribution &Writes a gamma_distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &gamma_distribution &Reads a gamma_distribution from a std::istream. -friend boolconst gamma_distribution &const gamma_distribution &Returns true if the two distributions will produce identical sequences of random variates given equal generators. -friend boolconst gamma_distribution &const gamma_distribution &Returns true if the two distributions can produce different sequences of random variates, given equal generators. - - - - -
-
- - -RealTypeURNG &Returns a value uniformly distributed in the range [0, 1) with at least bits random bits. - - -
-
- - -An instantiation of the class template geometric_distribution models a random distribution . The distribution produces positive integers which are the number of bernoulli trials with probability p required to get one that fails.For the geometric distribution, $p(i) = p(1-p)^{i}$$p(i) = p(1-p)^{i}$. This distribution has been updated to match the C++ standard. Its behavior has changed from the original boost::geometric_distribution. A backwards compatible wrapper is provided in namespace boost. geometric_distribution - -RealTypeReturns the p parameter of the distribution. - -RealType0.5Constructs the parameters with p. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const param_type &Writes the parameters to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const param_type &Reads the parameters from a std::istream. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are equal. -friend boolconst param_type &const param_type &Returns true if the two sets of parameters are different. - -RealType -IntType - -RealTypeReturns: the distribution parameter p -IntTypeReturns the smallest value that the distribution can produce. -IntTypeReturns the largest value that the distribution can produce. -param_typeReturns the parameters of the distribution. -voidconst param_type &Sets the parameters of the distribution. -voidEffects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. -result_typeEngine &Returns a random variate distributed according to the geometric_distribution. -result_typeEngine &const param_type &Returns a random variate distributed according to the geometric distribution with parameters specified by param. - -const RealType &0.5Contructs a new geometric_distribution with the paramter p.Requires: 0 < p < 1 -const param_type &Constructs a new geometric_distribution from its parameters. - -friend std::basic_ostream< CharT, Traits > &std::basic_ostream< CharT, Traits > &const geometric_distribution &Writes the distribution to a std::ostream. -friend std::basic_istream< CharT, Traits > &std::basic_istream< CharT, Traits > &const geometric_distribution &Reads the distribution from a std::istream. -friend boolconst geometric_distribution &const geometric_distribution &Returns true if the two distributions will produce identical sequences of values given equal generators. -friend boolconst geometric_distribution &const geometric_distribution &Returns true if the two distributions may produce different sequences of values given equal generators. - - - - -
-
- - -The hyperexponential distribution is a real-valued continuous distribution with two parameters, the phase probability vector probs and the rate vector rates.A $k$$k$-phase hyperexponential distribution is a mixture of $k$$k$ exponential distributions. For this reason, it is also referred to as mixed exponential distribution or parallel $k$$k$-phase exponential distribution.A $k$$k$-phase hyperexponential distribution is characterized by two parameters, namely a phase probability vector $\mathbf{\alpha}=(\alpha_1,\ldots,\alpha_k)$$\mathbf{\alpha}=(\alpha_1,\ldots,\alpha_k)$ and a rate vector $\mathbf{\lambda}=(\lambda_1,\ldots,\lambda_k)$$\mathbf{\lambda}=(\lambda_1,\ldots,\lambda_k)$.A $k$$k$-phase hyperexponential distribution is frequently used in queueing theory to model the distribution of the superposition of $k$$k$ independent events, like, for instance, the service time distribution of a queueing station with $k$$k$ servers in parallel where the $i$$i$-th server is chosen with probability $\alpha_i$$\alpha_i$ and its service time distribution is an exponential distribution with rate $\lambda_i$$\lambda_i$ (Allen,1990; Papadopolous et al.,1993; Trivedi,2002).For instance, CPUs service-time distribution in a computing system has often been observed to possess such a distribution (Rosin,1965). Also, the arrival of different types of customer to a single queueing station is often modeled as a hyperexponential distribution (Papadopolous et al.,1993). Similarly, if a product manufactured in several parallel assemply lines and the outputs are merged, the failure density of the overall product is likely to be hyperexponential (Trivedi,2002).Finally, since the hyperexponential distribution exhibits a high Coefficient of Variation (CoV), that is a CoV > 1, it is especially suited to fit empirical data with large CoV (Feitelson,2014; Wolski et al.,2013) and to approximate long-tail probability distributions (Feldmann et al.,1998).See (Boost,2014) for more information and examples.A $k$$k$-phase hyperexponential distribution has a probability density function <alt>\[ f(x) = \sum_{i=1}^k \alpha_i \lambda_i e^{-x\lambda_i} \]</alt><mediaobject><imageobject role="html"><imagedata format="PNG" align="center" fileref="images/random//form_21.png"/></imageobject><textobject role="tex"><phrase>\[ f(x) = \sum_{i=1}^k \alpha_i \lambda_i e^{-x\lambda_i} \]</phrase></textobject></mediaobject></equation> where:<itemizedlist> -<listitem><para><inlineequation><alt>$k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_15.png"/></imageobject><textobject role="tex"><phrase>$k$</phrase></textobject></inlinemediaobject></inlineequation> is the <emphasis>number of phases</emphasis> and also the size of the input vector parameters,</para> -</listitem><listitem><para><inlineequation><alt>$\mathbf{\alpha}=(\alpha_1,\ldots,\alpha_k)$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_16.png"/></imageobject><textobject role="tex"><phrase>$\mathbf{\alpha}=(\alpha_1,\ldots,\alpha_k)$</phrase></textobject></inlinemediaobject></inlineequation> is the <emphasis>phase probability vector</emphasis> parameter, and</para> -</listitem><listitem><para><inlineequation><alt>$\mathbf{\lambda}=(\lambda_1,\ldots,\lambda_k)$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_17.png"/></imageobject><textobject role="tex"><phrase>$\mathbf{\lambda}=(\lambda_1,\ldots,\lambda_k)$</phrase></textobject></inlinemediaobject></inlineequation> is the <emphasis>rate vector</emphasis> parameter.</para> -</listitem></itemizedlist> -Given a <inlineequation><alt>$k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_15.png"/></imageobject><textobject role="tex"><phrase>$k$</phrase></textobject></inlinemediaobject></inlineequation>-phase hyperexponential distribution with phase probability vector <inlineequation><alt>$\mathbf{\alpha}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_22.png"/></imageobject><textobject role="tex"><phrase>$\mathbf{\alpha}$</phrase></textobject></inlinemediaobject></inlineequation> and rate vector <inlineequation><alt>$\mathbf{\lambda}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_23.png"/></imageobject><textobject role="tex"><phrase>$\mathbf{\lambda}$</phrase></textobject></inlinemediaobject></inlineequation>, the random variate generation algorithm consists of the following steps (Tyszer,1999):<orderedlist> -<listitem><para>Generate a random variable <inlineequation><alt>$U$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_24.png"/></imageobject><textobject role="tex"><phrase>$U$</phrase></textobject></inlinemediaobject></inlineequation> uniformly distribution on the interval <inlineequation><alt>$(0,1)$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_25.png"/></imageobject><textobject role="tex"><phrase>$(0,1)$</phrase></textobject></inlinemediaobject></inlineequation>.</para> -</listitem><listitem><para>Use <inlineequation><alt>$U$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_24.png"/></imageobject><textobject role="tex"><phrase>$U$</phrase></textobject></inlinemediaobject></inlineequation> to select the appropriate <inlineequation><alt>$\lambda_i$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_20.png"/></imageobject><textobject role="tex"><phrase>$\lambda_i$</phrase></textobject></inlinemediaobject></inlineequation> (e.g., the <emphasis>alias method</emphasis> can possibly be used for this step).</para> -</listitem><listitem><para>Generate an exponentially distributed random variable <inlineequation><alt>$X$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_26.png"/></imageobject><textobject role="tex"><phrase>$X$</phrase></textobject></inlinemediaobject></inlineequation> with rate parameter <inlineequation><alt>$\lambda_i$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_20.png"/></imageobject><textobject role="tex"><phrase>$\lambda_i$</phrase></textobject></inlinemediaobject></inlineequation>.</para> -</listitem><listitem><para>Return <inlineequation><alt>$X$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_26.png"/></imageobject><textobject role="tex"><phrase>$X$</phrase></textobject></inlinemediaobject></inlineequation>.</para> -</listitem></orderedlist> -References:<orderedlist> -<listitem><para>A.O. Allen, <emphasis>Probability, Statistics, and Queuing Theory with Computer Science Applications, Second Edition</emphasis>, Academic Press, 1990.</para> -</listitem><listitem><para>Boost C++ Libraries, <emphasis>Boost.Math / Statistical Distributions: Hyperexponential Distribution</emphasis>, Online: <ulink url="http://www.boost.org/doc/libs/release/libs/math/doc/html/dist.html">http://www.boost.org/doc/libs/release/libs/math/doc/html/dist.html</ulink> , 2014.</para> -</listitem><listitem><para>D.G. Feitelson, <emphasis>Workload Modeling for Computer Systems Performance Evaluation</emphasis>, Cambridge University Press, 2014</para> -</listitem><listitem><para>A. Feldmann and W. Whitt, <emphasis>Fitting mixtures of exponentials to long-tail distributions to analyze network performance models</emphasis>, Performance Evaluation 31(3-4):245, doi:10.1016/S0166-5316(97)00003-5, 1998.</para> -</listitem><listitem><para>H.T. Papadopolous, C. Heavey and J. Browne, <emphasis>Queueing Theory in Manufacturing Systems Analysis and Design</emphasis>, Chapman & Hall/CRC, 1993, p. 35.</para> -</listitem><listitem><para>R.F. Rosin, <emphasis>Determining a computing center environment</emphasis>, Communications of the ACM 8(7):463-468, 1965.</para> -</listitem><listitem><para>K.S. Trivedi, <emphasis>Probability and Statistics with Reliability, Queueing, and Computer Science Applications</emphasis>, John Wiley & Sons, Inc., 2002.</para> -</listitem><listitem><para>J. Tyszer, <emphasis>Object-Oriented Computer Simulation of Discrete-Event Systems</emphasis>, Springer, 1999.</para> -</listitem><listitem><para>Wikipedia, <emphasis>Hyperexponential Distribution</emphasis>, Online: <ulink url="http://en.wikipedia.org/wiki/Hyperexponential_distribution">http://en.wikipedia.org/wiki/Hyperexponential_distribution</ulink> , 2014.</para> -</listitem><listitem><para>Wolfram Mathematica, <emphasis>Hyperexponential Distribution</emphasis>, Online: <ulink url="http://reference.wolfram.com/language/ref/HyperexponentialDistribution.html">http://reference.wolfram.com/language/ref/HyperexponentialDistribution.html</ulink> , 2014.</para> -</listitem></orderedlist> -<para>Marco Guazzone (<ulink url="mailto:marco.guazzone@gmail.com">marco.guazzone@gmail.com</ulink>) </para> - -</para></description><class name="param_type"><description><para>The parameters of a hyperexponential distribution.</para><para>Stores the <emphasis>phase probability vector</emphasis> and the <emphasis>rate vector</emphasis> of the hyperexponential distribution.</para><para><para>Marco Guazzone (<ulink url="mailto:marco.guazzone@gmail.com">marco.guazzone@gmail.com</ulink>) </para> - -</para></description><typedef name="distribution_type"><type><classname>hyperexponential_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="probabilities" cv="const"><type>std::vector< RealT ></type><description><para>Gets the <emphasis>phase probability vector</emphasis> parameter of the distribtuion.</para><para> -<note><para>The returned probabilities are the normalized version of the ones passed at construction time. </para> -</note> -</para></description><returns><para>The <emphasis>phase probability vector</emphasis> parameter of the distribution.</para> -</returns></method> -<method name="rates" cv="const"><type>std::vector< RealT ></type><description><para>Gets the <emphasis>rate vector</emphasis> parameter of the distribtuion.</para><para> -</para></description><returns><para>The <emphasis>rate vector</emphasis> parameter of the distribution. </para> -</returns></method> -</method-group> -<constructor><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution::param_type">param_type</classname></computeroutput> with the default parameters of the distribution. </para></description></constructor> -<constructor><template> - <template-type-parameter name="ProbIterT"><purpose><para>Must meet the requirements of <computeroutput>InputIterator</computeroutput> concept (ISO,2014,sec. 24.2.3 [input.iterators]). </para></purpose></template-type-parameter> - <template-type-parameter name="RateIterT"><purpose><para>Must meet the requirements of <computeroutput>InputIterator</computeroutput> concept (ISO,2014,sec. 24.2.3 [input.iterators]).</para></purpose></template-type-parameter> - </template><parameter name="prob_first"><paramtype>ProbIterT</paramtype><description><para>The iterator to the beginning of the range of non-negative real elements representing the phase probabilities; if elements don't sum to 1, they are normalized. </para></description></parameter><parameter name="prob_last"><paramtype>ProbIterT</paramtype><description><para>The iterator to the ending of the range of non-negative real elements representing the phase probabilities; if elements don't sum to 1, they are normalized. </para></description></parameter><parameter name="rate_first"><paramtype>RateIterT</paramtype><description><para>The iterator to the beginning of the range of non-negative real elements representing the rates. </para></description></parameter><parameter name="rate_last"><paramtype>RateIterT</paramtype><description><para>The iterator to the ending of the range of non-negative real elements representing the rates.</para></description></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution::param_type">param_type</classname></computeroutput> from the <emphasis>phase probability vector</emphasis> and <emphasis>rate vector</emphasis> parameters of the distribution.</para><para>The <emphasis>phase probability vector</emphasis> parameter is given by the range defined by [<emphasis>prob_first</emphasis>, <emphasis>prob_last</emphasis>) iterator pair, and the <emphasis>rate vector</emphasis> parameter is given by the range defined by [<emphasis>rate_first</emphasis>, <emphasis>rate_last</emphasis>) iterator pair.</para><para> - -References:<orderedlist> -<listitem><para>ISO, <emphasis>ISO/IEC 14882-2014: Information technology - Programming languages - C++</emphasis>, 2014</para> -</listitem></orderedlist> -</para></description></constructor> -<constructor><template> - <template-type-parameter name="ProbRangeT"><purpose><para>Must meet the requirements of <ulink url="boost:/libs/range/doc/html/range/concepts.html">Range</ulink> concept. </para></purpose></template-type-parameter> - <template-type-parameter name="RateRangeT"><purpose><para>Must meet the requirements of <ulink url="boost:/libs/range/doc/html/range/concepts.html">Range</ulink> concept.</para></purpose></template-type-parameter> - </template><parameter name="prob_range"><paramtype>ProbRangeT const &</paramtype><description><para>The range of non-negative real elements representing the phase probabilities; if elements don't sum to 1, they are normalized. </para></description></parameter><parameter name="rate_range"><paramtype>RateRangeT const &</paramtype><description><para>The range of positive real elements representing the rates.</para></description></parameter><parameter name=""><paramtype>typename boost::disable_if_c< boost::has_pre_increment< ProbRangeT >::value||boost::has_pre_increment< RateRangeT >::value >::type *</paramtype><default>0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution::param_type">param_type</classname></computeroutput> from the <emphasis>phase probability vector</emphasis> and <emphasis>rate vector</emphasis> parameters of the distribution.</para><para>The <emphasis>phase probability vector</emphasis> parameter is given by the range defined by <emphasis>prob_range</emphasis>, and the <emphasis>rate vector</emphasis> parameter is given by the range defined by <emphasis>rate_range</emphasis>.</para><para> - -<note><para>The final <computeroutput>disable_if</computeroutput> parameter is an implementation detail that differentiates between this two argument constructor and the iterator-based two argument constructor described below. </para> -</note> -</para></description></constructor> -<constructor><template> - <template-type-parameter name="RateIterT"><purpose><para>Must meet the requirements of <computeroutput>InputIterator</computeroutput> concept (ISO,2014,sec. 24.2.3 [input.iterators]). </para></purpose></template-type-parameter> - </template><parameter name="rate_first"><paramtype>RateIterT</paramtype><description><para>The iterator to the beginning of the range of non-negative real elements representing the rates. </para></description></parameter><parameter name="rate_last"><paramtype>RateIterT</paramtype><description><para>The iterator to the ending of the range of non-negative real elements representing the rates.</para></description></parameter><parameter name=""><paramtype>typename boost::enable_if_c< boost::has_pre_increment< RateIterT >::value >::type *</paramtype><default>0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution::param_type">param_type</classname></computeroutput> from the <emphasis>rate vector</emphasis> parameter of the distribution and with equal phase probabilities.</para><para>The <emphasis>rate vector</emphasis> parameter is given by the range defined by [<emphasis>rate_first</emphasis>, <emphasis>rate_last</emphasis>) iterator pair, and the <emphasis>phase probability vector</emphasis> parameter is set to the equal phase probabilities (i.e., to a vector of the same length <inlineequation><alt>$k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_15.png"/></imageobject><textobject role="tex"><phrase>$k$</phrase></textobject></inlinemediaobject></inlineequation> of the <emphasis>rate vector</emphasis> and with each element set to <inlineequation><alt>$1.0/k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_27.png"/></imageobject><textobject role="tex"><phrase>$1.0/k$</phrase></textobject></inlinemediaobject></inlineequation>).</para><para> - -<note><para>The final <computeroutput>disable_if</computeroutput> parameter is an implementation detail that differentiates between this two argument constructor and the range-based two argument constructor described above.</para> -</note> -References:<orderedlist> -<listitem><para>ISO, <emphasis>ISO/IEC 14882-2014: Information technology - Programming languages - C++</emphasis>, 2014</para> -</listitem></orderedlist> -</para></description></constructor> -<constructor><template> - <template-type-parameter name="RateRangeT"><purpose><para>Must meet the requirements of <ulink url="boost:/libs/range/doc/html/range/concepts.html">Range</ulink> concept.</para></purpose></template-type-parameter> - </template><parameter name="rate_range"><paramtype>RateRangeT const &</paramtype><description><para>The range of positive real elements representing the rates. </para></description></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution::param_type">param_type</classname></computeroutput> from the "rates" parameters of the distribution and with equal phase probabilities.</para><para>The <emphasis>rate vector</emphasis> parameter is given by the range defined by <emphasis>rate_range</emphasis>, and the <emphasis>phase probability vector</emphasis> parameter is set to the equal phase probabilities (i.e., to a vector of the same length <inlineequation><alt>$k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_15.png"/></imageobject><textobject role="tex"><phrase>$k$</phrase></textobject></inlinemediaobject></inlineequation> of the <emphasis>rate vector</emphasis> and with each element set to <inlineequation><alt>$1.0/k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_27.png"/></imageobject><textobject role="tex"><phrase>$1.0/k$</phrase></textobject></inlinemediaobject></inlineequation>).</para><para> - -</para></description></constructor> -<constructor><parameter name="l1"><paramtype>std::initializer_list< RealT ></paramtype><description><para>The initializer list for inizializing the phase probability vector. </para></description></parameter><parameter name="l2"><paramtype>std::initializer_list< RealT ></paramtype><description><para>The initializer list for inizializing the rate vector.</para></description></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution::param_type">param_type</classname></computeroutput> from the <emphasis>phase probability vector</emphasis> and <emphasis>rate vector</emphasis> parameters of the distribution.</para><para>The <emphasis>phase probability vector</emphasis> parameter is given by the <emphasis>brace-init-list</emphasis> (ISO,2014,sec. 8.5.4 [dcl.init.list]) defined by <emphasis>l1</emphasis>, and the <emphasis>rate vector</emphasis> parameter is given by the <emphasis>brace-init-list</emphasis> (ISO,2014,sec. 8.5.4 [dcl.init.list]) defined by <emphasis>l2</emphasis>.</para><para> -References:<orderedlist> -<listitem><para>ISO, <emphasis>ISO/IEC 14882-2014: Information technology - Programming languages - C++</emphasis>, 2014</para> -</listitem></orderedlist> -</para></description></constructor> -<constructor><parameter name="l1"><paramtype>std::initializer_list< RealT ></paramtype><description><para>The initializer list for inizializing the rate vector.</para></description></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution::param_type">param_type</classname></computeroutput> from the <emphasis>rate vector</emphasis> parameter of the distribution and with equal phase probabilities.</para><para>The <emphasis>rate vector</emphasis> parameter is given by the <emphasis>brace-init-list</emphasis> (ISO,2014,sec. 8.5.4 [dcl.init.list]) defined by <emphasis>l1</emphasis>, and the <emphasis>phase probability vector</emphasis> parameter is set to the equal phase probabilities (i.e., to a vector of the same length <inlineequation><alt>$k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_15.png"/></imageobject><textobject role="tex"><phrase>$k$</phrase></textobject></inlinemediaobject></inlineequation> of the <emphasis>rate vector</emphasis> and with each element set to <inlineequation><alt>$1.0/k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_27.png"/></imageobject><textobject role="tex"><phrase>$1.0/k$</phrase></textobject></inlinemediaobject></inlineequation>).</para><para> -References:<orderedlist> -<listitem><para>ISO, <emphasis>ISO/IEC 14882-2014: Information technology - Programming languages - C++</emphasis>, 2014</para> -</listitem></orderedlist> -</para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::hyperexponential_distribution::param_type">param_type</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::hyperexponential_distribution::param_type">param_type</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the same. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the different. </para></description></method> -</method-group> -</class><typedef name="result_type"><type>RealT</type></typedef> -<typedef name="input_type"><type>RealT</type></typedef> -<method-group name="public member functions"> -<method name="operator()" cv="const"><type>RealT</type><template> - <template-type-parameter name="URNG"><purpose><para>Must meet the requirements of <link linkend="boost_random.reference.concepts.uniform_random_number_generator">uniform random number generator</link> .</para></purpose></template-type-parameter> - </template><parameter name="urng"><paramtype>URNG &</paramtype><description><para>A uniform random number generator object.</para></description></parameter><description><para>Gets a random variate distributed according to the hyperexponential distribution.</para><para> - - -</para></description><returns><para>A random variate distributed according to the hyperexponential distribution. </para> -</returns></method> -<method name="operator()" cv="const"><type>RealT</type><template> - <template-type-parameter name="URNG"><purpose><para>Must meet the requirements of <link linkend="boost_random.reference.concepts.uniform_random_number_generator">uniform random number generator</link> .</para></purpose></template-type-parameter> - </template><parameter name="urng"><paramtype>URNG &</paramtype><description><para>A uniform random number generator object. </para></description></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype><description><para>A distribution parameter object.</para></description></parameter><description><para>Gets a random variate distributed according to the hyperexponential distribution with parameters specified by <computeroutput>param</computeroutput>.</para><para> - - -</para></description><returns><para>A random variate distributed according to the hyperexponential distribution. distribution with parameters specified by <computeroutput>param</computeroutput>. </para> -</returns></method> -<method name="num_phases" cv="const"><type>std::size_t</type><description><para>Returns the number of phases of the distribution. </para></description></method> -<method name="probabilities" cv="const"><type>std::vector< RealT ></type><description><para>Returns the <emphasis>phase probability vector</emphasis> parameter of the distribution. </para></description></method> -<method name="rates" cv="const"><type>std::vector< RealT ></type><description><para>Returns the <emphasis>rate vector</emphasis> parameter of the distribution. </para></description></method> -<method name="min" cv="const"><type>RealT</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>RealT</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype><classname>param_type</classname> const &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -</method-group> -<constructor><description><para>Constructs a 1-phase <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> (i.e., an exponential distribution) with rate 1. </para></description></constructor> -<constructor><template> - <template-type-parameter name="ProbIterT"><purpose><para>Must meet the requirements of <computeroutput>InputIterator</computeroutput> concept (ISO,2014,sec. 24.2.3 [input.iterators]). </para></purpose></template-type-parameter> - <template-type-parameter name="RateIterT"><purpose><para>Must meet the requirements of <computeroutput>InputIterator</computeroutput> concept (ISO,2014,sec. 24.2.3 [input.iterators]).</para></purpose></template-type-parameter> - </template><parameter name="prob_first"><paramtype>ProbIterT</paramtype><description><para>The iterator to the beginning of the range of non-negative real elements representing the phase probabilities; if elements don't sum to 1, they are normalized. </para></description></parameter><parameter name="prob_last"><paramtype>ProbIterT</paramtype><description><para>The iterator to the ending of the range of non-negative real elements representing the phase probabilities; if elements don't sum to 1, they are normalized. </para></description></parameter><parameter name="rate_first"><paramtype>RateIterT</paramtype><description><para>The iterator to the beginning of the range of non-negative real elements representing the rates. </para></description></parameter><parameter name="rate_last"><paramtype>RateIterT</paramtype><description><para>The iterator to the ending of the range of non-negative real elements representing the rates.</para></description></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> from the <emphasis>phase probability vector</emphasis> and <emphasis>rate vector</emphasis> parameters of the distribution.</para><para>The <emphasis>phase probability vector</emphasis> parameter is given by the range defined by [<emphasis>prob_first</emphasis>, <emphasis>prob_last</emphasis>) iterator pair, and the <emphasis>rate vector</emphasis> parameter is given by the range defined by [<emphasis>rate_first</emphasis>, <emphasis>rate_last</emphasis>) iterator pair.</para><para> - -References:<orderedlist> -<listitem><para>ISO, <emphasis>ISO/IEC 14882-2014: Information technology - Programming languages - C++</emphasis>, 2014</para> -</listitem></orderedlist> -</para></description></constructor> -<constructor><template> - <template-type-parameter name="ProbRangeT"><purpose><para>Must meet the requirements of <ulink url="boost:/libs/range/doc/html/range/concepts.html">Range</ulink> concept. </para></purpose></template-type-parameter> - <template-type-parameter name="RateRangeT"><purpose><para>Must meet the requirements of <ulink url="boost:/libs/range/doc/html/range/concepts.html">Range</ulink> concept.</para></purpose></template-type-parameter> - </template><parameter name="prob_range"><paramtype>ProbRangeT const &</paramtype><description><para>The range of non-negative real elements representing the phase probabilities; if elements don't sum to 1, they are normalized. </para></description></parameter><parameter name="rate_range"><paramtype>RateRangeT const &</paramtype><description><para>The range of positive real elements representing the rates.</para></description></parameter><parameter name=""><paramtype>typename boost::disable_if_c< boost::has_pre_increment< ProbRangeT >::value||boost::has_pre_increment< RateRangeT >::value >::type *</paramtype><default>0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> from the <emphasis>phase probability vector</emphasis> and <emphasis>rate vector</emphasis> parameters of the distribution.</para><para>The <emphasis>phase probability vector</emphasis> parameter is given by the range defined by <emphasis>prob_range</emphasis>, and the <emphasis>rate vector</emphasis> parameter is given by the range defined by <emphasis>rate_range</emphasis>.</para><para> - -<note><para>The final <computeroutput>disable_if</computeroutput> parameter is an implementation detail that differentiates between this two argument constructor and the iterator-based two argument constructor described below. </para> -</note> -</para></description></constructor> -<constructor><template> - <template-type-parameter name="RateIterT"><purpose><para>Must meet the requirements of <computeroutput>InputIterator</computeroutput> concept (ISO,2014,sec. 24.2.3 [input.iterators]). </para></purpose></template-type-parameter> - </template><parameter name="rate_first"><paramtype>RateIterT</paramtype><description><para>The iterator to the beginning of the range of non-negative real elements representing the rates. </para></description></parameter><parameter name="rate_last"><paramtype>RateIterT</paramtype><description><para>The iterator to the ending of the range of non-negative real elements representing the rates.</para></description></parameter><parameter name=""><paramtype>typename boost::enable_if_c< boost::has_pre_increment< RateIterT >::value >::type *</paramtype><default>0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> from the <emphasis>rate vector</emphasis> parameter of the distribution and with equal phase probabilities.</para><para>The <emphasis>rate vector</emphasis> parameter is given by the range defined by [<emphasis>rate_first</emphasis>, <emphasis>rate_last</emphasis>) iterator pair, and the <emphasis>phase probability vector</emphasis> parameter is set to the equal phase probabilities (i.e., to a vector of the same length <inlineequation><alt>$k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_15.png"/></imageobject><textobject role="tex"><phrase>$k$</phrase></textobject></inlinemediaobject></inlineequation> of the <emphasis>rate vector</emphasis> and with each element set to <inlineequation><alt>$1.0/k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_27.png"/></imageobject><textobject role="tex"><phrase>$1.0/k$</phrase></textobject></inlinemediaobject></inlineequation>).</para><para> - -<note><para>The final <computeroutput>disable_if</computeroutput> parameter is an implementation detail that differentiates between this two argument constructor and the range-based two argument constructor described above.</para> -</note> -References:<orderedlist> -<listitem><para>ISO, <emphasis>ISO/IEC 14882-2014: Information technology - Programming languages - C++</emphasis>, 2014</para> -</listitem></orderedlist> -</para></description></constructor> -<constructor><template> - <template-type-parameter name="RateRangeT"><purpose><para>Must meet the requirements of <ulink url="boost:/libs/range/doc/html/range/concepts.html">Range</ulink> concept.</para></purpose></template-type-parameter> - </template><parameter name="rate_range"><paramtype>RateRangeT const &</paramtype><description><para>The range of positive real elements representing the rates. </para></description></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution::param_type">param_type</classname></computeroutput> from the "rates" parameters of the distribution and with equal phase probabilities.</para><para>The <emphasis>rate vector</emphasis> parameter is given by the range defined by <emphasis>rate_range</emphasis>, and the <emphasis>phase probability vector</emphasis> parameter is set to the equal phase probabilities (i.e., to a vector of the same length <inlineequation><alt>$k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_15.png"/></imageobject><textobject role="tex"><phrase>$k$</phrase></textobject></inlinemediaobject></inlineequation> of the <emphasis>rate vector</emphasis> and with each element set to <inlineequation><alt>$1.0/k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_27.png"/></imageobject><textobject role="tex"><phrase>$1.0/k$</phrase></textobject></inlinemediaobject></inlineequation>).</para><para> - -</para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype><classname>param_type</classname> const &</paramtype><description><para>The parameters of the distribution. </para></description></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> from its parameters.</para><para> -</para></description></constructor> -<constructor><parameter name="l1"><paramtype>std::initializer_list< RealT > const &</paramtype><description><para>The initializer list for inizializing the phase probability vector. </para></description></parameter><parameter name="l2"><paramtype>std::initializer_list< RealT > const &</paramtype><description><para>The initializer list for inizializing the rate vector.</para></description></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> from the <emphasis>phase probability vector</emphasis> and <emphasis>rate vector</emphasis> parameters of the distribution.</para><para>The <emphasis>phase probability vector</emphasis> parameter is given by the <emphasis>brace-init-list</emphasis> (ISO,2014,sec. 8.5.4 [dcl.init.list]) defined by <emphasis>l1</emphasis>, and the <emphasis>rate vector</emphasis> parameter is given by the <emphasis>brace-init-list</emphasis> (ISO,2014,sec. 8.5.4 [dcl.init.list]) defined by <emphasis>l2</emphasis>.</para><para> -References:<orderedlist> -<listitem><para>ISO, <emphasis>ISO/IEC 14882-2014: Information technology - Programming languages - C++</emphasis>, 2014</para> -</listitem></orderedlist> -</para></description></constructor> -<constructor><parameter name="l1"><paramtype>std::initializer_list< RealT > const &</paramtype><description><para>The initializer list for inizializing the rate vector.</para></description></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> from the <emphasis>rate vector</emphasis> parameter of the distribution and with equal phase probabilities.</para><para>The <emphasis>rate vector</emphasis> parameter is given by the <emphasis>brace-init-list</emphasis> (ISO,2014,sec. 8.5.4 [dcl.init.list]) defined by <emphasis>l1</emphasis>, and the <emphasis>phase probability vector</emphasis> parameter is set to the equal phase probabilities (i.e., to a vector of the same length <inlineequation><alt>$k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_15.png"/></imageobject><textobject role="tex"><phrase>$k$</phrase></textobject></inlinemediaobject></inlineequation> of the <emphasis>rate vector</emphasis> and with each element set to <inlineequation><alt>$1.0/k$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_27.png"/></imageobject><textobject role="tex"><phrase>$1.0/k$</phrase></textobject></inlinemediaobject></inlineequation>).</para><para> -References:<orderedlist> -<listitem><para>ISO, <emphasis>ISO/IEC 14882-2014: Information technology - Programming languages - C++</emphasis>, 2014</para> -</listitem></orderedlist> -</para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="hd"><paramtype>const <classname>hyperexponential_distribution</classname> &</paramtype></parameter><description><para>Writes an <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="hd"><paramtype>const <classname>hyperexponential_distribution</classname> &</paramtype></parameter><description><para>Reads an <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>hyperexponential_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>hyperexponential_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two instances of <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> will return identical sequences of values given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>hyperexponential_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>hyperexponential_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two instances of <computeroutput><classname alt="boost::random::hyperexponential_distribution">hyperexponential_distribution</classname></computeroutput> will return different sequences of values given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/independent_bits.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="independent_bits_engine"><template> - <template-type-parameter name="Engine"/> - <template-nontype-parameter name="w"><type>std::size_t</type></template-nontype-parameter> - <template-type-parameter name="UIntType"/> - </template><description><para>An instantiation of class template <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . It generates random numbers distributed between [0, 2^w) by combining one or more invocations of the base engine.</para><para>Requires: 0 < w <= std::numeric_limits<UIntType>::digits </para></description><typedef name="base_type"><type>Engine</type></typedef> -<typedef name="result_type"><type>UIntType</type></typedef> -<typedef name="base_result_type"><type>Engine::result_type</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the generator can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the largest value that the generator can produce. </para></description></method> -</method-group> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Seeds an <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput> using the default seed of the base generator. </para></description></method> -<method name="seed"><type>void</type><parameter name="seed"><paramtype>base_result_type</paramtype></parameter><description><para>Seeds an <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput>, using <computeroutput>seed</computeroutput> as the seed for the base generator. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Seeds an <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput>, using <computeroutput>seq</computeroutput> to seed the base generator. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Seeds an <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput> with values from the range defined by the input iterators first and last. first will be modified to point to the element after the last one used.</para><para>Throws: <computeroutput>std::invalid_argument</computeroutput> if the input range is too small.</para><para>Exception Safety: Basic </para></description></method> -<method name="operator()"><type>result_type</type><description><para>Returns the next value of the generator. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput>. </para></description></method> -<method name="base" cv="const"><type>const base_type &</type></method> -</method-group> -<constructor><description><para>Constructs an <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput> using the default constructor of the base generator. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="seed"><paramtype>base_result_type</paramtype></parameter><description><para>Constructs an <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput>, using seed as the constructor argument for both base generators. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Constructs an <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput>, using seq as the constructor argument for the base generator. </para></description></constructor> -<constructor><parameter name="base_arg"><paramtype>const base_type &</paramtype></parameter><description><para>Constructs an <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput> by copying <computeroutput>base</computeroutput>. </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Contructs an <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput> with values from the range defined by the input iterators first and last. first will be modified to point to the element after the last one used.</para><para>Throws: <computeroutput>std::invalid_argument</computeroutput> if the input range is too small.</para><para>Exception Safety: Basic </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="r"><paramtype>const <classname>independent_bits_engine</classname> &</paramtype></parameter><description><para>Writes the textual representation if the generator to a <computeroutput>std::ostream</computeroutput>. The textual representation of the engine is the textual representation of the base engine. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="r"><paramtype>const <classname>independent_bits_engine</classname> &</paramtype></parameter><description><para>Reads the state of an <computeroutput><classname alt="boost::random::independent_bits_engine">independent_bits_engine</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x"><paramtype>const <classname>independent_bits_engine</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>independent_bits_engine</classname> &</paramtype></parameter><description><para>Returns: true iff the two <computeroutput>independent_bits_engines</computeroutput> will produce the same sequence of values. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>independent_bits_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>independent_bits_engine</classname> &</paramtype></parameter><description><para>Returns: true iff the two <computeroutput>independent_bits_engines</computeroutput> will produce different sequences of values. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/inversive_congruential.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="inversive_congruential_engine"><template> - <template-type-parameter name="IntType"/> - <template-nontype-parameter name="a"><type>IntType</type></template-nontype-parameter> - <template-nontype-parameter name="b"><type>IntType</type></template-nontype-parameter> - <template-nontype-parameter name="p"><type>IntType</type></template-nontype-parameter> - </template><description><para>Instantiations of class template <computeroutput><classname alt="boost::random::inversive_congruential_engine">inversive_congruential_engine</classname></computeroutput> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . It uses the inversive congruential algorithm (ICG) described in</para><para> <blockquote><para> "Inversive pseudorandom number generators: concepts, results and links", Peter Hellekalek, In: "Proceedings of the 1995 Winter Simulation - Conference", C. Alexopoulos, K. Kang, W.R. Lilegdon, and D. Goldsman (editors), 1995, pp. 255-262. <ulink url="ftp://random.mat.sbg.ac.at/pub/data/wsc95.ps">ftp://random.mat.sbg.ac.at/pub/data/wsc95.ps</ulink> </para></blockquote> </para><para>The output sequence is defined by x(n+1) = (a*inv(x(n)) - b) (mod p), where x(0), a, b, and the prime number p are parameters of the generator. The expression inv(k) denotes the multiplicative inverse of k in the field of integer numbers modulo p, with inv(0) := 0.</para><para>The template parameter IntType shall denote a signed integral type large enough to hold p; a, b, and p are the parameters of the generators. The template parameter val is the validation value checked by validation.</para><para> <note><para> The implementation currently uses the Euclidian Algorithm to compute the multiplicative inverse. Therefore, the inversive generators are about 10-20 times slower than the others (see section"performance"). However, the paper talks of only 3x slowdown, so the Euclidian Algorithm is probably not optimal for calculating the multiplicative inverse. </para></note> </para></description><typedef name="result_type"><type>IntType</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<data-member name="multiplier" specifiers="static"><type>const result_type</type></data-member> -<data-member name="increment" specifiers="static"><type>const result_type</type></data-member> -<data-member name="modulus" specifiers="static"><type>const result_type</type></data-member> -<data-member name="default_seed" specifiers="static"><type>const IntType</type></data-member> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type></method> -<method name="max" specifiers="static"><type>constexpr result_type</type></method> -</method-group> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Calls seed(default_seed) </para></description></method> -<method name="seed"><type>void</type><parameter name="x0"><paramtype>IntType</paramtype></parameter><description><para>If c mod m is zero and x0 mod m is zero, changes the current value of the generator to 1. Otherwise, changes it to x0 mod m. If c is zero, distinct seeds in the range [1,m) will leave the generator in distinct states. If c is not zero, the range is [0,m). </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Seeds an <computeroutput><classname alt="boost::random::inversive_congruential_engine">inversive_congruential_engine</classname></computeroutput> using values from a SeedSeq. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>seeds an <computeroutput><classname alt="boost::random::inversive_congruential_engine">inversive_congruential_engine</classname></computeroutput> with values taken from the itrator range [first, last) and adjusts <computeroutput>first</computeroutput> to point to the element after the last one used. If there are not enough elements, throws <computeroutput>std::invalid_argument</computeroutput>.</para><para><computeroutput>first</computeroutput> and <computeroutput>last</computeroutput> must be input iterators. </para></description></method> -<method name="operator()"><type>IntType</type><description><para>Returns the next output of the generator. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput>. </para></description></method> -</method-group> -<constructor><description><para>Constructs an <computeroutput><classname alt="boost::random::inversive_congruential_engine">inversive_congruential_engine</classname></computeroutput>, seeding it with the default seed. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="x0"><paramtype>IntType</paramtype></parameter><description><para>Constructs an <computeroutput><classname alt="boost::random::inversive_congruential_engine">inversive_congruential_engine</classname></computeroutput>, seeding it with <computeroutput>x0</computeroutput>. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Constructs an <computeroutput><classname alt="boost::random::inversive_congruential_engine">inversive_congruential_engine</classname></computeroutput>, seeding it with values produced by a call to <computeroutput>seq.generate()</computeroutput>. </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Constructs an <computeroutput><classname alt="boost::random::inversive_congruential_engine">inversive_congruential_engine</classname></computeroutput>, seeds it with values taken from the itrator range [first, last), and adjusts first to point to the element after the last one used. If there are not enough elements, throws <computeroutput>std::invalid_argument</computeroutput>.</para><para>first and last must be input iterators. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="x"><paramtype>const <classname>inversive_congruential_engine</classname> &</paramtype></parameter><description><para>Writes the textual representation of the generator to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="x"><paramtype>const <classname>inversive_congruential_engine</classname> &</paramtype></parameter><description><para>Reads the textual representation of the generator from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x"><paramtype>const <classname>inversive_congruential_engine</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>inversive_congruential_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce identical sequences of outputs. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>inversive_congruential_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>inversive_congruential_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce different sequences of outputs. </para></description></method> -</method-group> -</class><typedef name="hellekalek1995"><description><para>The specialization hellekalek1995 was suggested in</para><para> <blockquote><para> "Inversive pseudorandom number generators: concepts, results and links", Peter Hellekalek, In: "Proceedings of the 1995 Winter Simulation - Conference", C. Alexopoulos, K. Kang, W.R. Lilegdon, and D. Goldsman (editors), 1995, pp. 255-262. <ulink url="ftp://random.mat.sbg.ac.at/pub/data/wsc95.ps">ftp://random.mat.sbg.ac.at/pub/data/wsc95.ps</ulink> </para></blockquote> </para></description><type><classname>inversive_congruential_engine</classname>< uint32_t, 9102, 2147483647-36884165, 2147483647 ></type></typedef> - -</namespace> -</namespace> -</header> -<header name="boost/random/lagged_fibonacci.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="lagged_fibonacci_01_engine"><template> - <template-type-parameter name="RealType"/> - <template-nontype-parameter name="w"><type>int</type></template-nontype-parameter> - <template-nontype-parameter name="p"><type>unsigned int</type></template-nontype-parameter> - <template-nontype-parameter name="q"><type>unsigned int</type></template-nontype-parameter> - </template><description><para>Instantiations of class template <computeroutput>lagged_fibonacci_01</computeroutput> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . It uses a lagged Fibonacci algorithm with two lags <computeroutput>p</computeroutput> and <computeroutput>q</computeroutput>, evaluated in floating-point arithmetic: x(i) = x(i-p) + x(i-q) (mod 1) with p > q. See</para><para> <blockquote><para> "Uniform random number generators for supercomputers", Richard Brent, Proc. of Fifth Australian Supercomputer Conference, Melbourne, Dec. 1992, pp. 704-706. </para></blockquote> </para><para> <note><para> The quality of the generator crucially depends on the choice of the parameters. User code should employ one of the sensibly parameterized generators such as <classname alt="boost::random::lagged_fibonacci607">lagged_fibonacci607</classname> instead. </para></note> </para><para>The generator requires considerable amounts of memory for the storage of its state array. For example, <classname alt="boost::random::lagged_fibonacci607">lagged_fibonacci607</classname> requires about 4856 bytes and <classname alt="boost::random::lagged_fibonacci44497">lagged_fibonacci44497</classname> requires about 350 KBytes. </para></description><typedef name="result_type"><type>RealType</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<data-member name="word_size" specifiers="static"><type>const int</type></data-member> -<data-member name="long_lag" specifiers="static"><type>const unsigned int</type></data-member> -<data-member name="short_lag" specifiers="static"><type>const unsigned int</type></data-member> -<data-member name="default_seed" specifiers="static"><type>const boost::uint32_t</type></data-member> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Calls seed(default_seed). </para></description></method> -<method name="seed"><type>void</type><parameter name="value"><paramtype>boost::uint32_t</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::minstd_rand0">minstd_rand0</classname> generator with the constructor parameter value and calls seed with it. Distinct seeds in the range [1, 2147483647) will produce generators with different states. Other seeds will be equivalent to some seed within this range. See <classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname> for details. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Seeds this <computeroutput><classname alt="boost::random::lagged_fibonacci_01_engine">lagged_fibonacci_01_engine</classname></computeroutput> using values produced by <computeroutput>seq.generate</computeroutput>. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Seeds this <computeroutput><classname alt="boost::random::lagged_fibonacci_01_engine">lagged_fibonacci_01_engine</classname></computeroutput> using values from the iterator range [first, last). If there are not enough elements in the range, throws <computeroutput>std::invalid_argument</computeroutput>. </para></description></method> -<method name="operator()"><type>result_type</type><description><para>Returns the next value of the generator. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput>. </para></description></method> -</method-group> -<constructor><description><para>Constructs a <computeroutput>lagged_fibonacci_01</computeroutput> generator and calls <computeroutput>seed()</computeroutput>. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="value"><paramtype>uint32_t</paramtype></parameter><description><para>Constructs a <computeroutput>lagged_fibonacci_01</computeroutput> generator and calls <computeroutput>seed(value)</computeroutput>. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Constructs a <computeroutput>lagged_fibonacci_01</computeroutput> generator and calls <computeroutput>seed(gen)</computeroutput>. </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter></constructor> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the generator can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the upper bound of the generators outputs. </para></description></method> -</method-group> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="f"><paramtype>const <classname>lagged_fibonacci_01_engine</classname> &</paramtype></parameter><description><para>Writes the textual representation of the generator to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="f"><paramtype>const <classname>lagged_fibonacci_01_engine</classname> &</paramtype></parameter><description><para>Reads the textual representation of the generator from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x_"><paramtype>const <classname>lagged_fibonacci_01_engine</classname> &</paramtype></parameter><parameter name="y_"><paramtype>const <classname>lagged_fibonacci_01_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce identical sequences of outputs. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>lagged_fibonacci_01_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>lagged_fibonacci_01_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce different sequences of outputs. </para></description></method> -</method-group> -</class><class name="lagged_fibonacci_engine"><template> - <template-type-parameter name="UIntType"/> - <template-nontype-parameter name="w"><type>int</type></template-nontype-parameter> - <template-nontype-parameter name="p"><type>unsigned int</type></template-nontype-parameter> - <template-nontype-parameter name="q"><type>unsigned int</type></template-nontype-parameter> - </template><description><para>Instantiations of class template <classname alt="boost::random::lagged_fibonacci_engine">lagged_fibonacci_engine</classname> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . It uses a lagged Fibonacci algorithm with two lags <computeroutput>p</computeroutput> and <computeroutput>q:</computeroutput> x(i) = x(i-p) + x(i-q) (mod 2<superscript>w</superscript>) with p > q. </para></description><typedef name="result_type"><type>UIntType</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<data-member name="word_size" specifiers="static"><type>const int</type></data-member> -<data-member name="long_lag" specifiers="static"><type>const unsigned int</type></data-member> -<data-member name="short_lag" specifiers="static"><type>const unsigned int</type></data-member> -<data-member name="default_seed" specifiers="static"><type>const UIntType</type></data-member> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the generator can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the largest value that the generator can produce. </para></description></method> -</method-group> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Calls <computeroutput>seed(default_seed)</computeroutput>. </para></description></method> -<method name="seed"><type>void</type><parameter name="value"><paramtype>UIntType</paramtype></parameter><description><para>Sets the state of the generator to values produced by a <classname alt="boost::random::minstd_rand0">minstd_rand0</classname> generator. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Sets the state of the generator using values produced by seq. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Sets the state of the generator to values from the iterator range [first, last). If there are not enough elements in the range [first, last) throws <computeroutput>std::invalid_argument</computeroutput>. </para></description></method> -<method name="operator()"><type>result_type</type><description><para>Returns the next value of the generator. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput>. </para></description></method> -</method-group> -<constructor><description><para>Creates a new <computeroutput><classname alt="boost::random::lagged_fibonacci_engine">lagged_fibonacci_engine</classname></computeroutput> and calls <computeroutput>seed()</computeroutput>. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="value"><paramtype>UIntType</paramtype></parameter><description><para>Creates a new <computeroutput><classname alt="boost::random::lagged_fibonacci_engine">lagged_fibonacci_engine</classname></computeroutput> and calls <computeroutput>seed(value)</computeroutput>. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Creates a new <computeroutput><classname alt="boost::random::lagged_fibonacci_engine">lagged_fibonacci_engine</classname></computeroutput> and calls <computeroutput>seed(seq)</computeroutput>. </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Creates a new <computeroutput><classname alt="boost::random::lagged_fibonacci_engine">lagged_fibonacci_engine</classname></computeroutput> and calls <computeroutput>seed(first, last)</computeroutput>. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="f"><paramtype>const <classname>lagged_fibonacci_engine</classname> &</paramtype></parameter><description><para>Writes the textual representation of the generator to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="f"><paramtype>const <classname>lagged_fibonacci_engine</classname> &</paramtype></parameter><description><para>Reads the textual representation of the generator from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x_"><paramtype>const <classname>lagged_fibonacci_engine</classname> &</paramtype></parameter><parameter name="y_"><paramtype>const <classname>lagged_fibonacci_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce identical sequences of outputs. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>lagged_fibonacci_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>lagged_fibonacci_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce different sequences of outputs. </para></description></method> -</method-group> -</class><typedef name="lagged_fibonacci607"><description><para>The specializations lagged_fibonacci607 ... lagged_fibonacci44497 use well tested lags.</para><para>See</para><para> <blockquote><para> "On the Periods of Generalized Fibonacci Recurrences", Richard P. Brent Computer Sciences Laboratory Australian National University, December 1992 </para></blockquote> </para><para>The lags used here can be found in</para><para> <blockquote><para> "Uniform random number generators for supercomputers", Richard Brent, Proc. of Fifth Australian Supercomputer Conference, Melbourne, Dec. 1992, pp. 704-706. </para></blockquote> </para></description><type><classname>lagged_fibonacci_01_engine</classname>< double, 48, 607, 273 ></type></typedef> -<typedef name="lagged_fibonacci1279"><description><para>The specializations lagged_fibonacci607 ... lagged_fibonacci44497 use well tested lags.</para><para>See</para><para> <blockquote><para> "On the Periods of Generalized Fibonacci Recurrences", Richard P. Brent Computer Sciences Laboratory Australian National University, December 1992 </para></blockquote> </para><para>The lags used here can be found in</para><para> <blockquote><para> "Uniform random number generators for supercomputers", Richard Brent, Proc. of Fifth Australian Supercomputer Conference, Melbourne, Dec. 1992, pp. 704-706. </para></blockquote> </para></description><type><classname>lagged_fibonacci_01_engine</classname>< double, 48, 1279, 418 ></type></typedef> -<typedef name="lagged_fibonacci2281"><description><para>The specializations lagged_fibonacci607 ... lagged_fibonacci44497 use well tested lags.</para><para>See</para><para> <blockquote><para> "On the Periods of Generalized Fibonacci Recurrences", Richard P. Brent Computer Sciences Laboratory Australian National University, December 1992 </para></blockquote> </para><para>The lags used here can be found in</para><para> <blockquote><para> "Uniform random number generators for supercomputers", Richard Brent, Proc. of Fifth Australian Supercomputer Conference, Melbourne, Dec. 1992, pp. 704-706. </para></blockquote> </para></description><type><classname>lagged_fibonacci_01_engine</classname>< double, 48, 2281, 1252 ></type></typedef> -<typedef name="lagged_fibonacci3217"><description><para>The specializations lagged_fibonacci607 ... lagged_fibonacci44497 use well tested lags.</para><para>See</para><para> <blockquote><para> "On the Periods of Generalized Fibonacci Recurrences", Richard P. Brent Computer Sciences Laboratory Australian National University, December 1992 </para></blockquote> </para><para>The lags used here can be found in</para><para> <blockquote><para> "Uniform random number generators for supercomputers", Richard Brent, Proc. of Fifth Australian Supercomputer Conference, Melbourne, Dec. 1992, pp. 704-706. </para></blockquote> </para></description><type><classname>lagged_fibonacci_01_engine</classname>< double, 48, 3217, 576 ></type></typedef> -<typedef name="lagged_fibonacci4423"><description><para>The specializations lagged_fibonacci607 ... lagged_fibonacci44497 use well tested lags.</para><para>See</para><para> <blockquote><para> "On the Periods of Generalized Fibonacci Recurrences", Richard P. Brent Computer Sciences Laboratory Australian National University, December 1992 </para></blockquote> </para><para>The lags used here can be found in</para><para> <blockquote><para> "Uniform random number generators for supercomputers", Richard Brent, Proc. of Fifth Australian Supercomputer Conference, Melbourne, Dec. 1992, pp. 704-706. </para></blockquote> </para></description><type><classname>lagged_fibonacci_01_engine</classname>< double, 48, 4423, 2098 ></type></typedef> -<typedef name="lagged_fibonacci9689"><description><para>The specializations lagged_fibonacci607 ... lagged_fibonacci44497 use well tested lags.</para><para>See</para><para> <blockquote><para> "On the Periods of Generalized Fibonacci Recurrences", Richard P. Brent Computer Sciences Laboratory Australian National University, December 1992 </para></blockquote> </para><para>The lags used here can be found in</para><para> <blockquote><para> "Uniform random number generators for supercomputers", Richard Brent, Proc. of Fifth Australian Supercomputer Conference, Melbourne, Dec. 1992, pp. 704-706. </para></blockquote> </para></description><type><classname>lagged_fibonacci_01_engine</classname>< double, 48, 9689, 5502 ></type></typedef> -<typedef name="lagged_fibonacci19937"><description><para>The specializations lagged_fibonacci607 ... lagged_fibonacci44497 use well tested lags.</para><para>See</para><para> <blockquote><para> "On the Periods of Generalized Fibonacci Recurrences", Richard P. Brent Computer Sciences Laboratory Australian National University, December 1992 </para></blockquote> </para><para>The lags used here can be found in</para><para> <blockquote><para> "Uniform random number generators for supercomputers", Richard Brent, Proc. of Fifth Australian Supercomputer Conference, Melbourne, Dec. 1992, pp. 704-706. </para></blockquote> </para></description><type><classname>lagged_fibonacci_01_engine</classname>< double, 48, 19937, 9842 ></type></typedef> -<typedef name="lagged_fibonacci23209"><description><para>The specializations lagged_fibonacci607 ... lagged_fibonacci44497 use well tested lags.</para><para>See</para><para> <blockquote><para> "On the Periods of Generalized Fibonacci Recurrences", Richard P. Brent Computer Sciences Laboratory Australian National University, December 1992 </para></blockquote> </para><para>The lags used here can be found in</para><para> <blockquote><para> "Uniform random number generators for supercomputers", Richard Brent, Proc. of Fifth Australian Supercomputer Conference, Melbourne, Dec. 1992, pp. 704-706. </para></blockquote> </para></description><type><classname>lagged_fibonacci_01_engine</classname>< double, 48, 23209, 13470 ></type></typedef> -<typedef name="lagged_fibonacci44497"><description><para>The specializations lagged_fibonacci607 ... lagged_fibonacci44497 use well tested lags.</para><para>See</para><para> <blockquote><para> "On the Periods of Generalized Fibonacci Recurrences", Richard P. Brent Computer Sciences Laboratory Australian National University, December 1992 </para></blockquote> </para><para>The lags used here can be found in</para><para> <blockquote><para> "Uniform random number generators for supercomputers", Richard Brent, Proc. of Fifth Australian Supercomputer Conference, Melbourne, Dec. 1992, pp. 704-706. </para></blockquote> </para></description><type><classname>lagged_fibonacci_01_engine</classname>< double, 48, 44497, 21034 ></type></typedef> - -</namespace> -</namespace> -</header> -<header name="boost/random/laplace_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="laplace_distribution"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>The laplace distribution is a real-valued distribution with two parameters, mean and beta.</para><para>It has <inlineequation><alt>$\displaystyle p(x) = \frac{e^-{\frac{|x-\mu|}{\beta}}}{2\beta}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_28.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle p(x) = \frac{e^-{\frac{|x-\mu|}{\beta}}}{2\beta}$</phrase></textobject></inlinemediaobject></inlineequation>. </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>laplace_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="mean" cv="const"><type>RealType</type><description><para>Returns the "mean" parameter of the distribtuion. </para></description></method> -<method name="beta" cv="const"><type>RealType</type><description><para>Returns the "beta" parameter of the distribution. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="mean"><paramtype>RealType</paramtype><default>0.0</default></parameter><parameter name="beta"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::laplace_distribution::param_type">param_type</classname></computeroutput> from the "mean" and "beta" parameters of the distribution. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::laplace_distribution::param_type">param_type</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::laplace_distribution::param_type">param_type</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the same. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the different. </para></description></method> -</method-group> -</class><typedef name="result_type"><type>RealType</type></typedef> -<typedef name="input_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="operator()" cv="const"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><description><para>Returns a random variate distributed according to the laplace distribution. </para></description></method> -<method name="operator()" cv="const"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a random variate distributed accordint to the laplace distribution with parameters specified by <computeroutput>param</computeroutput>. </para></description></method> -<method name="mean" cv="const"><type>RealType</type><description><para>Returns the "mean" parameter of the distribution. </para></description></method> -<method name="beta" cv="const"><type>RealType</type><description><para>Returns the "beta" parameter of the distribution. </para></description></method> -<method name="min" cv="const"><type>RealType</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>RealType</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="mean"><paramtype>RealType</paramtype><default>0.0</default></parameter><parameter name="beta"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs an <computeroutput><classname alt="boost::random::laplace_distribution">laplace_distribution</classname></computeroutput> from its "mean" and "beta" parameters. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs an <computeroutput><classname alt="boost::random::laplace_distribution">laplace_distribution</classname></computeroutput> from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="wd"><paramtype>const <classname>laplace_distribution</classname> &</paramtype></parameter><description><para>Writes an <computeroutput><classname alt="boost::random::laplace_distribution">laplace_distribution</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="wd"><paramtype>const <classname>laplace_distribution</classname> &</paramtype></parameter><description><para>Reads an <computeroutput><classname alt="boost::random::laplace_distribution">laplace_distribution</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>laplace_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>laplace_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two instances of <computeroutput><classname alt="boost::random::laplace_distribution">laplace_distribution</classname></computeroutput> will return identical sequences of values given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>laplace_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>laplace_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two instances of <computeroutput><classname alt="boost::random::laplace_distribution">laplace_distribution</classname></computeroutput> will return different sequences of values given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/linear_congruential.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="linear_congruential_engine"><template> - <template-type-parameter name="IntType"/> - <template-nontype-parameter name="a"><type>IntType</type></template-nontype-parameter> - <template-nontype-parameter name="c"><type>IntType</type></template-nontype-parameter> - <template-nontype-parameter name="m"><type>IntType</type></template-nontype-parameter> - </template><description><para>Instantiations of class template <classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . Linear congruential pseudo-random number generators are described in:</para><para> <blockquote><para> "Mathematical methods in large-scale computing units", D. H. Lehmer, Proc. 2nd Symposium on Large-Scale Digital Calculating Machines, Harvard University Press, 1951, pp. 141-146 </para></blockquote> </para><para>Let x(n) denote the sequence of numbers returned by some pseudo-random number generator. Then for the linear congruential generator, x(n+1) := (a * x(n) + c) mod m. Parameters for the generator are x(0), a, c, m. The template parameter IntType shall denote an integral type. It must be large enough to hold values a, c, and m. The template parameters a and c must be smaller than m.</para><para>Note: The quality of the generator crucially depends on the choice of the parameters. User code should use one of the sensibly parameterized generators such as minstd_rand instead. </para></description><typedef name="result_type"><type>IntType</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<data-member name="multiplier" specifiers="static"><type>const IntType</type></data-member> -<data-member name="increment" specifiers="static"><type>const IntType</type></data-member> -<data-member name="modulus" specifiers="static"><type>const IntType</type></data-member> -<data-member name="default_seed" specifiers="static"><type>const IntType</type></data-member> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Calls seed(default_seed) </para></description></method> -<method name="seed"><type>void</type><parameter name="x0_"><paramtype>IntType</paramtype></parameter><description><para>If c mod m is zero and x0 mod m is zero, changes the current value of the generator to 1. Otherwise, changes it to x0 mod m. If c is zero, distinct seeds in the range [1,m) will leave the generator in distinct states. If c is not zero, the range is [0,m). </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Seeds a <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput> using values from a SeedSeq. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>seeds a <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput> with values taken from the itrator range [first, last) and adjusts <computeroutput>first</computeroutput> to point to the element after the last one used. If there are not enough elements, throws <computeroutput>std::invalid_argument</computeroutput>.</para><para><computeroutput>first</computeroutput> and <computeroutput>last</computeroutput> must be input iterators. </para></description></method> -<method name="operator()"><type>IntType</type><description><para>Returns the next value of the <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput>. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput>. </para></description></method> -</method-group> -<constructor><description><para>Constructs a <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput>, using the default seed </para></description></constructor> -<constructor specifiers="explicit"><parameter name="x0"><paramtype>IntType</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput>, seeding it with <computeroutput>x0</computeroutput>. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput>, seeding it with values produced by a call to <computeroutput>seq.generate()</computeroutput>. </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput> and seeds it with values taken from the itrator range [first, last) and adjusts first to point to the element after the last one used. If there are not enough elements, throws <computeroutput>std::invalid_argument</computeroutput>.</para><para>first and last must be input iterators. </para></description></constructor> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput> can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the largest value that the <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput> can produce. </para></description></method> -</method-group> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="lcg"><paramtype>const <classname>linear_congruential_engine</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="lcg"><paramtype><classname>linear_congruential_engine</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -</method-group> -</class><class name="rand48"><description><para>Class <computeroutput><classname alt="boost::random::rand48">rand48</classname></computeroutput> models a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . It uses the linear congruential algorithm with the parameters a = 0x5DEECE66D, c = 0xB, m = 2**48. It delivers identical results to the <computeroutput>lrand48()</computeroutput> function available on some systems (assuming lcong48 has not been called).</para><para>It is only available on systems where <computeroutput>uint64_t</computeroutput> is provided as an integral type, so that for example static in-class constants and/or enum definitions with large <computeroutput>uint64_t</computeroutput> numbers work. </para></description><typedef name="result_type"><type>boost::uint32_t</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr uint32_t</type><description><para>Returns the smallest value that the generator can produce </para></description></method> -<method name="max" specifiers="static"><type>constexpr uint32_t</type><description><para>Returns the largest value that the generator can produce </para></description></method> -</method-group> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Seeds the generator with the default seed. </para></description></method> -<method name="seed"><type>void</type><parameter name="x0"><paramtype>result_type</paramtype></parameter><description><para>Changes the current value x(n) of the generator to (x0 << 16) | 0x330e. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Seeds the generator using values from an iterator range, and updates first to point one past the last value consumed. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Seeds the generator with values produced by <computeroutput>seq.generate()</computeroutput>. </para></description></method> -<method name="operator()"><type>uint32_t</type><description><para>Returns the next value of the generator. </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput>. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values </para></description></method> -</method-group> -<constructor><description><para>Seeds the generator with the default seed. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="x0"><paramtype>result_type</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::rand48">rand48</classname> generator with x(0) := (x0 << 16) | 0x330e. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Seeds the generator with values produced by <computeroutput>seq.generate()</computeroutput>. </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Seeds the generator using values from an iterator range, and updates first to point one past the last value consumed. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="r"><paramtype>const <classname>rand48</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::rand48">rand48</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="r"><paramtype><classname>rand48</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::rand48">rand48</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x"><paramtype>const <classname>rand48</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>rand48</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce identical sequences of values. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="x"><paramtype>const <classname>rand48</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>rand48</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce different sequences of values. </para></description></method> -</method-group> -</class><typedef name="minstd_rand0"><description><para>The specialization <classname alt="boost::random::minstd_rand0">minstd_rand0</classname> was originally suggested in</para><para> <blockquote><para> A pseudo-random number generator for the System/360, P.A. Lewis, A.S. Goodman, J.M. Miller, IBM Systems Journal, Vol. 8, No. 2, 1969, pp. 136-146 </para></blockquote> </para><para>It is examined more closely together with <classname alt="boost::random::minstd_rand">minstd_rand</classname> in</para><para> <blockquote><para> "Random Number Generators: Good ones are hard to find", Stephen K. Park and Keith W. Miller, Communications of the ACM, Vol. 31, No. 10, October 1988, pp. 1192-1201 </para></blockquote> </para></description><type><classname>linear_congruential_engine</classname>< uint32_t, 16807, 0, 2147483647 ></type></typedef> -<typedef name="minstd_rand"><description><para>The specialization <classname alt="boost::random::minstd_rand">minstd_rand</classname> was suggested in</para><para> <blockquote><para> "Random Number Generators: Good ones are hard to find", Stephen K. Park and Keith W. Miller, Communications of the ACM, Vol. 31, No. 10, October 1988, pp. 1192-1201 </para></blockquote> </para></description><type><classname>linear_congruential_engine</classname>< uint32_t, 48271, 0, 2147483647 ></type></typedef> - -</namespace> -</namespace> -</header> -<header name="boost/random/linear_feedback_shift.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="linear_feedback_shift_engine"><template> - <template-type-parameter name="UIntType"/> - <template-nontype-parameter name="w"><type>int</type></template-nontype-parameter> - <template-nontype-parameter name="k"><type>int</type></template-nontype-parameter> - <template-nontype-parameter name="q"><type>int</type></template-nontype-parameter> - <template-nontype-parameter name="s"><type>int</type></template-nontype-parameter> - </template><description><para>Instatiations of <computeroutput>linear_feedback_shift</computeroutput> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . It was originally proposed in</para><para> <blockquote><para> "Random numbers generated by linear recurrence modulo two.", Tausworthe, R. C.(1965), Mathematics of Computation 19, 201-209. </para></blockquote> </para></description><typedef name="result_type"><type>UIntType</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<data-member name="word_size" specifiers="static"><type>const int</type></data-member> -<data-member name="exponent1" specifiers="static"><type>const int</type></data-member> -<data-member name="exponent2" specifiers="static"><type>const int</type></data-member> -<data-member name="step_size" specifiers="static"><type>const int</type></data-member> -<data-member name="default_seed" specifiers="static"><type>const UIntType</type></data-member> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the generator can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the largest value that the generator can produce. </para></description></method> -</method-group> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Seeds a <computeroutput><classname alt="boost::random::linear_feedback_shift_engine">linear_feedback_shift_engine</classname></computeroutput> with the default seed. </para></description></method> -<method name="seed"><type>void</type><parameter name="s0"><paramtype>UIntType</paramtype></parameter><description><para>Seeds a <computeroutput><classname alt="boost::random::linear_feedback_shift_engine">linear_feedback_shift_engine</classname></computeroutput> with <computeroutput>s0</computeroutput>. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Seeds a <computeroutput><classname alt="boost::random::linear_feedback_shift_engine">linear_feedback_shift_engine</classname></computeroutput> with values produced by <computeroutput>seq.generate()</computeroutput>. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Seeds a <computeroutput><classname alt="boost::random::linear_feedback_shift_engine">linear_feedback_shift_engine</classname></computeroutput> with values from the range [first, last). </para></description></method> -<method name="operator()"><type>result_type</type><description><para>Returns the next value of the generator. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput>. </para></description></method> -</method-group> -<constructor><description><para>Constructs a <computeroutput><classname alt="boost::random::linear_feedback_shift_engine">linear_feedback_shift_engine</classname></computeroutput>, using the default seed. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="s0"><paramtype>UIntType</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::linear_feedback_shift_engine">linear_feedback_shift_engine</classname></computeroutput>, seeding it with s0. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::linear_feedback_shift_engine">linear_feedback_shift_engine</classname></computeroutput>, seeding it with seq. </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::linear_feedback_shift_engine">linear_feedback_shift_engine</classname></computeroutput>, seeding it with values from the range [first, last). </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="x"><paramtype>const <classname>linear_feedback_shift_engine</classname> &</paramtype></parameter><description><para>Writes the textual representation of the generator to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="x"><paramtype>const <classname>linear_feedback_shift_engine</classname> &</paramtype></parameter><description><para>Reads the textual representation of the generator from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x"><paramtype>const <classname>linear_feedback_shift_engine</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>linear_feedback_shift_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce identical sequences of outputs. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>linear_feedback_shift_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>linear_feedback_shift_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce different sequences of outputs. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/lognormal_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="lognormal_distribution"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>Instantiations of class template <classname alt="boost::random::lognormal_distribution">lognormal_distribution</classname> model a <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . Such a distribution produces random numbers with <inlineequation><alt>$\displaystyle p(x) = \frac{1}{x s \sqrt{2\pi}} e^{\frac{-\left(\log(x)-m\right)^2}{2s^2}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_29.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle p(x) = \frac{1}{x s \sqrt{2\pi}} e^{\frac{-\left(\log(x)-m\right)^2}{2s^2}}$</phrase></textobject></inlinemediaobject></inlineequation> for x > 0.</para><para> <warning><para> This distribution has been updated to match the C++ standard. Its behavior has changed from the original boost::lognormal_distribution. A backwards compatible version is provided in namespace boost. </para></warning> </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>lognormal_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="m" cv="const"><type>RealType</type><description><para>Returns the "m" parameter of the distribution. </para></description></method> -<method name="s" cv="const"><type>RealType</type><description><para>Returns the "s" parameter of the distribution. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="m"><paramtype>RealType</paramtype><default>0.0</default></parameter><parameter name="s"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs the parameters of a <classname alt="boost::random::lognormal_distribution">lognormal_distribution</classname>. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters to a std::ostream. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters from a std::istream. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are equal. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are different. </para></description></method> -</method-group> -</class><typedef name="input_type"><type><classname>normal_distribution</classname>< RealType >::input_type</type></typedef> -<typedef name="result_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="m" cv="const"><type>RealType</type><description><para>Returns the m parameter of the distribution. </para></description></method> -<method name="s" cv="const"><type>RealType</type><description><para>Returns the s parameter of the distribution. </para></description></method> -<method name="min" cv="const"><type>RealType</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>RealType</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -<method name="operator()"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><description><para>Returns a random variate distributed according to the lognormal distribution. </para></description></method> -<method name="operator()"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a random variate distributed according to the lognormal distribution with parameters specified by param. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="m"><paramtype>RealType</paramtype><default>0.0</default></parameter><parameter name="s"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs a <classname alt="boost::random::lognormal_distribution">lognormal_distribution</classname>. <computeroutput>m</computeroutput> and <computeroutput>s</computeroutput> are the parameters of the distribution. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::lognormal_distribution">lognormal_distribution</classname> from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="ld"><paramtype>const <classname>lognormal_distribution</classname> &</paramtype></parameter><description><para>Writes the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="ld"><paramtype>const <classname>lognormal_distribution</classname> &</paramtype></parameter><description><para>Reads the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>lognormal_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>lognormal_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions will produce identical sequences of values given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>lognormal_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>lognormal_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions may produce different sequences of values given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/mersenne_twister.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="mersenne_twister_engine"><template> - <template-type-parameter name="UIntType"/> - <template-nontype-parameter name="w"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="n"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="m"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="r"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="a"><type>UIntType</type></template-nontype-parameter> - <template-nontype-parameter name="u"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="d"><type>UIntType</type></template-nontype-parameter> - <template-nontype-parameter name="s"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="b"><type>UIntType</type></template-nontype-parameter> - <template-nontype-parameter name="t"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="c"><type>UIntType</type></template-nontype-parameter> - <template-nontype-parameter name="l"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="f"><type>UIntType</type></template-nontype-parameter> - </template><description><para>Instantiations of class template <classname alt="boost::random::mersenne_twister_engine">mersenne_twister_engine</classname> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . It uses the algorithm described in</para><para> <blockquote><para> "Mersenne Twister: A 623-dimensionally equidistributed uniform - pseudo-random number generator", Makoto Matsumoto and Takuji Nishimura, ACM Transactions on Modeling and Computer Simulation: Special Issue on Uniform Random Number Generation, Vol. 8, No. 1, January 1998, pp. 3-30. </para></blockquote> </para><para> <note><para> The boost variant has been implemented from scratch and does not derive from or use mt19937.c provided on the above WWW site. However, it was verified that both produce identical output. </para></note> </para><para>The seeding from an integer was changed in April 2005 to address a <ulink url="http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html">weakness</ulink>.</para><para>The quality of the generator crucially depends on the choice of the parameters. User code should employ one of the sensibly parameterized generators such as <classname alt="boost::random::mt19937">mt19937</classname> instead.</para><para>The generator requires considerable amounts of memory for the storage of its state array. For example, <classname alt="boost::random::mt11213b">mt11213b</classname> requires about 1408 bytes and <classname alt="boost::random::mt19937">mt19937</classname> requires about 2496 bytes. </para></description><typedef name="result_type"><type>UIntType</type></typedef> -<data-member name="word_size" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="state_size" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="shift_size" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="mask_bits" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="xor_mask" specifiers="static"><type>const UIntType</type></data-member> -<data-member name="tempering_u" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="tempering_d" specifiers="static"><type>const UIntType</type></data-member> -<data-member name="tempering_s" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="tempering_b" specifiers="static"><type>const UIntType</type></data-member> -<data-member name="tempering_t" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="tempering_c" specifiers="static"><type>const UIntType</type></data-member> -<data-member name="tempering_l" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="initialization_multiplier" specifiers="static"><type>const UIntType</type></data-member> -<data-member name="default_seed" specifiers="static"><type>const UIntType</type></data-member> -<data-member name="parameter_a" specifiers="static"><type>const UIntType</type></data-member> -<data-member name="output_u" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="output_s" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="output_b" specifiers="static"><type>const UIntType</type></data-member> -<data-member name="output_t" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="output_c" specifiers="static"><type>const UIntType</type></data-member> -<data-member name="output_l" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Calls <computeroutput>seed(default_seed)</computeroutput>. </para></description></method> -<method name="seed"><type>void</type><parameter name="value"><paramtype>UIntType</paramtype></parameter><description><para>Sets the state x(0) to v mod 2w. Then, iteratively, sets x(i) to (i + f * (x(i-1) xor (x(i-1) rshift w-2))) mod 2<superscript>w</superscript> for i = 1 .. n-1. x(n) is the first value to be returned by operator(). </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeeqSeq"/> - </template><parameter name="seq"><paramtype>SeeqSeq &</paramtype></parameter><description><para>Seeds a <classname alt="boost::random::mersenne_twister_engine">mersenne_twister_engine</classname> using values produced by seq.generate(). </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Sets the state of the generator using values from an iterator range. </para></description></method> -<method name="operator()"><type>result_type</type><description><para>Produces the next value of the generator. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput> steps. Equivalent to</para><para><programlisting language="c++">for(unsigned long long i = 0; i < z; ++i) { - gen(); -} -</programlisting> </para></description></method> -</method-group> -<constructor><description><para>Constructs a <computeroutput><classname alt="boost::random::mersenne_twister_engine">mersenne_twister_engine</classname></computeroutput> and calls <computeroutput>seed()</computeroutput>. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="value"><paramtype>UIntType</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::mersenne_twister_engine">mersenne_twister_engine</classname></computeroutput> and calls <computeroutput>seed(value)</computeroutput>. </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::mersenne_twister_engine">mersenne_twister_engine</classname> and calls <computeroutput>seed(gen)</computeroutput>.</para><para> <note><para> The copy constructor will always be preferred over the templated constructor. </para></note> </para></description></constructor> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the generator can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the largest value that the generator can produce. </para></description></method> -</method-group> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="mt"><paramtype>const <classname>mersenne_twister_engine</classname> &</paramtype></parameter><description><para>Writes a <classname alt="boost::random::mersenne_twister_engine">mersenne_twister_engine</classname> to a <computeroutput>std::ostream</computeroutput> </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="mt"><paramtype><classname>mersenne_twister_engine</classname> &</paramtype></parameter><description><para>Reads a <classname alt="boost::random::mersenne_twister_engine">mersenne_twister_engine</classname> from a <computeroutput>std::istream</computeroutput> </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x_"><paramtype>const <classname>mersenne_twister_engine</classname> &</paramtype></parameter><parameter name="y_"><paramtype>const <classname>mersenne_twister_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators are in the same state, and will thus produce identical sequences. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="x_"><paramtype>const <classname>mersenne_twister_engine</classname> &</paramtype></parameter><parameter name="y_"><paramtype>const <classname>mersenne_twister_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators are in different states. </para></description></method> -</method-group> -</class><typedef name="mt11213b"><description><para>The specializations <classname alt="boost::random::mt11213b">mt11213b</classname> and <classname alt="boost::random::mt19937">mt19937</classname> are from</para><para> <blockquote><para> "Mersenne Twister: A 623-dimensionally equidistributed - uniform pseudo-random number generator", Makoto Matsumoto and Takuji Nishimura, ACM Transactions on Modeling and Computer Simulation: Special Issue on Uniform Random Number Generation, Vol. 8, No. 1, January 1998, pp. 3-30. </para></blockquote> </para></description><type><classname>mersenne_twister_engine</classname>< uint32_t, 32, 351, 175, 19, 0xccab8ee7, 11, 0xffffffff, 7, 0x31b6ab00, 15, 0xffe50000, 17, 1812433253 ></type></typedef> -<typedef name="mt19937"><description><para>The specializations <classname alt="boost::random::mt11213b">mt11213b</classname> and <classname alt="boost::random::mt19937">mt19937</classname> are from</para><para> <blockquote><para> "Mersenne Twister: A 623-dimensionally equidistributed - uniform pseudo-random number generator", Makoto Matsumoto and Takuji Nishimura, ACM Transactions on Modeling and Computer Simulation: Special Issue on Uniform Random Number Generation, Vol. 8, No. 1, January 1998, pp. 3-30. </para></blockquote> </para></description><type><classname>mersenne_twister_engine</classname>< uint32_t, 32, 624, 397, 31, 0x9908b0df, 11, 0xffffffff, 7, 0x9d2c5680, 15, 0xefc60000, 18, 1812433253 ></type></typedef> -<typedef name="mt19937_64"><type><classname>mersenne_twister_engine</classname>< uint64_t, 64, 312, 156, 31, 0xb5026f5aa96619e9ull, 29, 0x5555555555555555ull, 17, 0x71d67fffeda60000ull, 37, 0xfff7eee000000000ull, 43, 6364136223846793005ull ></type></typedef> - -</namespace> -</namespace> -<macro name="BOOST_RANDOM_MERSENNE_TWISTER_DISCARD_THRESHOLD"/> -</header> -<header name="boost/random/mixmax.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="mixmax_engine"><template> - <template-nontype-parameter name="Ndim"><type>int</type></template-nontype-parameter> - <template-nontype-parameter name="SPECIALMUL"><type>unsigned int</type></template-nontype-parameter> - <template-nontype-parameter name="SPECIAL"><type>boost::int64_t</type></template-nontype-parameter> - </template><description><para>Instantiations of class template <classname alt="boost::random::mixmax_engine">mixmax_engine</classname> model, <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . It uses the MIXMAX generator algorithms from:</para><para> <blockquote><para> G.K.Savvidy and N.G.Ter-Arutyunian, On the Monte Carlo simulation of physical systems, J.Comput.Phys. 97, 566 (1991); Preprint EPI-865-16-86, Yerevan, Jan. 1986 <ulink url="http://dx.doi.org/10.1016/0021-9991(91)90015-D">http://dx.doi.org/10.1016/0021-9991(91)90015-D</ulink></para> -<para>K.Savvidy The MIXMAX random number generator Comp. Phys. Commun. 196 (2015), pp 161–165 <ulink url="http://dx.doi.org/10.1016/j.cpc.2015.06.003">http://dx.doi.org/10.1016/j.cpc.2015.06.003</ulink></para> -<para>K.Savvidy and G.Savvidy Spectrum and Entropy of C-systems. MIXMAX random number generator Chaos, Solitons & Fractals, Volume 91, (2016) pp. 33–38 <ulink url="http://dx.doi.org/10.1016/j.chaos.2016.05.003">http://dx.doi.org/10.1016/j.chaos.2016.05.003</ulink> </para></blockquote> </para><para>The generator crucially depends on the choice of the parameters. The valid sets of parameters are from the published papers above. </para></description><struct name="rng_state_st"><data-member name="V"><type>boost::array< boost::uint64_t, Ndim ></type></data-member> -<data-member name="sumtot"><type>boost::uint64_t</type></data-member> -<data-member name="counter"><type>int</type></data-member> -</struct><typedef name="result_type"><type>boost::uint64_t</type></typedef> -<data-member name="mixmax_min" specifiers="static"><type>const boost::uint64_t</type></data-member> -<data-member name="mixmax_max" specifiers="static"><type>const boost::uint64_t</type></data-member> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<data-member name="N" specifiers="static"><type>const int</type><purpose>The main internal parameter, size of the defining MIXMAX matrix. </purpose></data-member> -<method-group name="public member functions"> -<method name="min"><type>BOOST_STATIC_CONSTEXPR result_type</type></method> -<method name="max"><type>BOOST_STATIC_CONSTEXPR result_type</type></method> -<method name="seed"><type>void</type><parameter name="seedval"><paramtype>boost::uint64_t</paramtype><default>default_seed</default></parameter><purpose>seed with one 64-bit seed </purpose></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Sets the state of the generator using values from an iterator range. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeeqSeq"/> - </template><parameter name="seq"><paramtype>SeeqSeq &</paramtype></parameter><description><para>Sets the state of the generator using values from a <classname alt="boost::random::seed_seq">seed_seq</classname>. </para></description></method> -<method name="operator()"><type>boost::uint64_t</type><description><para>return one uint64 between min=0 and max=2^61-1 </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values </para></description></method> -<method name="discard"><type>void</type><parameter name="nsteps"><paramtype>boost::uint64_t</paramtype></parameter><purpose>discard n steps, required in boost::random </purpose></method> -</method-group> -<constructor specifiers="explicit"><purpose>Constructor, unit vector as initial state, acted on by A^2^512. </purpose></constructor> -<constructor specifiers="explicit"><parameter name=""><paramtype>boost::uint64_t</paramtype></parameter><purpose>Constructor, one 64-bit seed. </purpose><description><para>< constructor, one uint64_t seed, random numbers are statistically independent from any two distinct seeds, e.g. consecutive seeds are ok </para></description></constructor> -<constructor specifiers="explicit"><parameter name="clusterID"><paramtype>uint32_t</paramtype></parameter><parameter name="machineID"><paramtype>uint32_t</paramtype></parameter><parameter name="runID"><paramtype>uint32_t</paramtype></parameter><parameter name="streamID"><paramtype>uint32_t</paramtype></parameter><purpose>Constructor, four 32-bit seeds for 128-bit seeding flexibility. </purpose></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="ost"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="me"><paramtype>const <classname>mixmax_engine</classname> &</paramtype></parameter><description><para>save the state of the RNG to a stream </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="in"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="me"><paramtype><classname>mixmax_engine</classname> &</paramtype></parameter><description><para>read the state of the RNG from a stream </para></description></method> -</method-group> -<method-group name="private member functions"> -<method name="MOD_MERSENNE"><type>boost::uint64_t</type><parameter name="k"><paramtype>boost::uint64_t</paramtype></parameter></method> -<method name="MULWU"><type>boost::uint64_t</type><parameter name="k"><paramtype>boost::uint64_t</paramtype></parameter></method> -<method name="seed_vielbein"><type>void</type><parameter name="X"><paramtype>rng_state_t *</paramtype></parameter><parameter name="i"><paramtype>unsigned int</paramtype></parameter></method> -<method name="seed_uniquestream"><type>void</type><parameter name="Xin"><paramtype>rng_state_t *</paramtype></parameter><parameter name="clusterID"><paramtype>uint32_t</paramtype></parameter><parameter name="machineID"><paramtype>uint32_t</paramtype></parameter><parameter name="runID"><paramtype>uint32_t</paramtype></parameter><parameter name="streamID"><paramtype>uint32_t</paramtype></parameter></method> -<method name="iterate_raw_vec"><type>boost::uint64_t</type><parameter name="Y"><paramtype>boost::uint64_t *</paramtype></parameter><parameter name="sumtotOld"><paramtype>boost::uint64_t</paramtype></parameter></method> -<method name="apply_bigskip"><type>boost::uint64_t</type><parameter name="Vout"><paramtype>boost::uint64_t *</paramtype></parameter><parameter name="Vin"><paramtype>boost::uint64_t *</paramtype></parameter><parameter name="clusterID"><paramtype>uint32_t</paramtype></parameter><parameter name="machineID"><paramtype>uint32_t</paramtype></parameter><parameter name="runID"><paramtype>uint32_t</paramtype></parameter><parameter name="streamID"><paramtype>uint32_t</paramtype></parameter></method> -<method name="modadd"><type>boost::uint64_t</type><parameter name="foo"><paramtype>boost::uint64_t</paramtype></parameter><parameter name="bar"><paramtype>boost::uint64_t</paramtype></parameter></method> -<method name="fmodmulM61"><type>boost::uint64_t</type><parameter name="cum"><paramtype>boost::uint64_t</paramtype></parameter><parameter name="s"><paramtype>boost::uint64_t</paramtype></parameter><parameter name="a"><paramtype>boost::uint64_t</paramtype></parameter></method> -</method-group> -</class><typedef name="mixmax"><description><para>Instantiation with a valid parameter set. </para></description><type><classname>mixmax_engine</classname>< 17, 36, 0 ></type></typedef> - -</namespace> -</namespace> -</header> -<header name="boost/random/negative_binomial_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="negative_binomial_distribution"><template> - <template-type-parameter name="IntType"><default>int</default></template-type-parameter> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>The negative binomial distribution is an integer valued distribution with two parameters, <computeroutput>k</computeroutput> and <computeroutput>p</computeroutput>. The distribution produces non-negative values.</para><para>The distribution function is <inlineequation><alt>$\displaystyle P(i) = {k+i-1\choose i}p^k(1-p)^i$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_30.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle P(i) = {k+i-1\choose i}p^k(1-p)^i$</phrase></textobject></inlinemediaobject></inlineequation>.</para><para>This implementation uses a gamma-poisson mixture. </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>negative_binomial_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="k" cv="const"><type>IntType</type><description><para>Returns the <computeroutput>k</computeroutput> parameter of the distribution. </para></description></method> -<method name="p" cv="const"><type>RealType</type><description><para>Returns the <computeroutput>p</computeroutput> parameter of the distribution. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="k"><paramtype>IntType</paramtype><default>1</default></parameter><parameter name="p"><paramtype>RealType</paramtype><default>0.5</default></parameter><description><para>Construct a <classname alt="boost::random::negative_binomial_distribution::param_type">param_type</classname> object. <computeroutput>k</computeroutput> and <computeroutput>p</computeroutput> are the parameters of the distribution.</para><para>Requires: k >=0 && 0 <= p <= 1 </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters of the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype><classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters of the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the parameters have the same values. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the parameters have different values. </para></description></method> -</method-group> -</class><typedef name="result_type"><type>IntType</type></typedef> -<typedef name="input_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="operator()" cv="const"><type>IntType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><description><para>Returns a random variate distributed according to the negative binomial distribution. </para></description></method> -<method name="operator()" cv="const"><type>IntType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a random variate distributed according to the negative binomial distribution with parameters specified by <computeroutput>param</computeroutput>. </para></description></method> -<method name="k" cv="const"><type>IntType</type><description><para>Returns the <computeroutput>k</computeroutput> parameter of the distribution. </para></description></method> -<method name="p" cv="const"><type>RealType</type><description><para>Returns the <computeroutput>p</computeroutput> parameter of the distribution. </para></description></method> -<method name="min" cv="const"><type>IntType</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>IntType</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="k"><paramtype>IntType</paramtype><default>1</default></parameter><parameter name="p"><paramtype>RealType</paramtype><default>0.5</default></parameter><description><para>Construct a <computeroutput><classname alt="boost::random::negative_binomial_distribution">negative_binomial_distribution</classname></computeroutput> object. <computeroutput>k</computeroutput> and <computeroutput>p</computeroutput> are the parameters of the distribution.</para><para>Requires: k >=0 && 0 <= p <= 1 </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Construct an <computeroutput><classname alt="boost::random::negative_binomial_distribution">negative_binomial_distribution</classname></computeroutput> object from the parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="bd"><paramtype>const <classname>negative_binomial_distribution</classname> &</paramtype></parameter><description><para>Writes the parameters of the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="bd"><paramtype><classname>negative_binomial_distribution</classname> &</paramtype></parameter><description><para>Reads the parameters of the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>negative_binomial_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>negative_binomial_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions will produce the same sequence of values, given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>negative_binomial_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>negative_binomial_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions could produce different sequences of values, given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/niederreiter_base2.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="niederreiter_base2_engine"><template> - <template-type-parameter name="UIntType"/> - <template-nontype-parameter name="w"><type>unsigned</type></template-nontype-parameter> - <template-type-parameter name="Nb2Table"><default>default_niederreiter_base2_table</default></template-type-parameter> - </template><description><para>Instantiations of class template <classname alt="boost::random::niederreiter_base2_engine">niederreiter_base2_engine</classname> model a <link linkend="boost_random.reference.concepts.quasi_random_number_generator">quasi-random number generator</link> . The <classname alt="boost::random::niederreiter_base2_engine">niederreiter_base2_engine</classname> uses the algorithm described in <blockquote><para> Bratley, Fox, Niederreiter, ACM Trans. Model. Comp. Sim. 2, 195 (1992). </para></blockquote> </para><para><note><para><classname alt="boost::random::niederreiter_base2_engine">niederreiter_base2_engine</classname> skips trivial zeroes at the start of the sequence. For example, the beginning of the 2-dimensional Niederreiter base 2 sequence in <computeroutput><classname alt="boost::random::uniform_01">uniform_01</classname></computeroutput> distribution will look like this: <programlisting language="c++">0.5, 0.5, -0.75, 0.25, -0.25, 0.75, -0.375, 0.375, -0.875, 0.875, -... -</programlisting></para> -</note> -In the following documentation <computeroutput>X</computeroutput> denotes the concrete class of the template <classname alt="boost::random::niederreiter_base2_engine">niederreiter_base2_engine</classname> returning objects of type <computeroutput>UIntType</computeroutput>, u and v are the values of <computeroutput>X</computeroutput>.</para><para>Some member functions may throw exceptions of type std::range_error. This happens when the quasi-random domain is exhausted and the generator cannot produce any more values. The length of the low discrepancy sequence is given by <inlineequation><alt>$L=Dimension \times (2^{w} - 1)$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_31.png"/></imageobject><textobject role="tex"><phrase>$L=Dimension \times (2^{w} - 1)$</phrase></textobject></inlinemediaobject></inlineequation>. </para></description><typedef name="result_type"><type>UIntType</type></typedef> -<method-group name="public member functions"> -<method name="dimension" cv="const"><type>std::size_t</type><description><para>Returns: The dimension of of the quasi-random domain.</para><para>Throws: nothing. </para></description></method> -<method name="seed"><type>void</type><purpose>Throws: nothing. </purpose><description><para>Effects: Resets the quasi-random number generator state to the one given by the default construction. Equivalent to u.seed(0). </para></description></method> -<method name="seed"><type>void</type><parameter name="init"><paramtype>UIntType</paramtype></parameter><purpose>Throws: range_error. </purpose><description><para>Effects: Effectively sets the quasi-random number generator state to the <computeroutput>init</computeroutput>-th vector in the <computeroutput>s</computeroutput>-dimensional quasi-random domain, where <computeroutput>s</computeroutput> == X::dimension(). <programlisting language="c++">X u, v; -for(int i = 0; i < N; ++i) - for( std::size_t j = 0; j < u.dimension(); ++j ) - u(); -v.seed(N); -assert(u() == v()); -</programlisting> </para></description></method> -<method name="operator()"><type>result_type</type><description><para>Returns: Returns a successive element of an <computeroutput>s</computeroutput>-dimensional (s = X::dimension()) vector at each invocation. When all elements are exhausted, X::operator() begins anew with the starting element of a subsequent <computeroutput>s</computeroutput>-dimensional vector.</para><para>Throws: range_error. </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Effects: Advances *this state as if <computeroutput>z</computeroutput> consecutive X::operator() invocations were executed. <programlisting language="c++">X u = v; -for(int i = 0; i < N; ++i) - u(); -v.discard(N); -assert(u() == v()); -</programlisting></para><para>Throws: range_error. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="s"><paramtype>std::size_t</paramtype></parameter><description><para>Effects: Constructs the default <computeroutput>s</computeroutput>-dimensional Niederreiter base 2 quasi-random number generator.</para><para>Throws: bad_alloc, invalid_argument, range_error. </para></description></constructor> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns: Tight lower bound on the set of values returned by operator().</para><para>Throws: nothing. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns: Tight upper bound on the set of values returned by operator().</para><para>Throws: nothing. </para></description></method> -</method-group> -<method-group name="friend functions"> -<method name="operator=="><type>friend bool</type><parameter name="x"><paramtype>const <classname>niederreiter_base2_engine</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>niederreiter_base2_engine</classname> &</paramtype></parameter><purpose>Returns true if the two generators will produce identical sequences of outputs. </purpose></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>niederreiter_base2_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>niederreiter_base2_engine</classname> &</paramtype></parameter><purpose>Returns true if the two generators will produce different sequences of outputs. </purpose></method> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="s"><paramtype>const <classname>niederreiter_base2_engine</classname> &</paramtype></parameter><purpose>Writes the textual representation of the generator to a <computeroutput>std::ostream</computeroutput>. </purpose></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="s"><paramtype>const <classname>niederreiter_base2_engine</classname> &</paramtype></parameter><purpose>Reads the textual representation of the generator from a <computeroutput>std::istream</computeroutput>. </purpose></method> -</method-group> -</class><typedef name="niederreiter_base2"><description><para><note><para>This specialization of <classname alt="boost::random::niederreiter_base2_engine">niederreiter_base2_engine</classname> supports up to 4720 dimensions.</para> -</note> -Binary irreducible polynomials (primes in the ring <computeroutput>GF(2)[X]</computeroutput>, evaluated at <computeroutput>X=2</computeroutput>) were generated while condition <computeroutput>max(prime)</computeroutput> < 2<superscript>16</superscript> was satisfied.</para><para>There are exactly 4720 such primes, which yields a Niederreiter base 2 table for 4720 dimensions.</para><para>However, it is possible to provide your own table to <classname alt="boost::random::niederreiter_base2_engine">niederreiter_base2_engine</classname> should the default one be insufficient. </para></description><type><classname>niederreiter_base2_engine</classname>< boost::uint_least64_t, 64u, default_niederreiter_base2_table ></type></typedef> - -</namespace> -</namespace> -</header> -<header name="boost/random/non_central_chi_squared_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="non_central_chi_squared_distribution"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>The noncentral chi-squared distribution is a real valued distribution with two parameter, <computeroutput>k</computeroutput> and <computeroutput>lambda</computeroutput>. The distribution produces values > 0.</para><para>This is the distribution of the sum of squares of k Normal distributed variates each with variance one and <inlineequation><alt>$\lambda$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_32.png"/></imageobject><textobject role="tex"><phrase>$\lambda$</phrase></textobject></inlinemediaobject></inlineequation> the sum of squares of the normal means.</para><para>The distribution function is <inlineequation><alt>$\displaystyle P(x) = \frac{1}{2} e^{-(x+\lambda)/2} \left( \frac{x}{\lambda} \right)^{k/4-1/2} I_{k/2-1}( \sqrt{\lambda x} )$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_33.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle P(x) = \frac{1}{2} e^{-(x+\lambda)/2} \left( \frac{x}{\lambda} \right)^{k/4-1/2} I_{k/2-1}( \sqrt{\lambda x} )$</phrase></textobject></inlinemediaobject></inlineequation>. where <inlineequation><alt>$\displaystyle I_\nu(z)$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_34.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle I_\nu(z)$</phrase></textobject></inlinemediaobject></inlineequation> is a modified Bessel function of the first kind.</para><para>The algorithm is taken from</para><para> <blockquote><para> "Monte Carlo Methods in Financial Engineering", Paul Glasserman, 2003, XIII, 596 p, Stochastic Modelling and Applied Probability, Vol. 53, ISBN 978-0-387-21617-1, p 124, Fig. 3.5. </para></blockquote> </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>non_central_chi_squared_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="k" cv="const"><type>RealType</type><description><para>Returns the <computeroutput>k</computeroutput> parameter of the distribution </para></description></method> -<method name="lambda" cv="const"><type>RealType</type><description><para>Returns the <computeroutput>lambda</computeroutput> parameter of the distribution </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="k"><paramtype>RealType</paramtype><default>1</default></parameter><parameter name="lambda"><paramtype>RealType</paramtype><default>1</default></parameter><description><para>Constructs the parameters of a <classname alt="boost::random::non_central_chi_squared_distribution">non_central_chi_squared_distribution</classname>. <computeroutput>k</computeroutput> and <computeroutput>lambda</computeroutput> are the parameter of the distribution.</para><para>Requires: k > 0 && lambda > 0 </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters of the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters of the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the parameters have the same values. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the parameters have different values. </para></description></method> -</method-group> -</class><typedef name="result_type"><type>RealType</type></typedef> -<typedef name="input_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="operator()" cv="const"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="eng"><paramtype>URNG &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a random variate distributed according to the non central chi squared distribution specified by <computeroutput>param</computeroutput>. </para></description></method> -<method name="operator()"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="eng"><paramtype>URNG &</paramtype></parameter><description><para>Returns a random variate distributed according to the non central chi squared distribution. </para></description></method> -<method name="k" cv="const"><type>RealType</type><description><para>Returns the <computeroutput>k</computeroutput> parameter of the distribution. </para></description></method> -<method name="lambda" cv="const"><type>RealType</type><description><para>Returns the <computeroutput>lambda</computeroutput> parameter of the distribution. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Resets the distribution, so that subsequent uses does not depend on values already produced by it. </para></description></method> -<method name="min" cv="const"><type>RealType</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>RealType</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="k"><paramtype>RealType</paramtype><default>1</default></parameter><parameter name="lambda"><paramtype>RealType</paramtype><default>1</default></parameter><description><para>Construct a <computeroutput><classname alt="boost::random::non_central_chi_squared_distribution">non_central_chi_squared_distribution</classname></computeroutput> object. <computeroutput>k</computeroutput> and <computeroutput>lambda</computeroutput> are the parameter of the distribution.</para><para>Requires: k > 0 && lambda > 0 </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Construct a <computeroutput><classname alt="boost::random::non_central_chi_squared_distribution">non_central_chi_squared_distribution</classname></computeroutput> object from the parameter. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="dist"><paramtype>const <classname>non_central_chi_squared_distribution</classname> &</paramtype></parameter><description><para>Writes the parameters of the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="dist"><paramtype>const <classname>non_central_chi_squared_distribution</classname> &</paramtype></parameter><description><para>reads the parameters of the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>non_central_chi_squared_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>non_central_chi_squared_distribution</classname> &</paramtype></parameter><description><para>Returns true if two distributions have the same parameters and produce the same sequence of random numbers given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>non_central_chi_squared_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>non_central_chi_squared_distribution</classname> &</paramtype></parameter><description><para>Returns true if two distributions have different parameters and/or can produce different sequences of random numbers given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/normal_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="normal_distribution"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>Instantiations of class template <classname alt="boost::random::normal_distribution">normal_distribution</classname> model a <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . Such a distribution produces random numbers <computeroutput>x</computeroutput> distributed with probability density function <inlineequation><alt>$\displaystyle p(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} $</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_35.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle p(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} $</phrase></textobject></inlinemediaobject></inlineequation>, where mean and sigma are the parameters of the distribution.</para><para>The implementation uses the "ziggurat" algorithm, as described in</para><para> <blockquote><para> "The Ziggurat Method for Generating Random Variables", George Marsaglia and Wai Wan Tsang, Journal of Statistical Software, Volume 5, Number 8 (2000), 1-7. </para></blockquote> </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>normal_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="mean" cv="const"><type>RealType</type><description><para>Returns the mean of the distribution. </para></description></method> -<method name="sigma" cv="const"><type>RealType</type><description><para>Returns the standand deviation of the distribution. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="mean"><paramtype>RealType</paramtype><default>0.0</default></parameter><parameter name="sigma"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::normal_distribution::param_type">param_type</classname></computeroutput> with a given mean and standard deviation.</para><para>Requires: sigma >= 0 </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::normal_distribution::param_type">param_type</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::normal_distribution::param_type">param_type</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the same. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the different. </para></description></method> -</method-group> -</class><typedef name="input_type"><type>RealType</type></typedef> -<typedef name="result_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="mean" cv="const"><type>RealType</type><description><para>Returns the mean of the distribution. </para></description></method> -<method name="sigma" cv="const"><type>RealType</type><description><para>Returns the standard deviation of the distribution. </para></description></method> -<method name="min" cv="const"><type>RealType</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>RealType</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -<method name="operator()"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><description><para>Returns a normal variate. </para></description></method> -<method name="operator()"><type>result_type</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a normal variate with parameters specified by <computeroutput>param</computeroutput>. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="mean"><paramtype>const RealType &</paramtype><default>0.0</default></parameter><parameter name="sigma"><paramtype>const RealType &</paramtype><default>1.0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::normal_distribution">normal_distribution</classname></computeroutput> object. <computeroutput>mean</computeroutput> and <computeroutput>sigma</computeroutput> are the parameters for the distribution.</para><para>Requires: sigma >= 0 </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::normal_distribution">normal_distribution</classname></computeroutput> object from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="nd"><paramtype>const <classname>normal_distribution</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::normal_distribution">normal_distribution</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="nd"><paramtype>const <classname>normal_distribution</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::normal_distribution">normal_distribution</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>normal_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>normal_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two instances of <computeroutput><classname alt="boost::random::normal_distribution">normal_distribution</classname></computeroutput> will return identical sequences of values given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>normal_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>normal_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two instances of <computeroutput><classname alt="boost::random::normal_distribution">normal_distribution</classname></computeroutput> will return different sequences of values given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/piecewise_constant_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="piecewise_constant_distribution"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - <template-type-parameter name="WeightType"><default>double</default></template-type-parameter> - </template><description><para>The class <computeroutput><classname alt="boost::random::piecewise_constant_distribution">piecewise_constant_distribution</classname></computeroutput> models a <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>piecewise_constant_distribution</classname></type></typedef> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the same. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are different. </para></description></method> -</method-group> -<method-group name="public member functions"> -<method name="intervals" cv="const"><type>std::vector< RealType ></type><description><para>Returns a vector containing the interval boundaries. </para></description></method> -<method name="densities" cv="const"><type>std::vector< RealType ></type><description><para>Returns a vector containing the probability densities over all the intervals of the distribution. </para></description></method> -</method-group> -<constructor><description><para>Constructs a <computeroutput><classname alt="boost::random::piecewise_constant_distribution::param_type">param_type</classname></computeroutput> object, representing a distribution that produces values uniformly distributed in the range [0, 1). </para></description></constructor> -<constructor><template> - <template-type-parameter name="IntervalIter"/> - <template-type-parameter name="WeightIter"/> - </template><parameter name="intervals_first"><paramtype>IntervalIter</paramtype></parameter><parameter name="intervals_last"><paramtype>IntervalIter</paramtype></parameter><parameter name="weight_first"><paramtype>WeightIter</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::piecewise_constant_distribution::param_type">param_type</classname></computeroutput> object from two iterator ranges containing the interval boundaries and the interval weights. If there are less than two boundaries, then this is equivalent to the default constructor and creates a single interval, [0, 1).</para><para>The values of the interval boundaries must be strictly increasing, and the number of weights must be one less than the number of interval boundaries. If there are extra weights, they are ignored. </para></description></constructor> -<constructor><template> - <template-type-parameter name="T"/> - <template-type-parameter name="F"/> - </template><parameter name="il"><paramtype>const std::initializer_list< T > &</paramtype></parameter><parameter name="f"><paramtype>F</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::piecewise_constant_distribution::param_type">param_type</classname></computeroutput> object from an initializer_list containing the interval boundaries and a unary function specifying the weights. Each weight is determined by calling the function at the midpoint of the corresponding interval.</para><para>If the initializer_list contains less than two elements, this is equivalent to the default constructor and the distribution will produce values uniformly distributed in the range [0, 1). </para></description></constructor> -<constructor><template> - <template-type-parameter name="IntervalRange"/> - <template-type-parameter name="WeightRange"/> - </template><parameter name="intervals_arg"><paramtype>const IntervalRange &</paramtype></parameter><parameter name="weights_arg"><paramtype>const WeightRange &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::piecewise_constant_distribution::param_type">param_type</classname></computeroutput> object from Boost.Range ranges holding the interval boundaries and the weights. If there are less than two interval boundaries, this is equivalent to the default constructor and the distribution will produce values uniformly distributed in the range [0, 1). The number of weights must be one less than the number of interval boundaries. </para></description></constructor> -<constructor><template> - <template-type-parameter name="F"/> - </template><parameter name="nw"><paramtype>std::size_t</paramtype></parameter><parameter name="xmin"><paramtype>RealType</paramtype></parameter><parameter name="xmax"><paramtype>RealType</paramtype></parameter><parameter name="f"><paramtype>F</paramtype></parameter><description><para>Constructs the parameters for a distribution that approximates a function. The range of the distribution is [xmin, xmax). This range is divided into nw equally sized intervals and the weights are found by calling the unary function f on the midpoints of the intervals. </para></description></constructor> -</class><typedef name="input_type"><type>std::size_t</type></typedef> -<typedef name="result_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="operator()" cv="const"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><description><para>Returns a value distributed according to the parameters of the piecewist_constant_distribution. </para></description></method> -<method name="operator()" cv="const"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a value distributed according to the parameters specified by param. </para></description></method> -<method name="min" cv="const"><type>result_type</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>result_type</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="densities" cv="const"><type>std::vector< RealType ></type><description><para>Returns a vector containing the probability density over each interval. </para></description></method> -<method name="intervals" cv="const"><type>std::vector< RealType ></type><description><para>Returns a vector containing the interval boundaries. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -</method-group> -<constructor><description><para>Creates a new <computeroutput><classname alt="boost::random::piecewise_constant_distribution">piecewise_constant_distribution</classname></computeroutput> with a single interval, [0, 1). </para></description></constructor> -<constructor><template> - <template-type-parameter name="IntervalIter"/> - <template-type-parameter name="WeightIter"/> - </template><parameter name="first_interval"><paramtype>IntervalIter</paramtype></parameter><parameter name="last_interval"><paramtype>IntervalIter</paramtype></parameter><parameter name="first_weight"><paramtype>WeightIter</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::piecewise_constant_distribution">piecewise_constant_distribution</classname> from two iterator ranges containing the interval boundaries and the interval weights. If there are less than two boundaries, then this is equivalent to the default constructor and creates a single interval, [0, 1).</para><para>The values of the interval boundaries must be strictly increasing, and the number of weights must be one less than the number of interval boundaries. If there are extra weights, they are ignored.</para><para>For example,</para><para><programlisting language="c++">double intervals[] = { 0.0, 1.0, 4.0 }; -double weights[] = { 1.0, 1.0 }; -piecewise_constant_distribution<> dist( - &intervals[0], &intervals[0] + 3, &weights[0]); -</programlisting></para><para>The distribution has a 50% chance of producing a value between 0 and 1 and a 50% chance of producing a value between 1 and 4. </para></description></constructor> -<constructor><template> - <template-type-parameter name="T"/> - <template-type-parameter name="F"/> - </template><parameter name="il"><paramtype>std::initializer_list< T ></paramtype></parameter><parameter name="f"><paramtype>F</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::piecewise_constant_distribution">piecewise_constant_distribution</classname> from an initializer_list containing the interval boundaries and a unary function specifying the weights. Each weight is determined by calling the function at the midpoint of the corresponding interval.</para><para>If the initializer_list contains less than two elements, this is equivalent to the default constructor and the distribution will produce values uniformly distributed in the range [0, 1). </para></description></constructor> -<constructor><template> - <template-type-parameter name="IntervalsRange"/> - <template-type-parameter name="WeightsRange"/> - </template><parameter name="intervals_arg"><paramtype>const IntervalsRange &</paramtype></parameter><parameter name="weights_arg"><paramtype>const WeightsRange &</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::piecewise_constant_distribution">piecewise_constant_distribution</classname> from Boost.Range ranges holding the interval boundaries and the weights. If there are less than two interval boundaries, this is equivalent to the default constructor and the distribution will produce values uniformly distributed in the range [0, 1). The number of weights must be one less than the number of interval boundaries. </para></description></constructor> -<constructor><template> - <template-type-parameter name="F"/> - </template><parameter name="nw"><paramtype>std::size_t</paramtype></parameter><parameter name="xmin"><paramtype>RealType</paramtype></parameter><parameter name="xmax"><paramtype>RealType</paramtype></parameter><parameter name="f"><paramtype>F</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::piecewise_constant_distribution">piecewise_constant_distribution</classname> that approximates a function. The range of the distribution is [xmin, xmax). This range is divided into nw equally sized intervals and the weights are found by calling the unary function f on the midpoints of the intervals. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::piecewise_constant_distribution">piecewise_constant_distribution</classname> from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="pcd"><paramtype>const <classname>piecewise_constant_distribution</classname> &</paramtype></parameter><description><para>Writes a distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="pcd"><paramtype>const <classname>piecewise_constant_distribution</classname> &</paramtype></parameter><description><para>Reads a distribution from a <computeroutput>std::istream</computeroutput> </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>piecewise_constant_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>piecewise_constant_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions will return the same sequence of values, when passed equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>piecewise_constant_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>piecewise_constant_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions may return different sequences of values, when passed equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/piecewise_linear_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="piecewise_linear_distribution"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>The class <computeroutput><classname alt="boost::random::piecewise_linear_distribution">piecewise_linear_distribution</classname></computeroutput> models a <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>piecewise_linear_distribution</classname></type></typedef> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the same. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are different. </para></description></method> -</method-group> -<method-group name="public member functions"> -<method name="intervals" cv="const"><type>std::vector< RealType ></type><description><para>Returns a vector containing the interval boundaries. </para></description></method> -<method name="densities" cv="const"><type>std::vector< RealType ></type><description><para>Returns a vector containing the probability densities at all the interval boundaries. </para></description></method> -</method-group> -<constructor><description><para>Constructs a <computeroutput><classname alt="boost::random::piecewise_linear_distribution::param_type">param_type</classname></computeroutput> object, representing a distribution that produces values uniformly distributed in the range [0, 1). </para></description></constructor> -<constructor><template> - <template-type-parameter name="IntervalIter"/> - <template-type-parameter name="WeightIter"/> - </template><parameter name="intervals_first"><paramtype>IntervalIter</paramtype></parameter><parameter name="intervals_last"><paramtype>IntervalIter</paramtype></parameter><parameter name="weight_first"><paramtype>WeightIter</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::piecewise_linear_distribution::param_type">param_type</classname></computeroutput> object from two iterator ranges containing the interval boundaries and weights at the boundaries. If there are fewer than two boundaries, then this is equivalent to the default constructor and the distribution will produce values uniformly distributed in the range [0, 1).</para><para>The values of the interval boundaries must be strictly increasing, and the number of weights must be the same as the number of interval boundaries. If there are extra weights, they are ignored. </para></description></constructor> -<constructor><template> - <template-type-parameter name="T"/> - <template-type-parameter name="F"/> - </template><parameter name="il"><paramtype>const std::initializer_list< T > &</paramtype></parameter><parameter name="f"><paramtype>F</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::piecewise_linear_distribution::param_type">param_type</classname></computeroutput> object from an initializer_list containing the interval boundaries and a unary function specifying the weights at the boundaries. Each weight is determined by calling the function at the corresponding point.</para><para>If the initializer_list contains fewer than two elements, this is equivalent to the default constructor and the distribution will produce values uniformly distributed in the range [0, 1). </para></description></constructor> -<constructor><template> - <template-type-parameter name="IntervalRange"/> - <template-type-parameter name="WeightRange"/> - </template><parameter name="intervals_arg"><paramtype>const IntervalRange &</paramtype></parameter><parameter name="weights_arg"><paramtype>const WeightRange &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::piecewise_linear_distribution::param_type">param_type</classname></computeroutput> object from Boost.Range ranges holding the interval boundaries and the weights at the boundaries. If there are fewer than two interval boundaries, this is equivalent to the default constructor and the distribution will produce values uniformly distributed in the range [0, 1). The number of weights must be equal to the number of interval boundaries. </para></description></constructor> -<constructor><template> - <template-type-parameter name="F"/> - </template><parameter name="nw"><paramtype>std::size_t</paramtype></parameter><parameter name="xmin"><paramtype>RealType</paramtype></parameter><parameter name="xmax"><paramtype>RealType</paramtype></parameter><parameter name="f"><paramtype>F</paramtype></parameter><description><para>Constructs the parameters for a distribution that approximates a function. The range of the distribution is [xmin, xmax). This range is divided into nw equally sized intervals and the weights are found by calling the unary function f on the boundaries of the intervals. </para></description></constructor> -</class><typedef name="input_type"><type>std::size_t</type></typedef> -<typedef name="result_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="operator()" cv="const"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><description><para>Returns a value distributed according to the parameters of the <classname alt="boost::random::piecewise_linear_distribution">piecewise_linear_distribution</classname>. </para></description></method> -<method name="operator()" cv="const"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a value distributed according to the parameters specified by param. </para></description></method> -<method name="min" cv="const"><type>result_type</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>result_type</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="densities" cv="const"><type>std::vector< RealType ></type><description><para>Returns a vector containing the probability densities at the interval boundaries. </para></description></method> -<method name="intervals" cv="const"><type>std::vector< RealType ></type><description><para>Returns a vector containing the interval boundaries. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -</method-group> -<constructor><description><para>Creates a new <computeroutput><classname alt="boost::random::piecewise_linear_distribution">piecewise_linear_distribution</classname></computeroutput> that produces values uniformly distributed in the range [0, 1). </para></description></constructor> -<constructor><template> - <template-type-parameter name="IntervalIter"/> - <template-type-parameter name="WeightIter"/> - </template><parameter name="first_interval"><paramtype>IntervalIter</paramtype></parameter><parameter name="last_interval"><paramtype>IntervalIter</paramtype></parameter><parameter name="first_weight"><paramtype>WeightIter</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::piecewise_linear_distribution">piecewise_linear_distribution</classname> from two iterator ranges containing the interval boundaries and the weights at the boundaries. If there are fewer than two boundaries, then this is equivalent to the default constructor and creates a distribution that produces values uniformly distributed in the range [0, 1).</para><para>The values of the interval boundaries must be strictly increasing, and the number of weights must be equal to the number of interval boundaries. If there are extra weights, they are ignored.</para><para>For example,</para><para><programlisting language="c++">double intervals[] = { 0.0, 1.0, 2.0 }; -double weights[] = { 0.0, 1.0, 0.0 }; -piecewise_constant_distribution<> dist( - &intervals[0], &intervals[0] + 3, &weights[0]); -</programlisting></para><para>produces a triangle distribution. </para></description></constructor> -<constructor><template> - <template-type-parameter name="T"/> - <template-type-parameter name="F"/> - </template><parameter name="il"><paramtype>std::initializer_list< T ></paramtype></parameter><parameter name="f"><paramtype>F</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::piecewise_linear_distribution">piecewise_linear_distribution</classname> from an initializer_list containing the interval boundaries and a unary function specifying the weights. Each weight is determined by calling the function at the corresponding interval boundary.</para><para>If the initializer_list contains fewer than two elements, this is equivalent to the default constructor and the distribution will produce values uniformly distributed in the range [0, 1). </para></description></constructor> -<constructor><template> - <template-type-parameter name="IntervalsRange"/> - <template-type-parameter name="WeightsRange"/> - </template><parameter name="intervals_arg"><paramtype>const IntervalsRange &</paramtype></parameter><parameter name="weights_arg"><paramtype>const WeightsRange &</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::piecewise_linear_distribution">piecewise_linear_distribution</classname> from Boost.Range ranges holding the interval boundaries and the weights. If there are fewer than two interval boundaries, this is equivalent to the default constructor and the distribution will produce values uniformly distributed in the range [0, 1). The number of weights must be equal to the number of interval boundaries. </para></description></constructor> -<constructor><template> - <template-type-parameter name="F"/> - </template><parameter name="nw"><paramtype>std::size_t</paramtype></parameter><parameter name="xmin"><paramtype>RealType</paramtype></parameter><parameter name="xmax"><paramtype>RealType</paramtype></parameter><parameter name="f"><paramtype>F</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::piecewise_linear_distribution">piecewise_linear_distribution</classname> that approximates a function. The range of the distribution is [xmin, xmax). This range is divided into nw equally sized intervals and the weights are found by calling the unary function f on the interval boundaries. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::piecewise_linear_distribution">piecewise_linear_distribution</classname> from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="pld"><paramtype>const <classname>piecewise_linear_distribution</classname> &</paramtype></parameter><description><para>Writes a distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="pld"><paramtype>const <classname>piecewise_linear_distribution</classname> &</paramtype></parameter><description><para>Reads a distribution from a <computeroutput>std::istream</computeroutput> </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>piecewise_linear_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>piecewise_linear_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions will return the same sequence of values, when passed equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>piecewise_linear_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>piecewise_linear_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions may return different sequences of values, when passed equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/poisson_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="poisson_distribution"><template> - <template-type-parameter name="IntType"><default>int</default></template-type-parameter> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>An instantiation of the class template <computeroutput><classname alt="boost::random::poisson_distribution">poisson_distribution</classname></computeroutput> is a model of <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . The poisson distribution has <inlineequation><alt>$p(i) = \frac{e^{-\lambda}\lambda^i}{i!}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_36.png"/></imageobject><textobject role="tex"><phrase>$p(i) = \frac{e^{-\lambda}\lambda^i}{i!}$</phrase></textobject></inlinemediaobject></inlineequation></para><para>This implementation is based on the PTRD algorithm described</para><para> <blockquote><para> "The transformed rejection method for generating Poisson random variables", Wolfgang Hormann, Insurance: Mathematics and Economics Volume 12, Issue 1, February 1993, Pages 39-45 </para></blockquote> </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>poisson_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="mean" cv="const"><type>RealType</type></method> -</method-group> -<constructor specifiers="explicit"><parameter name="mean"><paramtype>RealType</paramtype><default>1</default></parameter><description><para>Construct a <classname alt="boost::random::poisson_distribution::param_type">param_type</classname> object with the parameter "mean"</para><para>Requires: mean > 0 </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters of the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype><classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters of the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the parameters have the same values. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the parameters have different values. </para></description></method> -</method-group> -</class><typedef name="result_type"><type>IntType</type></typedef> -<typedef name="input_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="operator()" cv="const"><type>IntType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><description><para>Returns a random variate distributed according to the poisson distribution. </para></description></method> -<method name="operator()" cv="const"><type>IntType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a random variate distributed according to the poisson distribution with parameters specified by param. </para></description></method> -<method name="mean" cv="const"><type>RealType</type><description><para>Returns the "mean" parameter of the distribution. </para></description></method> -<method name="min" cv="const"><type>IntType</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>IntType</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="mean"><paramtype>RealType</paramtype><default>1</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::poisson_distribution">poisson_distribution</classname></computeroutput> with the parameter <computeroutput>mean</computeroutput>.</para><para>Requires: mean > 0 </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Construct an <computeroutput><classname alt="boost::random::poisson_distribution">poisson_distribution</classname></computeroutput> object from the parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="pd"><paramtype>const <classname>poisson_distribution</classname> &</paramtype></parameter><description><para>Writes the parameters of the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="pd"><paramtype><classname>poisson_distribution</classname> &</paramtype></parameter><description><para>Reads the parameters of the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>poisson_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>poisson_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions will produce the same sequence of values, given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>poisson_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>poisson_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions could produce different sequences of values, given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/random_device.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="random_device"><inherit access="private">noncopyable</inherit><description><para>Class <classname alt="boost::random::random_device">random_device</classname> models a <link linkend="boost_random.reference.concepts.non_deterministic_uniform_random_number_generator">non-deterministic random number generator</link> . It uses one or more implementation-defined stochastic processes to generate a sequence of uniformly distributed non-deterministic random numbers. For those environments where a non-deterministic random number generator is not available, class <classname alt="boost::random::random_device">random_device</classname> must not be implemented. See</para><para> <blockquote><para> "Randomness Recommendations for Security", D. Eastlake, S. Crocker, J. Schiller, Network Working Group, RFC 1750, December 1994 </para></blockquote> </para><para>for further discussions.</para><para> <note><para> Some operating systems abstract the computer hardware enough to make it difficult to non-intrusively monitor stochastic processes. However, several do provide a special device for exactly this purpose. It seems to be impossible to emulate the functionality using Standard C++ only, so users should be aware that this class may not be available on all platforms. </para></note> </para><para><emphasis role="bold">Implementation Note for Linux</emphasis></para><para>On the Linux operating system, token is interpreted as a filesystem path. It is assumed that this path denotes an operating system pseudo-device which generates a stream of non-deterministic random numbers. The pseudo-device should never signal an error or end-of-file. Otherwise, <computeroutput>std::ios_base::failure</computeroutput> is thrown. By default, <classname alt="boost::random::random_device">random_device</classname> uses the /dev/urandom pseudo-device to retrieve the random numbers. Another option would be to specify the /dev/random pseudo-device, which blocks on reads if the entropy pool has no more random bits available.</para><para><emphasis role="bold">Implementation Note for Windows</emphasis></para><para>On the Windows operating system, token is interpreted as the name of a cryptographic service provider. By default <classname alt="boost::random::random_device">random_device</classname> uses MS_DEF_PROV.</para><para><emphasis role="bold">Performance</emphasis></para><para>The test program <ulink url="../../libs/random/performance/nondet_random_speed.cpp">nondet_random_speed.cpp</ulink> measures the execution times of the random_device.hpp implementation of the above algorithms in a tight loop. The performance has been evaluated on an Intel(R) Core(TM) i7 CPU Q 840 @ 1.87GHz, 1867 Mhz with Visual C++ 2010, Microsoft Windows 7 Professional and with gcc 4.4.5, Ubuntu Linux 2.6.35-25-generic.</para><para><informaltable><tgroup cols="2"><tbody><row> -<entry><emphasis role="bold">Platform</emphasis></entry><entry><emphasis role="bold">time per invocation [microseconds] </emphasis></entry></row> -<row> -<entry>Windows </entry><entry>2.9 </entry></row> -<row> -<entry>Linux </entry><entry>1.7 </entry></row> -</tbody></tgroup></informaltable> -</para><para>The measurement error is estimated at +/- 1 usec. </para></description><typedef name="result_type"><type>unsigned int</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the <classname alt="boost::random::random_device">random_device</classname> can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the largest value that the <classname alt="boost::random::random_device">random_device</classname> can produce. </para></description></method> -</method-group> -<method-group name="public member functions"> -<method name="entropy" cv="const"><type>double</type><description><para>Returns: An entropy estimate for the random numbers returned by operator(), in the range min() to log2( max()+1). A deterministic random number generator (e.g. a pseudo-random number engine) has entropy 0.</para><para>Throws: Nothing. </para></description></method> -<method name="operator()"><type>unsigned int</type><description><para>Returns a random value in the range [min, max]. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="begin"><paramtype>Iter</paramtype></parameter><parameter name="end"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random 32-bit values. </para></description></method> -</method-group> -<constructor><description><para>Constructs a <computeroutput><classname alt="boost::random::random_device">random_device</classname></computeroutput>, optionally using the default device. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="token"><paramtype>const std::string &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::random_device">random_device</classname></computeroutput>, optionally using the given token as an access specification (for example, a URL) to some implementation-defined service for monitoring a stochastic process. </para></description></constructor> -<destructor/> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/random_number_generator.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="random_number_generator"><template> - <template-type-parameter name="URNG"/> - <template-type-parameter name="IntType"><default>long</default></template-type-parameter> - </template><description><para>Instantiations of class template <classname alt="boost::random::random_number_generator">random_number_generator</classname> model a RandomNumberGenerator (std:25.2.11 [lib.alg.random.shuffle]). On each invocation, it returns a uniformly distributed integer in the range [0..n).</para><para>The template parameter IntType shall denote some integer-like value type. </para></description><typedef name="base_type"><type>URNG</type></typedef> -<typedef name="argument_type"><type>IntType</type></typedef> -<typedef name="result_type"><type>IntType</type></typedef> -<method-group name="public member functions"> -<method name="operator()"><type>result_type</type><parameter name="n"><paramtype>argument_type</paramtype></parameter><description><para>Returns a value in the range [0, n) </para></description></method> -</method-group> -<constructor><parameter name="rng"><paramtype>base_type &</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::random_number_generator">random_number_generator</classname> functor with the given <link linkend="boost_random.reference.concepts.uniform_random_number_generator">uniform random number generator</link> as the underlying source of random numbers. </para></description></constructor> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/ranlux.hpp"> -<namespace name="boost"> -<namespace name="random"> -<typedef name="ranlux_base"><type><classname>subtract_with_carry_engine</classname>< uint32_t, 24, 10, 24 ></type></typedef> -<typedef name="ranlux_base_01"><type><classname>subtract_with_carry_01_engine</classname>< float, 24, 10, 24 ></type></typedef> -<typedef name="ranlux64_base_01"><type><classname>subtract_with_carry_01_engine</classname>< double, 48, 10, 24 ></type></typedef> -<typedef name="ranlux3"><description><para>The ranlux family of generators are described in</para><para> <blockquote><para> "A portable high-quality random number generator for lattice field theory - calculations", M. Luescher, Computer Physics Communications, 79 (1994) pp 100-110. </para></blockquote> </para><para>The levels are given in</para><para> <blockquote><para> "RANLUX: A Fortran implementation of the high-quality - pseudorandom number generator of Luescher", F. James, Computer Physics Communications 79 (1994) 111-114 </para></blockquote> </para></description><type><classname>discard_block_engine</classname>< <classname>ranlux_base</classname>, 223, 24 ></type></typedef> -<typedef name="ranlux4"><description><para>The ranlux family of generators are described in</para><para> <blockquote><para> "A portable high-quality random number generator for lattice field theory - calculations", M. Luescher, Computer Physics Communications, 79 (1994) pp 100-110. </para></blockquote> </para><para>The levels are given in</para><para> <blockquote><para> "RANLUX: A Fortran implementation of the high-quality - pseudorandom number generator of Luescher", F. James, Computer Physics Communications 79 (1994) 111-114 </para></blockquote> </para></description><type><classname>discard_block_engine</classname>< <classname>ranlux_base</classname>, 389, 24 ></type></typedef> -<typedef name="ranlux3_01"><description><para>The ranlux family of generators are described in</para><para> <blockquote><para> "A portable high-quality random number generator for lattice field theory - calculations", M. Luescher, Computer Physics Communications, 79 (1994) pp 100-110. </para></blockquote> </para><para>The levels are given in</para><para> <blockquote><para> "RANLUX: A Fortran implementation of the high-quality - pseudorandom number generator of Luescher", F. James, Computer Physics Communications 79 (1994) 111-114 </para></blockquote> </para></description><type><classname>discard_block_engine</classname>< <classname>ranlux_base_01</classname>, 223, 24 ></type></typedef> -<typedef name="ranlux4_01"><description><para>The ranlux family of generators are described in</para><para> <blockquote><para> "A portable high-quality random number generator for lattice field theory - calculations", M. Luescher, Computer Physics Communications, 79 (1994) pp 100-110. </para></blockquote> </para><para>The levels are given in</para><para> <blockquote><para> "RANLUX: A Fortran implementation of the high-quality - pseudorandom number generator of Luescher", F. James, Computer Physics Communications 79 (1994) 111-114 </para></blockquote> </para></description><type><classname>discard_block_engine</classname>< <classname>ranlux_base_01</classname>, 389, 24 ></type></typedef> -<typedef name="ranlux64_3_01"><description><para>The ranlux family of generators are described in</para><para> <blockquote><para> "A portable high-quality random number generator for lattice field theory - calculations", M. Luescher, Computer Physics Communications, 79 (1994) pp 100-110. </para></blockquote> </para><para>The levels are given in</para><para> <blockquote><para> "RANLUX: A Fortran implementation of the high-quality - pseudorandom number generator of Luescher", F. James, Computer Physics Communications 79 (1994) 111-114 </para></blockquote> </para></description><type><classname>discard_block_engine</classname>< <classname>ranlux64_base_01</classname>, 223, 24 ></type></typedef> -<typedef name="ranlux64_4_01"><description><para>The ranlux family of generators are described in</para><para> <blockquote><para> "A portable high-quality random number generator for lattice field theory - calculations", M. Luescher, Computer Physics Communications, 79 (1994) pp 100-110. </para></blockquote> </para><para>The levels are given in</para><para> <blockquote><para> "RANLUX: A Fortran implementation of the high-quality - pseudorandom number generator of Luescher", F. James, Computer Physics Communications 79 (1994) 111-114 </para></blockquote> </para></description><type><classname>discard_block_engine</classname>< <classname>ranlux64_base_01</classname>, 389, 24 ></type></typedef> -<typedef name="ranlux64_base"><type><classname>subtract_with_carry_engine</classname>< uint64_t, 48, 10, 24 ></type></typedef> -<typedef name="ranlux64_3"><description><para>The ranlux family of generators are described in</para><para> <blockquote><para> "A portable high-quality random number generator for lattice field theory - calculations", M. Luescher, Computer Physics Communications, 79 (1994) pp 100-110. </para></blockquote> </para><para>The levels are given in</para><para> <blockquote><para> "RANLUX: A Fortran implementation of the high-quality - pseudorandom number generator of Luescher", F. James, Computer Physics Communications 79 (1994) 111-114 </para></blockquote> </para></description><type><classname>discard_block_engine</classname>< <classname>ranlux64_base</classname>, 223, 24 ></type></typedef> -<typedef name="ranlux64_4"><description><para>The ranlux family of generators are described in</para><para> <blockquote><para> "A portable high-quality random number generator for lattice field theory - calculations", M. Luescher, Computer Physics Communications, 79 (1994) pp 100-110. </para></blockquote> </para><para>The levels are given in</para><para> <blockquote><para> "RANLUX: A Fortran implementation of the high-quality - pseudorandom number generator of Luescher", F. James, Computer Physics Communications 79 (1994) 111-114 </para></blockquote> </para></description><type><classname>discard_block_engine</classname>< <classname>ranlux64_base</classname>, 389, 24 ></type></typedef> -<typedef name="ranlux24_base"><type><classname>subtract_with_carry_engine</classname>< uint32_t, 24, 10, 24 ></type></typedef> -<typedef name="ranlux48_base"><type><classname>subtract_with_carry_engine</classname>< uint64_t, 48, 5, 12 ></type></typedef> -<typedef name="ranlux24"><type><classname>discard_block_engine</classname>< <classname>ranlux24_base</classname>, 223, 23 ></type></typedef> -<typedef name="ranlux48"><type><classname>discard_block_engine</classname>< <classname>ranlux48_base</classname>, 389, 11 ></type></typedef> - -</namespace> -</namespace> -</header> -<header name="boost/random/seed_seq.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="seed_seq"><description><para>The class <computeroutput><classname alt="boost::random::seed_seq">seed_seq</classname></computeroutput> stores a sequence of 32-bit words for seeding a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . These words will be combined to fill the entire state of the generator. </para></description><typedef name="result_type"><type>boost::uint_least32_t</type></typedef> -<method-group name="public member functions"> -<method name="generate" cv="const"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with 32-bit values based on the stored sequence.</para><para>Requires: Iter must be a Random Access Iterator whose value type is an unsigned integral type at least 32 bits wide. </para></description></method> -<method name="size" cv="const"><type>std::size_t</type><description><para>Returns the size of the sequence. </para></description></method> -<method name="param"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="out"><paramtype>Iter</paramtype></parameter><description><para>Writes the stored sequence to iter. </para></description></method> -</method-group> -<constructor><description><para>Initializes a <classname alt="boost::random::seed_seq">seed_seq</classname> to hold an empty sequence. </para></description></constructor> -<constructor><template> - <template-type-parameter name="T"/> - </template><parameter name="il"><paramtype>const std::initializer_list< T > &</paramtype></parameter><description><para>Initializes the sequence from an initializer_list. </para></description></constructor> -<constructor><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Initializes the sequence from an iterator range. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="Range"/> - </template><parameter name="range"><paramtype>const Range &</paramtype></parameter><description><para>Initializes the sequence from Boost.Range range. </para></description></constructor> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/shuffle_order.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="shuffle_order_engine"><template> - <template-type-parameter name="UniformRandomNumberGenerator"/> - <template-nontype-parameter name="k"><type>std::size_t</type></template-nontype-parameter> - </template><description><para>Instatiations of class template <computeroutput><classname alt="boost::random::shuffle_order_engine">shuffle_order_engine</classname></computeroutput> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . It mixes the output of some (usually <classname alt="boost::random::linear_congruential_engine">linear_congruential_engine</classname>) <link linkend="boost_random.reference.concepts.uniform_random_number_generator">uniform random number generator</link> to get better statistical properties. The algorithm is described in</para><para> <blockquote><para> "Improving a poor random number generator", Carter Bays and S.D. Durham, ACM Transactions on Mathematical Software, Vol 2, No. 1, March 1976, pp. 59-64. <ulink url="http://doi.acm.org/10.1145/355666.355670">http://doi.acm.org/10.1145/355666.355670</ulink> </para></blockquote> </para><para>The output of the base generator is buffered in an array of length k. Every output X(n) has a second role: It gives an index into the array where X(n+1) will be retrieved. Used array elements are replaced with fresh output from the base generator.</para><para>Template parameters are the base generator and the array length k, which should be around 100. </para></description><typedef name="base_type"><type>UniformRandomNumberGenerator</type></typedef> -<typedef name="result_type"><type>base_type::result_type</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<data-member name="buffer_size" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="table_size" specifiers="static"><type>const std::size_t</type></data-member> -<method-group name="public member functions"> -<method name="seed"><type>void</type></method> -<method name="seed"><type>void</type><parameter name="seed"><paramtype>result_type</paramtype></parameter><description><para>Invokes the one-argument seed method of the base generator with the parameter seed and re-initializes the internal buffer array.</para><para>Complexity: Exactly k+1 invocations of the base generator. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Invokes the one-argument seed method of the base generator with the parameter seq and re-initializes the internal buffer array.</para><para>Complexity: Exactly k+1 invocations of the base generator. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter></method> -<method name="base" cv="const"><type>const base_type &</type></method> -<method name="operator()"><type>result_type</type></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the generator by z steps. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with pseudo-random values. </para></description></method> -</method-group> -<constructor><description><para>Constructs a <computeroutput><classname alt="boost::random::shuffle_order_engine">shuffle_order_engine</classname></computeroutput> by invoking the default constructor of the base generator.</para><para>Complexity: Exactly k+1 invocations of the base generator. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="s"><paramtype>result_type</paramtype></parameter><description><para>Constructs a <computeroutput>shuffle_output_engine</computeroutput> by invoking the one-argument constructor of the base generator with the parameter seed.</para><para>Complexity: Exactly k+1 invocations of the base generator. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter></constructor> -<constructor specifiers="explicit"><parameter name="rng"><paramtype>const base_type &</paramtype></parameter><description><para>Constructs a <computeroutput>shuffle_output_engine</computeroutput> by using a copy of the provided generator.</para><para>Precondition: The template argument UniformRandomNumberGenerator shall denote a CopyConstructible type.</para><para>Complexity: Exactly k+1 invocations of the base generator. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="rng"><paramtype>base_type &&</paramtype></parameter></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter></constructor> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the generator can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the largest value that the generator can produce. </para></description></method> -</method-group> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="s"><paramtype>const <classname>shuffle_order_engine</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::shuffle_order_engine">shuffle_order_engine</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="s"><paramtype>const <classname>shuffle_order_engine</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::shuffle_order_engine">shuffle_order_engine</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x"><paramtype>const <classname>shuffle_order_engine</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>shuffle_order_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce identical sequences. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>shuffle_order_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>shuffle_order_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce different sequences. </para></description></method> -</method-group> -</class><typedef name="kreutzer1986"><description><para>According to Harry Erwin (private e-mail), the specialization <computeroutput>kreutzer1986</computeroutput> was suggested in:</para><para> <blockquote><para> "System Simulation: Programming Styles and Languages (International -Computer Science Series)", Wolfgang Kreutzer, Addison-Wesley, December 1986. </para></blockquote> </para></description><type><classname>shuffle_order_engine</classname>< <classname>linear_congruential_engine</classname>< uint32_t, 1366, 150889, 714025 >, 97 ></type></typedef> -<typedef name="knuth_b"><description><para>The specialization <computeroutput>knuth_b</computeroutput> is specified by the C++ standard. It is described in</para><para> <blockquote><para> "The Art of Computer Programming, Second Edition, Volume 2, -Seminumerical Algorithms", Donald Knuth, Addison-Wesley, 1981. </para></blockquote> </para></description><type><classname>shuffle_order_engine</classname>< <classname>minstd_rand0</classname>, 256 ></type></typedef> - -</namespace> -</namespace> -</header> -<header name="boost/random/sobol.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="sobol_engine"><template> - <template-type-parameter name="UIntType"/> - <template-nontype-parameter name="w"><type>unsigned</type></template-nontype-parameter> - <template-type-parameter name="SobolTables"><default>default_sobol_table</default></template-type-parameter> - </template><description><para>Instantiations of class template <classname alt="boost::random::sobol_engine">sobol_engine</classname> model a <link linkend="boost_random.reference.concepts.quasi_random_number_generator">quasi-random number generator</link> . The <classname alt="boost::random::sobol_engine">sobol_engine</classname> uses the algorithm described in <blockquote><para> [Bratley+Fox, TOMS 14, 88 (1988)] and [Antonov+Saleev, USSR Comput. Maths. Math. Phys. 19, 252 (1980)] </para></blockquote> </para><para><note><para><classname alt="boost::random::sobol_engine">sobol_engine</classname> skips trivial zeroes at the start of the sequence. For example, the beginning of the 2-dimensional Sobol sequence in <computeroutput><classname alt="boost::random::uniform_01">uniform_01</classname></computeroutput> distribution will look like this: <programlisting language="c++">0.5, 0.5, -0.75, 0.25, -0.25, 0.75, -0.375, 0.375, -0.875, 0.875, -... -</programlisting></para> -</note> -In the following documentation <computeroutput>X</computeroutput> denotes the concrete class of the template <classname alt="boost::random::sobol_engine">sobol_engine</classname> returning objects of type <computeroutput>UIntType</computeroutput>, u and v are the values of <computeroutput>X</computeroutput>.</para><para>Some member functions may throw exceptions of type <computeroutput>std::range_error</computeroutput>. This happens when the quasi-random domain is exhausted and the generator cannot produce any more values. The length of the low discrepancy sequence is given by <inlineequation><alt>$L=Dimension \times (2^{w} - 1)$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_31.png"/></imageobject><textobject role="tex"><phrase>$L=Dimension \times (2^{w} - 1)$</phrase></textobject></inlinemediaobject></inlineequation>. </para></description><typedef name="result_type"><type>UIntType</type></typedef> -<method-group name="public member functions"> -<method name="dimension" cv="const"><type>std::size_t</type><description><para>Returns: The dimension of of the quasi-random domain.</para><para>Throws: nothing. </para></description></method> -<method name="seed"><type>void</type><purpose>Throws: nothing. </purpose><description><para>Effects: Resets the quasi-random number generator state to the one given by the default construction. Equivalent to u.seed(0). </para></description></method> -<method name="seed"><type>void</type><parameter name="init"><paramtype>UIntType</paramtype></parameter><purpose>Throws: range_error. </purpose><description><para>Effects: Effectively sets the quasi-random number generator state to the <computeroutput>init</computeroutput>-th vector in the <computeroutput>s</computeroutput>-dimensional quasi-random domain, where <computeroutput>s</computeroutput> == X::dimension(). <programlisting language="c++">X u, v; -for(int i = 0; i < N; ++i) - for( std::size_t j = 0; j < u.dimension(); ++j ) - u(); -v.seed(N); -assert(u() == v()); -</programlisting> </para></description></method> -<method name="operator()"><type>result_type</type><description><para>Returns: Returns a successive element of an <computeroutput>s</computeroutput>-dimensional (s = X::dimension()) vector at each invocation. When all elements are exhausted, X::operator() begins anew with the starting element of a subsequent <computeroutput>s</computeroutput>-dimensional vector.</para><para>Throws: range_error. </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Effects: Advances *this state as if <computeroutput>z</computeroutput> consecutive X::operator() invocations were executed. <programlisting language="c++">X u = v; -for(int i = 0; i < N; ++i) - u(); -v.discard(N); -assert(u() == v()); -</programlisting></para><para>Throws: range_error. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="s"><paramtype>std::size_t</paramtype></parameter><description><para>Effects: Constructs the default <computeroutput>s</computeroutput>-dimensional Sobol quasi-random number generator.</para><para>Throws: bad_alloc, invalid_argument, range_error. </para></description></constructor> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns: Tight lower bound on the set of values returned by operator().</para><para>Throws: nothing. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns: Tight upper bound on the set of values returned by operator().</para><para>Throws: nothing. </para></description></method> -</method-group> -<method-group name="friend functions"> -<method name="operator=="><type>friend bool</type><parameter name="x"><paramtype>const <classname>sobol_engine</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>sobol_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce identical sequences of outputs. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>sobol_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>sobol_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce different sequences of outputs. </para></description></method> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="s"><paramtype>const <classname>sobol_engine</classname> &</paramtype></parameter><description><para>Writes the textual representation of the generator to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="s"><paramtype>const <classname>sobol_engine</classname> &</paramtype></parameter><description><para>Reads the textual representation of the generator from a <computeroutput>std::istream</computeroutput>. </para></description></method> -</method-group> -</class><typedef name="sobol"><description><para><note><para>This specialization of <classname alt="boost::random::sobol_engine">sobol_engine</classname> supports up to 3667 dimensions.</para> -</note> -Data on the primitive binary polynomials <computeroutput>a</computeroutput> and the corresponding starting values <computeroutput>m</computeroutput> for Sobol sequences in up to 21201 dimensions was taken from</para><para> <blockquote><para> S. Joe and F. Y. Kuo, Constructing Sobol sequences with better two-dimensional projections, SIAM J. Sci. Comput. 30, 2635-2654 (2008). </para></blockquote> </para><para>See the original tables up to dimension 21201: <ulink url="https://web.archive.org/web/20170802022909/http://web.maths.unsw.edu.au/~fkuo/sobol/new-joe-kuo-6.21201">https://web.archive.org/web/20170802022909/http://web.maths.unsw.edu.au/~fkuo/sobol/new-joe-kuo-6.21201</ulink></para><para>For practical reasons the default table uses only the subset of binary polynomials <computeroutput>a</computeroutput> < 2<superscript>16</superscript>.</para><para>However, it is possible to provide your own table to <classname alt="boost::random::sobol_engine">sobol_engine</classname> should the default one be insufficient. </para></description><type><classname>sobol_engine</classname>< boost::uint_least64_t, 64u, default_sobol_table ></type></typedef> - -</namespace> -</namespace> -</header> -<header name="boost/random/student_t_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="student_t_distribution"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>The Student t distribution is a real valued distribution with one parameter n, the number of degrees of freedom.</para><para>It has <inlineequation><alt>$\displaystyle p(x) = \frac{1}{\sqrt{n\pi}} \frac{\Gamma((n+1)/2)}{\Gamma(n/2)} \left(1+\frac{x^2}{n}\right)^{-(n+1)/2} $</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_37.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle p(x) = \frac{1}{\sqrt{n\pi}} \frac{\Gamma((n+1)/2)}{\Gamma(n/2)} \left(1+\frac{x^2}{n}\right)^{-(n+1)/2} $</phrase></textobject></inlinemediaobject></inlineequation>. </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>student_t_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="n" cv="const"><type>RealType</type><description><para>Returns the number of degrees of freedom of the distribution. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="n"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::student_t_distribution::param_type">param_type</classname></computeroutput> with "n" degrees of freedom.</para><para>Requires: n > 0 </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::student_t_distribution::param_type">param_type</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::student_t_distribution::param_type">param_type</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the same. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the different. </para></description></method> -</method-group> -</class><typedef name="result_type"><type>RealType</type></typedef> -<typedef name="input_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="operator()"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><description><para>Returns a random variate distributed according to the Student t distribution. </para></description></method> -<method name="operator()" cv="const"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a random variate distributed accordint to the Student t distribution with parameters specified by <computeroutput>param</computeroutput>. </para></description></method> -<method name="n" cv="const"><type>RealType</type><description><para>Returns the number of degrees of freedom. </para></description></method> -<method name="min" cv="const"><type>RealType</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>RealType</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="n"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs an <computeroutput><classname alt="boost::random::student_t_distribution">student_t_distribution</classname></computeroutput> with "n" degrees of freedom.</para><para>Requires: n > 0 </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs an <computeroutput><classname alt="boost::random::student_t_distribution">student_t_distribution</classname></computeroutput> from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="td"><paramtype>const <classname>student_t_distribution</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::student_t_distribution">student_t_distribution</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="td"><paramtype>const <classname>student_t_distribution</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::student_t_distribution">student_t_distribution</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>student_t_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>student_t_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two instances of <computeroutput><classname alt="boost::random::student_t_distribution">student_t_distribution</classname></computeroutput> will return identical sequences of values given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>student_t_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>student_t_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two instances of <computeroutput><classname alt="boost::random::student_t_distribution">student_t_distribution</classname></computeroutput> will return different sequences of values given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/subtract_with_carry.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="subtract_with_carry_01_engine"><template> - <template-type-parameter name="RealType"/> - <template-nontype-parameter name="w"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="s"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="r"><type>std::size_t</type></template-nontype-parameter> - </template><description><para>Instantiations of <classname alt="boost::random::subtract_with_carry_01_engine">subtract_with_carry_01_engine</classname> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . The algorithm is described in</para><para> <blockquote><para> "A New Class of Random Number Generators", George Marsaglia and Arif Zaman, Annals of Applied Probability, Volume 1, Number 3 (1991), 462-480. </para></blockquote> </para></description><typedef name="result_type"><type>RealType</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<data-member name="word_size" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="long_lag" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="short_lag" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="default_seed" specifiers="static"><type>const boost::uint32_t</type></data-member> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Seeds the generator with the default seed. </para></description></method> -<method name="seed"><type>void</type><parameter name="value"><paramtype>boost::uint32_t</paramtype></parameter><description><para>Seeds the generator with <computeroutput>value</computeroutput>. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Seeds the generator with values produced by <computeroutput>seq.generate()</computeroutput>. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Seeds the generator with values from a range. Updates first to point one past the last consumed element. If there are not enough elements in the range to fill the entire state, throws <computeroutput>std::invalid_argument</computeroutput>. </para></description></method> -<method name="operator()"><type>result_type</type><description><para>Returns the next value of the generator. </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput>. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values. </para></description></method> -</method-group> -<constructor><description><para>Creates a new <classname alt="boost::random::subtract_with_carry_01_engine">subtract_with_carry_01_engine</classname> using the default seed. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="value"><paramtype>boost::uint32_t</paramtype></parameter><description><para>Creates a new <classname alt="boost::random::subtract_with_carry_01_engine">subtract_with_carry_01_engine</classname> and seeds it with value. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Creates a new <classname alt="boost::random::subtract_with_carry_01_engine">subtract_with_carry_01_engine</classname> and seeds with values produced by seq.generate(). </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Creates a new <classname alt="boost::random::subtract_with_carry_01_engine">subtract_with_carry_01_engine</classname> and seeds it with values from a range. Advances first to point one past the last consumed value. If the range does not contain enough elements to fill the entire state, throws <computeroutput>std::invalid_argument</computeroutput>. </para></description></constructor> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the generator can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the largest value that the generator can produce. </para></description></method> -</method-group> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="f"><paramtype>const <classname>subtract_with_carry_01_engine</classname> &</paramtype></parameter><description><para>Writes a <classname alt="boost::random::subtract_with_carry_01_engine">subtract_with_carry_01_engine</classname> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="f"><paramtype>const <classname>subtract_with_carry_01_engine</classname> &</paramtype></parameter><description><para>Reads a <classname alt="boost::random::subtract_with_carry_01_engine">subtract_with_carry_01_engine</classname> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x"><paramtype>const <classname>subtract_with_carry_01_engine</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>subtract_with_carry_01_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce identical sequences. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>subtract_with_carry_01_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>subtract_with_carry_01_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce different sequences. </para></description></method> -</method-group> -</class><class name="subtract_with_carry_engine"><template> - <template-type-parameter name="IntType"/> - <template-nontype-parameter name="w"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="s"><type>std::size_t</type></template-nontype-parameter> - <template-nontype-parameter name="r"><type>std::size_t</type></template-nontype-parameter> - </template><description><para>Instantiations of <computeroutput><classname alt="boost::random::subtract_with_carry_engine">subtract_with_carry_engine</classname></computeroutput> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . The algorithm is described in</para><para> <blockquote><para> "A New Class of Random Number Generators", George Marsaglia and Arif Zaman, Annals of Applied Probability, Volume 1, Number 3 (1991), 462-480. </para></blockquote> </para></description><typedef name="result_type"><type>IntType</type></typedef> -<data-member name="word_size" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="long_lag" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="short_lag" specifiers="static"><type>const std::size_t</type></data-member> -<data-member name="default_seed" specifiers="static"><type>const uint32_t</type></data-member> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<data-member name="modulus" specifiers="static"><type>const result_type</type></data-member> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Seeds the generator with the default seed. </para></description></method> -<method name="seed"><type>void</type><parameter name="value"><paramtype>IntType</paramtype></parameter></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Seeds the generator with values produced by <computeroutput>seq.generate()</computeroutput>. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Seeds the generator with values from a range. Updates <computeroutput>first</computeroutput> to point one past the last consumed value. If the range does not contain enough elements to fill the entire state of the generator, throws <computeroutput>std::invalid_argument</computeroutput>. </para></description></method> -<method name="operator()"><type>result_type</type><description><para>Returns the next value of the generator. </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput>. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Fills a range with random values. </para></description></method> -</method-group> -<constructor><description><para>Constructs a new <computeroutput><classname alt="boost::random::subtract_with_carry_engine">subtract_with_carry_engine</classname></computeroutput> and seeds it with the default seed. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="value"><paramtype>IntType</paramtype></parameter><description><para>Constructs a new <computeroutput><classname alt="boost::random::subtract_with_carry_engine">subtract_with_carry_engine</classname></computeroutput> and seeds it with <computeroutput>value</computeroutput>. </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Constructs a new <computeroutput><classname alt="boost::random::subtract_with_carry_engine">subtract_with_carry_engine</classname></computeroutput> and seeds it with values produced by <computeroutput>seq.generate()</computeroutput>. </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Constructs a new <computeroutput><classname alt="boost::random::subtract_with_carry_engine">subtract_with_carry_engine</classname></computeroutput> and seeds it with values from a range. first is updated to point one past the last value consumed. If there are not enough elements in the range to fill the entire state of the generator, throws <computeroutput>std::invalid_argument</computeroutput>. </para></description></constructor> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the generator can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the largest value that the generator can produce. </para></description></method> -</method-group> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="f"><paramtype>const <classname>subtract_with_carry_engine</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::subtract_with_carry_engine">subtract_with_carry_engine</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="f"><paramtype>const <classname>subtract_with_carry_engine</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::subtract_with_carry_engine">subtract_with_carry_engine</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x"><paramtype>const <classname>subtract_with_carry_engine</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>subtract_with_carry_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce identical sequences of values. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>subtract_with_carry_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>subtract_with_carry_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce different sequences of values. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/taus88.hpp"> -<namespace name="boost"> -<namespace name="random"> -<typedef name="taus88"><description><para>The specialization taus88 was suggested in</para><para> <blockquote><para> "Maximally Equidistributed Combined Tausworthe Generators", Pierre L'Ecuyer, Mathematics of Computation, Volume 65, Number 213, January 1996, Pages 203-213 </para></blockquote> </para></description><type><classname>xor_combine_engine</classname>< <classname>xor_combine_engine</classname>< <classname>linear_feedback_shift_engine</classname>< uint32_t, 32, 31, 13, 12 >, 0, <classname>linear_feedback_shift_engine</classname>< uint32_t, 32, 29, 2, 4 >, 0 >, 0, <classname>linear_feedback_shift_engine</classname>< uint32_t, 32, 28, 3, 17 >, 0 ></type></typedef> - -</namespace> -</namespace> -</header> -<header name="boost/random/traits.hpp"> -<namespace name="boost"> -<namespace name="random"> -<namespace name="traits"> -<struct name="is_integral"><template> - <template-type-parameter name="T"/> - </template><inherit access="public">integral_constant< bool, boost::is_integral< T >::value||(std::numeric_limits< T >::is_integer)></inherit><purpose>Traits class that indicates whether type T is an integer. </purpose></struct><struct name="is_signed"><template> - <template-type-parameter name="T"/> - </template><inherit access="public">integral_constant< bool, boost::is_signed< T >::value||(std::numeric_limits< T >::is_specialized &&std::numeric_limits< T >::is_integer &&std::numeric_limits< T >::is_signed)></inherit><purpose>Traits class that indicates whether type T is a signed integer. </purpose></struct><struct name="make_unsigned"><template> - <template-type-parameter name="T"/> - </template><purpose>Converts the argument type T to an unsigned type. </purpose><description><para>This trait has a single member <computeroutput>type</computeroutput> which is the unsigned type corresponding to T. Note that if T is signed, then member <computeroutput>type</computeroutput> <emphasis>should define a type with one more bit precision than T</emphasis>. For built-in types this trait defaults to <computeroutput>boost::make_unsigned<T>::type</computeroutput>. For user defined types it simply asserts that the argument type T is an unsigned integer (using std::numeric_limits). User defined specializations may be provided for other cases. </para></description></struct><struct name="make_unsigned_or_unbounded"><template> - <template-type-parameter name="T"/> - </template><purpose>Converts the argument type T to either an unsigned type or an unbounded integer type. </purpose><description><para>This trait has a single member <computeroutput>type</computeroutput> which is either the unsigned type corresponding to T or an unbounded integer type. This trait is used to generate types suitable for the calculation of a range: as a result if T is signed, then member <computeroutput>type</computeroutput> <emphasis>should define a type with one more bit precision than T</emphasis>. For built-in types this trait defaults to <computeroutput>boost::make_unsigned<T>::type</computeroutput>. For user defined types it simply asserts that the argument type T is either an unbounded integer, or an unsigned one (using std::numeric_limits). User defined specializations may be provided for other cases. </para></description></struct></namespace> - -</namespace> -</namespace> -</header> -<header name="boost/random/triangle_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="triangle_distribution"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>Instantiations of <computeroutput><classname alt="boost::random::triangle_distribution">triangle_distribution</classname></computeroutput> model a <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . A <computeroutput><classname alt="boost::random::triangle_distribution">triangle_distribution</classname></computeroutput> has three parameters, <computeroutput>a</computeroutput>, <computeroutput>b</computeroutput>, and <computeroutput>c</computeroutput>, which are the smallest, the most probable and the largest values of the distribution respectively. </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>triangle_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="a" cv="const"><type>RealType</type><description><para>Returns the minimum value of the distribution. </para></description></method> -<method name="b" cv="const"><type>RealType</type><description><para>Returns the mode of the distribution. </para></description></method> -<method name="c" cv="const"><type>RealType</type><description><para>Returns the maximum value of the distribution. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="a"><paramtype>RealType</paramtype><default>0.0</default></parameter><parameter name="b"><paramtype>RealType</paramtype><default>0.5</default></parameter><parameter name="c"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs the parameters of a <computeroutput><classname alt="boost::random::triangle_distribution">triangle_distribution</classname></computeroutput>. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are equal. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are different. </para></description></method> -</method-group> -</class><typedef name="input_type"><type>RealType</type></typedef> -<typedef name="result_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="a" cv="const"><type>result_type</type><description><para>Returns the <computeroutput>a</computeroutput> parameter of the distribution </para></description></method> -<method name="b" cv="const"><type>result_type</type><description><para>Returns the <computeroutput>b</computeroutput> parameter of the distribution </para></description></method> -<method name="c" cv="const"><type>result_type</type><description><para>Returns the <computeroutput>c</computeroutput> parameter of the distribution </para></description></method> -<method name="min" cv="const"><type>RealType</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>RealType</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -<method name="operator()"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><description><para>Returns a random variate distributed according to the triangle distribution. </para></description></method> -<method name="operator()"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a random variate distributed according to the triangle distribution with parameters specified by param. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="a"><paramtype>RealType</paramtype><default>0.0</default></parameter><parameter name="b"><paramtype>RealType</paramtype><default>0.5</default></parameter><parameter name="c"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::triangle_distribution">triangle_distribution</classname></computeroutput> with the parameters <computeroutput>a</computeroutput>, <computeroutput>b</computeroutput>, and <computeroutput>c</computeroutput>.</para><para>Preconditions: a <= b <= c. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::triangle_distribution">triangle_distribution</classname></computeroutput> from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="td"><paramtype>const <classname>triangle_distribution</classname> &</paramtype></parameter><description><para>Writes the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="td"><paramtype>const <classname>triangle_distribution</classname> &</paramtype></parameter><description><para>Reads the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>triangle_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>triangle_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions will produce identical sequences of values given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>triangle_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>triangle_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions may produce different sequences of values given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/uniform_01.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="uniform_01"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>The distribution function <classname alt="boost::random::uniform_01">uniform_01</classname> models a <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . On each invocation, it returns a random floating-point value uniformly distributed in the range [0..1).</para><para>The template parameter RealType shall denote a float-like value type with support for binary operators +, -, and /.</para><para>Note: The current implementation is buggy, because it may not fill all of the mantissa with random bits. I'm unsure how to fill a (to-be-invented) <computeroutput>boost::bigfloat</computeroutput> class with random bits efficiently. It's probably time for a traits class. </para></description><typedef name="input_type"><type>RealType</type></typedef> -<typedef name="result_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="min" cv="const"><type>result_type</type></method> -<method name="max" cv="const"><type>result_type</type></method> -<method name="reset"><type>void</type></method> -<method name="operator()"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/uniform_int_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="uniform_int_distribution"><template> - <template-type-parameter name="IntType"><default>int</default></template-type-parameter> - </template><description><para>The class template <classname alt="boost::random::uniform_int_distribution">uniform_int_distribution</classname> models a <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . On each invocation, it returns a random integer value uniformly distributed in the set of integers {min, min+1, min+2, ..., max}.</para><para>The template parameter IntType shall denote an integer-like value type. </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>uniform_int_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="a" cv="const"><type>IntType</type><description><para>Returns the minimum value of the distribution. </para></description></method> -<method name="b" cv="const"><type>IntType</type><description><para>Returns the maximum value of the distribution. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="min"><paramtype>IntType</paramtype><default>0</default></parameter><parameter name="max"><paramtype>IntType</paramtype><default>(std::numeric_limits< IntType >::max)()</default></parameter><description><para>Constructs the parameters of a <classname alt="boost::random::uniform_int_distribution">uniform_int_distribution</classname>.</para><para>Requires min <= max </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are equal. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are different. </para></description></method> -</method-group> -</class><typedef name="input_type"><type>IntType</type></typedef> -<typedef name="result_type"><type>IntType</type></typedef> -<method-group name="public member functions"> -<method name="min" cv="const"><type>IntType</type><description><para>Returns the minimum value of the distribution </para></description></method> -<method name="max" cv="const"><type>IntType</type><description><para>Returns the maximum value of the distribution </para></description></method> -<method name="a" cv="const"><type>IntType</type><description><para>Returns the minimum value of the distribution </para></description></method> -<method name="b" cv="const"><type>IntType</type><description><para>Returns the maximum value of the distribution </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -<method name="operator()" cv="const"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><description><para>Returns an integer uniformly distributed in the range [min, max]. </para></description></method> -<method name="operator()" cv="const"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns an integer uniformly distributed in the range [param.a(), param.b()]. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="min"><paramtype>IntType</paramtype><default>0</default></parameter><parameter name="max"><paramtype>IntType</paramtype><default>(std::numeric_limits< IntType >::max)()</default></parameter><description><para>Constructs a <classname alt="boost::random::uniform_int_distribution">uniform_int_distribution</classname>. <computeroutput>min</computeroutput> and <computeroutput>max</computeroutput> are the parameters of the distribution.</para><para>Requires: min <= max </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::uniform_int_distribution">uniform_int_distribution</classname> from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="ud"><paramtype>const <classname>uniform_int_distribution</classname> &</paramtype></parameter><description><para>Writes the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="ud"><paramtype>const <classname>uniform_int_distribution</classname> &</paramtype></parameter><description><para>Reads the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>uniform_int_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>uniform_int_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions will produce identical sequences of values given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>uniform_int_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>uniform_int_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions may produce different sequences of values given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/uniform_on_sphere.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="uniform_on_sphere"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - <template-type-parameter name="Cont"><default>std::vector<RealType></default></template-type-parameter> - </template><description><para>Instantiations of class template <classname alt="boost::random::uniform_on_sphere">uniform_on_sphere</classname> model a <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . Such a distribution produces random numbers uniformly distributed on the unit sphere of arbitrary dimension <computeroutput>dim</computeroutput>. The <computeroutput>Cont</computeroutput> template parameter must be a STL-like container type with begin and end operations returning non-const ForwardIterators of type <computeroutput>Cont::iterator</computeroutput>. </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>uniform_on_sphere</classname></type></typedef> -<method-group name="public member functions"> -<method name="dim" cv="const"><type>int</type><description><para>Returns the dimension of the sphere. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="dim"><paramtype>int</paramtype><default>2</default></parameter><description><para>Constructs the parameters of a <classname alt="boost::random::uniform_on_sphere">uniform_on_sphere</classname> distribution, given the dimension of the sphere. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are equal. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are different. </para></description></method> -</method-group> -</class><typedef name="input_type"><type>RealType</type></typedef> -<typedef name="result_type"><type>Cont</type></typedef> -<method-group name="public member functions"> -<method name="dim" cv="const"><type>int</type><description><para>Returns the dimension of the sphere. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="min" cv="const"><type>result_type</type><description><para>Returns the smallest value that the distribution can produce. Note that this is required to approximate the standard library's requirements. The behavior is defined according to lexicographical comparison so that for a container type of std::vector, dist.min() <= x <= dist.max() where x is any value produced by the distribution. </para></description></method> -<method name="max" cv="const"><type>result_type</type><description><para>Returns the largest value that the distribution can produce. Note that this is required to approximate the standard library's requirements. The behavior is defined according to lexicographical comparison so that for a container type of std::vector, dist.min() <= x <= dist.max() where x is any value produced by the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -<method name="operator()"><type>const result_type &</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><description><para>Returns a point uniformly distributed over the surface of a sphere of dimension dim(). </para></description></method> -<method name="operator()" cv="const"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a point uniformly distributed over the surface of a sphere of dimension param.dim(). </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="dim"><paramtype>int</paramtype><default>2</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::uniform_on_sphere">uniform_on_sphere</classname></computeroutput> distribution. <computeroutput>dim</computeroutput> is the dimension of the sphere.</para><para>Requires: dim >= 0 </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::uniform_on_sphere">uniform_on_sphere</classname></computeroutput> distribution from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="sd"><paramtype>const <classname>uniform_on_sphere</classname> &</paramtype></parameter><description><para>Writes the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="sd"><paramtype>const <classname>uniform_on_sphere</classname> &</paramtype></parameter><description><para>Reads the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>uniform_on_sphere</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>uniform_on_sphere</classname> &</paramtype></parameter><description><para>Returns true if the two distributions will produce identical sequences of values, given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>uniform_on_sphere</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>uniform_on_sphere</classname> &</paramtype></parameter><description><para>Returns true if the two distributions may produce different sequences of values, given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/uniform_real_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="uniform_real_distribution"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>The class template <classname alt="boost::random::uniform_real_distribution">uniform_real_distribution</classname> models a <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . On each invocation, it returns a random floating-point value uniformly distributed in the range [min..max). </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>uniform_real_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="a" cv="const"><type>RealType</type><description><para>Returns the minimum value of the distribution. </para></description></method> -<method name="b" cv="const"><type>RealType</type><description><para>Returns the maximum value of the distribution. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="min"><paramtype>RealType</paramtype><default>0.0</default></parameter><parameter name="max"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs the parameters of a <classname alt="boost::random::uniform_real_distribution">uniform_real_distribution</classname>.</para><para>Requires min <= max </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are equal. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are different. </para></description></method> -</method-group> -</class><typedef name="input_type"><type>RealType</type></typedef> -<typedef name="result_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="min" cv="const"><type>RealType</type><description><para>Returns the minimum value of the distribution </para></description></method> -<method name="max" cv="const"><type>RealType</type><description><para>Returns the maximum value of the distribution </para></description></method> -<method name="a" cv="const"><type>RealType</type><description><para>Returns the minimum value of the distribution </para></description></method> -<method name="b" cv="const"><type>RealType</type><description><para>Returns the maximum value of the distribution </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -<method name="operator()" cv="const"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><description><para>Returns a value uniformly distributed in the range [min, max). </para></description></method> -<method name="operator()" cv="const"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a value uniformly distributed in the range [param.a(), param.b()). </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="min"><paramtype>RealType</paramtype><default>0.0</default></parameter><parameter name="max"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs a <classname alt="boost::random::uniform_real_distribution">uniform_real_distribution</classname>. <computeroutput>min</computeroutput> and <computeroutput>max</computeroutput> are the parameters of the distribution.</para><para>Requires: min <= max </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs a <classname alt="boost::random::uniform_real_distribution">uniform_real_distribution</classname> from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="ud"><paramtype>const <classname>uniform_real_distribution</classname> &</paramtype></parameter><description><para>Writes the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="ud"><paramtype>const <classname>uniform_real_distribution</classname> &</paramtype></parameter><description><para>Reads the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>uniform_real_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>uniform_real_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions will produce identical sequences of values given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>uniform_real_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>uniform_real_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two distributions may produce different sequences of values given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/uniform_smallint.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="uniform_smallint"><template> - <template-type-parameter name="IntType"><default>int</default></template-type-parameter> - </template><description><para>The distribution function <classname alt="boost::random::uniform_smallint">uniform_smallint</classname> models a <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . On each invocation, it returns a random integer value uniformly distributed in the set of integer numbers {min, min+1, min+2, ..., max}. It assumes that the desired range (max-min+1) is small compared to the range of the underlying source of random numbers and thus makes no attempt to limit quantization errors.</para><para>Let <inlineequation><alt>$r_{\mathtt{out}} = (\mbox{max}-\mbox{min}+1)$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_38.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{out}} = (\mbox{max}-\mbox{min}+1)$</phrase></textobject></inlinemediaobject></inlineequation> the desired range of integer numbers, and let <inlineequation><alt>$r_{\mathtt{base}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_39.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{base}}$</phrase></textobject></inlinemediaobject></inlineequation> be the range of the underlying source of random numbers. Then, for the uniform distribution, the theoretical probability for any number i in the range <inlineequation><alt>$r_{\mathtt{out}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_40.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{out}}$</phrase></textobject></inlinemediaobject></inlineequation> will be <inlineequation><alt>$\displaystyle p_{\mathtt{out}}(i) = \frac{1}{r_{\mathtt{out}}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_41.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle p_{\mathtt{out}}(i) = \frac{1}{r_{\mathtt{out}}}$</phrase></textobject></inlinemediaobject></inlineequation>. Likewise, assume a uniform distribution on <inlineequation><alt>$r_{\mathtt{base}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_39.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{base}}$</phrase></textobject></inlinemediaobject></inlineequation> for the underlying source of random numbers, i.e. <inlineequation><alt>$\displaystyle p_{\mathtt{base}}(i) = \frac{1}{r_{\mathtt{base}}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_42.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle p_{\mathtt{base}}(i) = \frac{1}{r_{\mathtt{base}}}$</phrase></textobject></inlinemediaobject></inlineequation>. Let <inlineequation><alt>$p_{\mathtt{out\_s}}(i)$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_43.png"/></imageobject><textobject role="tex"><phrase>$p_{\mathtt{out\_s}}(i)$</phrase></textobject></inlinemediaobject></inlineequation> denote the random distribution generated by <computeroutput><classname alt="boost::random::uniform_smallint">uniform_smallint</classname></computeroutput>. Then the sum over all i in <inlineequation><alt>$r_{\mathtt{out}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_40.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{out}}$</phrase></textobject></inlinemediaobject></inlineequation> of <inlineequation><alt>$\displaystyle \left(\frac{p_{\mathtt{out\_s}}(i)}{p_{\mathtt{out}}(i)} - 1\right)^2$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_44.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle \left(\frac{p_{\mathtt{out\_s}}(i)}{p_{\mathtt{out}}(i)} - 1\right)^2$</phrase></textobject></inlinemediaobject></inlineequation> shall not exceed <inlineequation><alt>$\displaystyle \frac{r_{\mathtt{out}}}{r_{\mathtt{base}}^2} (r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}}) (r_{\mathtt{out}} - r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}})$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_45.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle \frac{r_{\mathtt{out}}}{r_{\mathtt{base}}^2} (r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}}) (r_{\mathtt{out}} - r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}})$</phrase></textobject></inlinemediaobject></inlineequation>.</para><para>The template parameter IntType shall denote an integer-like value type.</para><para> <note><para> The property above is the square sum of the relative differences in probabilities between the desired uniform distribution <inlineequation><alt>$p_{\mathtt{out}}(i)$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_46.png"/></imageobject><textobject role="tex"><phrase>$p_{\mathtt{out}}(i)$</phrase></textobject></inlinemediaobject></inlineequation> and the generated distribution <inlineequation><alt>$p_{\mathtt{out\_s}}(i)$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_43.png"/></imageobject><textobject role="tex"><phrase>$p_{\mathtt{out\_s}}(i)$</phrase></textobject></inlinemediaobject></inlineequation>. The property can be fulfilled with the calculation <inlineequation><alt>$(\mbox{base\_rng} \mbox{ mod } r_{\mathtt{out}})$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_47.png"/></imageobject><textobject role="tex"><phrase>$(\mbox{base\_rng} \mbox{ mod } r_{\mathtt{out}})$</phrase></textobject></inlinemediaobject></inlineequation>, as follows: Let <inlineequation><alt>$r = r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_48.png"/></imageobject><textobject role="tex"><phrase>$r = r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}}$</phrase></textobject></inlinemediaobject></inlineequation>. The base distribution on <inlineequation><alt>$r_{\mathtt{base}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_39.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{base}}$</phrase></textobject></inlinemediaobject></inlineequation> is folded onto the range <inlineequation><alt>$r_{\mathtt{out}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_40.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{out}}$</phrase></textobject></inlinemediaobject></inlineequation>. The numbers i < r have assigned <inlineequation><alt>$\displaystyle \left\lfloor\frac{r_{\mathtt{base}}}{r_{\mathtt{out}}}\right\rfloor+1$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_49.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle \left\lfloor\frac{r_{\mathtt{base}}}{r_{\mathtt{out}}}\right\rfloor+1$</phrase></textobject></inlinemediaobject></inlineequation> numbers of the base distribution, the rest has only <inlineequation><alt>$\displaystyle \left\lfloor\frac{r_{\mathtt{base}}}{r_{\mathtt{out}}}\right\rfloor$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_50.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle \left\lfloor\frac{r_{\mathtt{base}}}{r_{\mathtt{out}}}\right\rfloor$</phrase></textobject></inlinemediaobject></inlineequation>. Therefore, <inlineequation><alt>$\displaystyle p_{\mathtt{out\_s}}(i) = \left(\left\lfloor\frac{r_{\mathtt{base}}} {r_{\mathtt{out}}}\right\rfloor+1\right) / r_{\mathtt{base}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_51.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle p_{\mathtt{out\_s}}(i) = \left(\left\lfloor\frac{r_{\mathtt{base}}} {r_{\mathtt{out}}}\right\rfloor+1\right) / r_{\mathtt{base}}$</phrase></textobject></inlinemediaobject></inlineequation> for i < r and <inlineequation><alt>$\displaystyle p_{\mathtt{out\_s}}(i) = \left\lfloor\frac{r_{\mathtt{base}}} {r_{\mathtt{out}}}\right\rfloor/r_{\mathtt{base}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_52.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle p_{\mathtt{out\_s}}(i) = \left\lfloor\frac{r_{\mathtt{base}}} {r_{\mathtt{out}}}\right\rfloor/r_{\mathtt{base}}$</phrase></textobject></inlinemediaobject></inlineequation> otherwise. Substituting this in the above sum formula leads to the desired result. </para></note> </para><para>Note: The upper bound for <inlineequation><alt>$(r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}}) (r_{\mathtt{out}} - r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}})$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_53.png"/></imageobject><textobject role="tex"><phrase>$(r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}}) (r_{\mathtt{out}} - r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}})$</phrase></textobject></inlinemediaobject></inlineequation> is <inlineequation><alt>$\displaystyle \frac{r_{\mathtt{out}}^2}{4}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_54.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle \frac{r_{\mathtt{out}}^2}{4}$</phrase></textobject></inlinemediaobject></inlineequation>. Regarding the upper bound for the square sum of the relative quantization error of <inlineequation><alt>$\displaystyle \frac{r_\mathtt{out}^3}{4r_{\mathtt{base}}^2}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_55.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle \frac{r_\mathtt{out}^3}{4r_{\mathtt{base}}^2}$</phrase></textobject></inlinemediaobject></inlineequation>, it seems wise to either choose <inlineequation><alt>$r_{\mathtt{base}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_39.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{base}}$</phrase></textobject></inlinemediaobject></inlineequation> so that <inlineequation><alt>$r_{\mathtt{base}} > 10r_{\mathtt{out}}^2$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_56.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{base}} > 10r_{\mathtt{out}}^2$</phrase></textobject></inlinemediaobject></inlineequation> or ensure that <inlineequation><alt>$r_{\mathtt{base}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_39.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{base}}$</phrase></textobject></inlinemediaobject></inlineequation> is divisible by <inlineequation><alt>$r_{\mathtt{out}}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_40.png"/></imageobject><textobject role="tex"><phrase>$r_{\mathtt{out}}$</phrase></textobject></inlinemediaobject></inlineequation>. </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>uniform_smallint</classname></type></typedef> -<method-group name="public member functions"> -<method name="a" cv="const"><type>IntType</type><description><para>Returns the minimum value. </para></description></method> -<method name="b" cv="const"><type>IntType</type><description><para>Returns the maximum value. </para></description></method> -</method-group> -<constructor><parameter name="min"><paramtype>IntType</paramtype><default>0</default></parameter><parameter name="max"><paramtype>IntType</paramtype><default>9</default></parameter><description><para>constructs the parameters of a <computeroutput><classname alt="boost::random::uniform_smallint">uniform_smallint</classname></computeroutput> distribution. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes the parameters to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads the parameters from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are equal. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are different. </para></description></method> -</method-group> -</class><typedef name="input_type"><type>IntType</type></typedef> -<typedef name="result_type"><type>IntType</type></typedef> -<method-group name="public member functions"> -<method name="a" cv="const"><type>result_type</type><description><para>Returns the minimum value of the distribution. </para></description></method> -<method name="b" cv="const"><type>result_type</type><description><para>Returns the maximum value of the distribution. </para></description></method> -<method name="min" cv="const"><type>result_type</type><description><para>Returns the minimum value of the distribution. </para></description></method> -<method name="max" cv="const"><type>result_type</type><description><para>Returns the maximum value of the distribution. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -<method name="operator()" cv="const"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><description><para>Returns a value uniformly distributed in the range [min(), max()]. </para></description></method> -<method name="operator()" cv="const"><type>result_type</type><template> - <template-type-parameter name="Engine"/> - </template><parameter name="eng"><paramtype>Engine &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a value uniformly distributed in the range [param.a(), param.b()]. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="min"><paramtype>IntType</paramtype><default>0</default></parameter><parameter name="max"><paramtype>IntType</paramtype><default>9</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::uniform_smallint">uniform_smallint</classname></computeroutput>. <computeroutput>min</computeroutput> and <computeroutput>max</computeroutput> are the lower and upper bounds of the output range, respectively. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::uniform_smallint">uniform_smallint</classname></computeroutput> from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="ud"><paramtype>const <classname>uniform_smallint</classname> &</paramtype></parameter><description><para>Writes the distribution to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="ud"><paramtype>const <classname>uniform_smallint</classname> &</paramtype></parameter><description><para>Reads the distribution from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>uniform_smallint</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>uniform_smallint</classname> &</paramtype></parameter><description><para>Returns true if the two distributions will produce identical sequences of values given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>uniform_smallint</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>uniform_smallint</classname> &</paramtype></parameter><description><para>Returns true if the two distributions may produce different sequences of values given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/variate_generator.hpp"> -<namespace name="boost"> -<class name="variate_generator"><template> - <template-type-parameter name="Engine"/> - <template-type-parameter name="Distribution"/> - </template><description><para>A random variate generator is used to join a random number generator together with a random number distribution. Boost.Random provides a vast choice of <link linkend="boost_random.reference.generators">generators</link> as well as <link linkend="boost_random.reference.distributions">distributions</link> .</para><para>The argument for the template parameter Engine shall be of the form U, U&, or U*, where U models a <link linkend="boost_random.reference.concepts.uniform_random_number_generator">uniform random number generator</link> . Then, the member engine_value_type names U (not the pointer or reference to U).</para><para>Specializations of <computeroutput><classname alt="boost::variate_generator">variate_generator</classname></computeroutput> satisfy the requirements of CopyConstructible. They also satisfy the requirements of Assignable unless the template parameter Engine is of the form U&.</para><para>The complexity of all functions specified in this section is constant. No function described in this section except the constructor throws an exception. </para></description><typedef name="engine_value_type"><type>helper_type::value_type</type></typedef> -<typedef name="engine_type"><type>Engine</type></typedef> -<typedef name="distribution_type"><type>Distribution</type></typedef> -<typedef name="result_type"><type>Distribution::result_type</type></typedef> -<method-group name="public member functions"> -<method name="operator()"><type>result_type</type><description><para>Returns: distribution()(engine()) </para></description></method> -<method name="operator()"><type>result_type</type><template> - <template-type-parameter name="T"/> - </template><parameter name="value"><paramtype>const T &</paramtype></parameter><description><para>Returns: distribution()(engine(), value). </para></description></method> -<method name="engine"><type>engine_value_type &</type><description><para>Returns: A reference to the associated uniform random number generator. </para></description></method> -<method name="engine" cv="const"><type>const engine_value_type &</type><description><para>Returns: A reference to the associated uniform random number generator. </para></description></method> -<method name="distribution"><type>distribution_type &</type><description><para>Returns: A reference to the associated <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> . </para></description></method> -<method name="distribution" cv="const"><type>const distribution_type &</type><description><para>Returns: A reference to the associated random distribution. </para></description></method> -<method name="min" cv="const"><type>result_type</type><description><para>Precondition: distribution().min() is well-formed</para><para>Returns: distribution().min() </para></description></method> -<method name="max" cv="const"><type>result_type</type><description><para>Precondition: distribution().max() is well-formed</para><para>Returns: distribution().max() </para></description></method> -</method-group> -<constructor><parameter name="e"><paramtype>Engine</paramtype></parameter><parameter name="d"><paramtype>Distribution</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::variate_generator">variate_generator</classname></computeroutput> object with the associated <link linkend="boost_random.reference.concepts.uniform_random_number_generator">uniform random number generator</link> eng and the associated <link linkend="boost_random.reference.concepts.random_distribution">random distribution</link> d.</para><para>Throws: If and what the copy constructor of Engine or Distribution throws. </para></description></constructor> -</class></namespace> -</header> -<header name="boost/random/weibull_distribution.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="weibull_distribution"><template> - <template-type-parameter name="RealType"><default>double</default></template-type-parameter> - </template><description><para>The Weibull distribution is a real valued distribution with two parameters a and b, producing values >= 0.</para><para>It has <inlineequation><alt>$\displaystyle p(x) = \frac{a}{b}\left(\frac{x}{b}\right)^{a-1}e^{-\left(\frac{x}{b}\right)^a}$</alt><inlinemediaobject><imageobject role="html"><imagedata format="PNG" fileref="images/random//form_57.png"/></imageobject><textobject role="tex"><phrase>$\displaystyle p(x) = \frac{a}{b}\left(\frac{x}{b}\right)^{a-1}e^{-\left(\frac{x}{b}\right)^a}$</phrase></textobject></inlinemediaobject></inlineequation>. </para></description><class name="param_type"><typedef name="distribution_type"><type><classname>weibull_distribution</classname></type></typedef> -<method-group name="public member functions"> -<method name="a" cv="const"><type>RealType</type><description><para>Returns the "a" parameter of the distribtuion. </para></description></method> -<method name="b" cv="const"><type>RealType</type><description><para>Returns the "b" parameter of the distribution. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="a"><paramtype>RealType</paramtype><default>1.0</default></parameter><parameter name="b"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::weibull_distribution::param_type">param_type</classname></computeroutput> from the "a" and "b" parameters of the distribution.</para><para>Requires: a > 0 && b > 0 </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::weibull_distribution::param_type">param_type</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::weibull_distribution::param_type">param_type</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the same. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns true if the two sets of parameters are the different. </para></description></method> -</method-group> -</class><typedef name="result_type"><type>RealType</type></typedef> -<typedef name="input_type"><type>RealType</type></typedef> -<method-group name="public member functions"> -<method name="operator()" cv="const"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><description><para>Returns a random variate distributed according to the <computeroutput><classname alt="boost::random::weibull_distribution">weibull_distribution</classname></computeroutput>. </para></description></method> -<method name="operator()" cv="const"><type>RealType</type><template> - <template-type-parameter name="URNG"/> - </template><parameter name="urng"><paramtype>URNG &</paramtype></parameter><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Returns a random variate distributed accordint to the Weibull distribution with parameters specified by <computeroutput>param</computeroutput>. </para></description></method> -<method name="a" cv="const"><type>RealType</type><description><para>Returns the "a" parameter of the distribution. </para></description></method> -<method name="b" cv="const"><type>RealType</type><description><para>Returns the "b" parameter of the distribution. </para></description></method> -<method name="min" cv="const"><type>RealType</type><description><para>Returns the smallest value that the distribution can produce. </para></description></method> -<method name="max" cv="const"><type>RealType</type><description><para>Returns the largest value that the distribution can produce. </para></description></method> -<method name="param" cv="const"><type><classname>param_type</classname></type><description><para>Returns the parameters of the distribution. </para></description></method> -<method name="param"><type>void</type><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Sets the parameters of the distribution. </para></description></method> -<method name="reset"><type>void</type><description><para>Effects: Subsequent uses of the distribution do not depend on values produced by any engine prior to invoking reset. </para></description></method> -</method-group> -<constructor specifiers="explicit"><parameter name="a"><paramtype>RealType</paramtype><default>1.0</default></parameter><parameter name="b"><paramtype>RealType</paramtype><default>1.0</default></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::weibull_distribution">weibull_distribution</classname></computeroutput> from its "a" and "b" parameters.</para><para>Requires: a > 0 && b > 0 </para></description></constructor> -<constructor specifiers="explicit"><parameter name="param"><paramtype>const <classname>param_type</classname> &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::weibull_distribution">weibull_distribution</classname></computeroutput> from its parameters. </para></description></constructor> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="wd"><paramtype>const <classname>weibull_distribution</classname> &</paramtype></parameter><description><para>Writes a <computeroutput><classname alt="boost::random::weibull_distribution">weibull_distribution</classname></computeroutput> to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="wd"><paramtype>const <classname>weibull_distribution</classname> &</paramtype></parameter><description><para>Reads a <computeroutput><classname alt="boost::random::weibull_distribution">weibull_distribution</classname></computeroutput> from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>weibull_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>weibull_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two instances of <computeroutput><classname alt="boost::random::weibull_distribution">weibull_distribution</classname></computeroutput> will return identical sequences of values given equal generators. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>weibull_distribution</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>weibull_distribution</classname> &</paramtype></parameter><description><para>Returns true if the two instances of <computeroutput><classname alt="boost::random::weibull_distribution">weibull_distribution</classname></computeroutput> will return different sequences of values given equal generators. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -<header name="boost/random/xor_combine.hpp"> -<namespace name="boost"> -<namespace name="random"> -<class name="xor_combine_engine"><template> - <template-type-parameter name="URNG1"/> - <template-nontype-parameter name="s1"><type>int</type></template-nontype-parameter> - <template-type-parameter name="URNG2"/> - <template-nontype-parameter name="s2"><type>int</type></template-nontype-parameter> - </template><description><para>Instantiations of <computeroutput><classname alt="boost::random::xor_combine_engine">xor_combine_engine</classname></computeroutput> model a <link linkend="boost_random.reference.concepts.pseudo_random_number_generator">pseudo-random number generator</link> . To produce its output it invokes each of the base generators, shifts their results and xors them together. </para></description><typedef name="base1_type"><type>URNG1</type></typedef> -<typedef name="base2_type"><type>URNG2</type></typedef> -<typedef name="result_type"><type>base1_type::result_type</type></typedef> -<data-member name="has_fixed_range" specifiers="static"><type>const bool</type></data-member> -<data-member name="shift1" specifiers="static"><type>const int</type></data-member> -<data-member name="shift2" specifiers="static"><type>const int</type></data-member> -<method-group name="public member functions"> -<method name="seed"><type>void</type><description><para>Calls <computeroutput>seed()</computeroutput> for both base generators. </para></description></method> -<method name="seed"><type>void</type><parameter name="v"><paramtype>result_type</paramtype></parameter><description><para><computeroutput>seeds</computeroutput> both base generators with <computeroutput>v</computeroutput>. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para><computeroutput>seeds</computeroutput> both base generators with values produced by <computeroutput>seq</computeroutput>. </para></description></method> -<method name="seed"><type>void</type><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>seeds both base generators with values from the iterator range [first, last) and changes first to point to the element after the last one used. If there are not enough elements in the range to seed both generators, throws <computeroutput>std::invalid_argument</computeroutput>. </para></description></method> -<method name="base1" cv="const"><type>const base1_type &</type><description><para>Returns the first base generator. </para></description></method> -<method name="base2" cv="const"><type>const base2_type &</type><description><para>Returns the second base generator. </para></description></method> -<method name="operator()"><type>result_type</type><description><para>Returns the next value of the generator. </para></description></method> -<method name="generate"><type>void</type><template> - <template-type-parameter name="Iter"/> - </template><parameter name="first"><paramtype>Iter</paramtype></parameter><parameter name="last"><paramtype>Iter</paramtype></parameter><description><para>Fills a range with random values </para></description></method> -<method name="discard"><type>void</type><parameter name="z"><paramtype>boost::uintmax_t</paramtype></parameter><description><para>Advances the state of the generator by <computeroutput>z</computeroutput>. </para></description></method> -</method-group> -<constructor><description><para>Constructors a <computeroutput><classname alt="boost::random::xor_combine_engine">xor_combine_engine</classname></computeroutput> by default constructing both base generators. </para></description></constructor> -<constructor><parameter name="rng1"><paramtype>const base1_type &</paramtype></parameter><parameter name="rng2"><paramtype>const base2_type &</paramtype></parameter><description><para>Constructs a <computeroutput>xor_combine</computeroutput> by copying two base generators. </para></description></constructor> -<constructor specifiers="explicit"><parameter name="v"><paramtype>result_type</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::xor_combine_engine">xor_combine_engine</classname></computeroutput>, seeding both base generators with <computeroutput>v</computeroutput>.</para><para> <warning><para> The exact algorithm used by this function may change in the future. </para></warning> </para></description></constructor> -<constructor specifiers="explicit"><template> - <template-type-parameter name="SeedSeq"/> - </template><parameter name="seq"><paramtype>SeedSeq &</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::xor_combine_engine">xor_combine_engine</classname></computeroutput>, seeding both base generators with values produced by <computeroutput>seq</computeroutput>. </para></description></constructor> -<constructor><template> - <template-type-parameter name="It"/> - </template><parameter name="first"><paramtype>It &</paramtype></parameter><parameter name="last"><paramtype>It</paramtype></parameter><description><para>Constructs a <computeroutput><classname alt="boost::random::xor_combine_engine">xor_combine_engine</classname></computeroutput>, seeding both base generators with values from the iterator range [first, last) and changes first to point to the element after the last one used. If there are not enough elements in the range to seed both generators, throws <computeroutput>std::invalid_argument</computeroutput>. </para></description></constructor> -<method-group name="public static functions"> -<method name="min" specifiers="static"><type>constexpr result_type</type><description><para>Returns the smallest value that the generator can produce. </para></description></method> -<method name="max" specifiers="static"><type>constexpr result_type</type><description><para>Returns the largest value that the generator can produce. </para></description></method> -</method-group> -<method-group name="friend functions"> -<method name="operator<<"><type>friend std::basic_ostream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="os"><paramtype>std::basic_ostream< CharT, Traits > &</paramtype></parameter><parameter name="s"><paramtype>const <classname>xor_combine_engine</classname> &</paramtype></parameter><description><para>Writes the textual representation of the generator to a <computeroutput>std::ostream</computeroutput>. </para></description></method> -<method name="operator>>"><type>friend std::basic_istream< CharT, Traits > &</type><template> - <template-type-parameter name="CharT"/> - <template-type-parameter name="Traits"/> - </template><parameter name="is"><paramtype>std::basic_istream< CharT, Traits > &</paramtype></parameter><parameter name="s"><paramtype>const <classname>xor_combine_engine</classname> &</paramtype></parameter><description><para>Reads the textual representation of the generator from a <computeroutput>std::istream</computeroutput>. </para></description></method> -<method name="operator=="><type>friend bool</type><parameter name="x"><paramtype>const <classname>xor_combine_engine</classname> &</paramtype></parameter><parameter name="y"><paramtype>const <classname>xor_combine_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce identical sequences. </para></description></method> -<method name="operator!="><type>friend bool</type><parameter name="lhs"><paramtype>const <classname>xor_combine_engine</classname> &</paramtype></parameter><parameter name="rhs"><paramtype>const <classname>xor_combine_engine</classname> &</paramtype></parameter><description><para>Returns true if the two generators will produce different sequences. </para></description></method> -</method-group> -</class> -</namespace> -</namespace> -</header> -</library-reference> \ No newline at end of file Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/safe_numerics/doc/boostbook/accu/accu.pdf and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/safe_numerics/doc/boostbook/accu/accu.pdf differ diff -Nru boost1.81-1.81.0/libs/serialization/index.html boost1.81-1.81.0/libs/serialization/index.html --- boost1.81-1.81.0/libs/serialization/index.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/serialization/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -<html> -<!-- -(C) Copyright 2002-4 Robert Ramey - http://www.rrsd.com . -Use, modification and distribution is subject to the Boost Software -License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -http://www.boost.org/LICENSE_1_0.txt) ---> -<head> -<meta http-equiv="refresh" content="0; URL=doc/index.html"> -</head> -<body> -Automatic redirection failed, please go to -<a href="doc/index.html">doc/index.html</a>. -</body> -</html> \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/sort/doc/doxygen/index.html boost1.81-1.81.0/libs/sort/doc/doxygen/index.html --- boost1.81-1.81.0/libs/sort/doc/doxygen/index.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/sort/doc/doxygen/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -<!-- -Redirection to local sort Doxygen documentation /libs/sort/doc/doxygen/html/index.html - -Copyright 2014 Paul A. Bristow -Distributed under the Boost Software License, Version 1.0. (See accompanying -file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ---> -<html> -<head> - <meta http-equiv="refresh" content="0; URL= ./html/index.html"> -</head> -<body> - Automatic redirection failed! -</body> -</html> Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/sort/doc/equation/Thumbs.db and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/sort/doc/equation/Thumbs.db differ diff -Nru boost1.81-1.81.0/libs/sort/doc/graph/osx_float_sort.htm boost1.81-1.81.0/libs/sort/doc/graph/osx_float_sort.htm --- boost1.81-1.81.0/libs/sort/doc/graph/osx_float_sort.htm 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/sort/doc/graph/osx_float_sort.htm 1970-01-01 00:00:00.000000000 +0000 @@ -1,358 +0,0 @@ -<html xmlns:o="urn:schemas-microsoft-com:office:office" -xmlns:x="urn:schemas-microsoft-com:office:excel" -xmlns="http://www.w3.org/TR/REC-html40"> - -<head> -<meta name="Excel Workbook Frameset"> -<meta http-equiv=Content-Type content="text/html; charset=windows-1252"> -<meta name=ProgId content=Excel.Sheet> -<meta name=Generator content="Microsoft Excel 10"> -<link rel=File-List href="osx_float_sort_files/filelist.xml"> -<link rel=Edit-Time-Data href="osx_float_sort_files/editdata.mso"> -<link rel=OLE-Object-Data href="osx_float_sort_files/oledata.mso"> -<!--[if gte mso 9]><xml> - <o:DocumentProperties> - <o:Author>Steve</o:Author> - <o:LastAuthor>Steve</o:LastAuthor> - <o:Created>2009-02-02T02:13:19Z</o:Created> - <o:LastSaved>2009-07-27T05:12:41Z</o:LastSaved> - <o:Company>Home</o:Company> - <o:Version>10.2625</o:Version> - </o:DocumentProperties> - <o:OfficeDocumentSettings> - <o:DownloadComponents/> - <o:LocationOfComponents HRef="file:///D:\"/> - </o:OfficeDocumentSettings> -</xml><![endif]--><![if !supportTabStrip]> -<link id="shLink" href="osx_float_sort_files/chart001.htm"> -<link id="shLink" href="osx_float_sort_files/chart002.htm"> -<link id="shLink" href="osx_float_sort_files/sheet001.htm"> -<link id="shLink" href="osx_float_sort_files/sheet002.htm"> - -<link id="shLink"> - -<script language="JavaScript"> -<!-- - var c_lTabs=4; - - var c_rgszSh=new Array(c_lTabs); - c_rgszSh[0] = "Ranges"; - c_rgszSh[1] = "Runtimes"; - c_rgszSh[2] = "RangeData"; - c_rgszSh[3] = "Runtime Data"; - - - - var c_rgszClr=new Array(8); - c_rgszClr[0]="window"; - c_rgszClr[1]="buttonface"; - c_rgszClr[2]="windowframe"; - c_rgszClr[3]="windowtext"; - c_rgszClr[4]="threedlightshadow"; - c_rgszClr[5]="threedhighlight"; - c_rgszClr[6]="threeddarkshadow"; - c_rgszClr[7]="threedshadow"; - - var g_iShCur; - var g_rglTabX=new Array(c_lTabs); - -function fnGetIEVer() -{ - var ua=window.navigator.userAgent - var msie=ua.indexOf("MSIE") - if (msie>0 && window.navigator.platform=="Win32") - return parseInt(ua.substring(msie+5,ua.indexOf(".", msie))); - else - return 0; -} - -function fnBuildFrameset() -{ - var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+ - "<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+ - "<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+ - "</frameset></frameset><plaintext>"; - - with (document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - fnBuildTabStrip(); -} - -function fnBuildTabStrip() -{ - var szHTML= - "<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+ - ".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+ - "<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+ - "<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+ - "<tr><td style=\"font:1pt\"> <td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+ - "<td style=\"font:1pt\"> <td></tr></table></body></html>"; - - with (frames['frScroll'].document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - szHTML = - "<html><head>"+ - "<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+ - ".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+ - ".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+ - "</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+ - " topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>"; - - var iCellCount=(c_lTabs+1)*2; - - var i; - for (i=0;i<iCellCount;i+=2) - szHTML+="<col width=1><col>"; - - var iRow; - for (iRow=0;iRow<6;iRow++) { - - szHTML+="<tr>"; - - if (iRow==5) - szHTML+="<td colspan="+iCellCount+"></td>"; - else { - if (iRow==0) { - for(i=0;i<iCellCount;i++) - szHTML+="<td height=1 class=\"clBorder\"></td>"; - } else if (iRow==1) { - for(i=0;i<c_lTabs;i++) { - szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>"; - szHTML+= - "<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+ - "<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>"; - } - szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>"; - } else if (iRow==2) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>"; - szHTML+="<td height=1></td><td height=1></td>"; - } else if (iRow==3) { - for (i=0;i<iCellCount;i++) - szHTML+="<td height=1></td>"; - } else if (iRow==4) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1 width=1></td><td height=1></td>"; - szHTML+="<td height=1 width=1></td><td></td>"; - } - } - szHTML+="</tr>"; - } - - szHTML+="</table></body></html>"; - with (frames['frTabs'].document) { - open("text/html","replace"); - charset=document.charset; - write(szHTML); - close(); - } -} - -function fnInit() -{ - g_rglTabX[0]=0; - var i; - for (i=1;i<=c_lTabs;i++) - with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)]) - g_rglTabX[i]=offsetLeft+offsetWidth-6; -} - -function fnTabToCol(iTab) -{ - return 2*iTab+1; -} - -function fnNextTab(fDir) -{ - var iNextTab=-1; - var i; - - with (frames['frTabs'].document.body) { - if (fDir==0) { - if (scrollLeft>0) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i-1; - } - } else { - if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i; - } - } - } - return iNextTab; -} - -function fnScrollTabs(fDir) -{ - var iNextTab=fnNextTab(fDir); - - if (iNextTab>=0) { - frames['frTabs'].scroll(g_rglTabX[iNextTab],0); - return true; - } else - return false; -} - -function fnFastScrollTabs(fDir) -{ - if (c_lTabs>16) - frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0); - else - if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5); -} - -function fnSetTabProps(iTab,fActive) -{ - var iCol=fnTabToCol(iTab); - var i; - - if (iTab>=0) { - with (frames['frTabs'].document.all) { - with (tbTabs) { - for (i=0;i<=4;i++) { - with (rows[i]) { - if (i==0) - cells[iCol].style.background=c_rgszClr[fActive?0:2]; - else if (i>0 && i<4) { - if (fActive) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[0]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - if (i==1) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[1]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - cells[iCol-1].style.background=c_rgszClr[4]; - cells[iCol].style.background=c_rgszClr[(i==2)?2:4]; - cells[iCol+1].style.background=c_rgszClr[4]; - } - } - } else - cells[iCol].style.background=c_rgszClr[fActive?2:4]; - } - } - } - with (aTab[iTab].style) { - cursor=(fActive?"default":"hand"); - color=c_rgszClr[3]; - } - } - } -} - -function fnMouseOverScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7]; -} - -function fnMouseOutScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6]; -} - -function fnMouseOverTab(iTab) -{ - if (iTab!=g_iShCur) { - var iCol=fnTabToCol(iTab); - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[5]; - } - } -} - -function fnMouseOutTab(iTab) -{ - if (iTab>=0) { - var elFrom=frames['frTabs'].event.srcElement; - var elTo=frames['frTabs'].event.toElement; - - if ((!elTo) || - (elFrom.tagName==elTo.tagName) || - (elTo.tagName=="A" && elTo.parentElement!=elFrom) || - (elFrom.tagName=="A" && elFrom.parentElement!=elTo)) { - - if (iTab!=g_iShCur) { - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[1]; - } - } - } - } -} - -function fnSetActiveSheet(iSh) -{ - if (iSh!=g_iShCur) { - fnSetTabProps(g_iShCur,false); - fnSetTabProps(iSh,true); - g_iShCur=iSh; - } -} - - window.g_iIEVer=fnGetIEVer(); - if (window.g_iIEVer>=4) - fnBuildFrameset(); -//--> -</script> -<![endif]><!--[if gte mso 9]><xml> - <x:ExcelWorkbook> - <x:ExcelWorksheets> - <x:ExcelWorksheet> - <x:Name>Ranges</x:Name> - <x:WorksheetSource HRef="osx_float_sort_files/chart001.htm"/> - <x:WorksheetType>Chart</x:WorksheetType> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>Runtimes</x:Name> - <x:WorksheetSource HRef="osx_float_sort_files/chart002.htm"/> - <x:WorksheetType>Chart</x:WorksheetType> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>RangeData</x:Name> - <x:WorksheetSource HRef="osx_float_sort_files/sheet001.htm"/> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>Runtime Data</x:Name> - <x:WorksheetSource HRef="osx_float_sort_files/sheet002.htm"/> - </x:ExcelWorksheet> - </x:ExcelWorksheets> - <x:Stylesheet HRef="osx_float_sort_files/stylesheet.css"/> - <x:WindowHeight>8700</x:WindowHeight> - <x:WindowWidth>10395</x:WindowWidth> - <x:WindowTopX>360</x:WindowTopX> - <x:WindowTopY>135</x:WindowTopY> - <x:ProtectStructure>False</x:ProtectStructure> - <x:ProtectWindows>False</x:ProtectWindows> - </x:ExcelWorkbook> -</xml><![endif]--> -</head> - -<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0> - <frame src="osx_float_sort_files/chart001.htm" name="frSheet"> - <frame src="osx_float_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0> - <noframes> - <body> - <p>This page uses frames, but your browser doesn't support them.</p> - </body> - </noframes> -</frameset> -</html> diff -Nru boost1.81-1.81.0/libs/sort/doc/graph/osx_integer_sort.htm boost1.81-1.81.0/libs/sort/doc/graph/osx_integer_sort.htm --- boost1.81-1.81.0/libs/sort/doc/graph/osx_integer_sort.htm 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/sort/doc/graph/osx_integer_sort.htm 1970-01-01 00:00:00.000000000 +0000 @@ -1,358 +0,0 @@ -<html xmlns:o="urn:schemas-microsoft-com:office:office" -xmlns:x="urn:schemas-microsoft-com:office:excel" -xmlns="http://www.w3.org/TR/REC-html40"> - -<head> -<meta name="Excel Workbook Frameset"> -<meta http-equiv=Content-Type content="text/html; charset=windows-1252"> -<meta name=ProgId content=Excel.Sheet> -<meta name=Generator content="Microsoft Excel 10"> -<link rel=File-List href="osx_integer_sort_files/filelist.xml"> -<link rel=Edit-Time-Data href="osx_integer_sort_files/editdata.mso"> -<link rel=OLE-Object-Data href="osx_integer_sort_files/oledata.mso"> -<!--[if gte mso 9]><xml> - <o:DocumentProperties> - <o:Author>Steve</o:Author> - <o:LastAuthor>Steve</o:LastAuthor> - <o:Created>2009-02-02T02:13:19Z</o:Created> - <o:LastSaved>2009-07-27T04:48:55Z</o:LastSaved> - <o:Company>Home</o:Company> - <o:Version>10.2625</o:Version> - </o:DocumentProperties> - <o:OfficeDocumentSettings> - <o:DownloadComponents/> - <o:LocationOfComponents HRef="file:///D:\"/> - </o:OfficeDocumentSettings> -</xml><![endif]--><![if !supportTabStrip]> -<link id="shLink" href="osx_integer_sort_files/chart001.htm"> -<link id="shLink" href="osx_integer_sort_files/chart002.htm"> -<link id="shLink" href="osx_integer_sort_files/sheet001.htm"> -<link id="shLink" href="osx_integer_sort_files/sheet002.htm"> - -<link id="shLink"> - -<script language="JavaScript"> -<!-- - var c_lTabs=4; - - var c_rgszSh=new Array(c_lTabs); - c_rgszSh[0] = "Ranges"; - c_rgszSh[1] = "Runtimes"; - c_rgszSh[2] = "RangeData"; - c_rgszSh[3] = "Runtime Data"; - - - - var c_rgszClr=new Array(8); - c_rgszClr[0]="window"; - c_rgszClr[1]="buttonface"; - c_rgszClr[2]="windowframe"; - c_rgszClr[3]="windowtext"; - c_rgszClr[4]="threedlightshadow"; - c_rgszClr[5]="threedhighlight"; - c_rgszClr[6]="threeddarkshadow"; - c_rgszClr[7]="threedshadow"; - - var g_iShCur; - var g_rglTabX=new Array(c_lTabs); - -function fnGetIEVer() -{ - var ua=window.navigator.userAgent - var msie=ua.indexOf("MSIE") - if (msie>0 && window.navigator.platform=="Win32") - return parseInt(ua.substring(msie+5,ua.indexOf(".", msie))); - else - return 0; -} - -function fnBuildFrameset() -{ - var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+ - "<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+ - "<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+ - "</frameset></frameset><plaintext>"; - - with (document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - fnBuildTabStrip(); -} - -function fnBuildTabStrip() -{ - var szHTML= - "<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+ - ".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+ - "<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+ - "<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+ - "<tr><td style=\"font:1pt\"> <td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+ - "<td style=\"font:1pt\"> <td></tr></table></body></html>"; - - with (frames['frScroll'].document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - szHTML = - "<html><head>"+ - "<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+ - ".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+ - ".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+ - "</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+ - " topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>"; - - var iCellCount=(c_lTabs+1)*2; - - var i; - for (i=0;i<iCellCount;i+=2) - szHTML+="<col width=1><col>"; - - var iRow; - for (iRow=0;iRow<6;iRow++) { - - szHTML+="<tr>"; - - if (iRow==5) - szHTML+="<td colspan="+iCellCount+"></td>"; - else { - if (iRow==0) { - for(i=0;i<iCellCount;i++) - szHTML+="<td height=1 class=\"clBorder\"></td>"; - } else if (iRow==1) { - for(i=0;i<c_lTabs;i++) { - szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>"; - szHTML+= - "<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+ - "<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>"; - } - szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>"; - } else if (iRow==2) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>"; - szHTML+="<td height=1></td><td height=1></td>"; - } else if (iRow==3) { - for (i=0;i<iCellCount;i++) - szHTML+="<td height=1></td>"; - } else if (iRow==4) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1 width=1></td><td height=1></td>"; - szHTML+="<td height=1 width=1></td><td></td>"; - } - } - szHTML+="</tr>"; - } - - szHTML+="</table></body></html>"; - with (frames['frTabs'].document) { - open("text/html","replace"); - charset=document.charset; - write(szHTML); - close(); - } -} - -function fnInit() -{ - g_rglTabX[0]=0; - var i; - for (i=1;i<=c_lTabs;i++) - with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)]) - g_rglTabX[i]=offsetLeft+offsetWidth-6; -} - -function fnTabToCol(iTab) -{ - return 2*iTab+1; -} - -function fnNextTab(fDir) -{ - var iNextTab=-1; - var i; - - with (frames['frTabs'].document.body) { - if (fDir==0) { - if (scrollLeft>0) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i-1; - } - } else { - if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i; - } - } - } - return iNextTab; -} - -function fnScrollTabs(fDir) -{ - var iNextTab=fnNextTab(fDir); - - if (iNextTab>=0) { - frames['frTabs'].scroll(g_rglTabX[iNextTab],0); - return true; - } else - return false; -} - -function fnFastScrollTabs(fDir) -{ - if (c_lTabs>16) - frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0); - else - if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5); -} - -function fnSetTabProps(iTab,fActive) -{ - var iCol=fnTabToCol(iTab); - var i; - - if (iTab>=0) { - with (frames['frTabs'].document.all) { - with (tbTabs) { - for (i=0;i<=4;i++) { - with (rows[i]) { - if (i==0) - cells[iCol].style.background=c_rgszClr[fActive?0:2]; - else if (i>0 && i<4) { - if (fActive) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[0]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - if (i==1) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[1]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - cells[iCol-1].style.background=c_rgszClr[4]; - cells[iCol].style.background=c_rgszClr[(i==2)?2:4]; - cells[iCol+1].style.background=c_rgszClr[4]; - } - } - } else - cells[iCol].style.background=c_rgszClr[fActive?2:4]; - } - } - } - with (aTab[iTab].style) { - cursor=(fActive?"default":"hand"); - color=c_rgszClr[3]; - } - } - } -} - -function fnMouseOverScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7]; -} - -function fnMouseOutScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6]; -} - -function fnMouseOverTab(iTab) -{ - if (iTab!=g_iShCur) { - var iCol=fnTabToCol(iTab); - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[5]; - } - } -} - -function fnMouseOutTab(iTab) -{ - if (iTab>=0) { - var elFrom=frames['frTabs'].event.srcElement; - var elTo=frames['frTabs'].event.toElement; - - if ((!elTo) || - (elFrom.tagName==elTo.tagName) || - (elTo.tagName=="A" && elTo.parentElement!=elFrom) || - (elFrom.tagName=="A" && elFrom.parentElement!=elTo)) { - - if (iTab!=g_iShCur) { - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[1]; - } - } - } - } -} - -function fnSetActiveSheet(iSh) -{ - if (iSh!=g_iShCur) { - fnSetTabProps(g_iShCur,false); - fnSetTabProps(iSh,true); - g_iShCur=iSh; - } -} - - window.g_iIEVer=fnGetIEVer(); - if (window.g_iIEVer>=4) - fnBuildFrameset(); -//--> -</script> -<![endif]><!--[if gte mso 9]><xml> - <x:ExcelWorkbook> - <x:ExcelWorksheets> - <x:ExcelWorksheet> - <x:Name>Ranges</x:Name> - <x:WorksheetSource HRef="osx_integer_sort_files/chart001.htm"/> - <x:WorksheetType>Chart</x:WorksheetType> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>Runtimes</x:Name> - <x:WorksheetSource HRef="osx_integer_sort_files/chart002.htm"/> - <x:WorksheetType>Chart</x:WorksheetType> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>RangeData</x:Name> - <x:WorksheetSource HRef="osx_integer_sort_files/sheet001.htm"/> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>Runtime Data</x:Name> - <x:WorksheetSource HRef="osx_integer_sort_files/sheet002.htm"/> - </x:ExcelWorksheet> - </x:ExcelWorksheets> - <x:Stylesheet HRef="osx_integer_sort_files/stylesheet.css"/> - <x:WindowHeight>8700</x:WindowHeight> - <x:WindowWidth>10395</x:WindowWidth> - <x:WindowTopX>360</x:WindowTopX> - <x:WindowTopY>135</x:WindowTopY> - <x:ProtectStructure>False</x:ProtectStructure> - <x:ProtectWindows>False</x:ProtectWindows> - </x:ExcelWorkbook> -</xml><![endif]--> -</head> - -<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0> - <frame src="osx_integer_sort_files/chart001.htm" name="frSheet"> - <frame src="osx_integer_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0> - <noframes> - <body> - <p>This page uses frames, but your browser doesn't support them.</p> - </body> - </noframes> -</frameset> -</html> diff -Nru boost1.81-1.81.0/libs/sort/doc/graph/osx_string_sort.htm boost1.81-1.81.0/libs/sort/doc/graph/osx_string_sort.htm --- boost1.81-1.81.0/libs/sort/doc/graph/osx_string_sort.htm 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/sort/doc/graph/osx_string_sort.htm 1970-01-01 00:00:00.000000000 +0000 @@ -1,346 +0,0 @@ -<html xmlns:o="urn:schemas-microsoft-com:office:office" -xmlns:x="urn:schemas-microsoft-com:office:excel" -xmlns="http://www.w3.org/TR/REC-html40"> - -<head> -<meta name="Excel Workbook Frameset"> -<meta http-equiv=Content-Type content="text/html; charset=windows-1252"> -<meta name=ProgId content=Excel.Sheet> -<meta name=Generator content="Microsoft Excel 10"> -<link rel=File-List href="osx_string_sort_files/filelist.xml"> -<link rel=Edit-Time-Data href="osx_string_sort_files/editdata.mso"> -<link rel=OLE-Object-Data href="osx_string_sort_files/oledata.mso"> -<!--[if gte mso 9]><xml> - <o:DocumentProperties> - <o:Author>Steve</o:Author> - <o:LastAuthor>Steve</o:LastAuthor> - <o:Created>2009-02-02T02:13:19Z</o:Created> - <o:LastSaved>2009-02-02T05:53:30Z</o:LastSaved> - <o:Company>Home</o:Company> - <o:Version>10.2625</o:Version> - </o:DocumentProperties> - <o:OfficeDocumentSettings> - <o:DownloadComponents/> - <o:LocationOfComponents HRef="file:///D:\"/> - </o:OfficeDocumentSettings> -</xml><![endif]--><![if !supportTabStrip]> -<link id="shLink" href="osx_string_sort_files/chart001.htm"> -<link id="shLink" href="osx_string_sort_files/sheet001.htm"> - -<link id="shLink"> - -<script language="JavaScript"> -<!-- - var c_lTabs=2; - - var c_rgszSh=new Array(c_lTabs); - c_rgszSh[0] = "Runtimes"; - c_rgszSh[1] = "Runtime Data"; - - - - var c_rgszClr=new Array(8); - c_rgszClr[0]="window"; - c_rgszClr[1]="buttonface"; - c_rgszClr[2]="windowframe"; - c_rgszClr[3]="windowtext"; - c_rgszClr[4]="threedlightshadow"; - c_rgszClr[5]="threedhighlight"; - c_rgszClr[6]="threeddarkshadow"; - c_rgszClr[7]="threedshadow"; - - var g_iShCur; - var g_rglTabX=new Array(c_lTabs); - -function fnGetIEVer() -{ - var ua=window.navigator.userAgent - var msie=ua.indexOf("MSIE") - if (msie>0 && window.navigator.platform=="Win32") - return parseInt(ua.substring(msie+5,ua.indexOf(".", msie))); - else - return 0; -} - -function fnBuildFrameset() -{ - var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\""+document.all.item("shLink")[1].href+"\" name=\"frSheet\" noresize>"+ - "<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+ - "<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+ - "</frameset></frameset><plaintext>"; - - with (document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - fnBuildTabStrip(); -} - -function fnBuildTabStrip() -{ - var szHTML= - "<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+ - ".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+ - "<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+ - "<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+ - "<tr><td style=\"font:1pt\"> <td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+ - "<td style=\"font:1pt\"> <td></tr></table></body></html>"; - - with (frames['frScroll'].document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - szHTML = - "<html><head>"+ - "<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+ - ".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+ - ".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+ - "</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+ - " topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>"; - - var iCellCount=(c_lTabs+1)*2; - - var i; - for (i=0;i<iCellCount;i+=2) - szHTML+="<col width=1><col>"; - - var iRow; - for (iRow=0;iRow<6;iRow++) { - - szHTML+="<tr>"; - - if (iRow==5) - szHTML+="<td colspan="+iCellCount+"></td>"; - else { - if (iRow==0) { - for(i=0;i<iCellCount;i++) - szHTML+="<td height=1 class=\"clBorder\"></td>"; - } else if (iRow==1) { - for(i=0;i<c_lTabs;i++) { - szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>"; - szHTML+= - "<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+ - "<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>"; - } - szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>"; - } else if (iRow==2) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>"; - szHTML+="<td height=1></td><td height=1></td>"; - } else if (iRow==3) { - for (i=0;i<iCellCount;i++) - szHTML+="<td height=1></td>"; - } else if (iRow==4) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1 width=1></td><td height=1></td>"; - szHTML+="<td height=1 width=1></td><td></td>"; - } - } - szHTML+="</tr>"; - } - - szHTML+="</table></body></html>"; - with (frames['frTabs'].document) { - open("text/html","replace"); - charset=document.charset; - write(szHTML); - close(); - } -} - -function fnInit() -{ - g_rglTabX[0]=0; - var i; - for (i=1;i<=c_lTabs;i++) - with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)]) - g_rglTabX[i]=offsetLeft+offsetWidth-6; -} - -function fnTabToCol(iTab) -{ - return 2*iTab+1; -} - -function fnNextTab(fDir) -{ - var iNextTab=-1; - var i; - - with (frames['frTabs'].document.body) { - if (fDir==0) { - if (scrollLeft>0) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i-1; - } - } else { - if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i; - } - } - } - return iNextTab; -} - -function fnScrollTabs(fDir) -{ - var iNextTab=fnNextTab(fDir); - - if (iNextTab>=0) { - frames['frTabs'].scroll(g_rglTabX[iNextTab],0); - return true; - } else - return false; -} - -function fnFastScrollTabs(fDir) -{ - if (c_lTabs>16) - frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0); - else - if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5); -} - -function fnSetTabProps(iTab,fActive) -{ - var iCol=fnTabToCol(iTab); - var i; - - if (iTab>=0) { - with (frames['frTabs'].document.all) { - with (tbTabs) { - for (i=0;i<=4;i++) { - with (rows[i]) { - if (i==0) - cells[iCol].style.background=c_rgszClr[fActive?0:2]; - else if (i>0 && i<4) { - if (fActive) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[0]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - if (i==1) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[1]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - cells[iCol-1].style.background=c_rgszClr[4]; - cells[iCol].style.background=c_rgszClr[(i==2)?2:4]; - cells[iCol+1].style.background=c_rgszClr[4]; - } - } - } else - cells[iCol].style.background=c_rgszClr[fActive?2:4]; - } - } - } - with (aTab[iTab].style) { - cursor=(fActive?"default":"hand"); - color=c_rgszClr[3]; - } - } - } -} - -function fnMouseOverScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7]; -} - -function fnMouseOutScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6]; -} - -function fnMouseOverTab(iTab) -{ - if (iTab!=g_iShCur) { - var iCol=fnTabToCol(iTab); - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[5]; - } - } -} - -function fnMouseOutTab(iTab) -{ - if (iTab>=0) { - var elFrom=frames['frTabs'].event.srcElement; - var elTo=frames['frTabs'].event.toElement; - - if ((!elTo) || - (elFrom.tagName==elTo.tagName) || - (elTo.tagName=="A" && elTo.parentElement!=elFrom) || - (elFrom.tagName=="A" && elFrom.parentElement!=elTo)) { - - if (iTab!=g_iShCur) { - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[1]; - } - } - } - } -} - -function fnSetActiveSheet(iSh) -{ - if (iSh!=g_iShCur) { - fnSetTabProps(g_iShCur,false); - fnSetTabProps(iSh,true); - g_iShCur=iSh; - } -} - - window.g_iIEVer=fnGetIEVer(); - if (window.g_iIEVer>=4) - fnBuildFrameset(); -//--> -</script> -<![endif]><!--[if gte mso 9]><xml> - <x:ExcelWorkbook> - <x:ExcelWorksheets> - <x:ExcelWorksheet> - <x:Name>Runtimes</x:Name> - <x:WorksheetSource HRef="osx_string_sort_files/chart001.htm"/> - <x:WorksheetType>Chart</x:WorksheetType> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>Runtime Data</x:Name> - <x:WorksheetSource HRef="osx_string_sort_files/sheet001.htm"/> - </x:ExcelWorksheet> - </x:ExcelWorksheets> - <x:Stylesheet HRef="osx_string_sort_files/stylesheet.css"/> - <x:WindowHeight>8700</x:WindowHeight> - <x:WindowWidth>10395</x:WindowWidth> - <x:WindowTopX>360</x:WindowTopX> - <x:WindowTopY>135</x:WindowTopY> - <x:ActiveSheet>1</x:ActiveSheet> - <x:ProtectStructure>False</x:ProtectStructure> - <x:ProtectWindows>False</x:ProtectWindows> - </x:ExcelWorkbook> -</xml><![endif]--> -</head> - -<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0> - <frame src="osx_string_sort_files/sheet001.htm" name="frSheet"> - <frame src="osx_string_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0> - <noframes> - <body> - <p>This page uses frames, but your browser doesn't support them.</p> - </body> - </noframes> -</frameset> -</html> diff -Nru boost1.81-1.81.0/libs/sort/doc/graph/windows_float_sort.htm boost1.81-1.81.0/libs/sort/doc/graph/windows_float_sort.htm --- boost1.81-1.81.0/libs/sort/doc/graph/windows_float_sort.htm 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/sort/doc/graph/windows_float_sort.htm 1970-01-01 00:00:00.000000000 +0000 @@ -1,358 +0,0 @@ -<html xmlns:o="urn:schemas-microsoft-com:office:office" -xmlns:x="urn:schemas-microsoft-com:office:excel" -xmlns="http://www.w3.org/TR/REC-html40"> - -<head> -<meta name="Excel Workbook Frameset"> -<meta http-equiv=Content-Type content="text/html; charset=windows-1252"> -<meta name=ProgId content=Excel.Sheet> -<meta name=Generator content="Microsoft Excel 10"> -<link rel=File-List href="windows_float_sort_files/filelist.xml"> -<link rel=Edit-Time-Data href="windows_float_sort_files/editdata.mso"> -<link rel=OLE-Object-Data href="windows_float_sort_files/oledata.mso"> -<!--[if gte mso 9]><xml> - <o:DocumentProperties> - <o:Author>Steve</o:Author> - <o:LastAuthor>Steve</o:LastAuthor> - <o:Created>2009-02-02T02:13:19Z</o:Created> - <o:LastSaved>2009-07-27T01:30:00Z</o:LastSaved> - <o:Company>Home</o:Company> - <o:Version>10.2625</o:Version> - </o:DocumentProperties> - <o:OfficeDocumentSettings> - <o:DownloadComponents/> - <o:LocationOfComponents HRef="file:///D:\"/> - </o:OfficeDocumentSettings> -</xml><![endif]--><![if !supportTabStrip]> -<link id="shLink" href="windows_float_sort_files/chart001.htm"> -<link id="shLink" href="windows_float_sort_files/chart002.htm"> -<link id="shLink" href="windows_float_sort_files/sheet001.htm"> -<link id="shLink" href="windows_float_sort_files/sheet002.htm"> - -<link id="shLink"> - -<script language="JavaScript"> -<!-- - var c_lTabs=4; - - var c_rgszSh=new Array(c_lTabs); - c_rgszSh[0] = "Ranges"; - c_rgszSh[1] = "Runtimes"; - c_rgszSh[2] = "RangeData"; - c_rgszSh[3] = "Runtime Data"; - - - - var c_rgszClr=new Array(8); - c_rgszClr[0]="window"; - c_rgszClr[1]="buttonface"; - c_rgszClr[2]="windowframe"; - c_rgszClr[3]="windowtext"; - c_rgszClr[4]="threedlightshadow"; - c_rgszClr[5]="threedhighlight"; - c_rgszClr[6]="threeddarkshadow"; - c_rgszClr[7]="threedshadow"; - - var g_iShCur; - var g_rglTabX=new Array(c_lTabs); - -function fnGetIEVer() -{ - var ua=window.navigator.userAgent - var msie=ua.indexOf("MSIE") - if (msie>0 && window.navigator.platform=="Win32") - return parseInt(ua.substring(msie+5,ua.indexOf(".", msie))); - else - return 0; -} - -function fnBuildFrameset() -{ - var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+ - "<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+ - "<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+ - "</frameset></frameset><plaintext>"; - - with (document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - fnBuildTabStrip(); -} - -function fnBuildTabStrip() -{ - var szHTML= - "<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+ - ".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+ - "<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+ - "<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+ - "<tr><td style=\"font:1pt\"> <td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+ - "<td style=\"font:1pt\"> <td></tr></table></body></html>"; - - with (frames['frScroll'].document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - szHTML = - "<html><head>"+ - "<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+ - ".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+ - ".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+ - "</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+ - " topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>"; - - var iCellCount=(c_lTabs+1)*2; - - var i; - for (i=0;i<iCellCount;i+=2) - szHTML+="<col width=1><col>"; - - var iRow; - for (iRow=0;iRow<6;iRow++) { - - szHTML+="<tr>"; - - if (iRow==5) - szHTML+="<td colspan="+iCellCount+"></td>"; - else { - if (iRow==0) { - for(i=0;i<iCellCount;i++) - szHTML+="<td height=1 class=\"clBorder\"></td>"; - } else if (iRow==1) { - for(i=0;i<c_lTabs;i++) { - szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>"; - szHTML+= - "<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+ - "<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>"; - } - szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>"; - } else if (iRow==2) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>"; - szHTML+="<td height=1></td><td height=1></td>"; - } else if (iRow==3) { - for (i=0;i<iCellCount;i++) - szHTML+="<td height=1></td>"; - } else if (iRow==4) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1 width=1></td><td height=1></td>"; - szHTML+="<td height=1 width=1></td><td></td>"; - } - } - szHTML+="</tr>"; - } - - szHTML+="</table></body></html>"; - with (frames['frTabs'].document) { - open("text/html","replace"); - charset=document.charset; - write(szHTML); - close(); - } -} - -function fnInit() -{ - g_rglTabX[0]=0; - var i; - for (i=1;i<=c_lTabs;i++) - with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)]) - g_rglTabX[i]=offsetLeft+offsetWidth-6; -} - -function fnTabToCol(iTab) -{ - return 2*iTab+1; -} - -function fnNextTab(fDir) -{ - var iNextTab=-1; - var i; - - with (frames['frTabs'].document.body) { - if (fDir==0) { - if (scrollLeft>0) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i-1; - } - } else { - if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i; - } - } - } - return iNextTab; -} - -function fnScrollTabs(fDir) -{ - var iNextTab=fnNextTab(fDir); - - if (iNextTab>=0) { - frames['frTabs'].scroll(g_rglTabX[iNextTab],0); - return true; - } else - return false; -} - -function fnFastScrollTabs(fDir) -{ - if (c_lTabs>16) - frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0); - else - if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5); -} - -function fnSetTabProps(iTab,fActive) -{ - var iCol=fnTabToCol(iTab); - var i; - - if (iTab>=0) { - with (frames['frTabs'].document.all) { - with (tbTabs) { - for (i=0;i<=4;i++) { - with (rows[i]) { - if (i==0) - cells[iCol].style.background=c_rgszClr[fActive?0:2]; - else if (i>0 && i<4) { - if (fActive) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[0]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - if (i==1) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[1]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - cells[iCol-1].style.background=c_rgszClr[4]; - cells[iCol].style.background=c_rgszClr[(i==2)?2:4]; - cells[iCol+1].style.background=c_rgszClr[4]; - } - } - } else - cells[iCol].style.background=c_rgszClr[fActive?2:4]; - } - } - } - with (aTab[iTab].style) { - cursor=(fActive?"default":"hand"); - color=c_rgszClr[3]; - } - } - } -} - -function fnMouseOverScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7]; -} - -function fnMouseOutScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6]; -} - -function fnMouseOverTab(iTab) -{ - if (iTab!=g_iShCur) { - var iCol=fnTabToCol(iTab); - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[5]; - } - } -} - -function fnMouseOutTab(iTab) -{ - if (iTab>=0) { - var elFrom=frames['frTabs'].event.srcElement; - var elTo=frames['frTabs'].event.toElement; - - if ((!elTo) || - (elFrom.tagName==elTo.tagName) || - (elTo.tagName=="A" && elTo.parentElement!=elFrom) || - (elFrom.tagName=="A" && elFrom.parentElement!=elTo)) { - - if (iTab!=g_iShCur) { - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[1]; - } - } - } - } -} - -function fnSetActiveSheet(iSh) -{ - if (iSh!=g_iShCur) { - fnSetTabProps(g_iShCur,false); - fnSetTabProps(iSh,true); - g_iShCur=iSh; - } -} - - window.g_iIEVer=fnGetIEVer(); - if (window.g_iIEVer>=4) - fnBuildFrameset(); -//--> -</script> -<![endif]><!--[if gte mso 9]><xml> - <x:ExcelWorkbook> - <x:ExcelWorksheets> - <x:ExcelWorksheet> - <x:Name>Ranges</x:Name> - <x:WorksheetSource HRef="windows_float_sort_files/chart001.htm"/> - <x:WorksheetType>Chart</x:WorksheetType> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>Runtimes</x:Name> - <x:WorksheetSource HRef="windows_float_sort_files/chart002.htm"/> - <x:WorksheetType>Chart</x:WorksheetType> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>RangeData</x:Name> - <x:WorksheetSource HRef="windows_float_sort_files/sheet001.htm"/> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>Runtime Data</x:Name> - <x:WorksheetSource HRef="windows_float_sort_files/sheet002.htm"/> - </x:ExcelWorksheet> - </x:ExcelWorksheets> - <x:Stylesheet HRef="windows_float_sort_files/stylesheet.css"/> - <x:WindowHeight>8700</x:WindowHeight> - <x:WindowWidth>10395</x:WindowWidth> - <x:WindowTopX>360</x:WindowTopX> - <x:WindowTopY>135</x:WindowTopY> - <x:ProtectStructure>False</x:ProtectStructure> - <x:ProtectWindows>False</x:ProtectWindows> - </x:ExcelWorkbook> -</xml><![endif]--> -</head> - -<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0> - <frame src="windows_float_sort_files/chart001.htm" name="frSheet"> - <frame src="windows_float_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0> - <noframes> - <body> - <p>This page uses frames, but your browser doesn't support them.</p> - </body> - </noframes> -</frameset> -</html> diff -Nru boost1.81-1.81.0/libs/sort/doc/graph/windows_integer_sort.htm boost1.81-1.81.0/libs/sort/doc/graph/windows_integer_sort.htm --- boost1.81-1.81.0/libs/sort/doc/graph/windows_integer_sort.htm 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/sort/doc/graph/windows_integer_sort.htm 1970-01-01 00:00:00.000000000 +0000 @@ -1,359 +0,0 @@ -<html xmlns:o="urn:schemas-microsoft-com:office:office" -xmlns:x="urn:schemas-microsoft-com:office:excel" -xmlns="http://www.w3.org/TR/REC-html40"> - -<head> -<meta name="Excel Workbook Frameset"> -<meta http-equiv=Content-Type content="text/html; charset=windows-1252"> -<meta name=ProgId content=Excel.Sheet> -<meta name=Generator content="Microsoft Excel 10"> -<link rel=File-List href="windows_integer_sort_files/filelist.xml"> -<link rel=Edit-Time-Data href="windows_integer_sort_files/editdata.mso"> -<link rel=OLE-Object-Data href="windows_integer_sort_files/oledata.mso"> -<!--[if gte mso 9]><xml> - <o:DocumentProperties> - <o:Author>Steve</o:Author> - <o:LastAuthor>Steve</o:LastAuthor> - <o:Created>2009-02-02T02:13:19Z</o:Created> - <o:LastSaved>2009-07-28T14:34:29Z</o:LastSaved> - <o:Company>Home</o:Company> - <o:Version>10.2625</o:Version> - </o:DocumentProperties> - <o:OfficeDocumentSettings> - <o:DownloadComponents/> - <o:LocationOfComponents HRef="file:///D:\"/> - </o:OfficeDocumentSettings> -</xml><![endif]--><![if !supportTabStrip]> -<link id="shLink" href="windows_integer_sort_files/chart001.htm"> -<link id="shLink" href="windows_integer_sort_files/chart002.htm"> -<link id="shLink" href="windows_integer_sort_files/sheet001.htm"> -<link id="shLink" href="windows_integer_sort_files/sheet002.htm"> - -<link id="shLink"> - -<script language="JavaScript"> -<!-- - var c_lTabs=4; - - var c_rgszSh=new Array(c_lTabs); - c_rgszSh[0] = "Ranges"; - c_rgszSh[1] = "Runtimes"; - c_rgszSh[2] = "RangeData"; - c_rgszSh[3] = "Runtime Data"; - - - - var c_rgszClr=new Array(8); - c_rgszClr[0]="window"; - c_rgszClr[1]="buttonface"; - c_rgszClr[2]="windowframe"; - c_rgszClr[3]="windowtext"; - c_rgszClr[4]="threedlightshadow"; - c_rgszClr[5]="threedhighlight"; - c_rgszClr[6]="threeddarkshadow"; - c_rgszClr[7]="threedshadow"; - - var g_iShCur; - var g_rglTabX=new Array(c_lTabs); - -function fnGetIEVer() -{ - var ua=window.navigator.userAgent - var msie=ua.indexOf("MSIE") - if (msie>0 && window.navigator.platform=="Win32") - return parseInt(ua.substring(msie+5,ua.indexOf(".", msie))); - else - return 0; -} - -function fnBuildFrameset() -{ - var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\""+document.all.item("shLink")[1].href+"\" name=\"frSheet\" noresize>"+ - "<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+ - "<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+ - "</frameset></frameset><plaintext>"; - - with (document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - fnBuildTabStrip(); -} - -function fnBuildTabStrip() -{ - var szHTML= - "<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+ - ".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+ - "<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+ - "<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+ - "<tr><td style=\"font:1pt\"> <td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+ - "<td style=\"font:1pt\"> <td></tr></table></body></html>"; - - with (frames['frScroll'].document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - szHTML = - "<html><head>"+ - "<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+ - ".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+ - ".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+ - "</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+ - " topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>"; - - var iCellCount=(c_lTabs+1)*2; - - var i; - for (i=0;i<iCellCount;i+=2) - szHTML+="<col width=1><col>"; - - var iRow; - for (iRow=0;iRow<6;iRow++) { - - szHTML+="<tr>"; - - if (iRow==5) - szHTML+="<td colspan="+iCellCount+"></td>"; - else { - if (iRow==0) { - for(i=0;i<iCellCount;i++) - szHTML+="<td height=1 class=\"clBorder\"></td>"; - } else if (iRow==1) { - for(i=0;i<c_lTabs;i++) { - szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>"; - szHTML+= - "<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+ - "<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>"; - } - szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>"; - } else if (iRow==2) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>"; - szHTML+="<td height=1></td><td height=1></td>"; - } else if (iRow==3) { - for (i=0;i<iCellCount;i++) - szHTML+="<td height=1></td>"; - } else if (iRow==4) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1 width=1></td><td height=1></td>"; - szHTML+="<td height=1 width=1></td><td></td>"; - } - } - szHTML+="</tr>"; - } - - szHTML+="</table></body></html>"; - with (frames['frTabs'].document) { - open("text/html","replace"); - charset=document.charset; - write(szHTML); - close(); - } -} - -function fnInit() -{ - g_rglTabX[0]=0; - var i; - for (i=1;i<=c_lTabs;i++) - with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)]) - g_rglTabX[i]=offsetLeft+offsetWidth-6; -} - -function fnTabToCol(iTab) -{ - return 2*iTab+1; -} - -function fnNextTab(fDir) -{ - var iNextTab=-1; - var i; - - with (frames['frTabs'].document.body) { - if (fDir==0) { - if (scrollLeft>0) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i-1; - } - } else { - if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i; - } - } - } - return iNextTab; -} - -function fnScrollTabs(fDir) -{ - var iNextTab=fnNextTab(fDir); - - if (iNextTab>=0) { - frames['frTabs'].scroll(g_rglTabX[iNextTab],0); - return true; - } else - return false; -} - -function fnFastScrollTabs(fDir) -{ - if (c_lTabs>16) - frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0); - else - if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5); -} - -function fnSetTabProps(iTab,fActive) -{ - var iCol=fnTabToCol(iTab); - var i; - - if (iTab>=0) { - with (frames['frTabs'].document.all) { - with (tbTabs) { - for (i=0;i<=4;i++) { - with (rows[i]) { - if (i==0) - cells[iCol].style.background=c_rgszClr[fActive?0:2]; - else if (i>0 && i<4) { - if (fActive) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[0]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - if (i==1) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[1]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - cells[iCol-1].style.background=c_rgszClr[4]; - cells[iCol].style.background=c_rgszClr[(i==2)?2:4]; - cells[iCol+1].style.background=c_rgszClr[4]; - } - } - } else - cells[iCol].style.background=c_rgszClr[fActive?2:4]; - } - } - } - with (aTab[iTab].style) { - cursor=(fActive?"default":"hand"); - color=c_rgszClr[3]; - } - } - } -} - -function fnMouseOverScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7]; -} - -function fnMouseOutScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6]; -} - -function fnMouseOverTab(iTab) -{ - if (iTab!=g_iShCur) { - var iCol=fnTabToCol(iTab); - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[5]; - } - } -} - -function fnMouseOutTab(iTab) -{ - if (iTab>=0) { - var elFrom=frames['frTabs'].event.srcElement; - var elTo=frames['frTabs'].event.toElement; - - if ((!elTo) || - (elFrom.tagName==elTo.tagName) || - (elTo.tagName=="A" && elTo.parentElement!=elFrom) || - (elFrom.tagName=="A" && elFrom.parentElement!=elTo)) { - - if (iTab!=g_iShCur) { - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[1]; - } - } - } - } -} - -function fnSetActiveSheet(iSh) -{ - if (iSh!=g_iShCur) { - fnSetTabProps(g_iShCur,false); - fnSetTabProps(iSh,true); - g_iShCur=iSh; - } -} - - window.g_iIEVer=fnGetIEVer(); - if (window.g_iIEVer>=4) - fnBuildFrameset(); -//--> -</script> -<![endif]><!--[if gte mso 9]><xml> - <x:ExcelWorkbook> - <x:ExcelWorksheets> - <x:ExcelWorksheet> - <x:Name>Ranges</x:Name> - <x:WorksheetSource HRef="windows_integer_sort_files/chart001.htm"/> - <x:WorksheetType>Chart</x:WorksheetType> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>Runtimes</x:Name> - <x:WorksheetSource HRef="windows_integer_sort_files/chart002.htm"/> - <x:WorksheetType>Chart</x:WorksheetType> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>RangeData</x:Name> - <x:WorksheetSource HRef="windows_integer_sort_files/sheet001.htm"/> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>Runtime Data</x:Name> - <x:WorksheetSource HRef="windows_integer_sort_files/sheet002.htm"/> - </x:ExcelWorksheet> - </x:ExcelWorksheets> - <x:Stylesheet HRef="windows_integer_sort_files/stylesheet.css"/> - <x:WindowHeight>8700</x:WindowHeight> - <x:WindowWidth>10395</x:WindowWidth> - <x:WindowTopX>360</x:WindowTopX> - <x:WindowTopY>135</x:WindowTopY> - <x:ActiveSheet>1</x:ActiveSheet> - <x:ProtectStructure>False</x:ProtectStructure> - <x:ProtectWindows>False</x:ProtectWindows> - </x:ExcelWorkbook> -</xml><![endif]--> -</head> - -<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0> - <frame src="windows_integer_sort_files/chart002.htm" name="frSheet"> - <frame src="windows_integer_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0> - <noframes> - <body> - <p>This page uses frames, but your browser doesn't support them.</p> - </body> - </noframes> -</frameset> -</html> diff -Nru boost1.81-1.81.0/libs/sort/doc/graph/windows_string_sort.htm boost1.81-1.81.0/libs/sort/doc/graph/windows_string_sort.htm --- boost1.81-1.81.0/libs/sort/doc/graph/windows_string_sort.htm 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/sort/doc/graph/windows_string_sort.htm 1970-01-01 00:00:00.000000000 +0000 @@ -1,345 +0,0 @@ -<html xmlns:o="urn:schemas-microsoft-com:office:office" -xmlns:x="urn:schemas-microsoft-com:office:excel" -xmlns="http://www.w3.org/TR/REC-html40"> - -<head> -<meta name="Excel Workbook Frameset"> -<meta http-equiv=Content-Type content="text/html; charset=windows-1252"> -<meta name=ProgId content=Excel.Sheet> -<meta name=Generator content="Microsoft Excel 10"> -<link rel=File-List href="windows_string_sort_files/filelist.xml"> -<link rel=Edit-Time-Data href="windows_string_sort_files/editdata.mso"> -<link rel=OLE-Object-Data href="windows_string_sort_files/oledata.mso"> -<!--[if gte mso 9]><xml> - <o:DocumentProperties> - <o:Author>Steve</o:Author> - <o:LastAuthor>Steve</o:LastAuthor> - <o:Created>2009-02-02T02:13:19Z</o:Created> - <o:LastSaved>2009-05-03T18:30:26Z</o:LastSaved> - <o:Company>Home</o:Company> - <o:Version>10.2625</o:Version> - </o:DocumentProperties> - <o:OfficeDocumentSettings> - <o:DownloadComponents/> - <o:LocationOfComponents HRef="file:///D:\"/> - </o:OfficeDocumentSettings> -</xml><![endif]--><![if !supportTabStrip]> -<link id="shLink" href="windows_string_sort_files/chart001.htm"> -<link id="shLink" href="windows_string_sort_files/sheet001.htm"> - -<link id="shLink"> - -<script language="JavaScript"> -<!-- - var c_lTabs=2; - - var c_rgszSh=new Array(c_lTabs); - c_rgszSh[0] = "Runtimes"; - c_rgszSh[1] = "Runtime Data"; - - - - var c_rgszClr=new Array(8); - c_rgszClr[0]="window"; - c_rgszClr[1]="buttonface"; - c_rgszClr[2]="windowframe"; - c_rgszClr[3]="windowtext"; - c_rgszClr[4]="threedlightshadow"; - c_rgszClr[5]="threedhighlight"; - c_rgszClr[6]="threeddarkshadow"; - c_rgszClr[7]="threedshadow"; - - var g_iShCur; - var g_rglTabX=new Array(c_lTabs); - -function fnGetIEVer() -{ - var ua=window.navigator.userAgent - var msie=ua.indexOf("MSIE") - if (msie>0 && window.navigator.platform=="Win32") - return parseInt(ua.substring(msie+5,ua.indexOf(".", msie))); - else - return 0; -} - -function fnBuildFrameset() -{ - var szHTML="<frameset rows=\"*,18\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\""+document.all.item("shLink")[0].href+"\" name=\"frSheet\" noresize>"+ - "<frameset cols=\"54,*\" border=0 width=0 frameborder=no framespacing=0>"+ - "<frame src=\"\" name=\"frScroll\" marginwidth=0 marginheight=0 scrolling=no>"+ - "<frame src=\"\" name=\"frTabs\" marginwidth=0 marginheight=0 scrolling=no>"+ - "</frameset></frameset><plaintext>"; - - with (document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - fnBuildTabStrip(); -} - -function fnBuildTabStrip() -{ - var szHTML= - "<html><head><style>.clScroll {font:8pt Courier New;color:"+c_rgszClr[6]+";cursor:default;line-height:10pt;}"+ - ".clScroll2 {font:10pt Arial;color:"+c_rgszClr[6]+";cursor:default;line-height:11pt;}</style></head>"+ - "<body onclick=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" onselectstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+" topmargin=0 leftmargin=0><table cellpadding=0 cellspacing=0 width=100%>"+ - "<tr><td colspan=6 height=1 bgcolor="+c_rgszClr[2]+"></td></tr>"+ - "<tr><td style=\"font:1pt\"> <td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(0);\" onmouseout=\"parent.fnMouseOutScroll(0);\"><a>«</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(0);\" ondblclick=\"parent.fnScrollTabs(0);\" onmouseover=\"parent.fnMouseOverScroll(1);\" onmouseout=\"parent.fnMouseOutScroll(1);\"><a><</a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll2\" onclick=\"parent.fnScrollTabs(1);\" ondblclick=\"parent.fnScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(2);\" onmouseout=\"parent.fnMouseOutScroll(2);\"><a>></a></td>"+ - "<td valign=top id=tdScroll class=\"clScroll\" onclick=\"parent.fnFastScrollTabs(1);\" onmouseover=\"parent.fnMouseOverScroll(3);\" onmouseout=\"parent.fnMouseOutScroll(3);\"><a>»</a></td>"+ - "<td style=\"font:1pt\"> <td></tr></table></body></html>"; - - with (frames['frScroll'].document) { - open("text/html","replace"); - write(szHTML); - close(); - } - - szHTML = - "<html><head>"+ - "<style>A:link,A:visited,A:active {text-decoration:none;"+"color:"+c_rgszClr[3]+";}"+ - ".clTab {cursor:hand;background:"+c_rgszClr[1]+";font:9pt Arial;padding-left:3px;padding-right:3px;text-align:center;}"+ - ".clBorder {background:"+c_rgszClr[2]+";font:1pt;}"+ - "</style></head><body onload=\"parent.fnInit();\" onselectstart=\"event.returnValue=false;\" ondragstart=\"event.returnValue=false;\" bgcolor="+c_rgszClr[4]+ - " topmargin=0 leftmargin=0><table id=tbTabs cellpadding=0 cellspacing=0>"; - - var iCellCount=(c_lTabs+1)*2; - - var i; - for (i=0;i<iCellCount;i+=2) - szHTML+="<col width=1><col>"; - - var iRow; - for (iRow=0;iRow<6;iRow++) { - - szHTML+="<tr>"; - - if (iRow==5) - szHTML+="<td colspan="+iCellCount+"></td>"; - else { - if (iRow==0) { - for(i=0;i<iCellCount;i++) - szHTML+="<td height=1 class=\"clBorder\"></td>"; - } else if (iRow==1) { - for(i=0;i<c_lTabs;i++) { - szHTML+="<td height=1 nowrap class=\"clBorder\"> </td>"; - szHTML+= - "<td id=tdTab height=1 nowrap class=\"clTab\" onmouseover=\"parent.fnMouseOverTab("+i+");\" onmouseout=\"parent.fnMouseOutTab("+i+");\">"+ - "<a href=\""+document.all.item("shLink")[i].href+"\" target=\"frSheet\" id=aTab> "+c_rgszSh[i]+" </a></td>"; - } - szHTML+="<td id=tdTab height=1 nowrap class=\"clBorder\"><a id=aTab> </a></td><td width=100%></td>"; - } else if (iRow==2) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1></td><td height=1 class=\"clBorder\"></td>"; - szHTML+="<td height=1></td><td height=1></td>"; - } else if (iRow==3) { - for (i=0;i<iCellCount;i++) - szHTML+="<td height=1></td>"; - } else if (iRow==4) { - for (i=0;i<c_lTabs;i++) - szHTML+="<td height=1 width=1></td><td height=1></td>"; - szHTML+="<td height=1 width=1></td><td></td>"; - } - } - szHTML+="</tr>"; - } - - szHTML+="</table></body></html>"; - with (frames['frTabs'].document) { - open("text/html","replace"); - charset=document.charset; - write(szHTML); - close(); - } -} - -function fnInit() -{ - g_rglTabX[0]=0; - var i; - for (i=1;i<=c_lTabs;i++) - with (frames['frTabs'].document.all.tbTabs.rows[1].cells[fnTabToCol(i-1)]) - g_rglTabX[i]=offsetLeft+offsetWidth-6; -} - -function fnTabToCol(iTab) -{ - return 2*iTab+1; -} - -function fnNextTab(fDir) -{ - var iNextTab=-1; - var i; - - with (frames['frTabs'].document.body) { - if (fDir==0) { - if (scrollLeft>0) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i-1; - } - } else { - if (g_rglTabX[c_lTabs]+6>offsetWidth+scrollLeft) { - for (i=0;i<c_lTabs&&g_rglTabX[i]<=scrollLeft;i++); - if (i<c_lTabs) - iNextTab=i; - } - } - } - return iNextTab; -} - -function fnScrollTabs(fDir) -{ - var iNextTab=fnNextTab(fDir); - - if (iNextTab>=0) { - frames['frTabs'].scroll(g_rglTabX[iNextTab],0); - return true; - } else - return false; -} - -function fnFastScrollTabs(fDir) -{ - if (c_lTabs>16) - frames['frTabs'].scroll(g_rglTabX[fDir?c_lTabs-1:0],0); - else - if (fnScrollTabs(fDir)>0) window.setTimeout("fnFastScrollTabs("+fDir+");",5); -} - -function fnSetTabProps(iTab,fActive) -{ - var iCol=fnTabToCol(iTab); - var i; - - if (iTab>=0) { - with (frames['frTabs'].document.all) { - with (tbTabs) { - for (i=0;i<=4;i++) { - with (rows[i]) { - if (i==0) - cells[iCol].style.background=c_rgszClr[fActive?0:2]; - else if (i>0 && i<4) { - if (fActive) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[0]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - if (i==1) { - cells[iCol-1].style.background=c_rgszClr[2]; - cells[iCol].style.background=c_rgszClr[1]; - cells[iCol+1].style.background=c_rgszClr[2]; - } else { - cells[iCol-1].style.background=c_rgszClr[4]; - cells[iCol].style.background=c_rgszClr[(i==2)?2:4]; - cells[iCol+1].style.background=c_rgszClr[4]; - } - } - } else - cells[iCol].style.background=c_rgszClr[fActive?2:4]; - } - } - } - with (aTab[iTab].style) { - cursor=(fActive?"default":"hand"); - color=c_rgszClr[3]; - } - } - } -} - -function fnMouseOverScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[7]; -} - -function fnMouseOutScroll(iCtl) -{ - frames['frScroll'].document.all.tdScroll[iCtl].style.color=c_rgszClr[6]; -} - -function fnMouseOverTab(iTab) -{ - if (iTab!=g_iShCur) { - var iCol=fnTabToCol(iTab); - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[5]; - } - } -} - -function fnMouseOutTab(iTab) -{ - if (iTab>=0) { - var elFrom=frames['frTabs'].event.srcElement; - var elTo=frames['frTabs'].event.toElement; - - if ((!elTo) || - (elFrom.tagName==elTo.tagName) || - (elTo.tagName=="A" && elTo.parentElement!=elFrom) || - (elFrom.tagName=="A" && elFrom.parentElement!=elTo)) { - - if (iTab!=g_iShCur) { - with (frames['frTabs'].document.all) { - tdTab[iTab].style.background=c_rgszClr[1]; - } - } - } - } -} - -function fnSetActiveSheet(iSh) -{ - if (iSh!=g_iShCur) { - fnSetTabProps(g_iShCur,false); - fnSetTabProps(iSh,true); - g_iShCur=iSh; - } -} - - window.g_iIEVer=fnGetIEVer(); - if (window.g_iIEVer>=4) - fnBuildFrameset(); -//--> -</script> -<![endif]><!--[if gte mso 9]><xml> - <x:ExcelWorkbook> - <x:ExcelWorksheets> - <x:ExcelWorksheet> - <x:Name>Runtimes</x:Name> - <x:WorksheetSource HRef="windows_string_sort_files/chart001.htm"/> - <x:WorksheetType>Chart</x:WorksheetType> - </x:ExcelWorksheet> - <x:ExcelWorksheet> - <x:Name>Runtime Data</x:Name> - <x:WorksheetSource HRef="windows_string_sort_files/sheet001.htm"/> - </x:ExcelWorksheet> - </x:ExcelWorksheets> - <x:Stylesheet HRef="windows_string_sort_files/stylesheet.css"/> - <x:WindowHeight>8700</x:WindowHeight> - <x:WindowWidth>10395</x:WindowWidth> - <x:WindowTopX>360</x:WindowTopX> - <x:WindowTopY>135</x:WindowTopY> - <x:ProtectStructure>False</x:ProtectStructure> - <x:ProtectWindows>False</x:ProtectWindows> - </x:ExcelWorkbook> -</xml><![endif]--> -</head> - -<frameset rows="*,39" border=0 width=0 frameborder=no framespacing=0> - <frame src="windows_string_sort_files/chart001.htm" name="frSheet"> - <frame src="windows_string_sort_files/tabstrip.htm" name="frTabs" marginwidth=0 marginheight=0> - <noframes> - <body> - <p>This page uses frames, but your browser doesn't support them.</p> - </body> - </noframes> -</frameset> -</html> Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/sort/doc/images/Thumbs.db and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/sort/doc/images/Thumbs.db differ diff -Nru boost1.81-1.81.0/libs/sort/doc/sort.idx boost1.81-1.81.0/libs/sort/doc/sort.idx --- boost1.81-1.81.0/libs/sort/doc/sort.idx 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/sort/doc/sort.idx 2022-12-24 13:24:15.389595700 +0000 @@ -1,37 +1,37 @@ -# sort.idx for Boost.Sort/Spreadsort Quickbook, Doxygen and Auto-index. - -# Note needs more customization to be useful in practice! TODO? - -#!debug "\<\w*\>" - -# Sort Header files. -#!scan-path "/boost/sort/" ".*\.*pp" true -!scan-path "../include/boost/sort" ".*\.hpp" false -!scan-path "../include/boost/sort/spreadsort" ".*\.hpp" false - -# All example source files, assuming no sub-folders. -# sort example files. -!scan-path "../example" ".*\.cpp" true - -# Allow alternative spellings colour | color, and plurals etc. -color \<\w*(colour|color)\w*\> -container \<contain\w*\> -data -deque \<deque\w*\> -example \<example\w*\> -font \<font\w*\> -greek -quartile \<quartile\w*\> -histogram -ioflags -origin -outlier -maximum \<max\w*\> -minimum \<min\w*\> -precision -range \<\w*\range\w*\> -scaling \<\w*\scal\w*\> -tick \<\w*\tick\w*\> -title -Unicode \<unicode\w*\> -vector \<\w*\vector\w*\> +# sort.idx for Boost.Sort/Spreadsort Quickbook, Doxygen and Auto-index. + +# Note needs more customization to be useful in practice! TODO? + +#!debug "\<\w*\>" + +# Sort Header files. +#!scan-path "/boost/sort/" ".*\.*pp" true +!scan-path "../include/boost/sort" ".*\.hpp" false +!scan-path "../include/boost/sort/spreadsort" ".*\.hpp" false + +# All example source files, assuming no sub-folders. +# sort example files. +!scan-path "../example" ".*\.cpp" true + +# Allow alternative spellings colour | color, and plurals etc. +color \<\w*(colour|color)\w*\> +container \<contain\w*\> +data +deque \<deque\w*\> +example \<example\w*\> +font \<font\w*\> +greek +quartile \<quartile\w*\> +histogram +ioflags +origin +outlier +maximum \<max\w*\> +minimum \<min\w*\> +precision +range \<\w*\range\w*\> +scaling \<\w*\scal\w*\> +tick \<\w*\tick\w*\> +title +Unicode \<unicode\w*\> +vector \<\w*\vector\w*\> diff -Nru boost1.81-1.81.0/libs/spirit/classic/change_log.html boost1.81-1.81.0/libs/spirit/classic/change_log.html --- boost1.81-1.81.0/libs/spirit/classic/change_log.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/spirit/classic/change_log.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,294 +0,0 @@ -<html> -<head> -<title>Spirit Change Log - - - - - - -

Spirit Change Log

-

1.8.11

-
    -
  • Fixed position_iterator forming reference to local when the - underlying iterator dereference operator returns a non-reference type. - PR#422 - TRAC#9737
  • -
  • Removed use of deprecated boost/detail/iterator.hpp header. - GH#432
  • -
-

1.8.10

-
    -
  • Missing visibility mark on exception types. - GH#409
  • -
-

1.8.9

-
    -
  • Fixed a regression introduced in - GH#336. - GH#386
  • -
  • Minor code improvements. - GH#367
  • -
-

1.8.8

-
    -
  • Fixed remove_reference usage without a namespace in Phoenix. - GH#274
  • -
  • Fixed std::complex usage without the include. - GH#273
  • -
  • Fixed compilation of match<T&>. - GH#275
  • -
  • Fixed compilation with BOOST_DISABLE_THREADS defined. - GH#323 - #12639
  • -
  • Increment scanner through iterator policy. - GH#336 - TRAC#7371
  • -
  • Removed deprecated in C++17 std::iterator usage. - GH#345
  • -
-

1.8.7

-
    -
  • Integrated the Spirit V1.8.x code base with Spirit V2. Spirit V1.8.x is - now called - Spirit Classic. Even if the directory - structure has changed (the - Spirit Classic headers are now moved to the - '$BOOST_ROOT/boost/spirit/home/classic' directory), we created forwarding - headers allowing to compile existing applications without any change. - These forwarding headers are deprecated, though, which will result in - corresponding warnings generated for each of the headers. The forwarding - headers are expected to be removed in the future. -
    - The recommended way of using Spirit Classic is now to include header - files from the directory '$BOOST_ROOT/boost/spirit/include'. All files of - Spirit Classic - have now a 'classic_' prefixed to their name. For example the include -
    -
      #include <boost/spirit/core/core.hpp>
    -
    - now should be written as: -
    -
      #include <boost/spirit/include/classic_core.hpp>
    -
    - To avoid namespace conflicts with the new Spirit V2 library we moved Spirit - Classic into the namespace boost::spirit::classic. This change will be automatically deactivated whenever the deprecated include files are - being used. This ensures full backwards compatibility for existing applications. -
    - For more details about this change please consult the documentation.
  • -
-

1.8.6

-
    -
  • Fixed a integer overflow bug preventing to fail parsing on certain large integers. This bug was reported and fixed by Michael Andersen Nexø
  • -
-

1.8.5

-
    -
  • For performance reasons, leaf_node_d/token_node_d have been changed to implicit lexems that create leaf nodes in one shot. The old token_node_d is still available and called reduced_node_d, now.
  • -
  • It's now possible to phoenix::bind (version 1) symbols::add.
  • -
-

1.8.4

-
    -
  • Fixed no_actions bug where no_action is applied recursively.
  • -
  • Fixed the regex_p parser for Boost >= V1.33.0
  • -
  • Implemented a workaround for namespace issues VC++ has with Spirit's file_iterators
  • -
  • Fixed bug in tree match policies that prevented using gen_pt/ast_node_d, - reported - by Jascha Wetzel.
  • -
  • Made position_iterator usable with wchar_t based strings.
  • -
-

1.8.3

-
    -
  • Config correction for Sun C++ by - - - Steve Clamage (see this link).
  • -
  • Fixed multi_pass_iterator for 64 platforms, where sizeof(int) != sizeof(ptr_type).Fixed bug that prevents the use of closures with grammars with multiple entry points, reported by David Pierre
  • -
  • Fixed bug that prevented embedding of grammars with multiple entry points, reported by David Pierre
  • -
  • Added '\0' to the set of valid escaped characters for escape_ch_p.
  • -
  • Fixed a switch_p bug when used with a phoenix::actor as the conditional expression.
  • -
  • __LINE__ macro now gets expanded in BOOST_SPIRIT_ASSERT_EXCEPTION
  • -
  • Fixed a bug in the intersection parser reported by Yusaku Sugai
  • -
  • The symbol parser uses the null character internally. Checks were added so that: -
      -
    • tst.add asserts if string contains the null character
    • -
    • tst.find doesn't match null characters in the input
    • -
  • -
  • Fixed match_attr_traits.ipp to allow non-POD to pass through. The previous version taking in the ellipsis "..." does not allow PODs to pass through.
  • -
  • Allow evaluation to int as condition to if_p parser.
  • -
  • Applied performance improvement changes to the PT/AST code as suggested by Stefan Slapeta.
  • -
  • Fixed several problems with AST tree node directives (inner_node_d[], discard_first_node[], discard_last_node[] and infix_node_d[]).
  • -
-

1.8.2

-

Maintenance release (almost the same as 1.8.1 plus a few fixes here and there)

-
    -
  • Added specializations to str_p and ch_p to allow str_p('c') and ch_p("c") thus fixing some non-bugs
  • -
  • Fixed bug where a match<T> is a variant.
  • -
  • added Jamfile/Jamrules from CVS to spirit-1.8.1/
  • -
  • added boost-build.jam from boost to spirit-1.8.1/
  • -
  • disabled template multi-threading in libs/spirit/test/Jamfile
  • -
  • added a boost-header-include rule (from spirit-header-include) pointing to miniboost in libs/spirit/test/Jamfile
  • -
  • Fixed if_p inconsistency
  • -
-

1.6.2

-

The Spirit 1.6.2 release is a bug-fix release only, no new features were introduced.

-
    -
  • wchar_t friendly implementation of graph_p
  • -
  • Modified escape_char_parser::parse() to use a static parser instead of a rule. This will make it more friendly to use in trees. It should also be a little more efficient.
  • -
  • Moved to - - - Boost Software license 1.0.
  • -
  • workaround for Error 322 name lookup in base class specialization finds type
  • -
  • fixed limit_d bug
  • -
  • [numerics] Workaround for aC++
  • -
  • Fixed a bug in the switch_p parser.
  • -
  • Fixed a EOI problem in multi_pass
  • -
  • added Jamfile/Jamrules from CVS to spirit-1.6.1/
  • -
  • added boost-build.jam from boost to spirit-1.6.1/
  • -
  • disabled template multi-threading in libs/spirit/test/Jamfile
  • -
  • added a boost-header-include rule (from spirit-header-include) pointing to miniboost in libs/spirit/test/Jamfile
  • -
-

1.8.1 (Released with Boost 1.32.0)

-

The Spirit 1.8.1 release is a bug-fix release only, no new features were introduced.

-
    -
  • Spirit now requires at least Boost 1.32.0 to compile correctly
  • -
  • Removed the support for the older iterator adaptor library and
  • -
  • Moved to use the new MPL library
  • -
  • Spirit was moved to use the Boost Software License 1.0.
  • -
  • Fixed several parsers to support post-skips more correctly.
  • -
  • Fixed a no_node_d[] bug.
  • -
  • Fixed a bug in shortest_d[].
  • -
  • Fixed a bug in limit_d[].
  • -
  • Fixed parser traversal meta code.
  • -
  • Fixed several bugs in switch_p.
  • -
  • Fixed AST generating problems, in particular with the loops related parsers.
  • -
  • Fixed several bugs in the multi_pass iterator. -
      -
    • Fixed a problem, when the used base iterator returned a value_type and not a reference from its dereferencing operator.
    • -
    • Fixed iterator_traits problem
    • -
    • Fixed an EOI problem
    • -
    • Fixed a bug, when used with std::cin
    • -
    -
  • -
  • Found a bug in grammar.ipp when BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE is defined
  • -
  • Rewritten safe_bool to use CRTP - now works also on MWCW, fixed several bugs with the implementation.
  • -
  • Fixed and extended the debug diagnostics printed by the parse tree code.
  • -
-

1.8.0 (Released with Boost 1.31.0; Includes unreleased 1.7.1)

-
    -
  • Fixed a wchar_t problem in the regex_p parser.
  • -
  • removed code and workarounds for old compilers (VC6/7 and Borland)
  • -
  • Changed license to the new boost license.
  • -
  • Modified escape_char_parser::parse() to use a static parser instead of a rule. This will make it more friendly to use in trees. It should also be a little more efficient.
  • -
-

1.7.1 (Unreleased; becomes 1.8.0)

-
    -
  • Added a full suite of predefined actors.
  • -
  • Moved rule_alias and stored_rule from core/non-terminal to dynamic.
    - Made as_parser a public API in meta/as_parser.hpp
  • -
  • Separated Core.Meta into its own module
  • -
  • Refactored Utility module
    - Moved some files into Utility.Parsers
  • -
-
-
    -
  • utilities -
      -
    • parsers -
        -
      • chset, regex, escape_char
        - confix, list, distinct
        - functor_parser
      • -
      -
    • -
    -
  • -
  • support -
      -
    • scoped_lock
      - flush_multi_pass
      - grammar_def
    • -
    -
  • -
  • actors -
      -
    • assign
    • -
    -
  • -
-
-
    -
  • Stored rules
  • -
  • Added the switch_p and select_p dynamic parsers.
  • -
  • Multiple scanner support for rules.
  • -
  • The Rule's Scanner, Context and Tag template parameters can be specified in any order now. If a template parameter is missing, it will assume the defaults. See test/rule_tests.cpp.
  • -
  • Introduced the possibility to specify more than one start rule from a grammar.
  • -
  • Added an implementation of the file_iterator iterator based on the new Boost iterator_adaptors (submitted originally by Thomas Witt).
  • -
-

[The transition to the new iterator_adaptors should be complete now.]

-
    -
  • Added an implementation of the fixed_size_queue iterator based on the new Boost iterator_adaptors.
  • -
  • wchar_t friendly implementation of graph_p
  • -
  • made the copy-constructor and assignment-operator of parser_error_base public to clear VC7.1 C4673 warning. Added copy-constructor and assignment operator to parser_error for clarity of intent.
  • -
-

1.7.0

-
    -
  • assign(string) semantic action now works in VC6
  • -
  • parsers need not be default constructible
  • -
  • simplified aggregation of binary and unary parsers (more compiler friendly)
  • -
  • epsilon workarounds for VC++
  • -
  • match's attribute now uses boost.optional
  • -
  • subrules can now have closures
  • -
  • project wide 64 bit compatibility
  • -
  • dynamic_parser_tag, reissue of rule.set_id(id);
  • -
  • numerous primitives improvements and workarounds for problematic compilers
  • -
  • proper complement (~) of single char parser primitives and chsets
  • -
  • intuitive handling of lexeme_d
  • -
  • wide_phrase_scanner_t typedef
  • -
  • dynamic parser improvements (better support for more compilers)
  • -
  • complete rewrite of the file_iterator (using boost.iterator_adapters). Supports - memory maps wherever available
  • -
  • multi_pass updates (compatibility with more compilers (e.g VC7) and more)
  • -
  • position_iterator improvements
  • -
  • better phoenix support for more compilers
  • -
  • phoenix new_(...) construct
  • -
  • new lazy_p parser
  • -
  • utility.distinct parser (undocumented)
  • -
  • chset operators improvements
  • -
  • confix_p streamlining and improvements
  • -
  • numerous Boost integration improvements
  • -
-

Bug fixes (1.7.0 and 1.6.0)

-
    -
  • Fixed. Using MSVC++6 (SP5), calling the assign action with a string value - on parsers using the file_iterator will not work.
  • -
  • Fixed: using assign semantic action in a grammar with a multi_pass iterator - adaptor applied to an std::istream_iterator resulted in a failure to compile - under msvc 7.0.
  • -
  • Fixed: There is a bug in the "range_run<CharT>::set (range<CharT> - const& r)" function in the "boost\spirit\utility\impl\chset\range_run.ipp". -
  • -
  • Fixed: handling of trailing whitespace bug (ast_parse/pt_parse related)
  • -
  • Fixed: comment_p and end of data bug
  • -
  • Fixed: Most - trailing space bug:
  • -
  • Fixed:
    - chset<>::operator~(range<>) bug
    - operator&(chset<>, range<>) bug
    - operator&(range<>, chset<>) bug
  • -
  • Fixed: impl::detach_clear - bug
  • -
  • Fixed: mismatch - closure return type bug
  • -
  • Fixed: access_node_d[] - and access_match_d[] - iterator bugs
  • -
  • Fixed a bug regarding threadsafety of Phoenix/Spirit closures.
  • -
  • Added missing include files to miniboost
  • -
-

Copyright © 1998-2005 Joel de Guzman, Hartmut Kaiser
-Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

-

 

- - - diff -Nru boost1.81-1.81.0/libs/spirit/classic/index.html boost1.81-1.81.0/libs/spirit/classic/index.html --- boost1.81-1.81.0/libs/spirit/classic/index.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/spirit/classic/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,263 +0,0 @@ - - -Spirit User's Guide - - - - - - - - - - - -
-

-
Spirit - User's Guide
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table of Contents
Preface
Introduction
Quick Start
Basic Concepts
Organization
What's New
Core
Primitives
Operators
Numerics
The Rule
Epsilon
Directives
The Scanner and Parsing
The Grammar
Subrules
Semantic Actions -
In-depth: The - Parser
In-depth: - The Scanner
In-depth: - The Parser Context
Actors
Predefined Actions -
Attribute
Parametric - Parsers
Functional
Phoenix
Closures
Dynamic
Dynamic Parsers
Storable Rules
The Lazy Parser
The Select Parser
The Switch Parser
Utility
Escape Character - Parsers
Loop Parsers
Character Set Parser
Confix and Comment Parsers
List Parsers
Functor Parser
Refactoring Parsers
Regular - Expression Parser
Scoped Lock
Distinct Parser
Symbols
The Symbol Table
Trees
Parse Trees and ASTs
Iterator
Multi Pass
File Iterator
Position Iterator -
Debugging
Error Handling
Quick Reference
Includes
Portability
Style Guide
Techniques
FAQ
Rationale
Acknowledgments
References
-
- - - - -
-
Copyright © 1998-2003 - Joel de Guzman
-
- Portions of this document:
- Copyright © 2001-2003 Hartmut Kaiser
- Copyright © 2001-2002 Daniel C. Nuffer
- Copyright © 2002 Chris Uzdavinis
- Copyright © 2002 Jeff Westfahl
- Copyright © 2002 Juan Carlos Arevalo-Baeza
-
Copyright © 2003 Martin - Wille
- Copyright © 2003 Ross Smith
- Copyright © 2003
- Jonathan de Halleux
-

Use, modification and distribution is subject to the Boost Software - License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -

-
-
- - - - -
- -
-
-

 

- - diff -Nru boost1.81-1.81.0/libs/spirit/classic/phoenix/index.html boost1.81-1.81.0/libs/spirit/classic/phoenix/index.html --- boost1.81-1.81.0/libs/spirit/classic/phoenix/index.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/spirit/classic/phoenix/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,180 +0,0 @@ - - - -Phoenix V1.2.1 - - - - - - - - - - -
- Phoenix - v1.2.1
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table of contents
- Preface -
- Introduction -
- Quick start -
- Basic Concepts -
- Architecture -
- Lazy functions -
- Place holders -
- Polymorphic functions -
- Organization -
- Actors -
- Primitives -
- Arguments -
- Values -
- Variables -
- Composites -
- Functions -
- Operators -
- Statements -
- Binders -
- Adaptable closures -
- Lazy Construction and Conversions -
- Efficiency -
- Inside Phoenix -
- Tuples -
- Actors revisited -
- Composites revisited -
- Operators revisited -
- Interfacing -
- Wrap up -
- References -
-
-
- - Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/spirit/doc/karma_performance.xlsx and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/spirit/doc/karma_performance.xlsx differ Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/spirit/doc/x3/cppnow_2013/Inside Spirit X3.pptx and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/spirit/doc/x3/cppnow_2013/Inside Spirit X3.pptx differ diff -Nru boost1.81-1.81.0/libs/spirit/repository/index.html boost1.81-1.81.0/libs/spirit/repository/index.html --- boost1.81-1.81.0/libs/spirit/repository/index.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/spirit/repository/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ - - - - - - - Automatic redirection failed, click this - link  
-

© Copyright Beman Dawes, 2001

-

Distributed under the Boost Software License, Version 1.0. (See - accompanying file - LICENSE_1_0.txt or copy at - www.boost.org/LICENSE_1_0.txt)

- - \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/test/doc/doxygen_reference_generated_doc.xml boost1.81-1.81.0/libs/test/doc/doxygen_reference_generated_doc.xml --- boost1.81-1.81.0/libs/test/doc/doxygen_reference_generated_doc.xml 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/test/doc/doxygen_reference_generated_doc.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,3286 +0,0 @@ - -
-common dataset macros Defined when the random dataset feature is not available. -Defined when grid composition of datasets is not available. -Defined when zip composition of datasets is not available. -Defined when the initializer_list implementation is buggy, such as for VS2013. - -
-
-Defines for_each_sample algorithm. - - - - - - - - - - - -voidAction const &T &&std::false_type -voidAction const &T &&index_sequence< I... > const & -voidAction const &T &&std::true_type -std::enable_if< monomorphic::is_dataset< DataSet >::value, void >::typeDataSet const &Action const &data::size_tBOOST_TEST_DS_INFINITE_SIZE -std::enable_if<!monomorphic::is_dataset< DataSet >::value, void >::typeDataSet &&Action const &data::size_tBOOST_TEST_DS_INFINITE_SIZE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines monomorphic dataset based on C type arrays. - - - -Dataset view of a C array. T -T const * -const int - -data::size_t -iterator - -T const *std::size_t -array< T >true_An array dataset is a dataset. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines monomorphic dataset based on forward iterable sequence. - - - -Dataset from a forward iterable container (collection) This dataset is applicable to any container implementing a forward iterator. Note that container with one element will be considered as singletons. This dataset is constructible with the boost::unit_test::data::make function. col_type::value_type -col_type::const_iterator -const int - -C const &Returns the underlying collection. -data::size_tdataset interface -iterator - -C &&Constructor consumed a temporary collection or stores a reference. -collection &&Move constructor. -collection< C >true_A collection from a forward iterable container is a dataset. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines a lazy/delayed dataset store. - - - -Delayed dataset. This dataset holds another dataset that is instanciated on demand. It is constructed with the data::make_delayed<dataset_t>(arg1,....) instead of the data::make. decltype(std::declval< dataset_t >().begin()) -const int - -boost::unit_test::data::size_t -iterator - -Args... -delayed_dataset && - -dataset_t & -std::unique_ptr< dataset_t >boost::unit_test::data::index_sequence< I... > - -delayed_dataset< dataset_tArgs... >true_A lazy/delayed dataset is a dataset. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Forward declares monomorphic datasets interfaces. - - - -boost::unit_test::data::monomorphic::is_dataset< DataSet >Helper to check if a list of types contains a dataset. DataSet0DataSet1DataSetTT...std::integral_constant< bool, is_dataset< DataSet0 >::value||has_dataset< DataSet1, DataSetTT... >::value >false_Helper metafunction indicating if the specified type is a dataset. DataSet &boost::unit_test::data::monomorphic::is_dataset< DataSet >A reference to a dataset is a dataset. DataSet &&boost::unit_test::data::monomorphic::is_dataset< DataSet >DataSet constboost::unit_test::data::monomorphic::is_dataset< DataSet >A const dataset is a dataset. - - - - - - - - - - -Result of the make call. decltype(data::make(declval< DataSet >())) typedef - -std::enable_if< monomorphic::is_dataset< DataSet >::value, DataSet >::typeDataSet &&std::enable_if<!is_container_forward_iterable< T >::value &&!monomorphic::is_dataset< T >::value &&!is_array< typename remove_reference< T >::type >::value, monomorphic::singleton< T > >::typeT &&std::enable_if< is_container_forward_iterable< C >::value, monomorphic::collection< C > >::typeC &&monomorphic::array< typename boost::remove_const< T >::type >T(&)monomorphic::singleton< char * >char *monomorphic::singleton< char const * >char const *monomorphic::init_list< T >std::initializer_list< T > &&std::enable_if< !monomorphic::has_dataset< T, Args... >::value, monomorphic::init_list< T >>::typeT &&Args &&...Creates a dataset from a value, a collection or an array. This function has several overloads: // returns ds if ds is already a dataset -template <typename DataSet> DataSet make(DataSet&& ds); - -// creates a singleton dataset, for non forward iterable and non dataset type T -// (a C string is not considered as a sequence). -template <typename T> monomorphic::singleton<T> make(T&& v); -monomorphic::singleton<char*> make( char* str ); -monomorphic::singleton<char const*> make( char const* str ); - -// creates a collection dataset, for forward iterable and non dataset type C -template <typename C> monomorphic::collection<C> make(C && c); - -// creates an array dataset -template<typename T, std::size_t size> monomorphic::array<T> make( T (&a)[size] ); - - - - - - - - -std::enable_if< monomorphic::is_dataset< dataset_t >::value, monomorphic::delayed_dataset< dataset_t, Args... >>::typeArgs...Delayed dataset instanciation. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines generic interface for monomorphic dataset based on generator. - - - -Generators interface. This class implements the dataset concept over a generator. Examples of generators are: -xrange_t -random_t - -The generator concept is the following: -the type of the generated samples is given by field sample -the member function capacity should return the size of the collection being generated (potentially infinite) -the member function next should change the state of the generator to the next generated value -the member function reset should put the state of the object in the same state as right after its instanciation - - -sample const & -void - -Generator & -Generator::sample -Generator -const int - -data::size_tSize of the underlying dataset. -iteratorIterator on the beginning of the dataset. - -Generator && -generated_by && -generated_by< Generator >true_A generated dataset is a dataset. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines specific generators.
-
-Keywords used in generator interfaces. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Random generator. - - - -Generator for the random sequences. This class implements the generator concept (see boost::unit_test::data::monomorphic::generated_by) for implementing a random number generator. SampleType -DistributionType -EngineType - -data::size_t -SampleType -void -voidSeedType &&Sets the seed of the pseudo-random number engine. - - -distr_type && -engine_type &&distr_type && - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -monomorphic::generated_by< monomorphic::random_t<> >monomorphic::generated_by< monomorphic::random_t< SampleType > >SampleTypeSampleTypeunspecifiedParams const &Returns an infinite sequence of random numbers. The following overloads are available: auto d = random(); -auto d = random(begin, end); -auto d = random(params); - -The first overload uses the default distribution, which is uniform and which elements are double type (the values are in [0, 1) ). -The second overload generates numbers in the given interval. The distribution is uniform (in [begin, end) for real numbers, and in [begin, end] for integers). The type of the distribution is deduced from the type of the begin and end parameters. -The third overload generates numbers using the named parameter inside params , which are: -distribution: the distribution used. In this overload, since the type of the samples cannot be deduced, the samples are of type double and the distribution is uniform real in [0, 1). -seed: the seed for generating the values -engine: the random number generator engine - - - -The function returns an object that implements the dataset API. This function is available only for C++11 capable compilers. - - - - - - - - - - - - - - - - - - -
-
-Defines range generator. - - - -Generator for the range sequences. This class implements the generator concept (see boost::unit_test::data::monomorphic::generated_by) for implementing a range like sequence of numbers. SampleType - -data::size_t -SampleType -void - -SampleType const &StepType const &data::size_t - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -monomorphic::generated_by< monomorphic::xrange_t< SampleType > >Params const &monomorphic::generated_by< monomorphic::xrange_t< SampleType > >SampleType const &enable_if_c< nfp::is_named_param_pack< Params >::value, monomorphic::generated_by< monomorphic::xrange_t< SampleType > > >::typeSampleType const &Params const &monomorphic::generated_by< monomorphic::xrange_t< SampleType > >SampleType const &SampleType const &monomorphic::generated_by< monomorphic::xrange_t< SampleType > >SampleType const &SampleType const &StepType const &Creates a range (sequence) dataset. The following overloads are available: auto d = xrange(); -auto d = xrange(end_val); -auto d = xrange(end_val, param); -auto d = xrange(begin_val, end_val); -auto d = xrange(begin_val, end_val, step_val); -auto d = xrange(param); - -begin_val indicates the start of the sequence (default to 0). -end_val is the end of the sequence. If ommited, the dataset has infinite size. - -step_val is the step between two consecutive elements of the sequence, and defaults to 1. - -param is the named parameters that describe the sequence. The following parameters are accepted: -begin: same meaning begin_val -end: same meaning as end_val -step: same meaning as step_val - - - -The returned value is an object that implements the dataset API.the step size cannot be null, and it should be positive if begin_val < end_val, negative otherwise. - - - - - - - - - - - - - - - -
-
-Defines monomorphic dataset n+m dimentional *. Samples in this dataset is grid of elements in DataSet1 and DataSet2. There will be total |DataSet1| * |DataSet2| samples. - - - -Implements the dataset resulting from a cartesian product/grid operation on datasets. The arity of the resulting dataset is the sum of the arity of its operands. decltype(sample_merge(*std::declval< dataset1_iter >(), *std::declval< dataset2_iter >())) - -auto -void - -dataset1_iterDataSet2 const & -const int - -data::size_t -iterator - -DataSet1 &&DataSet2 &&Constructor. -grid &&Move constructor. -grid< DataSet1DataSet2 >true_ -Result type of the grid operation on dataset. monomorphic::grid< typename DS1Gen::type, typename DS2Gen::type > - -boost::lazy_enable_if_c< is_dataset< DataSet1 >::value &&is_dataset< DataSet2 >::value, result_of::grid< mpl::identity< DataSet1 >, mpl::identity< DataSet2 > >>::typeDataSet1 &&DataSet2 &&boost::lazy_enable_if_c< is_dataset< DataSet1 >::value &&!is_dataset< DataSet2 >::value, result_of::grid< mpl::identity< DataSet1 >, data::result_of::make< DataSet2 > >>::typeDataSet1 &&DataSet2 &&boost::lazy_enable_if_c<!is_dataset< DataSet1 >::value &&is_dataset< DataSet2 >::value, result_of::grid< data::result_of::make< DataSet1 >, mpl::identity< DataSet2 > >>::typeDataSet1 &&DataSet2 &&Grid operation. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines monomorphic dataset based on C++11 initializer_list template. - - - -Dataset view from an initializer_list or variadic template arguments. The data should be stored in the dataset, and since the elements are passed by an std::initializer_list , it implies a copy of the elements. std::vector< T >::const_iterator -const int - -data::size_tdataset interface -iterator - -std::initializer_list< T >Constructor copies content of initializer_list. -Args &&...Variadic template initialization. -boolSpecialization of init_list for type bool. std::vector< bool >::const_iterator - -bool -non_proxy_iterator & - -std::vector< bool >::const_iterator && -bool -non_proxy_iterator -const int - -data::size_tdataset interface -iterator - -std::initializer_list< bool > &&Constructor copies content of initializer_list. -Args &&...Variadic template initialization. -init_list< T >true_An array dataset is a dataset. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines dataset join operation. - - - -join< DataSet1DataSet2 >true_Defines a new dataset from the concatenation of two datasets. The size of the resulting dataset is the sum of the two underlying datasets. The arity of the datasets should match. -sample_t -void - -dataset1_iter &&dataset2_iter &&data::size_t -typename std::conditional< std::is_reference< iter1_ret >::value &&std::is_reference< iter2_ret >::value &&std::is_same< iter1_ret, iter2_ret >::value, iter1_ret, typename std::remove_reference< iter1_ret >::type >::type -const int - -data::size_tdataset interface -iterator - -DataSet1 &&DataSet2 &&Constructor. -join &&Move constructor. - -Result type of the join operation on datasets. monomorphic::join< typename DataSet1Gen::type, typename DataSet2Gen::type > - - - - -boost::lazy_enable_if_c< is_dataset< DataSet1 >::value &&is_dataset< DataSet2 >::value, result_of::join< mpl::identity< DataSet1 >, mpl::identity< DataSet2 > >>::typeDataSet1 &&DataSet2 && -boost::lazy_enable_if_c< is_dataset< DataSet1 >::value &&!is_dataset< DataSet2 >::value, result_of::join< mpl::identity< DataSet1 >, data::result_of::make< DataSet2 > >>::typeDataSet1 &&DataSet2 && -boost::lazy_enable_if_c<!is_dataset< DataSet1 >::value &&is_dataset< DataSet2 >::value, result_of::join< data::result_of::make< DataSet1 >, mpl::identity< DataSet2 > >>::typeDataSet1 &&DataSet2 && - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines single element monomorphic dataset. - - - -singleton< T >true_Models a single element data set. -sample const & -void - -singleton< T > const * -const int - -T const &Value access method. -data::size_tdataset interface -iterator - -T &&Constructor. -singleton &&Move constructor. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines monomorphic dataset based on zipping of 2 other monomorphic datasets. - - - -zip< DataSet1DataSet2 >true_Zipped datasets results in a dataset. Zip datasets. A zip of two datasets is a dataset whose arity is the sum of the operand datasets arity. The size is given by the function creating the instance (see operator^ on datasets). decltype(sample_merge(*std::declval< dataset1_iter >(), *std::declval< dataset2_iter >())) - -auto -void - -dataset1_iterdataset2_iter -const int - -data::size_t -iterator - -DataSet1 &&DataSet2 &&Constructor. The datasets are moved and not copied. -zip &&Move constructor. - -data::size_tHandles the sise of the resulting zipped dataset. - - -Result type of the zip operator. monomorphic::zip< typename DS1Gen::type, typename DS2Gen::type > - - - - - - - -boost::lazy_enable_if_c< is_dataset< DataSet1 >::value &&is_dataset< DataSet2 >::value, result_of::zip< mpl::identity< DataSet1 >, mpl::identity< DataSet2 > >>::typeDataSet1 &&DataSet2 &&boost::lazy_enable_if_c< is_dataset< DataSet1 >::value &&!is_dataset< DataSet2 >::value, result_of::zip< mpl::identity< DataSet1 >, data::result_of::make< DataSet2 > >>::typeDataSet1 &&DataSet2 &&boost::lazy_enable_if_c<!is_dataset< DataSet1 >::value &&is_dataset< DataSet2 >::value, result_of::zip< data::result_of::make< DataSet1 >, mpl::identity< DataSet2 > >>::typeDataSet1 &&DataSet2 &&Overload operator for zip support. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-simple dataset size abstraction (can be infinite) - - -Utility for handling the size of a datasets. -void - - -std::size_t -bool -safe_bool -data::size_t -data::size_tint -data::size_t -data::size_tint -data::size_t &std::size_t -data::size_t &data::size_t -data::size_t &std::size_t -data::size_t &data::size_t - -std::size_t0 -bool -T - - - - - - - - - - - - - - -booldata::size_tstd::size_t -boolstd::size_tdata::size_t -booldata::size_tdata::size_t -booldata::size_tstd::size_t -boolstd::size_tdata::size_t -booldata::size_tdata::size_t -booldata::size_tstd::size_t -boolstd::size_tdata::size_t -booldata::size_tdata::size_t -booldata::size_tstd::size_t -boolstd::size_tdata::size_t -booldata::size_tdata::size_t -booldata::size_tstd::size_t -boolstd::size_tdata::size_t -booldata::size_tdata::size_t -booldata::size_tstd::size_t -boolstd::size_tdata::size_t -booldata::size_tdata::size_t -data::size_tdata::size_tstd::size_t -data::size_tstd::size_tdata::size_t -data::size_tdata::size_tdata::size_t -data::size_tdata::size_tstd::size_t -data::size_tstd::size_tdata::size_t -data::size_tdata::size_tdata::size_t -std::basic_ostream< CharT1, Tr > &std::basic_ostream< CharT1, Tr > &data::size_t const & - - - - - - - - - - - - - - - - - - -
-
-test case family based on data generator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-defines portable debug interfaces Intended to standardize interface of programs with debuggers - -Collection of data, which is used by debugger starter routine. longpid of a program to attach to -boolwhat to do after debugger is attached -unit_test::const_stringpath to executable for current process -unit_test::const_stringif debugger has a GUI, which display to use (on UNIX) -unit_test::const_stringpath to a uniquely named lock file, which is used to pause current application while debugger is being initialized -Signature of debugger starter routine. Takes an instance of dbg_startup_into as only argument. boost::function< void(dbg_startup_info const &)> -boolChecks if programs runs under debugger. -true if current process is under debugger. False otherwise - -voidCause program to break execution in debugger at call point. -std::stringunit_test::const_stringUnique id for debugger configuration (for example, gdb) dbg_starterdbg_starter()Optional starter routine for selected configuration (use only you want to define your own configuration) Specifies which debugger to use when attaching and optionally what routine to use to start that debugger. There are many different debuggers available for different platforms. Some of them also can be used in a different setups/configuratins. For example, gdb can be used in plain text mode, inside ddd, inside (x)emacs or in a separate xterm window. Boost.Test identifies each configuration with unique string. Also different debuggers configurations require different routines which is specifically tailored to start that debugger configuration. Boost.Test comes with set of predefined configuration names and corresponding routines for these configurations: -TODO - -You can use this routine to select which one of the predefined debugger configurations to use in which case you do not need to provide starter routine (the one provided by Boost.Test will be used). You can also use this routine to select your own debugger by providing unique configuration id and starter routine for this configuration. - -Id of previously selected debugger configuration - -boolbooltruetells what we wan to do after the debugger is attached. If true - process execution breaks in the point in invocation of this function. Otherwise execution continues, but now it is under the debugger Attaches debugger to the current process. Using currently selected debugger, this routine attempts to attach the debugger to this process. - -true if debugger successfully attached. False otherwise - -voidboolboolean switch unit_test::const_stringunit_test::const_string()file, where the report should be directed to Switches on/off memory leaks detection. On platforms where memory leak detection is possible inside of running application (at the moment this is only Windows family) you can switch this feature on and off using this interface. In addition you can specify the name of the file to write a report into. Otherwise the report is going to be generated in standard error stream. - -voidlongSpecific memory allocation number Causes program to break execution in debugger at specific allocation point. On some platforms/memory managers (at the moment only on Windows/Visual Studio) one can tell a C Runtime to break on specific memory allocation. This can be used in combination with memory leak detection (which reports leaked memory allocation number) to locate the place where leak initiated. - - - -
-
-user's config for Boost.Test debugging support This file is intended to be edited by end user to specify varios macros, which configure debugger interface Alterntively you can set these parameters in your own sources/makefiles
-
-some trivial global typedefs - -T - -compiler log format XML format for report and log,. JUNIT format for report and log,. User specified logger. dot format for output content Indicates the output format for the loggers or the test tree printing. -= 0x01= 0x10= 0x11 - -unsigned long -unsigned long -const test_unit_id -const test_unit_id -const test_unit_id -const test_unit_id -const test_unit_id - - - - - - - - - - - - - - - -
-
-Defines public interface of the Execution Monitor and related classes. -This is a trivial default constructible class. Use it to report graceful abortion of a monitored function execution. This class is used to report any kind of an failure during execution of a monitored function inside of execution_monitor. The instance of this class is thrown out of execution_monitor::execute invocation when failure is detected. Regardless of a kind of failure occurred the instance will provide a uniform way to catch and report it.One important design rationale for this class is that we should be ready to work after fatal memory corruptions or out of memory conditions. To facilitate this class never allocates any memory and assumes that strings it refers to are either some constants or live in a some kind of persistent (preallocated) memory. Simple model for the location of failure in a source code. const_stringFile name. -size_tLine number. -const_stringFunction name. - - -char const *0size_t0char const *0 -const_stringsize_t0char const *0 -error_codeerror code const_stringerror message location const &error location Constructs instance based on message, location and error code. - -= 0for completeness only; never returned = 200user reported non-fatal error = 205see note (1) above = 210see note (2) above = 215only detectable on certain platforms = 220user reported fatal error = 225see note (2) above These values are sometimes used as program return codes. The particular values have been chosen to avoid conflicts with commonly used program return codes: values < 100 are often user assigned, values > 255 are sometimes used to report system errors. Gaps in values allow for orderly expansion. (1) Only uncaught C++ exceptions are treated as errors. If a function catches a C++ exception, it never reaches the execution_monitor. - -The implementation decides what is a system_fatal_error and what is just a system_exception. Fatal errors are so likely to have corrupted machine state (like a stack overflow or addressing exception) that it is unreasonable to continue execution.(2) These errors include Unix signals and Windows structured exceptions. They are often initiated by hardware traps. - - -Function execution monitor. This class is used to uniformly detect and report an occurrence of several types of signals and exceptions, reducing various errors to a uniform execution_exception that is returned to a caller.The execution_monitor behavior can be customized through a set of public parameters (properties) associated with the execution_monitor instance. All parameters are implemented as public unit_test::readwrite_property data members of the class execution_monitor. unit_test::readwrite_property< bool >Should monitor catch system errors. The p_catch_system_errors property is a boolean flag (default value is true) specifying whether or not execution_monitor should trap system errors/system level exceptions/signals, which would cause program to crash in a regular case (without execution_monitor). Set this property to false, for example, if you wish to force coredump file creation. The Unit Test Framework provides a runtime parameter --catch_system_errors=yes to alter the behavior in monitored test cases. -unit_test::readwrite_property< bool >Should monitor try to attach debugger in case of caught system error. The p_auto_start_dbg property is a boolean flag (default value is false) specifying whether or not execution_monitor should try to attach debugger in case system error is caught. -unit_test::readwrite_property< unsigned long int >Specifies the seconds that elapse before a timer_error occurs. The p_timeout property is an integer timeout (in microseconds) for monitored function execution. Use this parameter to monitor code with possible deadlocks or infinite loops. This feature is only available for some operating systems (not yet Microsoft Windows). -unit_test::readwrite_property< bool >Should monitor use alternative stack for the signal catching. The p_use_alt_stack property is a boolean flag (default value is false) specifying whether or not execution_monitor should use an alternative stack for the sigaction based signal catching. When enabled the signals are delivered to the execution_monitor on a stack different from current execution stack, which is safer in case if it is corrupted by monitored function. For more details on alternative stack handling see appropriate manuals. -unit_test::readwrite_property< unsigned >Should monitor try to detect hardware floating point exceptions (!= 0), and which specific exception to catch. The p_detect_fp_exceptions property is a boolean flag (default value is false) specifying whether or not execution_monitor should install hardware traps for the floating point exception on platforms where it's supported. - -intboost::function< int()> const &Function to monitor Execution monitor entry point for functions returning integer value. This method executes supplied function F inside a try/catch block and also may include other unspecified platform dependent error detection code.This method throws an execution_exception on an uncaught C++ exception, a hardware or software signal, trap, or other user exception.execute() doesn't consider it an error for F to return a non-zero value. - - - -See Also:vexecute - -value returned by function call F(). - -voidboost::function< void()> const &Function to monitor Execution monitor entry point for functions returning void. This method is semantically identical to execution_monitor::execute, but doesn't produce any result code. -See Also:execute - - -voidExceptionTranslator const &translator function object with the signature void (ExceptionType const&) const_stringconst_string()tag associated with this translator boost::type< ExceptionType > *0Registers custom (user supplied) exception translator. This method template registers a translator for an exception type specified as a first template argument. For example void myExceptTr( MyException const& ex ) { /*do something with the exception here*/} -em.register_exception_translator<MyException>( myExceptTr ); - The translator should be any unary function/functor object which accepts MyException const&. This can be free standing function or bound class method. The second argument is an optional string tag you can associate with this translator routine. The only reason to specify the tag is if you plan to erase the translator eventually. This can be useful in scenario when you reuse the same execution_monitor instance to monitor different routines and need to register a translator specific to the routine being monitored. While it is possible to erase the translator based on an exception type it was registered for, tag string provides simpler way of doing this. - - -voidconst_stringtag associated with translator you wants to erase Erases custom exception translator based on a tag. Use the same tag as the one used during translator registration - -voidboost::type< ExceptionType > *0Erases custom exception translator based on an exception type. tparam ExceptionType Exception type for which you want to erase the translator - -Default constructor initializes all execution monitor properties. - -intboost::function< int()> const & - -long const -char const *const - - -char const * - -= 0= BOOST_FPE_OFF= BOOST_FPE_OFF= BOOST_FPE_OFF= BOOST_FPE_OFF= BOOST_FPE_OFF= BOOST_FPE_OFF= BOOST_FPE_ALL+1 -unsignedunsigned -unsignedunsigned - - -Disables the support of the alternative stack during the compilation of the Boost.test framework. This is especially useful in case it is not possible to detect the lack of alternative stack support for your compiler (for instance, ESXi). - -
-
-Defines Unit Test Framework mono-state interfaces. The framework interfaces are based on Monostate design pattern. - - - -boolIs there any context? -const_stringGive me next frame; empty - last frame. - - -runtime_errorThis exception type is used to report internal Boost.Test framework errors. - -const_string -int - - -int -runtime_errorThis exception type is used to report test module setup errors. - -const_string - - - -const_string -voidtest_unit const & -void - -voidinit_unit_test_functest module initialization routine intcommand line arguments collection char *command line arguments collection This function performs initialization of the framework mono-state. It needs to be called every time before the test is started. - -voidtest_unit_idINV_TEST_UNIT_IDOptional id of the test unit representing root of test tree. If absent, master test suite is used This function applies all the decorators and figures out default run status. This argument facilitates an ability of the test cases to prepare some other test units (primarily used internally for self testing). - -boolThis function returns true when testing is in progress (setup is finished). -voidThis function shuts down the framework and clears up its mono-state. It needs to be at the very end of test module execution -test_suite &test_suite *0test suite to push back to the queue booltrueshould we push ts to the queue or pop leaf test suite instead Provides both read and write access to current "leaf" auto test suite during the test unit registration phase. During auto-registration phase the framework maintain a FIFO queue of test units being registered. New test units become children of the current "leaf" test suite and if this is test suite it is pushed back into queue and becomes a new leaf. When test suite registration is completed, a test suite is popped from the back of the queue. Only automatically registered test suites should be added to this queue. Master test suite is always a zero element in this queue, so if no other test suites are registered all test cases are added to master test suite. This function facilitates all three possible actions: -if no argument are provided it returns the current queue leaf test suite -if test suite is provided and no second argument are set, test suite is added to the queue -if no test suite are provided and last argument is false, the semantic of this function is similar to queue pop: last element is popped from the queue - - - - -voidtest_case *test case to register This function add new test case into the global collection of test units the framework aware of. This function also assignes unique test unit id for every test case. Later on one can use this id to locate the test case if necessary. This is the way for the framework to maintain weak references between test units. - -voidtest_suite *test suite to register This function add new test suite into the global collection of test units the framework aware of. This function also assignes unique test unit id for every test suite. Later on one can use this id to locate the test case if necessary. This is the way for the framework to maintain weak references between test units. - -voidtest_unit *test unit to deregister This function removes the test unit from the collection of known test units and destroys the test unit object. This function also assigns unique test unit id for every test case. Later on one can use this id to located the test case if necessary. This is the way for the framework to maintain weak references between test units. - -voidAfter this call the framework can be reinitialized to perform a second test run during the same program lifetime. -voidtest_observer &test observer object to add Observer lifetime should exceed the the testing execution timeframe. - -voidtest_observer &test observer object to exclude Excludes the observer object form the framework's list of test observers. - -voidglobal_fixture &fixture to add Adds a new global fixture to be setup before any other tests starts and tore down after any other tests finished. Test unit fixture lifetime should exceed the testing execution timeframe. - -voidglobal_fixture &fixture to remove Removes a test global fixture from the framework. Test unit fixture lifetime should exceed the testing execution timeframe - -intlazy_ostream const &context frame message boolis this sticky frame or not Records context frame message. Some context frames are sticky - they can only explicitly cleared by specifying context id. Other (non sticky) context frames cleared after every assertion. - -id of the newly created frame - -voidint-1Erases context frame (when test exits context scope) If context_id is passed clears that specific context frame identified by this id, otherwise clears all non sticky contexts. -context_generatorProduces an instance of small "delegate" object, which facilitates access to collected context. -master_test_suite_t &There is only only master test suite per test module. -a reference the master test suite instance - -test_unit const &This function provides an access to the test unit currently being executed. The difference with current_test_case is about the time between a test-suite is being set up or torn down (fixtures) and when the test-cases of that suite start. This function is only valid during test execution phase. See Also:current_test_case_id, current_test_case - - -test_case const &This function provides an access to the test case currently being executed. This function is only valid during test execution phase. See Also:current_test_case_id - - -test_unit_idThis function provides an access to an id of the test case currently being executed. This function safer than current_test_case, cause if wont throw if no test case is being executed. See Also:current_test_case - - -test_unit &test_unit_idid of a test unit to locate test_unit_typetype of a test unit to locate This function provides access to a test unit by id and type combination. It will throw if no test unit located. - -located test unit - -UnitType &test_unit_idid of test unit to get This function template provides access to a typed test unit by id. It will throw if you specify incorrect test unit type - - -voidtest_unit_idINV_TEST_UNIT_IDOptional id of the test unit or test unit itself from which the test is started. If absent, master test suite is used booltruetrue == continue test if it was already started, false == restart the test from scratch regardless Initiates test execution. This function is used to start the test execution from a specific "root" test unit. If no root provided, test is started from master test suite. This second argument facilitates an ability of the test cases to start some other test units (primarily used internally for self testing). - -voidtest_unit const *booltrueInitiates test execution. Same as other overload. -voidunit_test::assertion_result -voidexecution_exception const &Reports uncaught exception to all test observers. -voidtest_unit const &Reports aborted test unit to all test observers. -voidReports aborted test module to all test observers. - -Test module initialization routine signature. Different depending on whether BOOST_TEST_ALTERNATIVE_INIT_API is defined or not test_suite *(* - - - - - - - - - -
-
-Contains the formatter for the Human Readable Format (HRF) - - -boost::unit_test::unit_test_log_formatterLog formatter for the Human Readable Format (HRF) log format. -voidstd::ostream &output stream to write a messages to counter_ttotal test case amount to be run Invoked at the beginning of test module execution. -See Also:log_finish - - -voidstd::ostream &output stream to write a messages into Invoked at the end of test module execution. -See Also:log_start - - -voidstd::ostream &output stream to write a messages into boolindicates if build info should be logged or not Invoked when Unit Test Framework build information is requested. - -voidstd::ostream &output stream to write a messages into test_unit const &test unit being started Invoked when test unit starts (either test suite or test case) -See Also:test_unit_finish - - -voidstd::ostream &output stream to write a messages into test_unit const &test unit being finished unsigned longtime in microseconds spend executing this test unit Invoked when test unit finishes. -See Also:test_unit_start - - -voidstd::ostream &output stream to write a messages into test_unit const &skipped test unit const_stringInvoked if test unit skipped for any reason. - -voidstd::ostream &output stream to write a messages into log_checkpoint_data const &information about the last checkpoint before the exception was triggered execution_exception const &information about the caught exception Invoked when Unit Test Framework detects uncaught exception. The framwork calls this function when an uncaught exception it detected. This call is followed by context information: -one call to entry_context_start, -as many calls to log_entry_context as there are context entries -one call to entry_context_finish - -The logging of the exception information is finilized by a call to log_exception_finish. -See Also:log_exception_finish - - -voidstd::ostream &output stream to write a messages into Invoked when Unit Test Framework detects uncaught exception. Call to this function finishes uncaught exception report. -See Also:log_exception_start - - -voidstd::ostream &output stream to write a messages into log_entry_data const &log entry attributes log_entry_typeslog entry type log_entry_finish Invoked by Unit Test Framework to start new log entry. Call to this function starts new log entry. It is followed by series of log_entry_value calls and finally call to log_entry_finish. A log entry may consist of one or more values being reported. Some of these values will be plain strings, while others can be complicated expressions in a form of "lazy" expression template lazy_ostream. -See Also:log_entry_value, log_entry_finish - -call to this function may happen before any call to test_unit_start or all calls to test_unit_finish as the framework might log errors raised during global initialization/shutdown. - - -voidstd::ostream &output stream to write a messages into. const_stringlog entry string value Invoked by Unit Test Framework to report a log entry content. This is one of two overloaded methods to report log entry content. This one is used to report plain string value. -See Also:log_entry_start, log_entry_finish - - -voidstd::ostream &output stream to write a messages into lazy_ostream const &log entry "lazy" value Invoked by Unit Test Framework to report a log entry content. This is one of two overloaded methods to report log entry content. This one is used to report some complicated expression passed as an expression template lazy_ostream. In most cases default implementation provided by the framework should work as is (it just converts the lazy expression into a string. -See Also:log_entry_start, log_entry_finish - - -voidstd::ostream &output stream to write a messages into Invoked by Unit Test Framework to finish a log entry report. -See Also:log_entry_start, log_entry_start - - -voidstd::ostream &output stream to write a messages into log_levelentry log_level, to be used to fine tune the message Invoked by Unit Test Framework to start log entry context report. Unit Test Framework logs for failed assertions and uncaught exceptions context if one was defined by a test module. Context consists of multiple "scopes" identified by description messages assigned by the test module using BOOST_TEST_INFO/BOOST_TEST_CONTEXT statements. -See Also:log_entry_context, entry_context_finish - - -voidstd::ostream &output stream to write a messages into log_levelentry log_level, to be used to fine tune the message const_stringcontext "scope" description Invoked by Unit Test Framework to report log entry context "scope" description. Each "scope" description is reported by separate call to log_entry_context. -See Also:log_entry_start, entry_context_finish - - -voidstd::ostream &output stream to write a messages into log_levelentry log_level, to be used to fine tune the message Invoked by Unit Test Framework to finish log entry context report. -See Also:log_entry_start, entry_context_context - - -voidstd::ostream &test_unit const &Deprecated version of this interface. Deprecated -voidstd::ostream &test_unit const &Invoked when a test unit is aborted. -voidstd::ostream &test_unit const &Invoked when a test unit times-out. -voidlog_levelSets the log level of the logger/formatter. Some loggers need to manage the log level by their own. This member function let the implementation decide of that. Since Boost 1.62 - - -log_levelReturns the log level of the logger/formatter. Since Boost 1.62 - - -std::stringReturns a default stream for this logger. The returned string describes the stream as if it was passed from the command line "--log_sink" parameter. With that regards, stdout and stderr have special meaning indicating the standard output or error stream respectively.Since Boost 1.62 - - - - - -voidstd::ostream &const_stringstd::size_t - - - - - - - - - - -
-
- - - -boost::unit_test::results_reporter::format -voidstd::ostream & -voidstd::ostream & -voidtest_unit const &std::ostream & -voidtest_unit const &std::ostream & -voidtest_unit const &std::ostream & - - - - - - - - - - - -
-
- - - -boost::unit_test::unit_test_log_formatter -voidstd::ostream &output stream to write a messages to counter_ttotal test case amount to be run Invoked at the beginning of test module execution. -See Also:log_finish - - -voidstd::ostream &output stream to write a messages into Invoked at the end of test module execution. -See Also:log_start - - -voidstd::ostream &output stream to write a messages into boolindicates if build info should be logged or not Invoked when Unit Test Framework build information is requested. - -voidstd::ostream &output stream to write a messages into test_unit const &test unit being started Invoked when test unit starts (either test suite or test case) -See Also:test_unit_finish - - -voidstd::ostream &output stream to write a messages into test_unit const &test unit being finished unsigned longtime in microseconds spend executing this test unit Invoked when test unit finishes. -See Also:test_unit_start - - -voidstd::ostream &output stream to write a messages into test_unit const &skipped test unit const_stringInvoked if test unit skipped for any reason. - -voidstd::ostream &output stream to write a messages into log_checkpoint_data const &information about the last checkpoint before the exception was triggered execution_exception const &information about the caught exception Invoked when Unit Test Framework detects uncaught exception. The framwork calls this function when an uncaught exception it detected. This call is followed by context information: -one call to entry_context_start, -as many calls to log_entry_context as there are context entries -one call to entry_context_finish - -The logging of the exception information is finilized by a call to log_exception_finish. -See Also:log_exception_finish - - -voidstd::ostream &output stream to write a messages into Invoked when Unit Test Framework detects uncaught exception. Call to this function finishes uncaught exception report. -See Also:log_exception_start - - -voidstd::ostream &output stream to write a messages into log_entry_data const &log entry attributes log_entry_typeslog entry type log_entry_finish Invoked by Unit Test Framework to start new log entry. Call to this function starts new log entry. It is followed by series of log_entry_value calls and finally call to log_entry_finish. A log entry may consist of one or more values being reported. Some of these values will be plain strings, while others can be complicated expressions in a form of "lazy" expression template lazy_ostream. -See Also:log_entry_value, log_entry_finish - -call to this function may happen before any call to test_unit_start or all calls to test_unit_finish as the framework might log errors raised during global initialization/shutdown. - - -voidstd::ostream &output stream to write a messages into. const_stringlog entry string value Invoked by Unit Test Framework to report a log entry content. This is one of two overloaded methods to report log entry content. This one is used to report plain string value. -See Also:log_entry_start, log_entry_finish - - -voidstd::ostream &output stream to write a messages into Invoked by Unit Test Framework to finish a log entry report. -See Also:log_entry_start, log_entry_start - - -voidstd::ostream &output stream to write a messages into log_levelentry log_level, to be used to fine tune the message Invoked by Unit Test Framework to start log entry context report. Unit Test Framework logs for failed assertions and uncaught exceptions context if one was defined by a test module. Context consists of multiple "scopes" identified by description messages assigned by the test module using BOOST_TEST_INFO/BOOST_TEST_CONTEXT statements. -See Also:log_entry_context, entry_context_finish - - -voidstd::ostream &output stream to write a messages into log_levelentry log_level, to be used to fine tune the message const_stringcontext "scope" description Invoked by Unit Test Framework to report log entry context "scope" description. Each "scope" description is reported by separate call to log_entry_context. -See Also:log_entry_start, entry_context_finish - - -voidstd::ostream &output stream to write a messages into log_levelentry log_level, to be used to fine tune the message Invoked by Unit Test Framework to finish log entry context report. -See Also:log_entry_start, entry_context_context - - -voidInvoked by Unit Test Framework to report a log entry content. This is one of two overloaded methods to report log entry content. This one is used to report plain string value. -See Also:log_entry_start, log_entry_finish - - -voidInvoked by Unit Test Framework to report a log entry content. This is one of two overloaded methods to report log entry content. This one is used to report some complicated expression passed as an expression template lazy_ostream. In most cases default implementation provided by the framework should work as is (it just converts the lazy expression into a string. -See Also:log_entry_start, log_entry_finish - - -voidstd::ostream &test_unit const &Deprecated version of this interface. Deprecated -voidstd::ostream &test_unit const &Invoked when a test unit is aborted. -voidstd::ostream &test_unit const &Invoked when a test unit times-out. -voidstd::ostream &output stream to write a messages into lazy_ostream const &log entry "lazy" value Invoked by Unit Test Framework to report a log entry content. This is one of two overloaded methods to report log entry content. This one is used to report some complicated expression passed as an expression template lazy_ostream. In most cases default implementation provided by the framework should work as is (it just converts the lazy expression into a string. -See Also:log_entry_start, log_entry_finish - - -voidlog_levelSets the log level of the logger/formatter. Some loggers need to manage the log level by their own. This member function let the implementation decide of that. Since Boost 1.62 - - -log_levelReturns the log level of the logger/formatter. Since Boost 1.62 - - -std::stringReturns a default stream for this logger. The returned string describes the stream as if it was passed from the command line "--log_sink" parameter. With that regards, stdout and stderr have special meaning indicating the standard output or error stream respectively.Since Boost 1.62 - - - - - - - - - - - - -
-
- - - -boost::unit_test::results_reporter::format -voidstd::ostream & -voidstd::ostream & -voidtest_unit const &std::ostream & -voidtest_unit const &std::ostream & -voidtest_unit const &std::ostream & - - - - - - - - - - -
-
-generators and helper macros for parameterized tests - - - - -unspecifiedboost::function< void(ParamType)> const &const_stringconst_stringstd::size_tParamIterParamIter -unspecifiedvoid(*)(ParamType)const_stringconst_stringstd::size_tParamIterParamIter -unspecifiedvoid(UserTestCase::*)(ParamType)const_stringconst_stringstd::size_tboost::shared_ptr< UserTestCase > const &ParamIterParamIter - - - - -
-
-defines simple text based progress monitor - -boost::unit_test::test_observerThis class implements test observer interface and updates test progress as test units finish or get aborted. -voidCalled after the framework ends executing the test cases. The call is made with a reversed priority order. - - -voidtest_unit const &Called before the framework starts executing a test unit. - -voidtest_unit const &backward compatibility -voidtest_unit const &Called when the test timed out. This function is called to signal that a test unit (case or suite) timed out. A valid test unit is available through boost::unit_test::framework::current_test_unit -voidtest_unit const &Called when a test unit indicates a fatal error. A fatal error happens when -a strong assertion (with REQUIRE) fails, which indicates that the test case cannot continue -an unexpected exception is caught by the Boost.Test framework - - -voidunit_test::assertion_result -voidexecution_exception const &Called when an exception is intercepted. In case an exception is intercepted, this call happens before the call to test_unit_aborted in order to log additional data about the exception. - - - - - - - - - -
-
-Defines testing result collector components. Defines classes for keeping track (test_results) and collecting (results_collector_t) the states of the test units. - -boost::unit_test::test_observerCollects and combines the test results. This class collects and combines the results of the test unit during the execution of the test tree. The results_collector_t::results() function combines the test results on a subtree of the test tree.See Also:boost::unit_test::test_observer - - -voidcounter_ttest_unit_idCalled before the framework starts executing the test cases. - -voidtest_unit const &Called before the framework starts executing a test unit. - -voidtest_unit const &unsigned longCalled at each end of a test unit. - -voidtest_unit const &const_string -voidtest_unit const &Called when a test unit indicates a fatal error. A fatal error happens when -a strong assertion (with REQUIRE) fails, which indicates that the test case cannot continue -an unexpected exception is caught by the Boost.Test framework - - -voidtest_unit const &Called when the test timed out. This function is called to signal that a test unit (case or suite) timed out. A valid test unit is available through boost::unit_test::framework::current_test_unit -voidunit_test::assertion_result -voidexecution_exception const &Called when an exception is intercepted. In case an exception is intercepted, this call happens before the call to test_unit_aborted in order to log additional data about the exception. -intThe priority indicates the order at which this observer is initialized and tore down in the UTF framework. The order is lowest to highest priority. -test_results const &test_unit_idid of a test unit Results access per test unit. - -voidCalled after the framework ends executing the test cases. The call is made with a reversed priority order. - - -voidCalled when a critical error is detected. The critical errors are mainly the signals sent by the system and caught by the Boost.Test framework. Since the running binary may be in incoherent/instable state, the test execution is aborted and all remaining tests are discarded.may be called before test_observer::test_unit_finish() - - -voidtest_unit const &backward compatibility - -Collection of attributes constituting test unit results. This class is a collection of attributes describing a test result.The attributes presented as public properties on an instance of the class. In addition summary conclusion methods are presented to generate simple answer to pass/fail question counter_propNumber of test suites. -counter_propNumber of successful assertions. -counter_propNumber of failing assertions. -counter_propNumber of warnings. -counter_prop -counter_propNumber of successfull test cases. -counter_propNumber of warnings in test cases. -counter_propNumber of failing test cases. -counter_propNumber of skipped test cases. -counter_propNumber of aborted test cases. -counter_propNumber of timed out test cases. -counter_propNumber of timed out test suites. -counter_propDuration of the test in microseconds. -bool_propIndicates that the test unit execution has been aborted. -bool_propIndicates that the test unit execution has been skipped. -bool_propIndicates that the test unit has timed out. - -typedefcounter_t(results_collector_t)(test_results)(results_collect_helper)Type representing counter like public property. -typedefbool(results_collector_t)(test_results)(results_collect_helper)Type representing boolean like public property. -boolReturns true if test unit passed. -boolReturns true if test unit skipped. For test suites, this indicates if the test suite itself has been marked as skipped, and not if the test suite contains any skipped test. -boolReturns true if the test unit was aborted (hard failure) -intProduces result code for the test unit execution. This methhod return one of the result codes defined in boost/cstdlib.hpp - -boost::exit_success on success, -boost::exit_exception_failure in case test unit was aborted for any reason (including uncaught exception) -and boost::exit_test_failure otherwise - - - -voidtest_results const &Combines the results of the current instance with another. Only the counters are updated and the p_aborted and p_skipped are left unchanged. -voidResets the current state of the result. - - - - - - - - - - -
-
-defines testing result reporter interfaces This file defines interfaces that are responsible for results reporting. Interface is presented in a form of free standing function implemented in namespace result_reporter - - -Results report formatter interface. This is abstract interface for the report formatter used by results reporter routines. You can define a custom formatter by implementing this interface and setting the formatter using set_format function. This is usually done during test module initialization -voidstd::ostream & -voidstd::ostream & -voidtest_unit const &std::ostream & -voidtest_unit const &std::ostream & -voidtest_unit const &std::ostream & - - -voidreport_levelreport level Sets reporting level. There are only four possible levels for results report: -confirmation report (boost::unit_test::CONFIRMATION_REPORT). This report level only produces short confirmation message about test module pass/fail status -short report (boost::unit_test::SHORT_REPORT). This report level produces short summary report for failed/passed assertions and test units. -detailed report (boost::unit_test::DETAILED_REPORT). This report level produces detailed report per test unit for passed/failed assertions and uncaught exceptions -no report (boost::unit_test::NO_REPORT). This report level produces no results report. This is used for test modules running as part of some kind of continues integration framework - - - -voidstd::ostream &Sets output stream for results reporting. By default std::cerr is used. Use this function to set a different stream. The framework refers to the stream by reference, so you need to make sure the stream object lifetime exceeds the testing main scope. -voidoutput_formatone of the presefined enumeration values for output formats Sets one of the predefined formats. The framework implements two results report formats: -plain human readable format (boost::unit_test::OF_CLF) -XML format (boost::unit_test::OF_XML) - - - -voidresults_reporter::format *pointer to heap allocated instance of custom report formatter class Sets custom report formatter. The framework takes ownership of the pointer passed as an argument. So this should be a pointer to a heap allocated object - -std::ostream &Access to configured results reporter stream. Use this stream to report additional information abut test module execution -voidreport_levelINV_REPORT_LEVELtest_unit_idINV_TEST_UNIT_ID -voidtest_unit_idINV_TEST_UNIT_ID -voidtest_unit_idINV_TEST_UNIT_ID -voidtest_unit_idINV_TEST_UNIT_ID - - - - - - - - - -
-
-Enhanced result for test predicate that include message explaining failure. - -Type used for storing the result of an assertion. -void - - -bool -safe_bool -bool(assertion_result) -bool -wrap_stringstream & -const_string - -bool -BoolConvertable const & -voidbool -assertion_result - - - - - - - - - - - -
-
-Bitwise comparison manipulator implementation. - -Bitwise comparison manipulator This is a terminal for the expression. unit_test::lazy_ostream &unit_test::lazy_ostream &bitwise -std::ostream &std::ostream &bitwise - - - - - - - - - -
-
-Lexicographic comparison manipulator implementation. - -Lexicographic comparison manipulator, for containers This is a terminal that involves evaluation of the expression. - -unit_test::lazy_ostream &unit_test::lazy_ostream &lexicographic -std::ostream &std::ostream &lexicographic - - - - - - - -
-
-Per element comparison manipulator implementation. - -Per element comparison manipulator, for containers This is a terminal that involves evaluation of the expression. - - - -unit_test::lazy_ostream &unit_test::lazy_ostream &per_element -std::ostream &std::ostream &per_element - - - - - -
-
-Floating point comparison tolerance manipulators. This file defines several manipulators for floating point comparison. These manipulators are intended to be used with BOOST_TEST. - - - - - - - -unspecifiedFPTunspecifiedfpc::percent_tolerance_t< FPT >unspecifiedTolerance manipulatorThese functions return a manipulator that can be used in conjunction with BOOST_TEST in order to specify the tolerance with which floating point comparisons are made. - - - - -
-
-algorithms for comparing floating point values - - -Predicate for comparing floating point numbers. This predicate is used to compare floating point numbers. In addition the comparison produces maximum related difference, which can be used to generate detailed error message The methods for comparing floating points are detailed in the documentation. The method is chosen by the boost::math::fpc::strength given at construction.This predicate is not suitable for comparing to 0 or to infinity. bool - -FPTReturns the tolerance. -fpc::strengthReturns the comparison method. -FPTReturns the failing fraction. -boolFPTfirst floating point number to be compared FPTsecond floating point number to be comparedCompares two floating point numbers a and b such that their "left" relative difference |a-b|/a and/or "right" relative difference |a-b|/b does not exceed specified relative (fraction) tolerance. -What is reported by tested_rel_diff in case of failure depends on the comparison method: -for FPC_STRONG: the max of the two fractions -for FPC_WEAK: the min of the two fractions The rationale behind is to report the tolerance to set in order to make a test pass. - - - -ToleranceTypefpc::strengthFPC_STRONG -const bool - -charU(*) -Two... - -FPT - - -FPT -Predicate for comparing floating point numbers against 0. Serves the same purpose as boost::math::fpc::close_at_tolerance, but used when one of the operand is null. bool - -boolFPT - -FPT -tolerance_based_delegate::type< T, !is_array< T >::value &&!is_abstract_class_or_function< T >::value >Indicates if a type can be compared using a tolerance scheme. This is a metafunction that should evaluate to mpl::true_ if the type T can be compared using a tolerance based method, typically for floating point types.This metafunction can be specialized further to declare user types that are floating point (eg. boost.multiprecision). Tfalsefalse_Ttruempl::bool_< is_floating_point< T >::value||(!std::numeric_limits< T >::is_integer &&std::numeric_limits< T >::is_specialized &&!std::numeric_limits< T >::is_exact)>"Very close" - equation 2' in docs, the default "Close enough" - equation 3' in docs. Method for comparing floating point numbers. -std::ostream &std::ostream &percent_tolerance_t< FPT > -percent_tolerance_t< FPT >FPT -boolFPTFPT - - - -
-
-output_test_stream class definition - -wrapped_streamClass to be used to simplify testing of ostream-based output operations. -assertion_resultbooltrueif true, flushes the stream after the call Checks if the stream is empty. - -assertion_resultstd::size_ttarget length booltrueif true, flushes the stream after the call. Set to false to call additional checks on the same content. Checks the length of the stream. - -assertion_resultconst_stringthe target stream booltrueif true, flushes the stream after the call. Checks the content of the stream against a string. - -assertion_resultbooltrueif true, flushes/resets the stream after the call. Checks the content of the stream against a pattern file. - -voidFlushes the stream. - -const_stringconst_string()indicates the name of the file for matching. If the string is empty, the standard input or output streams are used instead (depending on match_or_save) booltrueif true, the pattern file will be read, otherwise it will be written booltrueif false, opens the stream in binary mode. Otherwise the stream is opened with default flags and the carriage returns are ignored. Constructor. - - - -std::stringReturns the string representation of the stream. May be overriden in order to mutate the string before the matching operations. - - -std::size_tLength of the stream. -voidSynching the stream into an internal string representation. - - - - - - - - - - - - -
-
-defines abstract interface for test observer - -Generic test observer interface. This interface is used by observers in order to receive notifications from the Boost.Test framework on the current execution state.Several observers can be running at the same time, and it is not unusual to have interactions among them. The test_observer::priority member function allows the specification of a particular order among them (lowest priority executed first, except specified otherwise). -voidcounter_ttest_unit_idCalled before the framework starts executing the test cases. - -voidCalled after the framework ends executing the test cases. The call is made with a reversed priority order. - - -voidCalled when a critical error is detected. The critical errors are mainly the signals sent by the system and caught by the Boost.Test framework. Since the running binary may be in incoherent/instable state, the test execution is aborted and all remaining tests are discarded.may be called before test_observer::test_unit_finish() - - -voidtest_unit const &Called before the framework starts executing a test unit. - -voidtest_unit const &unsigned longCalled at each end of a test unit. - -voidtest_unit const &const_string -voidtest_unit const &backward compatibility -voidtest_unit const &Called when the test timed out. This function is called to signal that a test unit (case or suite) timed out. A valid test unit is available through boost::unit_test::framework::current_test_unit -voidtest_unit const &Called when a test unit indicates a fatal error. A fatal error happens when -a strong assertion (with REQUIRE) fails, which indicates that the test case cannot continue -an unexpected exception is caught by the Boost.Test framework - - -voidunit_test::assertion_result -voidexecution_exception const &Called when an exception is intercepted. In case an exception is intercepted, this call happens before the call to test_unit_aborted in order to log additional data about the exception. -intThe priority indicates the order at which this observer is initialized and tore down in the UTF framework. The order is lowest to highest priority. - - - - - - - - - - - - -
-
-Defines test_unit, test_case, test_suite and master_test_suite_t. - -boost::unit_test::test_suiteint -char ** -test_unit_type consttype for this test unit -const_string const"case"/"suite"/"module" -const_string const -std::size_t const -id_tunique id for this test unit -parent_id_tparent test suite id -label_list_tlist of labels associated with this test unit -id_list_tlist of test units this one depends on -precond_list_tuser supplied preconditions for this test unit; -readwrite_property< std::string >name for this test unit -readwrite_property< std::string >description for this test unit -readwrite_property< unsigned >timeout for the test unit execution in seconds -readwrite_property< counter_t >number of expected failures in this test unit -readwrite_property< run_status >run status obtained by this unit during setup phase -readwrite_property< run_status >run status assigned to this unit before execution phase after applying all filters -readwrite_property< counter_t >rank of this test unit amoung siblings of the same parent -readwrite_property< decor_list_t >automatically assigned decorators; execution is delayed till framework::finalize_setup_phase function -readwrite_property< fixture_list_t >fixtures associated with this test unit - - - -const master_test_suite_t & -master_test_suite_t &master_test_suite_t const & -= TUT_SUITE -= TUT_ANY - -std::vector< test_unit_id > -std::vector< test_unit_fixture_ptr > -std::vector< decorator::base_ptr > -boost::function< test_tools::assertion_result(test_unit_id)> - -voidtest_unit *counter_t0unsigned0Adds a test unit to a test suite. It is possible to specify the timeout and the expected failures. -voidtest_unit_generator const &unsigned0This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidtest_unit_generator const &decorator::collector_t &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidboost::shared_ptr< test_unit_generator >decorator::collector_t &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidtest_unit_idRemoves a test from the test suite. -voidGenerates all the delayed test_units from the generators. -voidCheck for duplicates name in test cases. Raises a setup_error if there are duplicates -test_unit_idconst_string -std::size_t -typedeftest_unit_id(framework::state) -typedeftest_unit_id(test_suite) -typedefid_list(test_unit) -typedefstd::vector< std::string >(test_unit) -typedefstd::vector< precondition_t >(test_unit) -voidtest_unit * -voidprecondition_t const & -test_tools::assertion_result -voidconst_string -boolconst_string -voidcounter_t -bool -std::string - -boost::unit_test::test_unit= TUT_CASE -= TUT_ANY - -std::vector< test_unit_id > -std::vector< test_unit_fixture_ptr > -std::vector< decorator::base_ptr > -boost::function< test_tools::assertion_result(test_unit_id)> -test_func -test_unit_type consttype for this test unit -const_string const"case"/"suite"/"module" -const_string const -std::size_t const -id_tunique id for this test unit -parent_id_tparent test suite id -label_list_tlist of labels associated with this test unit -id_list_tlist of test units this one depends on -precond_list_tuser supplied preconditions for this test unit; -readwrite_property< std::string >name for this test unit -readwrite_property< std::string >description for this test unit -readwrite_property< unsigned >timeout for the test unit execution in seconds -readwrite_property< counter_t >number of expected failures in this test unit -readwrite_property< run_status >run status obtained by this unit during setup phase -readwrite_property< run_status >run status assigned to this unit before execution phase after applying all filters -readwrite_property< counter_t >rank of this test unit amoung siblings of the same parent -readwrite_property< decor_list_t >automatically assigned decorators; execution is delayed till framework::finalize_setup_phase function -readwrite_property< fixture_list_t >fixtures associated with this test unit - -typedefboost::function< void()>(test_case) -typedeftest_unit_id(framework::state) -typedeftest_unit_id(test_suite) -typedefid_list(test_unit) -typedefstd::vector< std::string >(test_unit) -typedefstd::vector< precondition_t >(test_unit) -voidtest_unit * -voidprecondition_t const & -test_tools::assertion_result -voidconst_string -boolconst_string -voidcounter_t -bool -std::string - -const_stringboost::function< void()> const & -const_stringconst_stringstd::size_tboost::function< void()> const & - - - -boost::unit_test::test_unitClass representing test suites. = TUT_SUITE -= TUT_ANY - -std::vector< test_unit_id > -std::vector< test_unit_fixture_ptr > -std::vector< decorator::base_ptr > -boost::function< test_tools::assertion_result(test_unit_id)> - -voidtest_unit *counter_t0unsigned0Adds a test unit to a test suite. It is possible to specify the timeout and the expected failures. -voidtest_unit_generator const &unsigned0This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidtest_unit_generator const &decorator::collector_t &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidboost::shared_ptr< test_unit_generator >decorator::collector_t &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidtest_unit_idRemoves a test from the test suite. -voidGenerates all the delayed test_units from the generators. -voidCheck for duplicates name in test cases. Raises a setup_error if there are duplicates -test_unit_idconst_string -std::size_t -typedeftest_unit_id(framework::state) -typedeftest_unit_id(test_suite) -typedefid_list(test_unit) -typedefstd::vector< std::string >(test_unit) -typedefstd::vector< precondition_t >(test_unit) -voidtest_unit * -voidprecondition_t const & -test_tools::assertion_result -voidconst_string -boolconst_string -voidcounter_t -bool -std::string - -const_stringconst_stringstd::size_t - - -const_string - -test_unit_type consttype for this test unit -const_string const"case"/"suite"/"module" -const_string const -std::size_t const -id_tunique id for this test unit -parent_id_tparent test suite id -label_list_tlist of labels associated with this test unit -id_list_tlist of test units this one depends on -precond_list_tuser supplied preconditions for this test unit; -readwrite_property< std::string >name for this test unit -readwrite_property< std::string >description for this test unit -readwrite_property< unsigned >timeout for the test unit execution in seconds -readwrite_property< counter_t >number of expected failures in this test unit -readwrite_property< run_status >run status obtained by this unit during setup phase -readwrite_property< run_status >run status assigned to this unit before execution phase after applying all filters -readwrite_property< counter_t >rank of this test unit amoung siblings of the same parent -readwrite_property< decor_list_t >automatically assigned decorators; execution is delayed till framework::finalize_setup_phase function -readwrite_property< fixture_list_t >fixtures associated with this test unit -= TUT_ANY - -std::vector< test_unit_id > -std::vector< test_unit_fixture_ptr > -std::vector< decorator::base_ptr > -boost::function< test_tools::assertion_result(test_unit_id)> -test_unit_type consttype for this test unit -const_string const"case"/"suite"/"module" -const_string const -std::size_t const -id_tunique id for this test unit -parent_id_tparent test suite id -label_list_tlist of labels associated with this test unit -id_list_tlist of test units this one depends on -precond_list_tuser supplied preconditions for this test unit; -readwrite_property< std::string >name for this test unit -readwrite_property< std::string >description for this test unit -readwrite_property< unsigned >timeout for the test unit execution in seconds -readwrite_property< counter_t >number of expected failures in this test unit -readwrite_property< run_status >run status obtained by this unit during setup phase -readwrite_property< run_status >run status assigned to this unit before execution phase after applying all filters -readwrite_property< counter_t >rank of this test unit amoung siblings of the same parent -readwrite_property< decor_list_t >automatically assigned decorators; execution is delayed till framework::finalize_setup_phase function -readwrite_property< fixture_list_t >fixtures associated with this test unit - -typedeftest_unit_id(framework::state) -typedeftest_unit_id(test_suite) -typedefid_list(test_unit) -typedefstd::vector< std::string >(test_unit) -typedefstd::vector< precondition_t >(test_unit) -voidtest_unit * -voidprecondition_t const & -test_tools::assertion_result -voidconst_string -boolconst_string -voidcounter_t -bool -std::string - - - - -const_stringconst_stringstd::size_ttest_unit_type -const_string - -test_unit * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -std::vector< test_unit_id > - -test_case *boost::function< void()> const &const_stringconst_stringstd::size_t -test_case *void(UserTestCase::*)()const_stringconst_stringstd::size_tboost::shared_ptr< InstanceType > - - - - - -
-
-Entry point into the Unit Test Framework. This header should be the only header necessary to include to start using the framework - -intinit_unit_test_funcintchar * - - - - - - - -
-
-defines singleton class unit_test_log and all manipulators. unit_test_log has output stream like interface. It's implementation is completely hidden with pimple idiom - -boost::unit_test::test_observerManages the sets of loggers, their streams and log levels. The Boost.Test framework allows for having several formatters/loggers at the same time, each of which having their own log level and output stream.This class serves the purpose of -exposing an interface to the test framework (as a boost::unit_test::test_observer) -exposing an interface to the testing tools -managing several loggers - -Accesses to the functions exposed by this class are made through the singleton boost::unit_test::unit_test_log. - -Users/developers willing to implement their own formatter need to: -implement a boost::unit_test::unit_test_log_formatter that will output the desired format -register the formatter during a eg. global fixture using the method set_formatter (though the framework singleton). - -this observer has a higher priority than the boost::unit_test::results_collector_t. This means that the various boost::unit_test::test_results associated to each test unit may not be available at the time the test_unit_start, test_unit_finish ... are called. - -See Also: -boost::unit_test::test_observer -boost::unit_test::unit_test_log_formatter - - - - -voidcounter_ttest_unit_idCalled before the framework starts executing the test cases. - -voidCalled after the framework ends executing the test cases. The call is made with a reversed priority order. - - -voidCalled when a critical error is detected. The critical errors are mainly the signals sent by the system and caught by the Boost.Test framework. Since the running binary may be in incoherent/instable state, the test execution is aborted and all remaining tests are discarded.may be called before test_observer::test_unit_finish() - - -voidtest_unit const &Called before the framework starts executing a test unit. - -voidtest_unit const &unsigned longCalled at each end of a test unit. - -voidtest_unit const &const_string -voidtest_unit const &Called when a test unit indicates a fatal error. A fatal error happens when -a strong assertion (with REQUIRE) fails, which indicates that the test case cannot continue -an unexpected exception is caught by the Boost.Test framework - - -voidtest_unit const &Called when the test timed out. This function is called to signal that a test unit (case or suite) timed out. A valid test unit is available through boost::unit_test::framework::current_test_unit -voidexecution_exception const &Called when an exception is intercepted. In case an exception is intercepted, this call happens before the call to test_unit_aborted in order to log additional data about the exception. -intThe priority indicates the order at which this observer is initialized and tore down in the UTF framework. The order is lowest to highest priority. -voidstd::ostream &Sets the stream for all loggers. This will override the log sink/stream of all loggers, whether enabled or not. -voidoutput_formatstd::ostream &Sets the stream for specific logger. Has no effect if the specified format is not found - -Since Boost 1.62 - - -std::ostream *output_formatReturns a pointer to the stream associated to specific logger. Returns a null pointer if the format is not found - -Since Boost 1.67 - - -log_levellog_levelSets the threshold level for all loggers/formatters. This will override the log level of all loggers, whether enabled or not. -the minimum of the previous log level of all formatters (new in Boost 1.73) - -log_leveloutput_formatlog_levelSets the threshold/log level of a specific format. Has no effect if the specified format is not found - -Since Boost 1.62 - - -the previous log level of the corresponding formatter (new in Boost 1.73) - -voidoutput_formatAdd a format to the set of loggers. Adding a logger means that the specified logger is enabled. The log level is managed by the formatter itself and specifies what events are forwarded to the underlying formatter. Since Boost 1.62 - - -voidoutput_formatSets the format of the logger. This will become the only active format of the logs. -unit_test_log_formatter *output_formatReturns the logger instance for a specific format. -Since Boost 1.62 - -the logger/formatter instance, or (unit_test_log_formatter*)0 if the format is not found. - -voidunit_test_log_formatter *Sets the logger instance. The specified logger becomes the unique active one. The custom log formatter has the format OF_CUSTOM_LOGGER. If such a format exists already, its formatter gets replaced by the one given in argument.The log level and output stream of the new formatter are taken from the currently active logger. In case several loggers are active, the order of priority is CUSTOM, HRF, XML, and JUNIT. If (unit_test_log_formatter*)0 is given as argument, the custom logger (if any) is removed.The ownership of the pointer is transferred to the Boost.Test framework. This call is equivalent to -a call to add_formatter -a call to set_format(OF_CUSTOM_LOGGER) -a configuration of the newly added logger with a previously configured stream and log level. - - - - -voidunit_test_log_formatter *Adds a custom log formatter to the set of formatters. The specified logger is added with the format OF_CUSTOM_LOGGER, such that it can be futher selected or its stream/log level can be specified. If there is already a custom logger (with OF_CUSTOM_LOGGER), then the existing one gets replaced by the one given in argument. The provided logger is added with an enabled state. If (unit_test_log_formatter*)0 is given as argument, the custom logger (if any) is removed and no other action is performed.The ownership of the pointer is transferred to the Boost.Test framework. - -Since Boost 1.62 - - -voidconst_stringstd::size_tconst_stringconst_string() -unit_test_log_t &log::begin const & -unit_test_log_t &log::end const & -unit_test_log_t &log_level -unit_test_log_t &const_string -unit_test_log_t &lazy_ostream const & -unspecifiedlog_level -voidPrepares internal states after log levels, streams and format has been set up. -voidtest_unit const &backward compatibility -voidunit_test::assertion_result - - -const_string -std::size_t - - -const_stringstd::size_t - - - - - - - - - - - - - - -
-
-Defines unit test log formatter interface. You can define a class with implements this interface and use an instance of it as a Unit Test Framework log formatter - -Collection of log checkpoint attributes. const_stringlog checkpoint file name -std::size_tlog checkpoint file name -std::stringlog checkpoint message - -void - -Collection of log entry attributes. std::stringlog entry file name -std::size_tlog entry line number -log_levellog entry level - -void - - -Abstract Unit Test Framework log formatter interface. During the test module execution Unit Test Framework can report messages about success or failure of assertions, which test suites are being run and more (specifically which messages are reported depends on log level threshold selected by the user).All these messages constitute Unit Test Framework log. There are many ways (formats) to present these messages to the user.Boost.Test comes with three formats: -Compiler-like log format: intended for human consumption/diagnostic -XML based log format: intended for processing by automated regression test systems. -JUNIT based log format: intended for processing by automated regression test systems. - -If you want to produce some other format you need to implement class with specific interface and use method unit_test_log_t::set_formatter during a test module initialization to set an active formatter. The class unit_test_log_formatter defines this interface.This interface requires you to format all possible messages being produced in the log. These includes error messages about failed assertions, messages about caught exceptions and information messages about test units being started/ended. All the methods in this interface takes a reference to standard stream as a first argument. This is where final messages needs to be directed to. Also you are given all the information necessary to produce a message.Since Boost 1.62: -Each formatter may indicate the default output stream. This is convenient for instance for streams intended for automated processing that indicate a file. See get_default_stream_description for more details. -Each formatter may manage its own log level through the getter/setter get_log_level and set_log_level . - - - -See Also: -boost::unit_test::test_observer for an indication of the calls of the test observer interface - - - -Information message from the framework. Information message from the user. Warning (non error) condition notification message. Non fatal error notification message. Fatal error notification message. Types of log entries (messages written into a log) - -voidstd::ostream &output stream to write a messages to counter_ttotal test case amount to be run Invoked at the beginning of test module execution. -See Also:log_finish - - -voidstd::ostream &output stream to write a messages into Invoked at the end of test module execution. -See Also:log_start - - -voidstd::ostream &output stream to write a messages into booltrueindicates if build info should be logged or not Invoked when Unit Test Framework build information is requested. - -voidstd::ostream &output stream to write a messages into test_unit const &test unit being started Invoked when test unit starts (either test suite or test case) -See Also:test_unit_finish - - -voidstd::ostream &output stream to write a messages into test_unit const &test unit being finished unsigned longtime in microseconds spend executing this test unit Invoked when test unit finishes. -See Also:test_unit_start - - -voidstd::ostream &output stream to write a messages into test_unit const &skipped test unit const_stringInvoked if test unit skipped for any reason. - -voidstd::ostream &test_unit const &Deprecated version of this interface. Deprecated -voidstd::ostream &test_unit const &Invoked when a test unit is aborted. -voidstd::ostream &test_unit const &Invoked when a test unit times-out. -voidstd::ostream &output stream to write a messages into log_checkpoint_data const &information about the last checkpoint before the exception was triggered execution_exception const &information about the caught exception Invoked when Unit Test Framework detects uncaught exception. The framwork calls this function when an uncaught exception it detected. This call is followed by context information: -one call to entry_context_start, -as many calls to log_entry_context as there are context entries -one call to entry_context_finish - -The logging of the exception information is finilized by a call to log_exception_finish. -See Also:log_exception_finish - - -voidstd::ostream &output stream to write a messages into Invoked when Unit Test Framework detects uncaught exception. Call to this function finishes uncaught exception report. -See Also:log_exception_start - - -voidstd::ostream &output stream to write a messages into log_entry_data const &log entry attributes log_entry_typeslog entry type log_entry_finish Invoked by Unit Test Framework to start new log entry. Call to this function starts new log entry. It is followed by series of log_entry_value calls and finally call to log_entry_finish. A log entry may consist of one or more values being reported. Some of these values will be plain strings, while others can be complicated expressions in a form of "lazy" expression template lazy_ostream. -See Also:log_entry_value, log_entry_finish - -call to this function may happen before any call to test_unit_start or all calls to test_unit_finish as the framework might log errors raised during global initialization/shutdown. - - -voidstd::ostream &output stream to write a messages into. const_stringlog entry string value Invoked by Unit Test Framework to report a log entry content. This is one of two overloaded methods to report log entry content. This one is used to report plain string value. -See Also:log_entry_start, log_entry_finish - - -voidstd::ostream &output stream to write a messages into lazy_ostream const &log entry "lazy" value Invoked by Unit Test Framework to report a log entry content. This is one of two overloaded methods to report log entry content. This one is used to report some complicated expression passed as an expression template lazy_ostream. In most cases default implementation provided by the framework should work as is (it just converts the lazy expression into a string. -See Also:log_entry_start, log_entry_finish - - -voidstd::ostream &output stream to write a messages into Invoked by Unit Test Framework to finish a log entry report. -See Also:log_entry_start, log_entry_start - - -voidstd::ostream &output stream to write a messages into log_levelentry log_level, to be used to fine tune the message Invoked by Unit Test Framework to start log entry context report. Unit Test Framework logs for failed assertions and uncaught exceptions context if one was defined by a test module. Context consists of multiple "scopes" identified by description messages assigned by the test module using BOOST_TEST_INFO/BOOST_TEST_CONTEXT statements. -See Also:log_entry_context, entry_context_finish - - -voidstd::ostream &output stream to write a messages into log_levelentry log_level, to be used to fine tune the message const_stringcontext "scope" description Invoked by Unit Test Framework to report log entry context "scope" description. Each "scope" description is reported by separate call to log_entry_context. -See Also:log_entry_start, entry_context_finish - - -voidstd::ostream &output stream to write a messages into log_levelentry log_level, to be used to fine tune the message Invoked by Unit Test Framework to finish log entry context report. -See Also:log_entry_start, entry_context_context - - -voidlog_levelSets the log level of the logger/formatter. Some loggers need to manage the log level by their own. This member function let the implementation decide of that. Since Boost 1.62 - - -log_levelReturns the log level of the logger/formatter. Since Boost 1.62 - - -std::stringReturns a default stream for this logger. The returned string describes the stream as if it was passed from the command line "--log_sink" parameter. With that regards, stdout and stderr have special meaning indicating the standard output or error stream respectively.Since Boost 1.62 - - - -Constructor. - - - - - - - - - -
-
-Provides access to various Unit Test Framework runtime parameters. Primarily for use by the framework itself - - -boost::function< void()> -std::ofstream - - -boost::function< void()> - - -voidconst const_string &boost::function< void()> const &boost::function< void()>() -std::ostream & - -std::ostream &std::cout -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -std::string -voidint &char ** -runtime::arguments_store const &Access to arguments. -T const &runtime::cstring -boolruntime::cstring -boolFor public access. - - - - - - - - - -
-
-Addition to STL algorithms. - - -std::pair< InputIter1, InputIter2 >InputIter1- first collection begin iterator InputIter1- first collection end iterator InputIter2- second collection begin iterator InputIter2- second collection end iterator this algorithm search through two collections for first mismatch position that get returned as a pair of iterators, first pointing to the mismatch position in first collection, second iterator in second one - -std::pair< InputIter1, InputIter2 >InputIter1- first collection begin iterator InputIter1- first collection end iterator InputIter2- second collection begin iterator InputIter2- second collection end iterator Predicate- predicate to be used for search this algorithm search through two collections for first mismatch position that get returned as a pair of iterators, first pointing to the mismatch position in first collection, second iterator in second one. This algorithms uses supplied predicate for collection elements comparison - -ForwardIterator1ForwardIterator1- first collection begin iterator ForwardIterator1- first collection end iterator ForwardIterator2- second collection begin iterator ForwardIterator2- second collection end iterator this algorithm search through first collection for first element that does not belong a second one - -ForwardIterator1ForwardIterator1- first collection begin iterator ForwardIterator1- first collection end iterator ForwardIterator2- second collection begin iterator ForwardIterator2- second collection end iterator Predicate- predicate to be used for search this algorithm search through first collection for first element that does not satisfy binary predicate in conjunction will any element in second collection - -BidirectionalIterator1BidirectionalIterator1- first collection begin iterator BidirectionalIterator1- first collection end iterator ForwardIterator2- second collection begin iterator ForwardIterator2- second collection end iterator this algorithm search through first collection for last element that belongs to a second one - -BidirectionalIterator1BidirectionalIterator1- first collection begin iterator BidirectionalIterator1- first collection end iterator ForwardIterator2- second collection begin iterator ForwardIterator2- second collection end iterator Predicate- predicate to be used for search this algorithm search through first collection for last element that satisfy binary predicate in conjunction will at least one element in second collection - -BidirectionalIterator1BidirectionalIterator1- first collection begin iterator BidirectionalIterator1- first collection end iterator ForwardIterator2- second collection begin iterator ForwardIterator2- second collection end iterator this algorithm search through first collection for last element that does not belong to a second one - -BidirectionalIterator1BidirectionalIterator1- first collection begin iterator BidirectionalIterator1- first collection end iterator ForwardIterator2- second collection begin iterator ForwardIterator2- second collection end iterator Predicate- predicate to be used for search this algorithm search through first collection for last element that does not satisfy binary predicate in conjunction will any element in second collection - -StringClassStringClass- string of operation ForwardIterator- iterator to the beginning of the substrings to replace ForwardIterator- iterator to the end of the substrings to replace ForwardIterator- iterator to the beginning of the substrings to replace with ForwardIterator- iterator to the end of the substrings to replace with This algorithm replaces all occurrences of a set of substrings by another substrings. - -StringClassStringClass- string to transform ForwardIterator- iterator to the beginning of the substrings to replace ForwardIterator- iterator to the end of the substrings to replace ForwardIterator- iterator to the beginning of the substrings to replace with ForwardIterator- iterator to the end of the substrings to replace withThis algorithm replaces all occurrences of a string with basic wildcards with another (optionally containing wildcards as well). -The wildcard is the symbol '*'. Only a unique wildcard per string is supported. The replacement string may also contain a wildcard, in which case it is considered as a placeholder to the content of the wildcard in the source string. Example: -In order to replace the occurrences of 'time="some-variable-value"' to a constant string, one may use 'time="*"' as the string to search for, and 'time="0.0"' as the replacement string. -In order to replace the occurrences of 'file.cpp(XX)' per 'file.cpp:XX', where XX is a variable to keep, on may use 'file.cpp(*)' as the string to search for, and 'file.cpp:*' as the replacement string. - - - - - - - - - - - - -
-
-Defines the is_forward_iterable collection type trait. - -Helper structure for accessing the content of a container or an array. T [N]trueboost::add_const< T >::type -boost::add_pointer< T_const >::type -T - -const_iteratorT_const(&) -const_iteratorT_const(&) -std::size_tT_const(&) - -Ttruestd::iterator_traits< const_iterator >::value_type -decltype(boost::declval< typename boost::add_const< typename boost::remove_reference< T >::type >::type >().begin()) typedef - -(is_forward_iterable< T >::value) - - -const_iteratorT const & -const_iteratorT const & -std::size_tT const & - - -std::size_tT const &std::true_type -std::size_tT const &std::false_type - -Indicates that a specific type implements the forward iterable concept. = is_fwd_it_t::value -std::remove_reference< T >::type -unspecified -mpl::bool_< is_fwd_it_t::value > -Indicates that a specific type implements the forward iterable concept. = is_fwd_it_t::value -std::remove_reference< T >::type -unspecified -mpl::bool_< is_fwd_it_t::value > - - - - - - - - -
-
- - -is_same< NP::id, Keyword::id >has_param<Params,Keyword>::value is true if Params has parameter corresponding to the Keyword named_parameter_combine< NPRest >Keywordmpl::or_< is_same< NP::id, Keyword::id >::type, has_param< Rest, Keyword >::type >false_is_named_param_pack<T>::value is true if T is parameters pack named_parameter< Tunique_idRefType >true_named_parameter_combine< NPRest >true_unique_id - - -named_parameter< T const, unique_id >T const & -named_parameter< T, unique_id >T & -named_parameter< char const *, unique_id, char const * >char const * -T -RefType -unique_id - -ref_typekeyword< unique_id, true > -ref_typekeyword< unique_id, false > -nilkeyword< UnknownId, false > -boolkeyword< unique_id, false > -boolkeyword< UnknownId, false > -voidkeyword< unique_id, false > -voidkeyword< UnknownId, false > -voidVisitor & -named_parameter_combine< NP, named_parameter< T, unique_id, RefType > >NP const & - -ref_type -named_parameter const & -RestNP::ref_type -named_parameter_combine< NP, Rest > - -res_typekeyword< typename NP::id, true > -res_typekeyword< typename NP::id, false > -boolkeyword< typename NP::id, false > -voidkeyword< typename NP::id, false > -voidVisitor & -named_parameter_combine< NP, named_parameter_combine< NP, Rest > >NP const & - -NP const &Rest const & - -T const & -T -nilArg1 const & -nilArg1 const &Arg2 const & -nilArg1 const &Arg2 const &Arg3 const & -voidVisitor & - - -nil & - - - - -mpl::if_< is_same< NP::id, Keyword::id >::type, remove_cv< NP::data_type >::type, DefaultType >param_type<Params,Keyword,Default>::type is the type of the parameter corresponding to the Keyword (if parameter is present) or Default named_parameter_combine< NPRest >KeywordDefaultTypempl::if_< is_same< NP::id, Keyword::id >::type, remove_cv< NP::data_type >::type, param_type< Rest, Keyword, DefaultType >::type >boost::nfp::keyword< unique_id, required > - -named_parameter< T const, unique_id >T const & -named_parameter< T, unique_id >T & -unique_id -boolunique_idrequiredboost::nfp::keyword< unique_id, required >boost::nfp::named_parameter< bool, unique_id, bool >unique_id -bool -bool - -named_parameter< bool, unique_id, bool > -ref_typekeyword< unique_id, true > -ref_typekeyword< unique_id, false > -nilkeyword< UnknownId, false > -boolkeyword< unique_id, false > -boolkeyword< UnknownId, false > -voidkeyword< unique_id, false > -voidkeyword< UnknownId, false > -voidVisitor & -named_parameter_combine< NP, named_parameter< bool, unique_id, bool > >NP const & - - -named_parameter< char, struct no_params_type_t, char > -enable_if_c<!has_param< Params, Keyword >::value, void >::typeT &Params const &Keyword -enable_if_c< has_param< Params, Keyword >::value, void >::typeT &Params const &Keyword -TParams const &KeywordT -enable_if_c<!has_param< Params, keyword< typename NP::id > >::value, named_parameter_combine< NP, Params > >::typeParams const &NP const & -enable_if_c< has_param< Params, keyword< typename NP::id > >::value, Params >::typeParams const &NP const & - - -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/thread/doc/index.html boost1.81-1.81.0/libs/thread/doc/index.html --- boost1.81-1.81.0/libs/thread/doc/index.html 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/thread/doc/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ - - - - - - -Automatic redirection failed, please go to ../../../doc/html/thread.html - - diff -Nru boost1.81-1.81.0/libs/thread/test/Carbon.r boost1.81-1.81.0/libs/thread/test/Carbon.r --- boost1.81-1.81.0/libs/thread/test/Carbon.r 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/thread/test/Carbon.r 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -/* - * Permit this Carbon application to launch on OS X - * - * © 1997-2000 Metrowerks Corp. - * - * Questions and comments to: - * - * - */ - - -/*----------------------------carb ¥ Carbon on OS X launch information --------------------------*/ -type 'carb' { -}; - - -resource 'carb'(0) { -}; Binary files /tmp/tmpzfu_vq2x/ZPFe8lHBKa/boost1.81-1.81.0/libs/thread/test/test.mcp and /tmp/tmpzfu_vq2x/e3lUZwKxKD/boost1.81-1.81.0/libs/thread/test/test.mcp differ diff -Nru boost1.81-1.81.0/libs/tti/doc/tti_reference.xml boost1.81-1.81.0/libs/tti/doc/tti_reference.xml --- boost1.81-1.81.0/libs/tti/doc/tti_reference.xml 2023-08-04 06:01:46.000000000 +0000 +++ boost1.81-1.81.0/libs/tti/doc/tti_reference.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,1074 +0,0 @@ - -Reference
-Generates the macro metafunction name for BOOST_TTI_HAS_CLASS. name = the name of the class/struct.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_DATA. name = the name of the data.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_ENUM. name = the name of the enumeration.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_FUNCTION. name = the name of the function.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_FUNCTION_TEMPLATE. name = the name of the function template.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_MEMBER_DATA. name = the name of the member data.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_MEMBER_FUNCTION. name = the name of the member function.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_MEMBER_FUNCTION_TEMPLATE. name = the name of the member function template.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_STATIC_MEMBER_DATA. name = the name of the static member data.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION. name = the name of the static member function.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE. name = the name of the static member function template.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_TEMPLATE. name = the name of the class template.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_TYPE. name = the name of the type.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_HAS_UNION. name = the name of the union.returns = the generated macro metafunction name. -
-
-Generates the macro metafunction name for BOOST_TTI_MEMBER_TYPE. name = the name of the inner type.returns = the generated macro metafunction name. -
-
-Generates the name of the Boost TTI namespace. returns = the generated name of the Boost TTI namespace. -
-
-A macro which expands to a metafunction which tests whether an inner class/struct with a particular name exists. BOOST_TTI_TRAIT_HAS_CLASS is a macro which expands to a metafunction. The metafunction tests whether an inner class/struct with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner class/struct is true or not. The macro takes the form of BOOST_TTI_TRAIT_HAS_CLASS(trait,name) wheretrait = the name of the metafunction - name = the name of the inner class/struct.BOOST_TTI_TRAIT_HAS_CLASS generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type. - If specified it is an MPL lambda expression which is invoked - with the inner class/struct found and must return a constant boolean - value. - - returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified. - - If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' class/struct - exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false. - - If BOOST_TTI_TP_U is specified , then 'value' is true if the 'name' class/struct exists - within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified - by BOOST_TTI_TP_U, invoked by passing the actual inner class/struct of 'name', returns - a 'value' of true; otherwise 'value' is false. - - The action taken with BOOST_TTI_TP_U occurs only when the 'name' class/struct exists - within the enclosing type BOOST_TTI_TP_T. -Example usage:BOOST_TTI_TRAIT_HAS_CLASS(LookFor,MyType) generates the metafunction "LookFor" in the current scope -to look for an inner class/struct called MyType. - -LookFor<EnclosingType>::value is true if MyType is an inner class/struct of EnclosingType, otherwise false. - -LookFor<EnclosingType,ALambdaExpression>::value is true if MyType is an inner class/struct of EnclosingType - and invoking ALambdaExpression with the inner class/struct returns a value of true, otherwise false. - -A popular use of the optional MPL lambda expression is to check whether the class/struct found is the same -as another type, when the class/struct found is a typedef. In that case our example would be: - -LookFor<EnclosingType,boost::is_same<_,SomeOtherType> >::value is true if MyType is an inner class/struct - of EnclosingType and is the same type as SomeOtherType. - -A macro which expands to a metafunction which tests whether an inner class/struct with a particular name exists. BOOST_TTI_HAS_CLASS is a macro which expands to a metafunction. The metafunction tests whether an inner class/struct with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner class/struct is true or not. The macro takes the form of BOOST_TTI_HAS_CLASS(name) wherename = the name of the inner class/struct.BOOST_TTI_HAS_CLASS generates a metafunction called "has_class_'name'" where 'name' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> -struct has_class_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type. - If specified it is an MPL lambda expression which is invoked - with the inner class/struct found and must return a constant boolean - value. - - returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified. - - If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' class/struct - exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false. - - If BOOST_TTI_TP_U is specified, then 'value' is true if the 'name' class/struct exists - within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified - by BOOST_TTI_TP_U, invoked by passing the actual inner class/struct of 'name', returns - a 'value' of true; otherwise 'value' is false. - - The action taken with BOOST_TTI_TP_U occurs only when the 'name' class/struct exists - within the enclosing type BOOST_TTI_TP_T. -Example usage:BOOST_TTI_HAS_CLASS(MyType) generates the metafunction "has_class_MyType" in the current scope -to look for an inner class/struct called MyType. - -has_class_MyType<EnclosingType>::value is true if MyType is an inner class/struct of EnclosingType, otherwise false. - -has_class_MyType<EnclosingType,ALambdaExpression>::value is true if MyType is an inner class/struct of EnclosingType - and invoking ALambdaExpression with the inner class/struct returns a value of true, otherwise false. - -A popular use of the optional MPL lambda expression is to check whether the class/struct found is the same -as another type, when the class/struct found is a typedef. In that case our example would be: - -has_class_MyType<EnclosingType,boost::is_same<_,SomeOtherType> >::value is true if MyType is an inner class/struct - of EnclosingType and is the same type as SomeOtherType. - -
-
-A macro which expands to a metafunction which tests whether member data or static member data with a particular name and type exists. BOOST_TTI_TRAIT_HAS_DATA is a macro which expands to a metafunction. The metafunction tests whether member data or static member data with a particular name and type exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_DATA(trait,name) wheretrait = the name of the metafunction - name = the name of the inner data.BOOST_TTI_TRAIT_HAS_DATA generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name' - The enclosing type can be a class, struct, or union. - If the type is a union, static member data can only - be found if the C++11 unrestricted union is implemented - by the compiler being used, since prior to C++11 a union - could not have static data members. - - BOOST_TTI_TP_TYPE = The type of the member data or static member. - - returns = 'value' is true if the 'name' exists, with the correct data type, - otherwise 'value' is false. - -A macro which expands to a metafunction which tests whether member data or static member data with a particular name and type exists. BOOST_TTI_HAS_DATA is a macro which expands to a metafunction. The metafunction tests whether member data or static member data with a particular name and type exists. The macro takes the form of BOOST_TTI_HAS_DATA(name) wherename = the name of the inner data.BOOST_TTI_HAS_DATA generates a metafunction called "has_data_name" where 'name' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> -struct has_data_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name' - The enclosing type can be a class, struct, or union. - If the type is a union, static member data can only - be found if the C++11 unrestricted union is implemented - by the compiler being used, since prior to C++11 a union - could not have static data members. - - BOOST_TTI_TP_TYPE = The type of the member data or static member. - - returns = 'value' is true if the 'name' exists, with the correct data type, - otherwise 'value' is false. - -
-
-A macro which expands to a metafunction which tests whether an inner enum with a particular name exists. BOOST_TTI_TRAIT_HAS_ENUM is a macro which expands to a metafunction. The metafunction tests whether an inner enum with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner enum is true or not. The macro takes the form of BOOST_TTI_TRAIT_HAS_ENUM(trait,name) wheretrait = the name of the metafunction - name = the name of the inner enum. The name can be that of an enum or, in C++11 on up, an enum class.BOOST_TTI_TRAIT_HAS_ENUM generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type. - If specified it is an MPL lambda expression which is invoked - with the inner enum found and must return a constant boolean - value. - - returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified. - - If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' enum - exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false. - - If BOOST_TTI_TP_U is specified , then 'value' is true if the 'name' enum exists - within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified - by BOOST_TTI_TP_U, invoked by passing the actual inner enum of 'name', returns - a 'value' of true; otherwise 'value' is false. - - The action taken with BOOST_TTI_TP_U occurs only when the 'name' enum exists - within the enclosing type BOOST_TTI_TP_T. -Example usage:BOOST_TTI_TRAIT_HAS_ENUM(LookFor,MyType) generates the metafunction LookFor in the current scope -to look for an inner enum called MyType. - -LookFor<EnclosingType>::value is true if MyType is an inner enum of EnclosingType, otherwise false. - -LookFor<EnclosingType,ALambdaExpression>::value is true if MyType is an inner enum of EnclosingType - and invoking ALambdaExpression with the inner enum returns a value of true, otherwise false. - -A popular use of the optional MPL lambda expression is to check whether the enum found is the same -as another type, when the enum found is a typedef. In that case our example would be: - -LookFor<EnclosingType,boost::is_same<_,SomeOtherType> >::value is true if MyType is an inner enum - of EnclosingType and is the same type as SomeOtherType. - -A macro which expands to a metafunction which tests whether an inner enum with a particular name exists. BOOST_TTI_HAS_ENUM is a macro which expands to a metafunction. The metafunction tests whether an inner enum with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner enum is true or not. The macro takes the form of BOOST_TTI_HAS_ENUM(name) wherename = the name of the inner enum. The name can be that of an enum or, in C++11 on up, an enum class.BOOST_TTI_HAS_ENUM generates a metafunction called "has_enum_'name'" where 'name' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> -struct has_enum_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type. - If specified it is an MPL lambda expression which is invoked - with the inner enum found and must return a constant boolean - value. - - returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified. - - If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' enum - exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false. - - If BOOST_TTI_TP_U is specified, then 'value' is true if the 'name' enum exists - within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified - by BOOST_TTI_TP_U, invoked by passing the actual inner enum of 'name', returns - a 'value' of true; otherwise 'value' is false. - - The action taken with BOOST_TTI_TP_U occurs only when the 'name' enum exists - within the enclosing type BOOST_TTI_TP_T. -Example usage:BOOST_TTI_HAS_ENUM(MyType) generates the metafunction has_enum_MyType in the current scope -to look for an inner enum called MyType. - -has_enum_MyType<EnclosingType>::value is true if MyType is an inner enum of EnclosingType, otherwise false. - -has_class_MyType<EnclosingType,ALambdaExpression>::value is true if MyType is an inner enum of EnclosingType - and invoking ALambdaExpression with the inner enum returns a value of true, otherwise false. - -A popular use of the optional MPL lambda expression is to check whether the enum found is the same -as another type, when the enum found is a typedef. In that case our example would be: - -has_enum_MyType<EnclosingType,boost::is_same<_,SomeOtherType> >::value is true if MyType is an inner enum - of EnclosingType and is the same type as SomeOtherType. - -
-
-A macro which expands to a metafunction which tests whether a member function or a static member function with a particular name and signature exists. BOOST_TTI_TRAIT_HAS_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a member function or a static member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_FUNCTION(trait,name) wheretrait = the name of the metafunction - name = the name of the inner member.BOOST_TTI_TRAIT_HAS_FUNCTION generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_R = the return type of the function - - BOOST_TTI_TP_FS = (optional) the parameters of the function as a boost::mpl forward sequence - if function parameters are not empty. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the function - if the need for a tag exists. - - returns = 'value' is true if the 'name' exists, - with the appropriate static member function type, - otherwise 'value' is false. - -A macro which expands to a metafunction which tests whether a member function or a static member function with a particular name and signature exists. BOOST_TTI_HAS_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a member function or a static member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_HAS_FUNCTION(name) wherename = the name of the inner member.BOOST_TTI_HAS_FUNCTION generates a metafunction called "has_function_name" where 'name' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG> -struct has_function_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_R = the return type of the function - - BOOST_TTI_TP_FS = (optional) the parameters of the function as a boost::mpl forward sequence - if function parameters are not empty. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the function - if the need for a tag exists. - - returns = 'value' is true if the 'name' exists, - with the appropriate function type, - otherwise 'value' is false. - -
-
-A macro which expands to a metafunction which tests whether an inner member function template or static member function template with a particular name exists. BOOST_TTI_TRAIT_HAS_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner member function template or static member function template with a particular name exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_FUNCTION_TEMPLATE(trait,name,...) wheretrait = the name of the metafunction - name = inner member function template or static member function template name - ... = variadic parameters.The variadic parameter(s) are either:A sequence of valid instantiations for the static member function template parameters ie. 'int,long,double' etc.orA single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the static member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.BOOST_TTI_TRAIT_HAS_FUNCTION_TEMPLATE generates a metafunction called "trait" where 'trait' is the first macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_R = the return type of the function template - in a single instantiation of the function template - - BOOST_TTI_TP_FS = (optional) the parameters of the function template as a boost::mpl forward sequence - if the function template parameters are not empty. These parameters are a single - instantiation of the function template. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the function template - if a tag is needed. - - returns = 'value' is true if the 'name' exists, - with the appropriate member function template or static member function template type, - otherwise 'value' is false. - -A macro which expands to a metafunction which tests whether an inner member function template or static member function template with a particular name exists. BOOST_TTI__HAS_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner member function template or static member function template with a particular name exists. The macro takes the form of BOOST_TTI_HAS_FUNCTION_TEMPLATE(name,...) wherename = inner member function template or static member function template name - ... = variadic parameters.The variadic parameter(s) are either:A sequence of valid instantiations for the static member function template parameters ie. 'int,long,double' etc.orA single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the static member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.BOOST_TTI_HAS_FUNCTION_TEMPLATE generates a metafunction called "has_function_template_'name'" where 'name' is the first macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> -struct has_function_template_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_R = the return type of the function template - in a single instantiation of the function template - - BOOST_TTI_TP_FS = (optional) the parameters of the function template as a boost::mpl forward sequence - if the function template parameters are not empty. These parameters are a single - instantiation of the function template. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the function template - if a tag is needed. - - returns = 'value' is true if the 'name' exists, - with the appropriate member function template or static member function template type, - otherwise 'value' is false. - -
-
-A macro which expands to a metafunction which tests whether member data with a particular name and type exists. BOOST_TTI_TRAIT_HAS_MEMBER_DATA is a macro which expands to a metafunction. The metafunction tests whether member data with a particular name and type exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_MEMBER_DATA(trait,name) wheretrait = the name of the metafunction. - name = the name of the inner member data.BOOST_TTI_TRAIT_HAS_MEMBER_DATA generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_ET,class BOOST_TTI_TP_TYPE> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_ET = the enclosing type in which to look for our 'name' - The enclosing type can be a class, struct, or union. - OR - The type of the member data in the form of a pointer - to member data. - - BOOST_TTI_TP_TYPE = (optional) The type of the member data if the first - parameter is the enclosing type. - - returns = 'value' is true if the 'name' exists, with the correct data type, - otherwise 'value' is false. - -A macro which expands to a metafunction which tests whether a member data with a particular name and type exists. BOOST_TTI_HAS_MEMBER_DATA is a macro which expands to a metafunction. The metafunction tests whether member data with a particular name and type exists. The macro takes the form of BOOST_TTI_HAS_MEMBER_DATA(name) wherename = the name of the inner member.BOOST_TTI_HAS_MEMBER_DATA generates a metafunction called "has_member_data_name" where 'name' is the macro parameter.template<class BOOST_TTI_TP_ET,class BOOST_TTI_TP_TYPE> -struct has_member_data_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_ET = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - OR - The type of the member data in the form of a pointer - to member data. - - BOOST_TTI_TP_TYPE = (optional) The type of the member data if the first - parameter is the enclosing type. - - returns = 'value' is true if the 'name' exists, with the correct data type, - otherwise 'value' is false. - -
-
-A macro which expands to a metafunction which tests whether a member function with a particular name and signature exists. BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION(trait,name) wheretrait = the name of the metafunction - name = the name of the inner member.BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - OR - a pointer to member function as a single type. - - BOOST_TTI_TP_R = (optional) the return type of the member function - if the first parameter is the enclosing type. - - BOOST_TTI_TP_FS = (optional) the parameters of the member function as a boost::mpl forward sequence - if the first parameter is the enclosing type and the member function parameters - are not empty. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the member function - if the first parameter is the enclosing type and a tag is needed. - - returns = 'value' is true if the 'name' exists, - with the appropriate member function type, - otherwise 'value' is false. - -A macro which expands to a metafunction which tests whether a member function with a particular name and signature exists. BOOST_TTI_HAS_MEMBER_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_HAS_MEMBER_FUNCTION(name) wherename = the name of the inner member.BOOST_TTI_HAS_MEMBER_FUNCTION generates a metafunction called "has_member_function_name" where 'name' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG> -struct has_member_function_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - OR - a pointer to member function as a single type. - - BOOST_TTI_TP_R = (optional) the return type of the member function - if the first parameter is the enclosing type. - - BOOST_TTI_TP_FS = (optional) the parameters of the member function as a boost::mpl forward sequence - if the first parameter is the enclosing type and the member function parameters - are not empty. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the member function - if the first parameter is the enclosing type and a tag is needed. - - returns = 'value' is true if the 'name' exists, - with the appropriate member function type, - otherwise 'value' is false. - -
-
-A macro which expands to a metafunction which tests whether an inner member function template with a particular name exists. BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner member function template with a particular name exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION_TEMPLATE(trait,name,...) wheretrait = the name of the metafunction - name = inner member function template name - ... = variadic parameters.The variadic parameter(s) are either:A sequence of valid instantiations for the member function template parameters ie. 'int,long,double' etc.orA single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.BOOST_TTI_TRAIT_HAS_MEMBER_FUNCTION_TEMPLATE generates a metafunction called "trait" where 'trait' is the first macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - OR - a pointer to member function as a single type - which encapsulates a single instantiation of - the member function template. - - BOOST_TTI_TP_R = (optional) the return type of the member function template - in a single instantiation of the member function template - if the first parameter is the enclosing type. - - BOOST_TTI_TP_FS = (optional) the parameters of the member function template as a boost::mpl forward sequence - if the first parameter is the enclosing type and the member function template parameters - are not empty. These parameters are a single instantiation of the member function template. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the member function template - if the first parameter is the enclosing type and a tag is needed. - - returns = 'value' is true if the 'name' exists, - with the appropriate member function template type, - otherwise 'value' is false. - -A macro which expands to a metafunction which tests whether an inner member function template with a particular name exists. BOOST_TTI_HAS_MEMBER_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner member function template with a particular name exists. The macro takes the form of BOOST_TTI_HAS_MEMBER_FUNCTION_TEMPLATE(name,...) wherename = inner member function template name - ... = variadic parameters.The variadic parameter(s) are either:A sequence of valid instantiations for the member function template parameters ie. 'int,long,double' etc.orA single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.BOOST_TTI_HAS_MEMBER_FUNCTION_TEMPLATE generates a metafunction called "has_member_function_template_'name'" where 'name' is the first macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> -struct has_member_function_template_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - OR - a pointer to member function as a single type - which encapsulates a single instantiation of - the member function template. - - BOOST_TTI_TP_R = (optional) the return type of the member function template - in a single instantiation of the member function template - if the first parameter is the enclosing type. - - BOOST_TTI_TP_FS = (optional) the parameters of the member function template as a boost::mpl forward sequence - if the first parameter is the enclosing type and the member function template parameters - are not empty. These parameters are a single instantiation of the member function template. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the member function template - if the first parameter is the enclosing type and a tag is needed. - - returns = 'value' is true if the 'name' exists, - with the appropriate member function template type, - otherwise 'value' is false. - -
-
-A macro which expands to a metafunction which tests whether a static member data with a particular name and type exists. BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA is a macro which expands to a metafunction. The metafunction tests whether static member data with a particular name and type exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) wheretrait = the name of the metafunction - name = the name of the inner member.BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type. - The enclosing type can be a class, struct, or union. - If the type is a union, static member data can only - be found if the C++11 unrestricted union is implemented - by the compiler being used, since prior to C++11 a union - could not have static data members. - - BOOST_TTI_TP_TYPE = the type of the static member data. - - returns = 'value' is true if the 'name' exists, - with the BOOST_TTI_TP_TYPE type, - within the enclosing BOOST_TTI_TP_T type, - otherwise 'value' is false. - -A macro which expands to a metafunction which tests whether a static member data with a particular name and type exists. BOOST_TTI_HAS_STATIC_MEMBER_DATA is a macro which expands to a metafunction. The metafunction tests whether static member data with a particular name and type exists. The macro takes the form of BOOST_TTI_HAS_STATIC_MEMBER_DATA(name) wherename = the name of the inner member.BOOST_TTI_HAS_STATIC_MEMBER_DATA generates a metafunction called "has_static_member_data_name" where 'name' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> -struct has_static_member_data_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type. - The enclosing type can be a class, struct, or union. - If the type is a union, static member data can only - be found if the C++11 unrestricted union is implemented - by the compiler being used, since prior to C++11 a union - could not have static data members. - - BOOST_TTI_TP_TYPE = the type of the static member data. - - returns = 'value' is true if the 'name' exists, - with the appropriate BOOST_TTI_TP_TYPE type, - within the enclosing BOOST_TTI_TP_T type, - otherwise 'value' is false. - -
-
-A macro which expands to a metafunction which tests whether a static member function with a particular name and signature exists. BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a static member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION(trait,name) wheretrait = the name of the metafunction - name = the name of the inner member.BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_R = the return type of the static member function - OR - the signature of a function in the form of Return_Type ( Parameter_Types ) - - BOOST_TTI_TP_FS = (optional) the parameters of the static member function as a boost::mpl forward sequence - if the second parameter is a return type and the function parameters exist. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the static member function - if the second parameter is a return type and the need for a tag exists. - - returns = 'value' is true if the 'name' exists, - with the appropriate static member function type, - otherwise 'value' is false. - -A macro which expands to a metafunction which tests whether a static member function with a particular name and signature exists. BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION is a macro which expands to a metafunction. The metafunction tests whether a static member function with a particular name and signature exists. The macro takes the form of BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION(name) wherename = the name of the inner member.BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION generates a metafunction called "has_static_member_function_name" where 'name' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_R,class BOOST_TTI_TP_FS,class BOOST_TTI_TP_TAG> -struct has_static_member_function_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_R = the return type of the static member function - OR - the signature of a function in the form of Return_Type ( Parameter_Types ) - - BOOST_TTI_TP_FS = (optional) the parameters of the static member function as a boost::mpl forward sequence - if the second parameter is a return type and the function parameters exist. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the static member function - if the second parameter is a return type and the need for a tag exists. - - returns = 'value' is true if the 'name' exists, - with the appropriate static member function type, - otherwise 'value' is false. - -
-
-A macro which expands to a metafunction which tests whether an inner static member function template with a particular name exists. BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner static member function template with a particular name exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE(trait,name,...) wheretrait = the name of the metafunction - name = inner static member function template name - ... = variadic parameters.The variadic parameter(s) are either:A sequence of valid instantiations for the static member function template parameters ie. 'int,long,double' etc.orA single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the static member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE generates a metafunction called "trait" where 'trait' is the first macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_R = the return type of the static member function template - in a single instantiation of the static member function template - OR - a pointer to function as a single type - which encapsulates a single instantiation of - the static member function template. - - BOOST_TTI_TP_FS = (optional) the parameters of the static member function template as a boost::mpl forward sequence - if the second parameter is the enclosing type and the static member function template parameters - are not empty. These parameters are a single instantiation of the static member function template. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the static member function template - if the second parameter is the enclosing type and a tag is needed. - - returns = 'value' is true if the 'name' exists, - with the appropriate static member function template type, - otherwise 'value' is false. - -A macro which expands to a metafunction which tests whether an inner static member function template with a particular name exists. BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner static member function template with a particular name exists. The macro takes the form of BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE(name,...) wherename = inner static member function template name - ... = variadic parameters.The variadic parameter(s) are either:A sequence of valid instantiations for the static member function template parameters ie. 'int,long,double' etc.orA single variadic parameter which is a Boost PP array whose elements are a sequence of valid instantiations for the static member function template parameters ie. '(3,(int,long,double))' etc. This form is allowed in order to be compatible with using the non-variadic form of this macro.BOOST_TTI_HAS_STATIC_MEMBER_FUNCTION_TEMPLATE generates a metafunction called "has_static_member_function_template_'name'" where 'name' is the first macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_R,class BOOST_TTI_FS,class BOOST_TTI_TAG> -struct has_static_member_function_template_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_R = the return type of the static member function template - in a single instantiation of the static member function template - OR - a pointer to function as a single type - which encapsulates a single instantiation of - the static member function template. - - BOOST_TTI_TP_FS = (optional) the parameters of the static member function template as a boost::mpl forward sequence - if the second parameter is the enclosing type and the static member function template parameters - are not empty. These parameters are a single instantiation of the static member function template. - - BOOST_TTI_TP_TAG = (optional) a boost::function_types tag to apply to the static member function template - if the second parameter is the enclosing type and a tag is needed. - - returns = 'value' is true if the 'name' exists, - with the appropriate static member function template type, - otherwise 'value' is false. - -
-
-A macro which expands to a metafunction which tests whether an inner class template with a particular name exists. BOOST_TTI_TRAIT_HAS_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner class template with a particular name exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_TEMPLATE(trait,...) wheretrait = the name of the metafunction - ... = variadic parameters.The first variadic parameter is the inner class template name.Following variadic parameters are optional.If no following variadic parameters exist, then the inner class template being introspected must be all template type parameters ( template parameters starting with class or typename ) and any number of template type parameters can occur.If the second variadic parameter is BOOST_PP_NIL and no other variadic parameter is given, then just as in the previous case the inner class template being introspected must be all template type parameters ( template parameters starting with class or typename ) and any number of template type parameters can occur. This form is allowed in order to be consistent with using the non-variadic form of this macro.If the second variadic parameter is a Boost preprocessor library array and no other variadic parameter is given, then the inner class template must have its template parameters matching the sequence in the tuple portion of the Boost PP array. This form is allowed in order to be consistent with using the non-variadic form of this macro.Otherwise the inner class template must have its template parameters matching the sequence of the optional variadic parameters.BOOST_TTI_TRAIT_HAS_TEMPLATE generates a metafunction called "trait" where 'trait' is the first macro parameter.template<class BOOST_TTI_TP_T> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - returns = 'value' is true if the 'name' template exists within the enclosing type, - otherwise 'value' is false. -Examples:1) Search for an inner class template called 'MyTemplate', with all template type parameters, - nested within the class 'MyClass' using a metafunction name of 'MyMeta'. - - BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate) - - or - - BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,BOOST_PP_NIL) // Non-variadic macro form - - MyMeta<MyClass>::value - - is a compile time boolean constant which is either 'true' or 'false' - if the nested template exists. - -2) Search for an inner class template called 'MyTemplate', with template parameters - of 'class T,int x,template<class> class U', nested within the class 'MyClass' - using a metafunction name of 'MyMeta'. - - BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,class,int,template<class> class) - - or - - BOOST_TTI_TRAIT_HAS_TEMPLATE(MyMeta,MyTemplate,(3,(class,int,template<class> class))) // Non-variadic macro form - - MyMeta<MyClass>::value - - is a compile time boolean constant which is either 'true' or 'false' - if the nested template exists. - -A macro which expands to a metafunction which tests whether an inner class template with a particular name exists. BOOST_TTI_HAS_TEMPLATE is a macro which expands to a metafunction. The metafunction tests whether an inner class template with a particular name exists. The macro takes the form of BOOST_TTI_HAS_TEMPLATE(...) where... = variadic parameters.The first variadic parameter is the inner class template name.Following variadic parameters are optional.If no following variadic parameters exist, then the inner class template being introspected must be all template type parameters ( template parameters starting with class or typename ) and any number of template type parameters can occur.If the second variadic parameter is BOOST_PP_NIL and no other variadic parameter is given, then just as in the previous case the inner class template being introspected must be all template type parameters ( template parameters starting with class or typename ) and any number of template type parameters can occur. This form is allowed in order to be consistent with using the non-variadic form of this macro.If the second variadic parameter is a Boost preprocessor library array and no other variadic parameter is given, then the inner class template must have its template parameters matching the sequence in the tuple portion of the Boost PP array. This form is allowed in order to be consistent with using the non-variadic form of this macro.Otherwise the inner class template must have its template parameters matching the sequence of the optional variadic parameters.BOOST_TTI_HAS_TEMPLATE generates a metafunction called "has_template_'name'" where 'name' is the first variadic parameter.template<class BOOST_TTI_TP_T> -struct has_template_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - returns = 'value' is true if the 'name' template exists within the enclosing type, - otherwise 'value' is false. -Examples:1) Search for an inner class template called 'MyTemplate', with all template type parameters, - nested within the class 'MyClass'. - - BOOST_TTI_HAS_TEMPLATE(MyTemplate) - - or - - BOOST_TTI_HAS_TEMPLATE(MyTemplate,BOOST_PP_NIL) // Non-variadic macro form - - has_template_MyTemplate<MyClass>::value - - is a compile time boolean constant which is either 'true' or 'false' - if the nested template exists. - -2) Search for an inner class template called 'MyTemplate' with template parameters - of 'class T,int x,template<class> class U' nested within the class 'MyClass'. - - BOOST_TTI_HAS_TEMPLATE(MyTemplate,class,int,template<class> class) - - or - - BOOST_TTI_HAS_TEMPLATE(MyTemplate,(3,(class,int,template<class> class))) // Non-variadic macro form - - has_template_MyTemplate<MyClass>::value - - is a compile time boolean constant which is either 'true' or 'false' - if the nested template exists. - -
-
-A macro which expands to a metafunction which tests whether an inner type with a particular name exists. BOOST_TTI_TRAIT_HAS_TYPE is a macro which expands to a metafunction. The metafunction tests whether an inner type with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner type is true or not. The macro takes the form of BOOST_TTI_TRAIT_HAS_TYPE(trait,name) wheretrait = the name of the metafunction - name = the name of the inner type.BOOST_TTI_TRAIT_HAS_TYPE generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type. - If specified it is an MPL lambda expression which is invoked - with the inner type found and must return a constant boolean - value. - - returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified. - - If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' type - exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false. - - If BOOST_TTI_TP_U is specified , then 'value' is true if the 'name' type exists - within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified - by BOOST_TTI_TP_U, invoked by passing the actual inner type of 'name', returns - a 'value' of true; otherwise 'value' is false. - - The action taken with BOOST_TTI_TP_U occurs only when the 'name' type exists - within the enclosing type BOOST_TTI_TP_T. -Example usage:BOOST_TTI_TRAIT_HAS_TYPE(LookFor,MyType) generates the metafunction LookFor in the current scope -to look for an inner type called MyType. - -LookFor<EnclosingType>::value is true if MyType is an inner type of EnclosingType, otherwise false. - -LookFor<EnclosingType,ALambdaExpression>::value is true if MyType is an inner type of EnclosingType - and invoking ALambdaExpression with the inner type returns a value of true, otherwise false. - -A popular use of the optional MPL lambda expression is to check whether the type found is the same -as another type, when the type found is a typedef. In that case our example would be: - -LookFor<EnclosingType,boost::is_same<_,SomeOtherType> >::value is true if MyType is an inner type - of EnclosingType and is the same type as SomeOtherType. - -A macro which expands to a metafunction which tests whether an inner type with a particular name exists. BOOST_TTI_HAS_TYPE is a macro which expands to a metafunction. The metafunction tests whether an inner type with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner type is true or not. The macro takes the form of BOOST_TTI_HAS_TYPE(name) wherename = the name of the inner type.BOOST_TTI_HAS_TYPE generates a metafunction called "has_type_'name'" where 'name' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> -struct has_type_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type. - If specified it is an MPL lambda expression which is invoked - with the inner type found and must return a constant boolean - value. - - returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified. - - If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' type - exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false. - - If BOOST_TTI_TP_U is specified , then 'value' is true if the 'name' type exists - within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified - by BOOST_TTI_TP_U, invoked by passing the actual inner type of 'name', returns - a 'value' of true; otherwise 'value' is false. - - The action taken with BOOST_TTI_TP_U occurs only when the 'name' type exists - within the enclosing type BOOST_TTI_TP_T. -Example usage:BOOST_TTI_HAS_TYPE(MyType) generates the metafunction has_type_MyType in the current scope -to look for an inner type called MyType. - -has_type_MyType<EnclosingType>::value is true if MyType is an inner type of EnclosingType, otherwise false. - -has_type_MyType<EnclosingType,ALambdaExpression>::value is true if MyType is an inner type of EnclosingType - and invoking ALambdaExpression with the inner type returns a value of true, otherwise false. - -A popular use of the optional MPL lambda expression is to check whether the type found is the same -as another type, when the type found is a typedef. In that case our example would be: - -has_type_MyType<EnclosingType,boost::is_same<_,SomeOtherType> >::value is true if MyType is an inner type - of EnclosingType and is the same type as SomeOtherType. - -
-
-A macro which expands to a metafunction which tests whether an inner union with a particular name exists. BOOST_TTI_TRAIT_HAS_UNION is a macro which expands to a metafunction. The metafunction tests whether an inner union with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner union is true or not. The macro takes the form of BOOST_TTI_TRAIT_HAS_UNION(trait,name) wheretrait = the name of the metafunction - name = the name of the inner union.BOOST_TTI_TRAIT_HAS_UNION generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> -struct trait - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type. - If specified it is an MPL lambda expression which is invoked - with the inner union found and must return a constant boolean - value. - - returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified. - - If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' union - exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false. - - If BOOST_TTI_TP_U is specified , then 'value' is true if the 'name' union exists - within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified - by BOOST_TTI_TP_U, invoked by passing the actual inner union of 'name', returns - a 'value' of true; otherwise 'value' is false. - - The action taken with BOOST_TTI_TP_U occurs only when the 'name' union exists - within the enclosing type BOOST_TTI_TP_T. -Example usage:BOOST_TTI_TRAIT_HAS_UNION(LookFor,MyType) generates the metafunction LookFor in the current scope -to look for an inner union called MyType. - -LookFor<EnclosingType>::value is true if MyType is an inner union of EnclosingType, otherwise false. - -LookFor<EnclosingType,ALambdaExpression>::value is true if MyType is an inner union of EnclosingType - and invoking ALambdaExpression with the inner union returns a value of true, otherwise false. - -A popular use of the optional MPL lambda expression is to check whether the union found is the same -as another type, when the union found is a typedef. In that case our example would be: - -LookFor<EnclosingType,boost::is_same<_,SomeOtherType> >::value is true if MyType is an inner union - of EnclosingType and is the same type as SomeOtherType. - -A macro which expands to a metafunction which tests whether an inner union with a particular name exists. BOOST_TTI_HAS_UNION is a macro which expands to a metafunction. The metafunction tests whether an inner union with a particular name exists and, optionally, whether an MPL lambda expression invoked with the inner union is true or not. The macro takes the form of BOOST_TTI_HAS_UNION(name) wherename = the name of the inner union.BOOST_TTI_HAS_UNION generates a metafunction called "has_union_'name'" where 'name' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_U> -struct has_union_'name' - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type in which to look for our 'name'. - - BOOST_TTI_TP_U = (optional) An optional template parameter, defaulting to a marker type. - If specified it is an MPL lambda expression which is invoked - with the inner union found and must return a constant boolean - value. - - returns = 'value' depends on whether or not the optional BOOST_TTI_TP_U is specified. - - If BOOST_TTI_TP_U is not specified, then 'value' is true if the 'name' union - exists within the enclosing type BOOST_TTI_TP_T; otherwise 'value' is false. - - If BOOST_TTI_TP_U is specified, then 'value' is true if the 'name' union exists - within the enclosing type BOOST_TTI_TP_T and the MPL lambda expression as specified - by BOOST_TTI_TP_U, invoked by passing the actual inner union of 'name', returns - a 'value' of true; otherwise 'value' is false. - - The action taken with BOOST_TTI_TP_U occurs only when the 'name' union exists - within the enclosing type BOOST_TTI_TP_T. -Example usage:BOOST_TTI_HAS_UNION(MyType) generates the metafunction has_union_MyType in the current scope -to look for an inner union called MyType. - -has_union_MyType<EnclosingType>::value is true if MyType is an inner union of EnclosingType, otherwise false. - -has_class_MyType<EnclosingType,ALambdaExpression>::value is true if MyType is an inner union of EnclosingType - and invoking ALambdaExpression with the inner union returns a value of true, otherwise false. - -A popular use of the optional MPL lambda expression is to check whether the union found is the same -as another type, when the union found is a typedef. In that case our example would be: - -has_union_MyType<EnclosingType,boost::is_same<_,SomeOtherType> >::value is true if MyType is an inner union - of EnclosingType and is the same type as SomeOtherType. - -
-
- - -boost::mpl::not_< boost::is_same< BOOST_TTI_METAFUNCTION::type, BOOST_TTI_METAFUNCTION::boost_tti_marker_type > >A metafunction which checks whether the invoked macro metafunction generated by BOOST_TTI_MEMBER_TYPE ( BOOST_TTI_TRAIT_MEMBER_TYPE ) hold a valid type. The metafunction 'valid_member_metafunction', which is in the boost::tti namespace, takes the form of:template<class BOOST_TTI_METAFUNCTION> -struct valid_member_metafunction - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_METAFUNCTION = The invoked macro metafunction generated by BOOST_TTI_MEMBER_TYPE ( BOOST_TTI_TRAIT_MEMBER_TYPE ). - - returns = 'value' is true if the nested type of the invoked metafunction is valid, otherwise 'value' is false. - A valid type means that the invoked metafunction's inner 'type' is not the marker type. - boost::mpl::not_< boost::is_same< BOOST_TTI_TP_T, BOOST_TTI_TP_MARKER_TYPE > >A metafunction which checks whether the member 'type' returned from invoking the macro metafunction generated by BOOST_TTI_MEMBER_TYPE ( BOOST_TTI_TRAIT_MEMBER_TYPE ) is a valid type. The metafunction 'valid_member_type', which is in the boost::tti namespace, takes the form of:template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_MARKER_TYPE = boost::tti::detail::notype> -struct valid_member_type - { - static const value = unspecified; - typedef mpl::bool_<true-or-false> type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = returned inner 'type' from invoking the macro metafunction generated by BOOST_TTI_MEMBER_TYPE ( BOOST_TTI_TRAIT_MEMBER_TYPE ). - - BOOST_TTI_TP_MARKER_TYPE = (optional) a type to use as the marker type. - defaults to the internal boost::tti::detail::notype. - - returns = 'value' is true if the type is valid, otherwise 'value' is false. - A valid type means that the returned inner 'type' is not the marker type. - - -A macro expands to a metafunction whose typedef 'type' is either the named type or a marker type. BOOST_TTI_TRAIT_MEMBER_TYPE is a macro which expands to a metafunction. The metafunction tests whether an inner type with a particular name exists by returning the inner type or a marker type. The macro takes the form of BOOST_TTI_TRAIT_MEMBER_TYPE(trait,name) wheretrait = the name of the metafunction - name = the name of the inner type.BOOST_TTI_TRAIT_MEMBER_TYPE generates a metafunction called "trait" where 'trait' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_MARKER_TYPE = boost::tti::detail::notype> -struct trait - { - typedef unspecified type; - typedef BOOST_TTI_TP_MARKER_TYPE boost_tti_marker_type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_MARKER_TYPE = (optional) a type to use as the marker type. - defaults to the internal boost::tti::detail::notype. - - returns = 'type' is the inner type of 'name' if the inner type exists - within the enclosing type, else 'type' is a marker type. - if the end-user does not specify a marker type then - an internal boost::tti::detail::notype marker type, - which is empty, is used. - - The metafunction also encapsulates the type of the marker type as - a nested 'boost_tti_marker_type'. -The purpose of this macro is to encapsulate the 'name' type as the typedef 'type' of a metafunction, but only if it exists within the enclosing type. This allows for an evaluation of inner type existence, without generating a compiler error, which can be used by other metafunctions in this library. -A macro which expands to a metafunction whose typedef 'type' is either the named type or a marker type. BOOST_TTI_MEMBER_TYPE is a macro which expands to a metafunction. The metafunction tests whether an inner type with a particular name exists by returning the inner type or a marker type. The macro takes the form of BOOST_TTI_MEMBER_TYPE(name) wherename = the name of the inner type.BOOST_TTI_MEMBER_TYPE generates a metafunction called "member_type_name" where 'name' is the macro parameter.template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_MARKER_TYPE = boost::tti::detail::notype> -struct member_type_'name' - { - typedef unspecified type; - typedef BOOST_TTI_TP_MARKER_TYPE boost_tti_marker_type; - }; - -The metafunction types and return: - - BOOST_TTI_TP_T = the enclosing type. - The enclosing type can be a class, struct, or union. - - BOOST_TTI_TP_MARKER_TYPE = (optional) a type to use as the marker type. - defaults to the internal boost::tti::detail::notype. - - returns = 'type' is the inner type of 'name' if the inner type exists - within the enclosing type, else 'type' is a marker type. - if the end-user does not specify a marker type then - an internal boost::tti::detail::notype marker type is used. - - The metafunction also encapsulates the type of the marker type as - a nested 'boost_tti_marker_type'. -The purpose of this macro is to encapsulate the 'name' type as the typedef 'type' of a metafunction, but only if it exists within the enclosing type. This allows for an evaluation of inner type existence, without generating a compiler error, which can be used by other metafunctions in this library. -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/type_traits/cxx_type_traits.htm boost1.81-1.81.0/libs/type_traits/cxx_type_traits.htm --- boost1.81-1.81.0/libs/type_traits/cxx_type_traits.htm 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/type_traits/cxx_type_traits.htm 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ - - - - - - -

- Automatic redirection failed, please go to - doc/html/boost_typetraits/background.html.

-

Copyright John Maddock 2006

-

Distributed under the Boost Software License, Version 1.0. (See accompanying file - LICENSE_1_0.txt or copy at www.boost.org/LICENSE_1_0.txt).

- - - - - - - diff -Nru boost1.81-1.81.0/libs/units/doc/base_units.qbk boost1.81-1.81.0/libs/units/doc/base_units.qbk --- boost1.81-1.81.0/libs/units/doc/base_units.qbk 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/units/doc/base_units.qbk 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ -[headerref boost/units/base_units/si/ampere.hpp ampere][br] -[headerref boost/units/base_units/metric/angstrom.hpp angstrom][br] -[headerref boost/units/base_units/angle/arcminute.hpp arcminute][br] -[headerref boost/units/base_units/angle/arcsecond.hpp arcsecond][br] -[headerref boost/units/base_units/metric/are.hpp are][br] -[headerref boost/units/base_units/astronomical/astronomical_unit.hpp astronomical_unit][br] -[headerref boost/units/base_units/metric/atmosphere.hpp atmosphere][br] -[headerref boost/units/base_units/metric/bar.hpp bar][br] -[headerref boost/units/base_units/metric/barn.hpp barn][br] -[headerref boost/units/base_units/cgs/biot.hpp biot][br] -[headerref boost/units/base_units/information/bit.hpp bit][br] -[headerref boost/units/base_units/information/byte.hpp byte][br] -[headerref boost/units/base_units/si/candela.hpp candela][br] -[headerref boost/units/base_units/temperature/celsius.hpp celsius][br] -[headerref boost/units/base_units/cgs/centimeter.hpp centimeter][br] -[headerref boost/units/base_units/us/cup.hpp cup][br] -[headerref boost/units/base_units/metric/day.hpp day][br] -[headerref boost/units/base_units/angle/degree.hpp degree][br] -[headerref boost/units/base_units/imperial/drachm.hpp drachm][br] -[headerref boost/units/base_units/us/dram.hpp dram][br] -[headerref boost/units/base_units/temperature/fahrenheit.hpp fahrenheit][br] -[headerref boost/units/base_units/metric/fermi.hpp fermi][br] -[headerref boost/units/base_units/us/fluid_dram.hpp fluid_dram][br] -[headerref boost/units/base_units/imperial/fluid_ounce.hpp fluid_ounce (imperial)][br] -[headerref boost/units/base_units/us/fluid_ounce.hpp fluid_ounce (us)][br] -[headerref boost/units/base_units/imperial/foot.hpp foot (imperial)][br] -[headerref boost/units/base_units/us/foot.hpp foot (us)][br] -[headerref boost/units/base_units/imperial/furlong.hpp furlong][br] -[headerref boost/units/base_units/imperial/gallon.hpp gallon (imperial)][br] -[headerref boost/units/base_units/us/gallon.hpp gallon (us)][br] -[headerref boost/units/base_units/imperial/gill.hpp gill (imperial)][br] -[headerref boost/units/base_units/us/gill.hpp gill (us)][br] -[headerref boost/units/base_units/angle/gradian.hpp gradian][br] -[headerref boost/units/base_units/imperial/grain.hpp grain (imperial)][br] -[headerref boost/units/base_units/us/grain.hpp grain (us)][br] -[headerref boost/units/base_units/cgs/gram.hpp gram][br] -[headerref boost/units/base_units/information/hartley.hpp hartley][br] -[headerref boost/units/base_units/metric/hectare.hpp hectare][br] -[headerref boost/units/base_units/metric/hour.hpp hour][br] -[headerref boost/units/base_units/imperial/hundredweight.hpp hundredweight (imperial)][br] -[headerref boost/units/base_units/us/hundredweight.hpp hundredweight (us)][br] -[headerref boost/units/base_units/imperial/inch.hpp inch (imperial)][br] -[headerref boost/units/base_units/us/inch.hpp inch (us)][br] -[headerref boost/units/base_units/si/kelvin.hpp kelvin][br] -[headerref boost/units/base_units/si/kilogram.hpp kilogram][br] -[headerref boost/units/base_units/metric/knot.hpp knot][br] -[headerref boost/units/base_units/imperial/league.hpp league][br] -[headerref boost/units/base_units/astronomical/light_day.hpp light_day][br] -[headerref boost/units/base_units/astronomical/light_hour.hpp light_hour][br] -[headerref boost/units/base_units/astronomical/light_minute.hpp light_minute][br] -[headerref boost/units/base_units/astronomical/light_second.hpp light_second][br] -[headerref boost/units/base_units/astronomical/light_year.hpp light_year][br] -[headerref boost/units/base_units/metric/liter.hpp liter][br] -[headerref boost/units/base_units/si/meter.hpp meter][br] -[headerref boost/units/base_units/metric/micron.hpp micron][br] -[headerref boost/units/base_units/us/mil.hpp mil][br] -[headerref boost/units/base_units/imperial/mile.hpp mile (imperial)][br] -[headerref boost/units/base_units/us/mile.hpp mile (us)][br] -[headerref boost/units/base_units/us/minim.hpp minim][br] -[headerref boost/units/base_units/metric/minute.hpp minute][br] -[headerref boost/units/base_units/metric/mmHg.hpp mmHg][br] -[headerref boost/units/base_units/si/mole.hpp mole][br] -[headerref boost/units/base_units/information/nat.hpp nat][br] -[headerref boost/units/base_units/metric/nautical_mile.hpp nautical_mile][br] -[headerref boost/units/base_units/imperial/ounce.hpp ounce (imperial)][br] -[headerref boost/units/base_units/us/ounce.hpp ounce (us)][br] -[headerref boost/units/base_units/astronomical/parsec.hpp parsec][br] -[headerref boost/units/base_units/imperial/pint.hpp pint (imperial)][br] -[headerref boost/units/base_units/us/pint.hpp pint (us)][br] -[headerref boost/units/base_units/imperial/pound.hpp pound (imperial)][br] -[headerref boost/units/base_units/us/pound.hpp pound (us)][br] -[headerref boost/units/base_units/us/pound_force.hpp pound_force][br] -[headerref boost/units/base_units/imperial/quart.hpp quart (imperial)][br] -[headerref boost/units/base_units/us/quart.hpp quart (us)][br] -[headerref boost/units/base_units/imperial/quarter.hpp quarter][br] -[headerref boost/units/base_units/angle/radian.hpp radian][br] -[headerref boost/units/base_units/angle/revolution.hpp revolution][br] -[headerref boost/units/base_units/si/second.hpp second][br] -[headerref boost/units/base_units/information/shannon.hpp shannon][br] -[headerref boost/units/base_units/angle/steradian.hpp steradian][br] -[headerref boost/units/base_units/imperial/stone.hpp stone][br] -[headerref boost/units/base_units/us/tablespoon.hpp tablespoon][br] -[headerref boost/units/base_units/us/teaspoon.hpp teaspoon][br] -[headerref boost/units/base_units/imperial/thou.hpp thou][br] -[headerref boost/units/base_units/imperial/ton.hpp ton (imperial)][br] -[headerref boost/units/base_units/metric/ton.hpp ton (metric)][br] -[headerref boost/units/base_units/us/ton.hpp ton (us)][br] -[headerref boost/units/base_units/metric/torr.hpp torr][br] -[headerref boost/units/base_units/imperial/yard.hpp yard (imperial)][br] -[headerref boost/units/base_units/us/yard.hpp yard (us)][br] -[headerref boost/units/base_units/metric/year.hpp year][br] \ No newline at end of file diff -Nru boost1.81-1.81.0/libs/units/doc/units.qbk boost1.81-1.81.0/libs/units/doc/units.qbk --- boost1.81-1.81.0/libs/units/doc/units.qbk 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/units/doc/units.qbk 2022-12-24 13:24:16.533604100 +0000 @@ -1309,6 +1309,7 @@ __boostroot +Last edit to Quickbook file __FILENAME__ was at __TIME__ on __DATE__. [tip This should appear on the pdf version (but may be redundant on html).] [/ Useful on pdf version. See also Last revised timestamp on first page of html version.] diff -Nru boost1.81-1.81.0/libs/utility/identity_type/doc/html/index.html boost1.81-1.81.0/libs/utility/identity_type/doc/html/index.html --- boost1.81-1.81.0/libs/utility/identity_type/doc/html/index.html 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/utility/identity_type/doc/html/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,252 +0,0 @@ -Boost.Utility/IdentityType 1.0.0

Boost.Utility/IdentityType 1.0.0

Lorenzo Caminiti

- Distributed under the Boost Software License, Version 1.0 (see accompanying - file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt) -

- This library allows to wrap types within round parenthesis so they can always - be passed as macro parameters. -

- Consider the following macro which declares a variable named varn - with the specified type (see also - var_error.cpp): -

-

#define VAR(type, n) type var ## n
-
-VAR(int, 1);                    // OK.
-VAR(std::map<int, char>, 2);    // Error.
-

-

- The first macro invocation works correctly declaring a variable named var1 of type int. - However, the second macro invocation fails generating a preprocessor error - similar to the following: -

error: macro "VAR" passed 3 arguments, but takes just 2
-

- That is because the std::map type passed as the first macro parameter - contains a comma , not wrapped - by round parenthesis (). The preprocessor - interprets that unwrapped comma as a separation between macro parameters concluding - that a total of three (and not two) parameters are passed to the macro in the - following order: -

  1. - std::map<int -
  2. - char> -
  3. - 2 -

- Note that, differently from the compiler, the preprocessor only recognizes - round parenthesis (). Angular - <> and squared [] parenthesis are not recognized by the preprocessor - when parsing macro parameters. -

- In some cases, it might be possible to workaround this issue by avoiding to - pass the type expression to the macro all together. For example, in the case - above a typedef could have been - used to specify the type expression with the commas outside the macro (see - also var.cpp): -

-

typedef std::map<int, char> map_type;
-VAR(map_type, 3); // OK.
-

-

- When this is neither possible nor desired (e.g., see the function template - f in the section below), this - library header boost/utility/identity_type.hpp - defines a macro BOOST_IDENTITY_TYPE - which can be used to workaround the issue while keeping the type expression - as one of the macro parameters (see also var.cpp). -

-

#include <boost/utility/identity_type.hpp>
-
-VAR(BOOST_IDENTITY_TYPE((std::map<int, char>)), 4); // OK.
-

-

- The BOOST_IDENTITY_TYPE macro - expands to an expression that evaluates (at compile-time) to the specified - type. The specified type is never split into multiple macro parameters because - it is always wrapped by a set of extra round parenthesis (). - In fact, a total of two sets of round parenthesis must be used: The parenthesis - to invoke the macro BOOST_IDENTITY_TYPE(...) plus the inner parenthesis to wrap the - type passed to the macro BOOST_IDENTITY_TYPE((...)). -

- This macro works on any C++03 - compiler (and it does not use variadic - macros). [1] The authors originally developed and tested this library using - GNU Compiler Collection (GCC) C++ 4.5.3 (with and without C++11 features enabled - -std=c++0x) on Cygwin - and Miscrosoft Visual C++ (MSVC) 8.0 on Windows 7. See the library regressions - test results for more information on supported compilers and platforms. -

- This macro must be prefixed by typename - when used within templates. For example, let's program a macro that declares - a function parameter named argn - with the specified type (see also - template.cpp): -

-

#define ARG(type, n) type arg ## n
-
-template<typename T>
-void f( // Prefix macro with `typename` in templates.
-    ARG(typename BOOST_IDENTITY_TYPE((std::map<int, T>)), 1)
-) {
-    std::cout << arg1[0] << std::endl;
-}
-

-

-

std::map<int, char> a;
-a[0] = 'a';
-
-f<char>(a); // OK...
-// f(a);    // ... but error.
-

-

- However, note that the template parameter char - must be manually specified when invoking the function as in f<char>(a). In fact, - when the BOOST_IDENTITY_TYPE - macro is used to wrap a function template parameter, the template parameter - can no longer be automatically deduced by the compiler form the function call - as f(a) would - have done. [2] (This limitation does not apply to class templates because class - template parameters must always be explicitly specified.) In other words, without - using the BOOST_IDENTITY_TYPE - macro, C++ would normally be able to automatically deduce the function template - parameter as shown below: -

-

template<typename T>
-void g(
-    std::map<int, T> arg1
-) {
-    std::cout << arg1[0] << std::endl;
-}
-

-

-

g<char>(a); // OK...
-g(a);       // ... and also OK.
-

-

- On some compilers (e.g., GCC), using this macro on abstract types (i.e., classes - with one or more pure virtual functions) generates a compiler error. This can - be avoided by manipulating the type adding and removing a reference to it. -

- Let's program a macro that performs a static assertion on a Template - Meta-Programming (TMP) meta-function (similarly to Boost.MPL BOOST_MPL_ASSERT). The BOOST_IDENTITY_TYPE macro can be used - to pass a meta-function with multiple template parameters to the assert macro - (so to handle the commas separating the template parameters). In this case, - if the meta-function is an abstract type, it needs to be manipulated adding - and removing a reference to it (see also abstract.cpp): -

-

#define TMP_ASSERT(metafunction) \
-    BOOST_STATIC_ASSERT(metafunction::value)
-
-template<typename T, bool b>
-struct abstract {
-    static const bool value = b;
-    virtual void f(T const& x) = 0;     // Pure virtual function.
-};
-
-TMP_ASSERT(
-    boost::remove_reference<            // Add and remove
-        BOOST_IDENTITY_TYPE((           // reference for
-            boost::add_reference<       // abstract type.
-                abstract<int, true>
-            >::type
-        ))
-    >::type
-);
-

-

- The BOOST_IDENTITY_TYPE macro - can be used either when calling a user-defined macro (as shown by the examples - so far), or internally when implementing a user-defined macro (as shown below). - When BOOST_IDENTITY_TYPE is - used in the implementation of the user-defined macro, the caller of the user - macro will have to specify the extra parenthesis (see also paren.cpp): -

-

#define TMP_ASSERT_PAREN(parenthesized_metafunction) \
-    /* use `BOOST_IDENTITY_TYPE` in macro definition instead of invocation */ \
-    BOOST_STATIC_ASSERT(BOOST_IDENTITY_TYPE(parenthesized_metafunction)::value)
-
-#define TMP_ASSERT(metafunction) \
-    BOOST_STATIC_ASSERT(metafunction::value)
-
-// Specify only extra parenthesis `((...))`.
-TMP_ASSERT_PAREN((boost::is_const<std::map<int, char> const>));
-
-// Specify both the extra parenthesis `((...))` and `BOOST_IDENTITY_TYPE` macro.
-TMP_ASSERT(BOOST_IDENTITY_TYPE((boost::is_const<std::map<int, char> const>)));
-

-

- However, note that the caller will always have to specify - the extra parenthesis even when the macro parameters contain no comma: -

-

TMP_ASSERT_PAREN((boost::is_const<int const>)); // Always extra `((...))`.
-
-TMP_ASSERT(boost::is_const<int const>); // No extra `((...))` and no macro.
-

-

- In some cases, using BOOST_IDENTITY_TYPE - in the implementation of the user-defined macro might provide the best syntax - for the caller. For example, this is the case for BOOST_MPL_ASSERT - because the majority of template meta-programming expressions contain unwrapped - commas so it is less confusing for the user to always specify the extra parenthesis - ((...)) instead of using BOOST_IDENTITY_TYPE: -

BOOST_MPL_ASSERT(( // Natural syntax.
-    boost::mpl::and_<
-          boost::is_const<T>
-        , boost::is_reference<T>
-    >
-));
-

- However, in other situations it might be preferable to not require the extra - parenthesis in the common cases and handle commas as special cases using BOOST_IDENTITY_TYPE. For example, this - is the case for BOOST_LOCAL_FUNCTION for which always - requiring the extra parenthesis ((...)) - around the types would lead to an unnatural syntax for the local function signature: -

int BOOST_LOCAL_FUNCTION( ((int&)) x, ((int&)) y ) { // Unnatural syntax.
-    return x + y;
-} BOOST_LOCAL_FUNCTION_NAME(add)
-

- Instead requiring the user to specify BOOST_IDENTITY_TYPE - only when needed allows for the more natural syntax BOOST_LOCAL_FUNCTION(int& - x, int& y) in the common cases when the parameter types - contain no comma (while still allowing to specify parameter types with commas - as special cases using BOOST_LOCAL_FUNCTION(BOOST_IDENTITY_TYPE((std::map<int, char>))& - x, int& y)). -

- The implementation of this library macro is equivalent to the following: [3] -

#include <boost/type_traits/function_traits.hpp>
-
-#define BOOST_IDENTITY_TYPE(parenthesized_type) \
-    boost::function_traits<void parenthesized_type>::arg1_type
-

- Essentially, the type is wrapped between round parenthesis (std::map<int, - char>) - so it can be passed as a single macro parameter even if it contains commas. - Then the parenthesized type is transformed into the type of a function returning - void and with the specified type - as the type of the first and only argument void - (std::map<int, char>). Finally, the type of the first argument - arg1_type is extracted at compile-time - using the function_traits meta-function - therefore obtaining the original type from the parenthesized type (effectively - stripping the extra parenthesis from around the specified type). -

Reference

Wrap type expressions with round parenthesis so they can be passed to macros even if they contain commas.

-
-BOOST_IDENTITY_TYPE(parenthesized_type)

Macro BOOST_IDENTITY_TYPE

BOOST_IDENTITY_TYPE — This macro allows to wrap the specified type expression within extra round parenthesis so the type can be passed as a single macro parameter even if it contains commas (not already wrapped within round parenthesis).

Synopsis

// In header: <boost/utility/identity_type.hpp>
-
-BOOST_IDENTITY_TYPE(parenthesized_type)

Description

Parameters:

parenthesized_typeThe type expression to be passed as macro parameter wrapped by a single set of round parenthesis (...). This type expression can contain an arbitrary number of commas.

-

This macro works on any C++03 compiler (it does not use variadic macros).

This macro must be prefixed by typename when used within templates. Note that the compiler will not be able to automatically determine function template parameters when they are wrapped with this macro (these parameters need to be explicitly specified when calling the function template).

On some compilers (like GCC), using this macro on abstract types requires to add and remove a reference to the specified type.



[1] - Using variadic macros, it would be possible to require a single set of extra - parenthesis BOOST_IDENTITY_TYPE(type) instead of two BOOST_IDENTITY_TYPE((type)) but variadic macros are not part of C++03 - (even if nowadays they are supported by most modern compilers and they are - also part of C++11). -

[2] - This is because the implementation of BOOST_IDENTITY_TYPE - wraps the specified type within a meta-function. -

[3] - There is absolutely no guarantee that the macro is actually implemented using - the code listed in this documentation. The listed code is for explanatory - purposes only. -

diff -Nru boost1.81-1.81.0/libs/utility/identity_type/index.html boost1.81-1.81.0/libs/utility/identity_type/index.html --- boost1.81-1.81.0/libs/utility/identity_type/index.html 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/utility/identity_type/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ - - - - - - - Automatic redirection failed, click this - link  
-

Copyright © Lorenzo Caminiti, 2009-2012

-

Distributed under the Boost Software License, Version 1.0 (see - accompanying file - LICENSE_1_0.txt or a copy at - www.boost.org/LICENSE_1_0.txt)

- - diff -Nru boost1.81-1.81.0/libs/utility/include/boost/utility/declval.hpp boost1.81-1.81.0/libs/utility/include/boost/utility/declval.hpp --- boost1.81-1.81.0/libs/utility/include/boost/utility/declval.hpp 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/utility/include/boost/utility/declval.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -// declval.hpp -------------------------------------------------------------// - -// Copyright 2010 Vicente J. Botet Escriba - -// Distributed under the Boost Software License, Version 1.0. -// See http://www.boost.org/LICENSE_1_0.txt - -#ifndef BOOST_UTILITY_DECLVAL_HPP -#define BOOST_UTILITY_DECLVAL_HPP - -#include - -#endif // BOOST_UTILITY_DECLVAL_HPP diff -Nru boost1.81-1.81.0/libs/vmd/doc/vmd_reference.xml boost1.81-1.81.0/libs/vmd/doc/vmd_reference.xml --- boost1.81-1.81.0/libs/vmd/doc/vmd_reference.xml 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/vmd/doc/vmd_reference.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,595 +0,0 @@ - -Variadic Macro Data Reference
-Conditionally causes an error to be generated. ... = variadic parameters, maximum of 2 will be considered. Any variadic parameters beyond the maximum of 2 are just ignored.The first variadic parameter is:cond = A condition that determines whether an assertion occurs. Valid values range from 0 to BOOST_PP_LIMIT_MAG.The second variadic parameter (optional) is:errstr = An error string for generating a compiler error when using the VC++ compiler. The VC++ compiler is incapable of producing a preprocessor error so when the 'cond' is 0, a compiler error is generated by outputting C++ code in the form of:typedef char errstr[-1]; -The errstr defaults to BOOST_VMD_ASSERT_ERROR if not supplied. It is only relevant for VC++.returns = If cond expands to 0, this macro causes an error. Otherwise, it expands to nothing. For all compilers other than Visual C++ the error is a preprocessing error. For Visual C++ the error is caused by output invalid C++: this error could be masked if the invalid output is ignored by a macro which invokes this macro. -
-
-Asserts that the sequence is a Boost PP array. The macro checks that the sequence is a Boost PP array. If it is not a Boost PP array, it forces a compiler error.The macro normally checks for a Boost PP array only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.sequence = a possible Boost PP array.returns = Normally the macro returns nothing. - - If the sequence is a Boost PP array, nothing is - output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not a Boost PP array the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the sequence is not a - Boost PP array. - -Asserts that the sequence is a Boost PP array. Re-entrant version. The macro checks that the sequence is a Boost PP array. If it is not a Boost PP array, it forces a compiler error.The macro normally checks for a Boost PP array only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.d = The next available BOOST_PP_WHILE iteration. - sequence = a possible Boost PP sequence.returns = Normally the macro returns nothing. - - If the sequence is a Boost PP array, nothing is - output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not a Boost PP array the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the sequence is not a - Boost PP array. - -
-
-Asserts that the input is empty. The macro checks to see if the input is empty or not. If it is not empty, it forces a compiler error.The macro is a variadic macro taking any input. For the VC++8 compiler (VS2005) the macro takes a single parameter of input to check and not variadic data.The macro normally checks for emptiness only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively..... = variadic input, for VC++8 this must be a single parameter.returns = Normally the macro returns nothing. - - If the input is empty, nothing is output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the input is not empty the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the input is not empty. -It is recommended to append BOOST_PP_EMPTY() to whatever input is being tested in order to avoid possible warning messages from some compilers about no parameters being passed to the macro when the input is truly empty. -
-
-Asserts that the sequence is an identifier. The macro checks that the sequence is an identifier. If it is not an identifier, it forces a compiler error.The macro normally checks for an identifier only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.... = variadic parametersThe variadic parameters are:sequence = A sequence to test as an identifier. - ids (optional) = The data may take one of two forms: it is either one or more single identifiers or a single Boost PP tuple of identifiers.returns = Normally the macro returns nothing. - - If the sequence is an identifier, nothing is - output. If optional ids are specified, for the - sequence to be an identifier it must be an - identifier that matches one of the optional - ids. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not an identifier the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the sequence is not an - identifier. -Identifiers are registered in VMD with:#define BOOST_VMD_REG_XXX (XXX) where XXX is a v-identifier. -The identifier must be registered to be found.Identifiers are pre-detected in VMD with:#define BOOST_VMD_DETECT_XXX_XXX where XXX is an identifier. -If you specify optional ids and have not specified the detection of an optional id, that id will never match an identifier. -Asserts that the sequence is an identifier. Re-entrant version. The macro checks that the sequence is an identifier. If it is not an identifier, it forces a compiler error.The macro normally checks for an identifier only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.d = The next available BOOST_PP_WHILE iteration. - ... = variadic parametersThe variadic parameters are:sequence = A sequence to test as an identifier. - ids (optional) = The data may take one of two forms: it is either one or more single identifiers or a single Boost PP tuple of identifiers.returns = Normally the macro returns nothing. - - If the sequence is an identifier, nothing is - output. If optional ids are specified, for the - sequence to be an identifier it must be an - identifier that matches one of the optional - ids. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not an identifier the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the sequence is not an - identifier. -Identifiers are registered in VMD with:#define BOOST_VMD_REG_XXX (XXX) where XXX is a v-identifier. -The identifier must be registered to be found.Identifiers are pre-detected in VMD with:#define BOOST_VMD_DETECT_XXX_XXX where XXX is an identifier. -If you specify optional ids and have not specified the detection of an optional id, that id will never match an identifier. -
-
-Asserts that the sequence is a Boost PP list. The macro checks that the sequence is a Boost PP list. If it is not a Boost PP list, it forces a compiler error.The macro normally checks for a Boost PP list only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.sequence = a possible Boost PP list.returns = Normally the macro returns nothing. - - If the sequence is a Boost PP list, nothing is - output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not a Boost PP list the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the parameter is not a - Boost PP list. - -Asserts that the sequence is a Boost PP list. Re-entrant version. The macro checks that the sequence is a Boost PP list. If it is not a Boost PP list, it forces a compiler error.The macro normally checks for a Boost PP list only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.d = The next available BOOST_PP_WHILE iteration. - sequence = a possible Boost PP list.returns = Normally the macro returns nothing. - - If the sequence is a Boost PP list, nothing is - output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not a Boost PP list the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the parameter is not a - Boost PP list. - -
-
-Asserts that the sequence is a number. The macro checks that the parameter is a number. If it is not a number, it forces a compiler error.The macro normally checks for a number only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.sequence = a possible number.returns = Normally the macro returns nothing. - - If the sequence is a number, nothing is - output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not a number the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the sequence is not a - number. - -
-
-Asserts that the sequence is a Boost PP seq. The macro checks that the sequence is a Boost PP seq. If it is not a Boost PP seq, it forces a compiler error.The macro normally checks for a Boost PP seq only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.sequence = a possible Boost PP seq.returns = Normally the macro returns nothing. - - If the sequence is a Boost PP seq, nothing is - output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not a Boost PP seq the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the sequence is not a - Boost PP seq. - -Asserts that the sequence is a Boost PP seq. Re-entrant version. The macro checks that the sequence is a Boost PP seq. If it is not a Boost PP seq, it forces a compiler error.The macro normally checks for a Boost PP seq only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.d = The next available BOOST_PP_WHILE iteration. - sequence = a possible Boost PP seq.returns = Normally the macro returns nothing. - - If the sequence is a Boost PP seq, nothing is - output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not a Boost PP seq the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the sequence is not a - Boost PP seq. - -
-
-Asserts that the sequence is a Boost PP tuple. The macro checks that the sequence is a Boost PP tuple. If it is not a Boost PP tuple, it forces a compiler error.The macro normally checks for a Boost PP tuple only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.sequence = a possible Boost PP tuple.returns = Normally the macro returns nothing. - - If the sequence is a Boost PP tuple, nothing is - output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not a Boost PP tuple the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the sequence is not a - Boost PP tuple. - -
-
-Asserts that the sequence is a VMD type. The macro checks that the sequence is a VMD type. If it is not a VMD type, it forces a compiler error.The macro normally checks for a VMD type only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.sequence = a possible VMD type.returns = Normally the macro returns nothing. - - If the sequence is a VMD type, nothing is - output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not a VMD type the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the sequence is not a - VMD type. - -Asserts that the sequence is a VMD type. Re-entrant version. The macro checks that the sequence is a VMD type. If it is not a VMD type, it forces a compiler error.The macro normally checks for a VMD type only in debug mode. However an end-user can force the macro to check or not check by defining the macro BOOST_VMD_ASSERT_DATA to 1 or 0 respectively.d = The next available BOOST_PP_WHILE iteration. - sequence = a possible VMD type.returns = Normally the macro returns nothing. - - If the sequence is a VMD type, nothing is - output. - - For VC++, because there is no sure way of forcing - a compiler error from within a macro without producing - output, if the sequence is not a VMD type the - macro forces a compiler error by outputting invalid C++. - - For all other compilers a compiler error is forced - without producing output if the sequence is not a - VMD type. - -
-
-Accesses an element of a sequence. elem = A sequence element number. From 0 to sequence size - 1. - ... = Variadic parameters.The first variadic parameter is required and is the sequence to access. Further variadic parameters are all optional.With no further variadic parameters the macro returns the particular element in the sequence. If the element number is outside the bounds of the sequence macro access fails and the macro turns emptiness.Optional parameters determine what it means that an element is successfully accessed as well as what data is returned by the macro.Filters: specifying a VMD type tells the macro to return the element only if it is of the VMD type specified, else macro access fails. If more than one VMD type is specified as an optional parameter the last one specified is the filter.Matching Identifiers: If the filter is specified as the identifier type, BOOST_VMD_TYPE_IDENTIFIER, optional parameters which are identifiers specify that the element accessed must match one of the identifiers else access fails. The identifiers may be specified multiple times as single optional parameters or once as a tuple of identifier parameters. If the identifiers are specified as single optional parameters they cannot be any of the specific BOOST_VMD_ optional parameters in order to be recognized as matching identifiers. Normally this should never be the case. The only situation where this could occur is if the VMD types, which are filters, are used as matching identifiers; in this case the matching identifiers need to be passed as a tuple of identifier parameters so they are not treated as filters.Filters and matching identifiers change what it means that an element is successfully accessed. They do not change what data is returned by the macro. The remaining optional parameters do not change what it means that an element is successfully accessed but they do change what data is returned by the macro.Splitting: Splitting allows the macro to return the rest of the sequence - after the element accessed. - - If BOOST_VMD_RETURN_AFTER is specified the return is a tuple - with the element accessed as the first tuple parameter and the rest of - the sequence as the second tuple parameter. If element access fails - both tuple parameters are empty. - - If BOOST_VMD_RETURN_ONLY_AFTER - is specified the return is the rest of the sequence after the element accessed - found. If the element access fails the return is emptiness. - - If BOOST_VMD_RETURN_NO_AFTER, the default, is specified no splitting - occurs. - - If more than one of the splitting identifiers are specified - the last one specified determines the splitting. - - Return Type: The element accessed can be changed to return both the type - of the element as well as the element data with optional return type - parameters. When a type is returned, the element accessed which is returned becomes a - two-element tuple where the type of the element accessed is the first tuple element and the element - data itself is the second tuple element. If the macro fails to access the - element the element access returned is emptiness and not a tuple. - - If BOOST_VMD_RETURN_NO_TYPE, the default, is specified no type is returned - as part of the element accessed. - - If BOOST_VMD_RETURN_TYPE is specified the specific type of the element - is returned in the tuple. - - If BOOST_VMD_RETURN_TYPE_ARRAY is specified - an array type is returned if the element is an array, else a tuple - type is returned if the element is a tuple, else the actual type - is returned for non-tuple data. - - If BOOST_VMD_RETURN_TYPE_LIST is specified - a list type is returned if the element is a list, else a tuple - type is returned if the element is a tuple, else the actual type - is returned for non-tuple data. - - If BOOST_VMD_RETURN_TYPE_TUPLE is specified - a tuple type is returned for all tuple-like data, else the actual type - is returned for non-tuple data. - - If more than one return type optional - parameter is specified the last one specified determines the return type. - - If a filter is specified optional return type parameters are ignored and - the default BOOST_VMD_RETURN_NO_TYPE is in effect. - - Index: If the filter is specified as the identifier type, BOOST_VMD_TYPE_IDENTIFIER, - and matching identifiers are specified, an index parameter specifies that the - numeric index, starting with 0, of the matching identifier found, be returned - as part of the result. - - If BOOST_VMD_RETURN_INDEX is specified an index is returned - as part of the result. - - If BOOST_VMD_RETURN_NO_INDEX, the default, is specified - no index is returned as part of the result. - - If both are specified the last one specified determines the index parameter. - - When an index is returned as part of the result, the result is a tuple where the - element accessed is the first tuple parameter and the index is the last tuple parameter. - If element access fails the index is empty. If there is no BOOST_VMD_TYPE_IDENTIFIER - filter or if there are no matching identifiers the BOOST_VMD_RETURN_INDEX is ignored - and no index is returned as part of the result. -returns = With no optional parameters the element accessed is returned, or emptiness if element is outside the bounds of the sequence. Filters and matching identifiers can change the meaning of whether the element accessed is returned or failure occurs, but whenever failure occurs emptiness is returned as the element access part of that failure, else the element accessed is returned. Return type optional parameters, when filters are not used, return the element accessed as a two-element tuple where the first tuple element is the type and the second tuple element is the data; if the element is not accessed then emptiness is returned as the element access and not a tuple. Splitting with BOOST_VMD_RETURN_AFTER returns a tuple where the element accessed is the first tuple element and the rest of the sequence is the second tuple element. Splitting with BOOST_VMD_RETURN_ONLY_AFTER returns the rest of the sequence after the element accessed or emptiness if the element can not be accessed. Indexing returns the index as part of the output only if filtering with BOOST_VMD_TYPE_IDENTIFIER is specified and matching identifiers are specified. When the index is returned with BOOST_VMD_RETURN_AFTER it is the third element of the tuple returned, else it is the second element of a tuple where the element accessed is the first element of the tuple. -Accesses an element of a sequence. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - elem = A sequence element number. From 0 to sequence size - 1. - ... = Variadic parameters.The first variadic parameter is required and is the sequence to access. Further variadic parameters are all optional.With no further variadic parameters the macro returns the particular element in the sequence. If the element number is outside the bounds of the sequence macro access fails and the macro turns emptiness.Optional parameters determine what it means that an element is successfully accessed as well as what data is returned by the macro.Filters: specifying a VMD type tells the macro to return the element only if it is of the VMD type specified, else macro access fails. If more than one VMD type is specified as an optional parameter the last one specified is the filter.Matching Identifiers: If the filter is specified as the identifier type, BOOST_VMD_TYPE_IDENTIFIER, optional parameters which are identifiers specify that the element accessed must match one of the identifiers else access fails. The identifiers may be specified multiple times as single optional parameters or once as a tuple of identifier parameters. If the identifiers are specified as single optional parameters they cannot be any of the specific BOOST_VMD_ optional parameters in order to be recognized as matching identifiers. Normally this should never be the case. The only situation where this could occur is if the VMD types, which are filters, are used as matching identifiers; in this case the matching identifiers need to be passed as a tuple of identifier parameters so they are not treated as filters.Filters and matching identifiers change what it means that an element is successfully accessed. They do not change what data is returned by the macro. The remaining optional parameters do not change what it means that an element is successfully accessed but they do change what data is returned by the macro.Splitting: Splitting allows the macro to return the rest of the sequence - after the element accessed. - - If BOOST_VMD_RETURN_AFTER is specified the return is a tuple - with the element accessed as the first tuple parameter and the rest of - the sequence as the second tuple parameter. If element access fails - both tuple parameters are empty. - - If BOOST_VMD_RETURN_ONLY_AFTER - is specified the return is the rest of the sequence after the element accessed - found. If the element access fails the return is emptiness. - - If BOOST_VMD_RETURN_NO_AFTER, the default, is specified no splitting - occurs. - - If more than one of the splitting identifiers are specified - the last one specified determines the splitting. - - Return Type: The element accessed can be changed to return both the type - of the element as well as the element data with optional return type - parameters. When a type is returned, the element accessed which is returned becomes a - two-element tuple where the type of the element accessed is the first tuple element and the element - data itself is the second tuple element. If the macro fails to access the - element the element access returned is emptiness and not a tuple. - - If BOOST_VMD_RETURN_NO_TYPE, the default, is specified no type is returned - as part of the element accessed. - - If BOOST_VMD_RETURN_TYPE is specified the specific type of the element - is returned in the tuple. - - If BOOST_VMD_RETURN_TYPE_ARRAY is specified - an array type is returned if the element is an array, else a tuple - type is returned if the element is a tuple, else the actual type - is returned for non-tuple data. - - If BOOST_VMD_RETURN_TYPE_LIST is specified - a list type is returned if the element is a list, else a tuple - type is returned if the element is a tuple, else the actual type - is returned for non-tuple data. - - If BOOST_VMD_RETURN_TYPE_TUPLE is specified - a tuple type is returned for all tuple-like data, else the actual type - is returned for non-tuple data. If more than one return type optional - parameter is specified the last one specified determines the return type. - - If a filter is specified optional return type parameters are ignored and - the default BOOST_VMD_RETURN_NO_TYPE is in effect. - - Index: If the filter is specified as the identifier type, BOOST_VMD_TYPE_IDENTIFIER, - and matching identifiers are specified, an index parameter specifies that the - numeric index, starting with 0, of the matching identifier found, be returned - as part of the result. - - If BOOST_VMD_RETURN_INDEX is specified an index is returned - as part of the result. - - If BOOST_VMD_RETURN_NO_INDEX, the default, is specified - no index is returned as part of the result. - - If both are specified the last one specified determines the index parameter. - - When an index is returned as part of the result, the result is a tuple where the - element accessed is the first tuple parameter and the index is the last tuple parameter. - If element access fails the index is empty. If there is no BOOST_VMD_TYPE_IDENTIFIER - filter or if there are no matching identifiers the BOOST_VMD_RETURN_INDEX is ignored - and no index is returned as part of the result. -returns = With no optional parameters the element accessed is returned, or emptiness if element is outside the bounds of the sequence. Filters and matching identifiers can change the meaning of whether the element accessed is returned or failure occurs, but whenever failure occurs emptiness is returned as the element access part of that failure, else the element accessed is returned. Return type optional parameters, when filters are not used, return the element accessed as a two-element tuple where the first tuple element is the type and the second tuple element is the data; if the element is not accessed then emptiness is returned as the element access and not a tuple. Splitting with BOOST_VMD_RETURN_AFTER returns a tuple where the element accessed is the first tuple element and the rest of the sequence is the second tuple element. Splitting with BOOST_VMD_RETURN_ONLY_AFTER returns the rest of the sequence after the element accessed or emptiness if the element can not be accessed. Indexing returns the index as part of the output only if filtering with BOOST_VMD_TYPE_IDENTIFIER is specified and matching identifiers are specified. When the index is returned with BOOST_VMD_RETURN_AFTER it is the third element of the tuple returned, else it is the second element of a tuple where the element accessed is the first element of the tuple. -
-
-Outputs emptiness. ... = any variadic parameters. The parameters are ignored.This macro is used to output emptiness ( nothing ) no matter what is passed to it.If you use this macro to return a result, as in 'result BOOST_VMD_EMPTY' subsequently invoked, you should surround the result with BOOST_VMD_IDENTITY_RESULT to smooth over a VC++ problem. -
-
-Converts a sequence to comma-separated elements which are the elements of the sequence. ... = Variadic parameters.The first variadic parameter is required and is the sequence to convert.Further optional variadic parameters can be return type parameters. Return type parameters allow each element in the sequence to be converted to a two-element tuple where the first tuple element is the type and the second tuple element is the element data.The BOOST_VMD_RETURN_NO_TYPE, the default, does not return the type as part of each converted element but just the data. All of the rest return the type and data as the two-element tuple. If BOOST_VMD_RETURN_TYPE is specified the specific type of the element is returned in the tuple. If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data. If more than one return type optional parameter is specified the last one specified determines the return type.returns = Comma-separated data, otherwise known as variadic data. If the sequence is empty the variadic data is empty. If an optional return type other than BOOST_VMD_RETURN_NO_TYPE is specified the type and the data of each element is returned as part of the variadic data. Otherwise just the data of each element is returned, which is the default. -Converts a sequence to comma-separated elements which are the elements of the sequence. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - ... = Variadic parameters.The first variadic parameter is required and is the sequence to convert.Further optional variadic parameters can be return type parameters. Return type parameters allow each element in the sequence to be converted to a two-element tuple where the first tuple element is the type and the second tuple element is the element data.The BOOST_VMD_RETURN_NO_TYPE, the default, does not return the type as part of each converted element but just the data. All of the rest return the type and data as the two-element tuple. If BOOST_VMD_RETURN_TYPE is specified the specific type of the element is returned in the tuple. If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data. If more than one return type optional parameter is specified the last one specified determines the return type.returns = Comma-separated data, otherwise known as variadic data. If the sequence is empty the variadic data is empty. If an optional return type other than BOOST_VMD_RETURN_NO_TYPE is specified the type and the data of each element is returned as part of the variadic data. Otherwise just the data of each element is returned, which is the default. -
-
-Tests any two sequences for equality. sequence = First sequence. - ... = variadic parameters, maximum of 2.The first variadic parameter is required and is the second sequence to test. The optional second variadic parameter is a VMD type as a filter.The macro tests any two sequences for equality. For sequences to be equal the VMD types of each sequence must be equal and the individual elements of the sequence must be equal. For Boost PP composite types the macro tests that the composite types have the same size and then tests that each element of the composite type is equal. This means that all elements of a composite type must be a VMD type in order to use this macro successfully.The single optional parameter is a filter. The filter is a VMD type which specifies that both sequences to test must be of that VMD type, as well as being equal to each other, for the test to succeed.returns = 1 upon success or 0 upon failure. Success means that both sequences are equal and, if the optional parameter is specified, that the sequences are of the optional VMD type. -Tests any two sequences for equality. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - sequence = First sequence. - ... = variadic parameters, maximum of 2.The first variadic parameter is required and is the second sequence to test. The optional second variadic parameter is a VMD type as a filter.The macro tests any two sequences for equality. For sequences to be equal the VMD types of each sequence must be equal and the individual elements of the sequence must be equal. For Boost PP composite types the macro tests that the composite types have the same size and then tests that each element of the composite type is equal. This means that all elements of a composite type must be a VMD type in order to use this macro successfully.The single optional parameter is a filter. The filter is a VMD type which specifies that both sequences to test must be of that VMD type, as well as being equal to each other, for the test to succeed.returns = 1 upon success or 0 upon failure. Success means that both sequences are equal and, if the optional parameter is specified, that the sequences are of the optional VMD type. -
-
-Returns the type of a sequence as a VMD type. ... = variadic parameters.The first variadic parameter is required and is the sequence whose type we are getting.The optional variadic parameters are return type parameters.The macro returns the type of a sequence as a VMD type. The type of an empty sequence is always BOOST_VMD_TYPE_EMPTY and the type of a multi-element is always BOOST_VMD_TYPE_SEQUENCE. The type of a single-element sequence is the type of that single element.The type returned can be modified by specifying an optional return type parameter.If BOOST_VMD_RETURN_TYPE, the default, is specified the specific type of the element is returned.If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data.If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data.If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data.If BOOST_VMD_RETURN_NO_TYPE is specified it is ignored since the macro always returns the type of the sequence.If more than one return type optional parameter is specified the last one specified determines the return type.returns = the type of the sequence as a VMD type. -Returns the type of a sequence as a VMD type. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - ... = variadic parameters.The first variadic parameter is required and is the sequence whose type we are getting.The optional variadic parameters are return type parameters.The macro returns the type of a sequence as a VMD type. The type of an empty sequence is always BOOST_VMD_TYPE_EMPTY and the type of a multi-element is always BOOST_VMD_TYPE_SEQUENCE. The type of a single-element sequence is the type of that single element.The type returned can be modified by specifying an optional return type parameter.If BOOST_VMD_RETURN_TYPE, the default, is specified the specific type of the element is returned.If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data.If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data.If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data.If BOOST_VMD_RETURN_NO_TYPE is specified it is ignored since the macro always returns the type of the sequence.If more than one return type optional parameter is specified the last one specified determines the return type.returns = the type of the sequence as a VMD type. -
-
-Macro which expands to its argument when invoked with any number of parameters. item = any single argumentWhen BOOST_VMD_IDENTITY(item) is subsequently invoked with any number of parameters it expands to 'item'. Subsequently invoking the macro is done as 'BOOST_VMD_IDENTITY(item)(zero_or_more_arguments)'.The macro is equivalent to the Boost PP macro BOOST_PP_IDENTITY(item) with the difference being that BOOST_PP_IDENTITY(item) is always invoked with no arguments, as in 'BOOST_VMD_IDENTITY(item)()' whereas BOOST_VMD_IDENTITY can be invoked with any number of arguments.The macro is meant to be used in BOOST_PP_IF and BOOST_PP_IIF statements when only one of the clauses needs to be invoked with calling another macro and the other is meant to return an 'item'.returns = the macro as 'BOOST_VMD_IDENTITY(item)', when invoked with any number of parameters as in '(zero_or_more_arguments)', returns 'item'. The macro itself returns 'item BOOST_VMD_EMPTY'. -Macro which wraps any result which can return its value using BOOST_VMD_IDENTITY or 'item BOOST_VMD_EMPTY'. result = any single result returned when BOOST_VMD_IDENTITY is used or 'item BOOST_VMD_EMPTY'.The reason for this macro is to smooth over a problem when using VC++ with BOOST_VMD_IDENTITY. If your BOOST_VMD_IDENTITY macro can be used where VC++ is the compiler then you need to surround your macro code which could return a result with this macro in order that VC++ handles BOOST_VMD_IDENTITY correctly.If you are not using VC++ you do not have to use this macro, but doing so does no harm. -
-
-Determines if a sequence is a Boost PP array. The macro checks that the sequence is a Boost PP array. It returns 1 if it is an array, else if returns 0.sequence = a possible Boost PP array.returns = 1 if it is an array, else returns 0.The macro will generate a preprocessing error if the input is in the form of an array but its first tuple element, instead of being a number, is a preprocessor token which VMD cannot parse, as in the example '(&2,(0,1))' which is a valid tuple but an invalid array. -Determines if a sequence is a Boost PP array. Re-entrant version. The macro checks that the sequence is a Boost PP array. It returns 1 if it is an array, else if returns 0.d = The next available BOOST_PP_WHILE iteration. - sequence = a possible Boost PP array.returns = 1 if it is an array, else returns 0.The macro will generate a preprocessing error if the input is in the form of an array but its first tuple element, instead of being a number, is a preprocessor token which VMD cannot parse, as in the example '(&2,(0,1))' which is a valid tuple but an invalid array. -
-
-Tests whether its input is empty or not. The macro checks to see if the input is empty or not. It returns 1 if the input is empty, else returns 0.The macro is a variadic macro taking any input. For the VC++8 compiler (VS2005) the macro takes a single parameter of input to check.For all levels of C++ prior to C++20 the macro is not perfect, and can not be so. The problem area is if the input to be checked is a function-like macro name, in which case either a compiler error can result or a false result can occur.For C++20, with its support for the new VA_OPT preprocessor construct, the macro will always work correctly no matter what the variadic input, and is therefore 100% reliable.This macro is a replacement, using variadic macro support, for the undocumented macro BOOST_PP_IS_EMPTY in the Boost PP library. The code is taken from a posting by Paul Mensonides of a variadic version for BOOST_PP_IS_EMPTY, and changed in order to also support VC++. The code for the C++20 implementation of the macro, using the VA_OPT preprocessor construct, is the author's own and reuses code added to the Boost preprocessor library by this author.... = variadic input, for VC++8 this must be a single parameterreturns = 1 if the input is empty, 0 if it is notIt is recommended to append BOOST_PP_EMPTY() to whatever input is being tested in order to avoid possible warning messages from some compilers about no parameters being passed to the macro when the input is truly empty. - -
-
-Tests whether a sequence is an empty Boost PP array. An empty Boost PP array is a two element tuple where the first size element is 0 and the second element is a tuple with a single empty element, ie. '(0,())'.sequence = a possible empty arrayreturns = 1 if the sequence is an empty Boost PP array, 0 if it is not.The macro will generate a preprocessing error if the sequence is in the form of an array but its first tuple element, instead of being a number, is a preprocessor token which VMD cannot parse, as in the example '(&0,())' which is a valid tuple but an invalid array. -Tests whether a sequence is an empty Boost PP array. Re-entrant version. An empty Boost PP array is a two element tuple where the first size element is 0 and the second element is a tuple with a single empty element, ie. '(0,())'.d = The next available BOOST_PP_WHILE iteration. - sequence = a possible empty arrayreturns = 1 if the sequence is an empty Boost PP array, 0 if it is not.The macro will generate a preprocessing error if the sequence is in the form of an array but its first tuple element, instead of being a number, is a preprocessor token which VMD cannot parse, as in the example '(&0,())' which is a valid tuple but an invalid array. -
-
-Tests whether a sequence is an empty Boost PP list. An empty Boost PP list consists of the single identifier 'BOOST_PP_NIL'. This identifier also serves as a list terminator for a non-empty list.sequence = a preprocessor parameterreturns = 1 if the sequence is an empty Boost PP list, 0 if it is not.The macro will generate a preprocessing error if the input as an empty list marker, instead of being an identifier, is a preprocessor token which VMD cannot parse, as in the example '&BOOST_PP_NIL'. -Tests whether a sequence is an empty Boost PP list. Re-entrant version. An empty Boost PP list consists of the single identifier 'BOOST_PP_NIL'. This identifier also serves as a list terminator for a non-empty list.d = The next available BOOST_PP_WHILE iteration - sequence = a preprocessor parameterreturns = 1 if the sequence is an empty Boost PP list, 0 if it is not.The macro will generate a preprocessing error if the input as an empty list marker, instead of being an identifier, is a preprocessor token which VMD cannot parse, as in the example '&BOOST_PP_NIL'. -
-
-Tests whether a parameter is a general identifier. ... = variadic parametersThe first variadic parameter is required and it is the input to test.Passing more than one variadic argument is an error.returns = 1 if the parameter is any general identifier and only a single variadic argument is given, otherwise 0. -The argument to the macro should be a single possible identifier and not a VMD sequence of preprocessor tokens.If the input is not a VMD data type this macro could lead to a preprocessor error. This is because the macro uses preprocessor concatenation to determine if the input is an identifier once it is determined that the input is not empty and does not start with parenthesis. If the data being concatenated would lead to an invalid preprocessor token the compiler can issue a preprocessor error. -
-
-Tests whether a parameter is an identifier. ... = variadic parametersThe first variadic parameter is required and it is the input to test.Further variadic parameters are optional and are identifiers to match. The data may take one of two forms; it is either one or more single identifiers or a single Boost PP tuple of identifiers.returns = 1 if the parameter is an identifier, otherwise 0. - - If the parameter is not an identifier, - or if optional identifiers are specified and the identifier - does not match any of the optional identifiers, the macro returns 0. -Identifiers are registered in VMD with:#define BOOST_VMD_REG_XXX (XXX) where XXX is a v-identifier. -The identifier must be registered to be found.Identifiers are pre-detected in VMD with:#define BOOST_VMD_DETECT_XXX_XXX where XXX is an identifier. -If you specify optional identifiers and have not specified the detection of an optional identifier, that optional identifier will never match the input.If the input is not a VMD data type this macro could lead to a preprocessor error. This is because the macro uses preprocessor concatenation to determine if the input is an identifier once it is determined that the input does not start with parenthesis. If the data being concatenated would lead to an invalid preprocessor token the compiler can issue a preprocessor error. -Tests whether a parameter is an identifier. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - ... = variadic parametersThe first variadic parameter is required and it is the input to test.Further variadic parameters are optional and are identifiers to match. The data may take one of two forms; it is either one or more single identifiers or a single Boost PP tuple of identifiers.returns = 1 if the parameter is an identifier, otherwise 0. - - If the parameter is not an identifier, - or if optional identifiers are specified and the identifier - does not match any of the optional identifiers, the macro returns 0. -Identifiers are registered in VMD with:#define BOOST_VMD_REG_XXX (XXX) where XXX is a v-identifier. -The identifier must be registered to be found.Identifiers are pre-detected in VMD with:#define BOOST_VMD_DETECT_XXX_XXX where XXX is an identifier. -If you specify optional identifiers and have not specified the detection of an optional identifier, that optional identifier will never match the input.If the input is not a VMD data type this macro could lead to a preprocessor error. This is because the macro uses preprocessor concatenation to determine if the input is an identifier once it is determined that the input does not start with parenthesis. If the data being concatenated would lead to an invalid preprocessor token the compiler can issue a preprocessor error. -
-
-Determines if a sequence is a Boost pplib list. The macro checks that the sequence is a pplib list. It returns 1 if it is a list, else if returns 0.sequence = input as a possible Boost PP list.returns = 1 if it a list, else returns 0.The macro will generate a preprocessing error if the input is in the form of a list but its end-of-list marker, instead of being an identifier, is a preprocessor token which VMD cannot parse, as in the example '(anything,&BOOST_PP_NIL)' which is a valid tuple but an invalid list. -Determines if a sequence is a Boost pplib list. Re-entrant version. The macro checks that the sequence is a pplib list. It returns 1 if it is a list, else if returns 0.d = The next available BOOST_PP_WHILE iteration. - sequence = input as a possible Boost PP list.returns = 1 if it a list, else returns 0.The macro will generate a preprocessing error if the input is in the form of a list but its end-of-list marker, instead of being an identifier, is a preprocessor token which VMD cannot parse, as in the example '(anything,&BOOST_PP_NIL)' which is a valid tuple but an invalid list. -
-
-Determines if the sequence has more than one element, referred to as a multi-element sequence. sequence = a sequencereturns = 1 if the sequence is a multi-element sequence, else returns 0.If the size of a sequence is known it is faster comparing that size to be greater than one to find out if the sequence is multi-element. But if the size of the sequence is not known it is faster calling this macro than getting the size and doing the previously mentioned comparison in order to determine if the sequence is multi-element or not. -Determines if the sequence has more than one element, referred to as a multi-element sequence. d = The next available BOOST_PP_WHILE iteration. - sequence = a sequencereturns = 1 if the sequence is a multi-element sequence, else returns 0.If the size of a sequence is known it is faster comparing that size to be greater than one to find out if the sequence is multi-element. But if the size of the sequence is not known it is faster calling this macro than getting the size and doing the previously mentioned comparison in order to determine if the sequence is multi-element or not. -
-
-Tests whether a sequence is a Boost PP number. The macro checks to see if a sequence is a Boost PP number. A Boost PP number is a value from 0 to BOOST_PP_LIMIT_MAG.sequence = a possible numberreturns = 1 if the sequence is a Boost PP number, 0 if it is not.If the input is not a VMD data type this macro could lead to a preprocessor error. This is because the macro uses preprocessor concatenation to determine if the input is a number once it is determined that the input does not start with parenthesis. If the data being concatenated would lead to an invalid preprocessor token the compiler can issue a preprocessor error. -
-
-Determines if the sequence is a set of parens with no data. sequence = a VMD sequencereturns = 1 if the sequence is a set of parens with no data, else returns 0.A set of parens with no data may be: - -1) a tuple whose size is a single element which is empty - - or - -2) a single element seq whose data is empty - -Determines if the sequence is a set of parens with no data. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - sequence = a VMD sequencereturns = 1 if the sequence is a set of parens with no data, else returns 0.A set of parens with no data may be: - -1) a tuple whose size is a single element which is empty - - or - -2) a single element seq whose data is empty - -
-
-Determines if a sequence is a Boost PP seq. The macro checks that the sequence is a Boost PP seq. It returns 1 if it is a seq, else if returns 0.sequence = a possible Boost PP seqreturns = 1 if it a seq, else returns 0.A single set of parentheses, with a single element, is parsed as a tuple and not a seq. To be parsed as a seq the input needs to be more than one consecutive sets of parentheses, each with a single element of data. -Determines if a sequence is a Boost PP seq. Re-entrant version. The macro checks that the sequence is a Boost PP seq. It returns 1 if it is a seq, else if returns 0.d = The next available BOOST_PP_WHILE iteration. - sequence = a possible Boost PP seqreturns = 1 if it a seq, else returns 0.A single set of parentheses, with a single element, is parsed as a tuple and not a seq. To be parsed as a seq the input needs to be more than one consecutive sets of parentheses, each with a single element of data. -
-
-Tests whether a sequence is a Boost PP tuple. The macro checks to see if a sequence is a Boost PP tuple. A Boost PP tuple is preprocessor tokens enclosed by a set of parentheses with no preprocessing tokens before or after the parentheses.sequence = a possible tuplereturns = 1 if the sequence is a Boost PP tuple, 0 if it is not. -
-
-Tests whether a sequence is a VMD type. sequence = a possible VMD typereturns = 1 if the sequence is a VMD type, 0 if it is not.If the sequence is not a VMD data type this macro could lead to a preprocessor error. This is because the macro uses preprocessor concatenation to determine if the sequence is an identifier once it is determined that the sequence does not start with parentheses. If the data being concatenated would lead to an invalid preprocessor token the compiler can issue a preprocessor error. -Tests whether a sequence is a VMD type. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - sequence = a possible VMD typereturns = 1 if the sequence is a VMD type, 0 if it is not.If the sequence is not a VMD data type this macro could lead to a preprocessor error. This is because the macro uses preprocessor concatenation to determine if the sequence is an identifier once it is determined that the sequence does not start with parentheses. If the data being concatenated would lead to an invalid preprocessor token the compiler can issue a preprocessor error. -
-
-Determines if the sequence has only a single element, referred to as a single-element sequence. sequence = a VMD sequencereturns = 1 if the sequence is a single-element sequence, else returns 0.If the size of a sequence is known it is faster comparing that size to be equal to one to find out if the sequence is single-element. But if the size of the sequence is not known it is faster calling this macro than getting the size and doing the previously mentioned comparison in order to determine if the sequence is single-element or not. -Determines if the sequence has only a single element, referred to as a single-element sequence. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - sequence = a sequencereturns = 1 if the sequence is a single-element sequence, else returns 0.If the size of a sequence is known it is faster comparing that size to be equal to one to find out if the sequence is single-element. But if the size of the sequence is not known it is faster calling this macro than getting the size and doing the previously mentioned comparison in order to determine if the sequence is single-element or not. -
-
-Tests any two sequences for inequality. sequence = First sequence. - ... = variadic parameters, maximum of 2.The first variadic parameter is required and is the second sequence to test. The optional second variadic parameter is a VMD type as a filter.The macro tests any two sequences for inequality. For sequences to be unequal either the VMD types of each sequence must be unequal or the individual elements of the sequence must be unequal.The single optional parameter is a filter. The filter is a VMD type which specifies that both sequences to test must be of that VMD type, as well as being equal to each other, for the test to fail, else it succeeds.returns = 1 upon success or 0 upon failure. Success means that the sequences are unequal or, if the optional parameter is specified, that the sequences are not of the optional VMD type; otherwise 0 is returned if the sequences are equal.The macro is implemented as the complement of BOOST_VMD_EQUAL, so that whenever BOOST_VMD_EQUAL would return 1 the macro returns 0 and whenever BOOST_VMD_EQUAL would return 0 the macro would return 1. -Tests any two sequences for inequality. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - sequence = First sequence. - ... = variadic parameters, maximum of 2.The first variadic parameter is required and is the second sequence to test. The optional second variadic parameter is a VMD type as a filter.The macro tests any two sequences for inequality. For sequences to be unequal either the VMD types of each sequence must be unequal or the individual elements of the sequence must be unequal.The single optional parameter is a filter. The filter is a VMD type which specifies that both sequences to test must be of that VMD type, as well as being equal to each other, for the test to fail, else it succeeds.returns = 1 upon success or 0 upon failure. Success means that the sequences are unequal or, if the optional parameter is specified, that the sequences are not of the optional VMD type; otherwise 0 is returned if the sequences are equal.The macro is implemented as the complement of BOOST_VMD_EQUAL, so that whenever BOOST_VMD_EQUAL would return 1 the macro returns 0 and whenever BOOST_VMD_EQUAL would return 0 the macro would return 1. -
-
-Determines if a sequence is a VMD seq. The macro checks that the sequence is a VMD seq. A VMD seq, which may be a Boost PP seq or emptiness, is a superset of a Boost PP seq. It returns 1 if it is a VMD seq, else if returns 0.sequence = a possible Boost PP seqreturns = 1 if it a VMD seq, else returns 0. -
-
-pops an element from the end of a seq. seq = seq to pop an element from.If the seq is an empty seq the result is undefined. If the seq is a single element the result is an empty seq. Otherwise the result is a seq after removing the last element. -
-
-pops an element from the end of a tuple. tuple = tuple to pop an element from.If the tuple is an empty tuple the result is undefined. If the tuple is a single element the result is an empty tuple. Otherwise the result is a tuple after removing the last element. -pops an element from the end of a tuple. It reenters BOOST_PP_REPEAT with maximum efficiency. z = the next available BOOST_PP_REPEAT dimension. - tuple = tuple to pop an element from.If the tuple is an empty tuple the result is undefined. If the tuple is a single element the result is an empty tuple. Otherwise the result is a tuple after removing the last element. -
-
-pops an element from the front of a seq. seq = seq to pop an element from.If the seq is an empty seq the result is undefined. If the seq is a single element the result is an empty seq. Otherwise the result is a seq after removing the first element. -
-
-pops an element from the front of a tuple. tuple = tuple to pop an element from.If the tuple is an empty tuple the result is undefined. If the tuple is a single element the result is an empty tuple. Otherwise the result is a tuple after removing the first element. -pops an element from the front of a tuple. It reenters BOOST_PP_REPEAT with maximum efficiency. z = the next available BOOST_PP_REPEAT dimension. - tuple = tuple to pop an element from.If the tuple is an empty tuple the result is undefined. If the tuple is a single element the result is an empty tuple. Otherwise the result is a tuple after removing the first element. -
-
-appends an element to the end of a seq. seq = seq to to append an element to. - elem = element to append.If the seq is an empty seq the result is a seq with the single element. Otherwise the result is a seq after adding the element to the end. -
-
-appends an element to the end of a tuple. tuple = tuple to to append an element to. - elem = element to append.If the tuple is an empty tuple the result is a tuple with the single element. Otherwise the result is a tuple after adding the element to the end. -
-
-inserts an element at the beginning of a seq. seq = seq to insert an element at. - elem = element to insert.If the seq is an empty seq the result is a seq with the single element. Otherwise the result is a seq after inserting the element at the beginning. -
-
-inserts an element at the beginning of a tuple. tuple = tuple to insert an element at. - elem = element to insert.If the tuple is an empty tuple the result is a tuple with the single element. Otherwise the result is a tuple after inserting the element at the beginning. -
-
-removes an element from a seq. seq = seq from which an element is to be removed. - index = The zero-based position in seq of the element to be removed.If index is greater or equal to the seq size the result is undefined. If the seq is a single element and the index is 0 the result is an empty seq. Otherwise the result is a seq after removing the index element. -
-
-removes an element from a tuple. tuple = tuple from which an element is to be removed. - index = The zero-based position in tuple of the element to be removed.If index is greater or equal to the tuple size the result is undefined. If the tuple is a single element and the index is 0 the result is an empty tuple. Otherwise the result is a tuple after removing the index element. -removes an element from a tuple. It reenters BOOST_PP_WHILE with maximum efficiency. d = The next available BOOST_PP_WHILE iteration. - tuple = tuple from which an element is to be removed. - index = The zero-based position in tuple of the element to be removed.If index is greater or equal to the tuple size the result is undefined. If the tuple is a single element and the index is 0 the result is an empty tuple. Otherwise the result is a tuple after removing the index element. -
-
-Returns the size of a sequence. sequence = A sequence to test.returns = If the sequence is empty returns 0, else returns the number of elements in the sequence. -Returns the size of a sequence. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - sequence = A sequence to test.returns = If the sequence is empty returns 0, else returns the number of elements in the sequence. -
-
-expands to the size of the seq passed to it. seq = seq whose size is to be extracted.If the seq is an empty seq its size is 0. Otherwise the result is the number of elements in the seq. -
-
-expands to the size of the tuple passed to it. tuple = tuple whose size is to be extracted.If the tuple is an empty tuple its size is 0. Otherwise the result is the number of elements in the tuple. -
-
-Converts a sequence to a Boost PP array whose elements are the elements of the sequence. ... = Variadic parameters.The first variadic parameter is required and is the sequence to convert.Further optional variadic parameters can be return type parameters. Return type parameters allow each element in the sequence to be converted to a two-element tuple where the first tuple element is the type and the second tuple element is the element data.The BOOST_VMD_RETURN_NO_TYPE, the default, does not return the type as part of each converted element but just the data. All of the rest return the type and data as the two-element tuple. If BOOST_VMD_RETURN_TYPE is specified the specific type of the element is returned in the tuple. If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data. If more than one return type optional parameter is specified the last one specified determines the return type.returns = A Boost PP array. The sequence is empty the Boost PP array is an empty array. If an optional return type other than BOOST_VMD_RETURN_NO_TYPE is specified the type and the data of each element is returned as the array element. Otherwise just the data is returned as the array element, which is the default. -Converts a sequence to a Boost PP array whose elements are the elements of the sequence. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - ... = Variadic parameters.The first variadic parameter is required and is the sequence to convert.Further optional variadic parameters can be return type parameters. Return type parameters allow each element in the sequence to be converted to a two-element tuple where the first tuple element is the type and the second tuple element is the element data.The BOOST_VMD_RETURN_NO_TYPE, the default, does not return the type as part of each converted element but just the data. All of the rest return the type and data as the two-element tuple. If BOOST_VMD_RETURN_TYPE is specified the specific type of the element is returned in the tuple. If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data. If more than one return type optional parameter is specified the last one specified determines the return type.returns = A Boost PP array. The sequence is empty the Boost PP array is empty. If an optional return type other than BOOST_VMD_RETURN_NO_TYPE is specified the type and the data of each element is returned as the array element. Otherwise just the data is returned as the array element, which is the default. -
-
-converts a seq to an array. seq = seq to be converted.If the seq is an empty seq it is converted to an array with 0 elements. Otherwise the seq is converted to an array with the same number of elements as the seq. -
-
-converts a tuple to an array. tuple = tuple to be converted.If the tuple is an empty tuple it is converted to an array with 0 elements. Otherwise the tuple is converted to an array with the same number of elements as the tuple. -
-
-Converts a sequence to a Boost PP list whose elements are the elements of the sequence. ... = Variadic parameters.The first variadic parameter is required and is the sequence to convert.Further optional variadic parameters can be return type parameters. Return type parameters allow each element in the sequence to be converted to a two-element tuple where the first tuple element is the type and the second tuple element is the element data.The BOOST_VMD_RETURN_NO_TYPE, the default, does not return the type as part of each converted element but just the data. All of the rest return the type and data as the two-element tuple. If BOOST_VMD_RETURN_TYPE is specified the specific type of the element is returned in the tuple. If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data. If more than one return type optional parameter is specified the last one specified determines the return type.returns = A Boost PP list. The sequence is empty the Boost PP list is an empty list. If an optional return type other than BOOST_VMD_RETURN_NO_TYPE is specified the type and the data of each element is returned as the list element. Otherwise just the data is returned as the list element, which is the default. -Converts a sequence to a Boost PP list whose elements are the elements of the sequence. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - ... = Variadic parameters.The first variadic parameter is required and is the sequence to convert.Further optional variadic parameters can be return type parameters. Return type parameters allow each element in the sequence to be converted to a two-element tuple where the first tuple element is the type and the second tuple element is the element data.The BOOST_VMD_RETURN_NO_TYPE, the default, does not return the type as part of each converted element but just the data. All of the rest return the type and data as the two-element tuple. If BOOST_VMD_RETURN_TYPE is specified the specific type of the element is returned in the tuple. If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data. If more than one return type optional parameter is specified the last one specified determines the return type.returns = A Boost PP list. The sequence is empty the Boost PP list is an empty list. If an optional return type other than BOOST_VMD_RETURN_NO_TYPE is specified the type and the data of each element is returned as the list element. Otherwise just the data is returned as the list element, which is the default. -
-
-converts a seq to a list. seq = seq to be converted.If the seq is an empty seq it is converted to an empty list (BOOST_PP_NIL). Otherwise the seq is converted to a list with the same number of elements as the seq. -
-
-converts a tuple to a list. tuple = tuple to be converted.If the tuple is an empty tuple it is converted to an empty list (BOOST_PP_NIL). Otherwise the tuple is converted to a list with the same number of elements as the tuple. -
-
-Converts a sequence to a Boost PP seq whose elements are the elements of the sequence. ... = Variadic parameters.The first variadic parameter is required and is the sequence to convert.Further optional variadic parameters can be return type parameters. Return type parameters allow each element in the sequence to be converted to a two-element tuple where the first tuple element is the type and the second tuple element is the element data.The BOOST_VMD_RETURN_NO_TYPE, the default, does not return the type as part of each converted element but just the data. All of the rest return the type and data as the two-element tuple. If BOOST_VMD_RETURN_TYPE is specified the specific type of the element is returned in the tuple. If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data. If more than one return type optional parameter is specified the last one specified determines the return type.returns = A Boost PP seq. If the sequence is empty the return is emptiness since an empty seq does not exist. If an optional return type other than BOOST_VMD_RETURN_NO_TYPE is specified the type and the data of each element is returned as the seq element. Otherwise just the data is returned as the seq element, which is the default. -Converts a sequence to a Boost PP seq whose elements are the elements of the sequence. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - ... = Variadic parameters.The first variadic parameter is required and is the sequence to convert.Further optional variadic parameters can be return type parameters. Return type parameters allow each element in the sequence to be converted to a two-element tuple where the first tuple element is the type and the second tuple element is the element data.The BOOST_VMD_RETURN_NO_TYPE, the default, does not return the type as part of each converted element but just the data. All of the rest return the type and data as the two-element tuple. If BOOST_VMD_RETURN_TYPE is specified the specific type of the element is returned in the tuple. If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data. If more than one return type optional parameter is specified the last one specified determines the return type.returns = A Boost PP seq. If the sequence is empty the return is emptiness since an empty seq does not exist. If an optional return type other than BOOST_VMD_RETURN_NO_TYPE is specified the type and the data of each element is returned as the seq element. Otherwise just the data is returned as the seq element, which is the default. -
-
-converts an array to a seq. array = array to be converted.If the array is an array of 0 elements it is converted to an empty seq. Otherwise the array is converted to a seq with the same number of elements as the array. -
-
-converts a list to a seq. list = list to be converted.If the list is an empty list (BOOST_PP_NIL) it is converted to an empty seq. Otherwise the list is converted to a seq with the same number of elements as the list. -
-
-converts a tuple to a seq. tuple = tuple to be converted.If the tuple is an empty tuple it is converted to an empty seq. Otherwise the tuple is converted to a seq with the same number of elements as the tuple. -
-
-Converts a sequence to a Boost PP tuple whose elements are the elements of the sequence. ... = Variadic parameters.The first variadic parameter is required and is the sequence to convert.Further optional variadic parameters can be return type parameters. Return type parameters allow each element in the sequence to be converted to a two-element tuple where the first tuple element is the type and the second tuple element is the element data.The BOOST_VMD_RETURN_NO_TYPE, the default, does not return the type as part of each converted element but just the data. All of the rest return the type and data as the two-element tuple. If BOOST_VMD_RETURN_TYPE is specified the specific type of the element is returned in the tuple. If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data. If more than one return type optional parameter is specified the last one specified determines the return type.returns = A Boost PP tuple. If the sequence is empty the return is emptiness since an empty tuple does not exist. If an optional return type other than BOOST_VMD_RETURN_NO_TYPE is specified the type and the data of each element is returned as the tuple element. Otherwise just the data is returned as the tuple element, which is the default. -Converts a sequence to a Boost PP tuple whose elements are the elements of the sequence. Re-entrant version. d = The next available BOOST_PP_WHILE iteration. - ... = Variadic parameters.The first variadic parameter is required and is the sequence to convert.Further optional variadic parameters can be return type parameters. Return type parameters allow each element in the sequence to be converted to a two-element tuple where the first tuple element is the type and the second tuple element is the element data.The BOOST_VMD_RETURN_NO_TYPE, the default, does not return the type as part of each converted element but just the data. All of the rest return the type and data as the two-element tuple. If BOOST_VMD_RETURN_TYPE is specified the specific type of the element is returned in the tuple. If BOOST_VMD_RETURN_TYPE_ARRAY is specified an array type is returned if the element is an array, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_LIST is specified a list type is returned if the element is a list, else a tuple type is returned if the element is a tuple, else the actual type is returned for non-tuple data. If BOOST_VMD_RETURN_TYPE_TUPLE is specified a tuple type is returned for all tuple-like data, else the actual type is returned for non-tuple data. If more than one return type optional parameter is specified the last one specified determines the return type.returns = A Boost PP tuple. If the sequence is empty the return is emptiness since an empty tuple does not exist. If an optional return type other than BOOST_VMD_RETURN_NO_TYPE is specified the type and the data of each element is returned as the tuple element. Otherwise just the data is returned as the tuple element, which is the default. -
-
-converts an array to a tuple. array = array to be converted.If the array is an array of 0 elements it is converted to an empty tuple. Otherwise the array is converted to a tuple with the same number of elements as the array. -
-
-converts a list to a tuple. list = list to be converted.If the list is an empty list (BOOST_PP_NIL) it is converted to an empty tuple. Otherwise the list is converted to a tuple with the same number of elements as the list. -
-
-converts a seq to a tuple. seq = seq to be converted.If the seq is an empty seq it is converted to an empty tuple. Otherwise the seq is converted to a tuple with the same number of elements as the seq. -
-
-Determines if a sequence is a VMD tuple. The macro checks that the sequence is a VMD tuple. A VMD tuple, which may be a Boost PP tuple or emptiness, is a superset of a Boost PP tuple. It returns 1 if it is a VMD tuple, else if returns 0.sequence = a possible Boost PP tuplereturns = 1 if it a VMD tuple, else returns 0. -
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/libs/xpressive/doc/autodoc.xml boost1.81-1.81.0/libs/xpressive/doc/autodoc.xml --- boost1.81-1.81.0/libs/xpressive/doc/autodoc.xml 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/libs/xpressive/doc/autodoc.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,3100 +0,0 @@ - -
-Contains the definition of the basic_regex<> class template and its associated helper functions. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -voidbasic_regex< BidiIter > &The first basic_regex object. basic_regex< BidiIter > &The second basic_regex object. Swaps the contents of two basic_regex objects. -This is a shallow swap that does not do reference tracking. If you embed a basic_regex object by reference in another regular expression and then swap its contents with another basic_regex object, the change will not be visible to the enclosing regular expression. It is done this way to ensure that swap() cannot throw. - - -Will not throw. - - -
-
-Contains the definition of the match_results type and associated helpers. The match_results type holds the results of a regex_match() or regex_search() operation. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Defines the syntax elements of xpressive's action expressions. - -A unary metafunction that turns an ordinary function object type into the type of a deferred function object for use in xpressive semantic actions. Use xpressive::function<> to turn an ordinary polymorphic function object type into a type that can be used to declare an object for use in xpressive semantic actions.For example, the global object xpressive::push_back can be used to create deferred actions that have the effect of pushing a value into a container. It is defined with xpressive::function<> as follows:xpressive::function<xpressive::op::push_back>::type const push_back = {}; -where op::push_back is an ordinary function object that pushes its second argument into its first. Thus defined, xpressive::push_back can be used in semantic actions as follows:namespace xp = boost::xpressive; -using xp::_; -std::list<int> result; -std::string str("1 23 456 7890"); -xp::sregex rx = (+_d)[ xp::push_back(xp::ref(result), xp::as<int>(_) ] - >> *(' ' >> (+_d)[ xp::push_back(xp::ref(result), xp::as<int>(_) ) ]); - proto::terminal< PolymorphicFunctionObject >::type - -at is a PolymorphicFunctionObject for indexing into a sequence This(Cont &Idx)Cont::reference -This(Cont const &Idx)Cont::const_reference -This(ContIdx)Cont::const_reference - -Cont::referenceCont &The RandomAccessSequence to index into IdxThe index - - -Cont is a model of RandomAccessSequence -c[idx] - -Cont::const_referenceCont const &IdxThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. - -back is a PolymorphicFunctionObject for fetching the back element of a container. This(Sequence)remove_reference< Sequence >::type -mpl::if_c< is_const< sequence_type >::value, typename sequence_type::const_reference, typename sequence_type::reference >::type - -result< back(Sequence &)>::typeSequence &The sequence from which to fetch the back. - -seq.back() - - -first is a PolymorphicFunctionObject for fetching the first element of a pair. This(Pair)remove_reference< Pair >::type::first_type - -Pair::first_typePair const &The pair from which to fetch the first element. - -p.first - - -front is a PolymorphicFunctionObject for fetching the front element of a container. This(Sequence)remove_reference< Sequence >::type -mpl::if_c< is_const< sequence_type >::value, typename sequence_type::const_reference, typename sequence_type::reference >::type - -result< front(Sequence &)>::typeSequence &The sequence from which to fetch the front. - -seq.front() - - -insert is a PolymorphicFunctionObject for inserting a value or a sequence of values into a sequence container, an associative container, or a string. unspecified - -result< insert(Cont &, A0 const &)>::typeCont &A0 const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -result< insert(Cont &, A0 const &, A1 const &)>::typeCont &A0 const &A1 const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -result< insert(Cont &, A0 const &, A1 const &, A2 const &)>::typeCont &A0 const &A1 const &A2 const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -result< insert(Cont &, A0 const &, A1 const &, A2 const &, A3 const &)>::typeCont &The container into which to insert the element(s) A0 const &A value, iterator, or count A1 const &A value, iterator, string, count, or character A2 const &A value, iterator, or count A3 const &A count - - -For the form insert()(cont, a0), return cont.insert(a0). - -For the form insert()(cont, a0, a1), return cont.insert(a0, a1). - -For the form insert()(cont, a0, a1, a2), return cont.insert(a0, a1, a2). - -For the form insert()(cont, a0, a1, a2, a3), return cont.insert(a0, a1, a2, a3). - - - - - -length is a PolymorphicFunctionObject for fetching the length of sub_match. This(Sub)remove_reference< Sub >::type::difference_type - -Sub::difference_typeSub const &The sub_match object. - -sub.length() - - -make_pair is a PolymorphicFunctionObject for building a std::pair out of two parameters This(FirstSecond)For exposition only. decay< First >::type -For exposition only. decay< Second >::type -std::pair< first_type, second_type > - -std::pair< First, Second >First const &The first element of the pair Second const &The second element of the pair - -std::make_pair(first, second) - - -matched is a PolymorphicFunctionObject for assessing whether a sub_match object matched or not. bool - -boolSub const &The sub_match object. - -sub.matched - - -pop is a PolymorphicFunctionObject for popping an element from a container. void - -voidSequence &The sequence from which to pop. Equivalent to seq.pop(). - -void - - -pop_back is a PolymorphicFunctionObject for popping an element from the back of a container. void - -voidSequence &The sequence from which to pop. Equivalent to seq.pop_back(). - -void - - -pop_front is a PolymorphicFunctionObject for popping an element from the front of a container. void - -voidSequence &The sequence from which to pop. Equivalent to seq.pop_front(). - -void - - -push is a PolymorphicFunctionObject for pushing an element into a container. void - -voidSequence &The sequence into which the value should be pushed. Value const &The value to push into the sequence. Equivalent to seq.push(val). - -void - - -push_back is a PolymorphicFunctionObject for pushing an element into the back of a container. void - -voidSequence &The sequence into which the value should be pushed. Value const &The value to push into the sequence. Equivalent to seq.push_back(val). - -void - - -push_front is a PolymorphicFunctionObject for pushing an element into the front of a container. void - -voidSequence &The sequence into which the value should be pushed. Value const &The value to push into the sequence. Equivalent to seq.push_front(val). - -void - - -second is a PolymorphicFunctionObject for fetching the second element of a pair. This(Pair)remove_reference< Pair >::type::second_type - -Pair::second_typePair const &The pair from which to fetch the second element. - -p.second - - -str is a PolymorphicFunctionObject for turning a sub_match into an equivalent std::string. This(Sub)remove_reference< Sub >::type::string_type - -Sub::string_typeSub const &The sub_match object. - -sub.str() - - -top is a PolymorphicFunctionObject for fetching the top element of a stack. This(Sequence)remove_reference< Sequence >::type -mpl::if_c< is_const< sequence_type >::value, typename sequence_type::value_type const &, typename sequence_type::value_type & >::type - -result< top(Sequence &)>::typeSequence &The sequence from which to fetch the top. - -seq.top() - - -unwrap_reference is a PolymorphicFunctionObject for unwrapping a boost::reference_wrapper<>. This(Ref &)boost::unwrap_reference< Ref >::type & -This(Ref)boost::unwrap_reference< Ref >::type & - -T &boost::reference_wrapper< T >The boost::reference_wrapper<T> to unwrap. - -static_cast<T &>(r) - - - -function< op::at >::type constat is a lazy PolymorphicFunctionObject for indexing into a sequence in an xpressive semantic action. -function< op::push >::type constpush is a lazy PolymorphicFunctionObject for pushing a value into a container in an xpressive semantic action. -function< op::push_back >::type constpush_back is a lazy PolymorphicFunctionObject for pushing a value into a container in an xpressive semantic action. -function< op::push_front >::type constpush_front is a lazy PolymorphicFunctionObject for pushing a value into a container in an xpressive semantic action. -function< op::pop >::type constpop is a lazy PolymorphicFunctionObject for popping the top element from a sequence in an xpressive semantic action. -function< op::pop_back >::type constpop_back is a lazy PolymorphicFunctionObject for popping the back element from a sequence in an xpressive semantic action. -function< op::pop_front >::type constpop_front is a lazy PolymorphicFunctionObject for popping the front element from a sequence in an xpressive semantic action. -function< op::top >::type consttop is a lazy PolymorphicFunctionObject for accessing the top element from a stack in an xpressive semantic action. -function< op::back >::type constback is a lazy PolymorphicFunctionObject for fetching the back element of a sequence in an xpressive semantic action. -function< op::front >::type constfront is a lazy PolymorphicFunctionObject for fetching the front element of a sequence in an xpressive semantic action. -function< op::first >::type constfirst is a lazy PolymorphicFunctionObject for accessing the first element of a std::pair<> in an xpressive semantic action. -function< op::second >::type constsecond is a lazy PolymorphicFunctionObject for accessing the second element of a std::pair<> in an xpressive semantic action. -function< op::matched >::type constmatched is a lazy PolymorphicFunctionObject for accessing the matched member of a xpressive::sub_match<> in an xpressive semantic action. -function< op::length >::type constlength is a lazy PolymorphicFunctionObject for computing the length of a xpressive::sub_match<> in an xpressive semantic action. -function< op::str >::type conststr is a lazy PolymorphicFunctionObject for converting a xpressive::sub_match<> to a std::basic_string<> in an xpressive semantic action. -function< op::insert >::type constinsert is a lazy PolymorphicFunctionObject for inserting a value or a range of values into a sequence in an xpressive semantic action. -function< op::make_pair >::type constmake_pair is a lazy PolymorphicFunctionObject for making a std::pair<> in an xpressive semantic action. -function< op::unwrap_reference >::type constunwrap_reference is a lazy PolymorphicFunctionObject for unwrapping a boost::reference_wrapper<> in an xpressive semantic action. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -unspecifiedA const &The lazy value to lexically cast. as() is a lazy funtion for lexically casting a parameter to a different type. - - -A lazy object that, when evaluated, lexically casts its argument to the desired type. - -unspecifiedA const &The lazy value to statically cast. static_cast_ is a lazy funtion for statically casting a parameter to a different type. - - -A lazy object that, when evaluated, statically casts its argument to the desired type. - -unspecifiedA const &The lazy value to dynamically cast. dynamic_cast_ is a lazy funtion for dynamically casting a parameter to a different type. - - -A lazy object that, when evaluated, dynamically casts its argument to the desired type. - -unspecifiedA const &The lazy value to const-cast. dynamic_cast_ is a lazy funtion for const-casting a parameter to a different type. - - -A lazy object that, when evaluated, const-casts its argument to the desired type. - -value< T > constT const &Helper for constructing value<> objects. -value<T>(t) - -reference< T > constT &Helper for constructing reference<> objects. -reference<T>(t) - -reference< T const > constT const &Helper for constructing reference<> objects that store a reference to const. -reference<T const>(t) - -unspecifiedT const &The UnaryPredicate object or Boolean semantic action.For adding user-defined assertions to your regular expressions. -A user-defined assertion is a kind of semantic action that evaluates a Boolean lambda and, if it evaluates to false, causes the match to fail at that location in the string. This will cause backtracking, so the match may ultimately succeed.To use check() to specify a user-defined assertion in a regex, use the following syntax:sregex s = (_d >> _d)[check( XXX )]; // XXX is a custom assertion -The assertion is evaluated with a sub_match<> object that delineates what part of the string matched the sub-expression to which the assertion was attached.check() can be used with an ordinary predicate that takes a sub_match<> object as follows:// A predicate that is true IFF a sub-match is -// either 3 or 6 characters long. -struct three_or_six -{ - bool operator()(ssub_match const &sub) const - { - return sub.length() == 3 || sub.length() == 6; - } -}; - -// match words of 3 characters or 6 characters. -sregex rx = (bow >> +_w >> eow)[ check(three_or_six()) ] ; -Alternately, check() can be used to define inline custom assertions with the same syntax as is used to define semantic actions. The following code is equivalent to above:// match words of 3 characters or 6 characters. -sregex rx = (bow >> +_w >> eow)[ check(length(_)==3 || length(_)==6) ] ; -Within a custom assertion, _ is a placeholder for the sub_match<> That delineates the part of the string matched by the sub-expression to which the custom assertion was attached. -unspecifiedArgBindings const &...A set of argument bindings, where each argument binding is an assignment expression, the left hand side of which must be an instance of placeholder<X> for some X, and the right hand side is an lvalue of type X.For binding local variables to placeholders in semantic actions when constructing a regex_iterator or a regex_token_iterator. -xpressive::let() serves the same purpose as match_results::let(); that is, it binds a placeholder to a local value. The purpose is to allow a regex with semantic actions to be defined that refers to objects that do not yet exist. Rather than referring directly to an object, a semantic action can refer to a placeholder, and the value of the placeholder can be specified later with a let expression. The let expression created with let() is passed to the constructor of either regex_iterator or regex_token_iterator.See the section "Referring to Non-Local Variables" in the Users' Guide for more discussion.Example:@code // Define a placeholder for a map object: placeholder<std::map<std::string, int> > _map;// Match a word and an integer, separated by =>, // and then stuff the result into a std::map<> sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) ) [ _map[s1] = as<int>(s2) ];// The string to parse std::string str("aaa=>1 bbb=>23 ccc=>456");// Here is the actual map to fill in: std::map<std::string, int> result;// Create a regex_iterator to find all the matches sregex_iterator it(str.begin(), str.end(), pair, let(_map=result)); sregex_iterator end;// step through all the matches, and fill in // the result map while(it != end) ++it;std::cout << result["aaa"] << ' -'; std::cout << result["bbb"] << ' -'; std::cout << result["ccc"] << ' -'; \endcodeThe above code displays:1 -23 -456 - -unspecifiedArgs const &...The arguments to the constructor. A lazy funtion for constructing objects objects of the specified type. - - -A lazy object that, when evaluated, returns T(xs...), where xs... is the result of evaluating the lazy arguments args.... - - - - -
-
-Contains the regex_match(), regex_search() and regex_replace() algorithms. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -boolBidiIterThe beginning of the sequence. BidiIterThe end of the sequence. match_results< BidiIter > &The match_results struct into which the sub_matches will be written basic_regex< BidiIter > const &The regular expression object to use regex_constants::match_flag_typeregex_constants::match_defaultOptional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.) boolBidiIterBidiIterbasic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_defaultboolChar *match_results< Char * > &basic_regex< Char * > const &regex_constants::match_flag_typeregex_constants::match_defaultboolBidiRange &match_results< BidiIter > &basic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0boolBidiRange const &match_results< BidiIter > &basic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0boolChar *basic_regex< Char * > const &regex_constants::match_flag_typeregex_constants::match_defaultboolBidiRange &basic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0boolBidiRange const &basic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0See if a regex matches a sequence from beginning to end. Determines whether there is an exact match between the regular expression re, and all of the sequence [begin, end). - - - - -Type BidiIter meets the requirements of a Bidirectional Iterator (24.1.4). -[begin,end) denotes a valid iterator range. -true if a match is found, false otherwise -regex_error on stack exhaustion - - - - - - - -boolBidiIterThe beginning of the sequence BidiIterThe end of the sequence match_results< BidiIter > &The match_results struct into which the sub_matches will be written basic_regex< BidiIter > const &The regular expression object to use regex_constants::match_flag_typeregex_constants::match_defaultOptional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.) boolBidiIterBidiIterbasic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_defaultboolChar *match_results< Char * > &basic_regex< Char * > const &regex_constants::match_flag_typeregex_constants::match_defaultboolBidiRange &match_results< BidiIter > &basic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0boolBidiRange const &match_results< BidiIter > &basic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0boolChar *basic_regex< Char * > const &regex_constants::match_flag_typeregex_constants::match_defaultboolBidiRange &basic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0boolBidiRange const &basic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0Determines whether there is some sub-sequence within [begin,end) that matches the regular expression re. Determines whether there is some sub-sequence within [begin,end) that matches the regular expression re. - - - - -Type BidiIter meets the requirements of a Bidirectional Iterator (24.1.4). -[begin,end) denotes a valid iterator range. -true if a match is found, false otherwise -regex_error on stack exhaustion - - - - - - - -OutIterOutIterAn output iterator into which the output sequence is written. BidiIterThe beginning of the input sequence. BidiIterThe end of the input sequence. basic_regex< BidiIter > const &The regular expression object to use. Formatter const &The format string used to format the replacement sequence, or a formatter function, function object, or expression. regex_constants::match_flag_typeregex_constants::match_defaultOptional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.) unspecified0OutIterOutIterBidiIterBidiIterbasic_regex< BidiIter > const &typename iterator_value< BidiIter >::type const *regex_constants::match_flag_typeregex_constants::match_defaultBidiContainerBidiContainer &basic_regex< BidiIter > const &Formatter const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0BidiContainerBidiContainer const &basic_regex< BidiIter > const &Formatter const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0std::basic_string< typename remove_const< Char >::type >Char *basic_regex< Char * > const &Formatter const &regex_constants::match_flag_typeregex_constants::match_defaultunspecified0BidiContainerBidiContainer &basic_regex< BidiIter > const &typename iterator_value< BidiIter >::type const *regex_constants::match_flag_typeregex_constants::match_defaultunspecified0BidiContainerBidiContainer const &basic_regex< BidiIter > const &typename iterator_value< BidiIter >::type const *regex_constants::match_flag_typeregex_constants::match_defaultunspecified0std::basic_string< typename remove_const< Char >::type >Char *basic_regex< Char * > const &typename add_const< Char >::type *regex_constants::match_flag_typeregex_constants::match_defaultBuild an output sequence given an input sequence, a regex, and a format string or a formatter object, function, or expression. Constructs a regex_iterator object: regex_iterator< BidiIter > i(begin, end, re, flags), and uses i to enumerate through all of the matches m of type match_results< BidiIter > that occur within the sequence [begin, end). If no such matches are found and !(flags & format_no_copy) then calls std::copy(begin, end, out). Otherwise, for each match found, if !(flags & format_no_copy) calls std::copy(m.prefix().first, m.prefix().second, out), and then calls m.format(out, format, flags). Finally if !(flags & format_no_copy) calls std::copy(last_m.suffix().first, last_m.suffix().second, out) where last_m is a copy of the last match found.If flags & format_first_only is non-zero then only the first match found is replaced. - - - - - - -Type BidiIter meets the requirements of a Bidirectional Iterator (24.1.4). -Type OutIter meets the requirements of an Output Iterator (24.1.2). -Type Formatter models ForwardRange, Callable<match_results<BidiIter> >, Callable<match_results<BidiIter>, OutIter>, or Callable<match_results<BidiIter>, OutIter, regex_constants::match_flag_type>; or else it is a null-terminated format string, or an expression template representing a formatter lambda expression. -[begin,end) denotes a valid iterator range. -The value of the output iterator after the output sequence has been written to it. -regex_error on stack exhaustion or invalid format string. - - - - - - - - - - - - - - - - - - - - -
-
-Contains the definition of regex_compiler, a factory for building regex objects from strings. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Contains definitions for the syntax_option_type, match_flag_type and error_type enumerations. - - -= 0Specifies that the grammar recognized by the regular expression engine uses its normal semantics: that is the same as that given in the ECMA-262, ECMAScript Language Specification, Chapter 15 part 10, RegExp (Regular Expression) Objects (FWD.1). = 1 << 1Specifies that matching of regular expressions against a character container sequence shall be performed without regard to case. = 1 << 2Specifies that when a regular expression is matched against a character container sequence, then no sub-expression matches are to be stored in the supplied match_results structure. = 1 << 3Specifies that the regular expression engine should pay more attention to the speed with which regular expressions are matched, and less to the speed with which regular expression objects are constructed. Otherwise it has no detectable effect on the program output. = 1 << 4Specifies that character ranges of the form "[a-b]" should be locale sensitive. = 1 << 10Specifies that the ^ and $ metacharacters DO NOT match at internal line breaks. Note that this is the opposite of the perl default. It is the inverse of perl's /m (multi-line) modifier. = 1 << 11Specifies that the . metacharacter does not match the null character \0. = 1 << 12Specifies that the . metacharacter does not match the newline character \n. = 1 << 13Specifies that non-escaped white-space is not significant. Flags used to customize the regex syntax -= 0Specifies that matching of regular expressions proceeds without any modification of the normal rules used in ECMA-262, ECMAScript Language Specification, Chapter 15 part 10, RegExp (Regular Expression) Objects (FWD.1) = 1 << 1Specifies that the expression "^" should not be matched against the sub-sequence [first,first). = 1 << 2Specifies that the expression "\$" should not be matched against the sub-sequence [last,last). = 1 << 3Specifies that the expression "\\b" should not be matched against the sub-sequence [first,first). = 1 << 4Specifies that the expression "\\b" should not be matched against the sub-sequence [last,last). = 1 << 7Specifies that if more than one match is possible then any match is an acceptable result. = 1 << 8Specifies that the expression can not be matched against an empty sequence. = 1 << 10Specifies that the expression must match a sub-sequence that begins at first. = 1 << 11Specifies that if no match can be found, then it is acceptable to return a match [from, last) where from != last, if there exists some sequence of characters [from,to) of which [from,last) is a prefix, and which would result in a full match. = 1 << 12Specifies that –first is a valid iterator position, when this flag is set then the flags match_not_bol and match_not_bow are ignored by the regular expression algorithms (RE.7) and iterators (RE.8). = 0Specifies that when a regular expression match is to be replaced by a new string, that the new string is constructed using the rules used by the ECMAScript replace function in ECMA-262, ECMAScript Language Specification, Chapter 15 part 5.4.11 String.prototype.replace. (FWD.1). In addition during search and replace operations then all non-overlapping occurrences of the regular expression are located and replaced, and sections of the input that did not match the expression, are copied unchanged to the output string. = 1 << 13Specifies that when a regular expression match is to be replaced by a new string, that the new string is constructed using the rules used by the Unix sed utility in IEEE Std 1003.1-2001, Portable Operating SystemInterface (POSIX), Shells and Utilities. = 1 << 14Specifies that when a regular expression match is to be replaced by a new string, that the new string is constructed using an implementation defined superset of the rules used by the ECMAScript replace function in ECMA-262, ECMAScript Language Specification, Chapter 15 part 5.4.11 String.prototype.replace (FWD.1). = 1 << 15When specified during a search and replace operation, then sections of the character container sequence being searched that do match the regular expression, are not copied to the output string. = 1 << 16When specified during a search and replace operation, then only the first occurrence of the regular expression is replaced. = 1 << 17Treat the format string as a literal. = 1 << 18Specifies that all syntax extensions are enabled, including conditional (?ddexpression1:expression2) replacements. Flags used to customize the behavior of the regex algorithms -The expression contained an invalid collating element name. The expression contained an invalid character class name. The expression contained an invalid escaped character, or a trailing escape. The expression contained an invalid back-reference. The expression contained mismatched [ and ]. The expression contained mismatched ( and ). The expression contained mismatched { and }. The expression contained an invalid range in a {} expression. The expression contained an invalid character range, for example [b-a]. There was insufficient memory to convert the expression into a finite state machine. One of *?+{ was not preceded by a valid regular expression. The complexity of an attempted match against a regular expression exceeded a pre-set level. There was insufficient memory to determine whether the regular expression could match the specified character sequence. An nested regex is uninitialized. An invalid use of a named capture. An attempt to create a variable-width look-behind assertion was detected. An invalid use of a rule was detected. An argument to an action was unbound. Tried to read from an uninitialized attribute. An internal error has occurred. Error codes used by the regex_error type - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Contains the definition of the regex_error exception class. - -std::runtime_errorexceptionThe class regex_error defines the type of objects thrown as exceptions to report errors during the conversion from a string representing a regular expression to a finite state machine. -regex_constants::error_typeAccessor for the error_type value - -the error_type code passed to the constructor -Will not throw. - -regex_constants::error_typeThe error_type this regex_error represents. char const *""The message string of this regex_error. Constructs an object of class regex_error. - -code() == code - -Destructor for class regex_error -Will not throw. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Contains the definition of the regex_iterator type, an STL-compatible iterator for stepping through all the matches in a sequence. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Contains the syntax elements for writing static regular expressions. - -Sub-match placeholder type, used to create named captures in static regexes. mark_tag is the type of the global sub-match placeholders s0, s1, etc.. You can use the mark_tag type to create your own sub-match placeholders with more meaningful names. This is roughly equivalent to the "named capture" feature of dynamic regular expressions.To create a named sub-match placeholder, initialize it with a unique integer. The integer must only be unique within the regex in which the placeholder is used. Then you can use it within static regexes to created sub-matches by assigning a sub-expression to it, or to refer back to already created sub-matches.mark_tag number(1); // "number" is now equivalent to "s1" -// Match a number, followed by a space and the same number again -sregex rx = (number = +_d) >> ' ' >> number; -After a successful regex_match() or regex_search(), the sub-match placeholder can be used to index into the match_results<> object to retrieve the corresponding sub-match. -unspecifiedint - - - -intAn integer that uniquely identifies this mark_tag within the static regexes in which this mark_tag will be used. Initialize a mark_tag placeholder. - -mark_nbr > 0 - -unsigned int constFor infinite repetition of a sub-expression. Magic value used with the repeat<>() function template to specify an unbounded repeat. Use as: repeat<17, inf>('a'). The equivalent in perl is /a{17,}/. -unspecifiedSuccessfully matches nothing. Successfully matches a zero-width sequence. nil always succeeds and never consumes any characters. -unspecifiedMatches an alpha-numeric character. The regex traits are used to determine which characters are alpha-numeric. To match any character that is not alpha-numeric, use ~alnum.alnum is equivalent to /[[:alnum:]]/ in perl. ~alnum is equivalent to /[[:^alnum:]]/ in perl. - - -unspecifiedMatches an alphabetic character. The regex traits are used to determine which characters are alphabetic. To match any character that is not alphabetic, use ~alpha.alpha is equivalent to /[[:alpha:]]/ in perl. ~alpha is equivalent to /[[:^alpha:]]/ in perl. - - -unspecifiedMatches a blank (horizonal white-space) character. The regex traits are used to determine which characters are blank characters. To match any character that is not blank, use ~blank.blank is equivalent to /[[:blank:]]/ in perl. ~blank is equivalent to /[[:^blank:]]/ in perl. - - -unspecifiedMatches a control character. The regex traits are used to determine which characters are control characters. To match any character that is not a control character, use ~cntrl.cntrl is equivalent to /[[:cntrl:]]/ in perl. ~cntrl is equivalent to /[[:^cntrl:]]/ in perl. - - -unspecifiedMatches a digit character. The regex traits are used to determine which characters are digits. To match any character that is not a digit, use ~digit.digit is equivalent to /[[:digit:]]/ in perl. ~digit is equivalent to /[[:^digit:]]/ in perl. - - -unspecifiedMatches a graph character. The regex traits are used to determine which characters are graphable. To match any character that is not graphable, use ~graph.graph is equivalent to /[[:graph:]]/ in perl. ~graph is equivalent to /[[:^graph:]]/ in perl. - - -unspecifiedMatches a lower-case character. The regex traits are used to determine which characters are lower-case. To match any character that is not a lower-case character, use ~lower.lower is equivalent to /[[:lower:]]/ in perl. ~lower is equivalent to /[[:^lower:]]/ in perl. - - -unspecifiedMatches a printable character. The regex traits are used to determine which characters are printable. To match any character that is not printable, use ~print.print is equivalent to /[[:print:]]/ in perl. ~print is equivalent to /[[:^print:]]/ in perl. - - -unspecifiedMatches a punctuation character. The regex traits are used to determine which characters are punctuation. To match any character that is not punctuation, use ~punct.punct is equivalent to /[[:punct:]]/ in perl. ~punct is equivalent to /[[:^punct:]]/ in perl. - - -unspecifiedMatches a space character. The regex traits are used to determine which characters are space characters. To match any character that is not white-space, use ~space.space is equivalent to /[[:space:]]/ in perl. ~space is equivalent to /[[:^space:]]/ in perl. - - -unspecifiedMatches an upper-case character. The regex traits are used to determine which characters are upper-case. To match any character that is not upper-case, use ~upper.upper is equivalent to /[[:upper:]]/ in perl. ~upper is equivalent to /[[:^upper:]]/ in perl. - - -unspecifiedMatches a hexadecimal digit character. The regex traits are used to determine which characters are hex digits. To match any character that is not a hex digit, use ~xdigit.xdigit is equivalent to /[[:xdigit:]]/ in perl. ~xdigit is equivalent to /[[:^xdigit:]]/ in perl. - - -unspecifiedBeginning of sequence assertion. For the character sequence [begin, end), 'bos' matches the zero-width sub-sequence [begin, begin). -unspecifiedEnd of sequence assertion. For the character sequence [begin, end), 'eos' matches the zero-width sub-sequence [end, end).Unlike the perl end of sequence assertion $, 'eos' will not match at the position [end-1, end-1) if *(end-1) is '\n'. To get that behavior, use (!_n >> eos). - - -unspecifiedBeginning of line assertion. 'bol' matches the zero-width sub-sequence immediately following a logical newline sequence. The regex traits is used to determine what constitutes a logical newline sequence. -unspecifiedEnd of line assertion. 'eol' matches the zero-width sub-sequence immediately preceeding a logical newline sequence. The regex traits is used to determine what constitutes a logical newline sequence. -unspecifiedBeginning of word assertion. 'bow' matches the zero-width sub-sequence immediately following a non-word character and preceeding a word character. The regex traits are used to determine what constitutes a word character. -unspecifiedEnd of word assertion. 'eow' matches the zero-width sub-sequence immediately following a word character and preceeding a non-word character. The regex traits are used to determine what constitutes a word character. -unspecifiedWord boundary assertion. '_b' matches the zero-width sub-sequence at the beginning or the end of a word. It is equivalent to (bow | eow). The regex traits are used to determine what constitutes a word character. To match a non-word boundary, use ~_b._b is like \b in perl. ~_b is like \B in perl. - - -unspecifiedMatches a word character. '_w' matches a single word character. The regex traits are used to determine which characters are word characters. Use ~_w to match a character that is not a word character._w is like \w in perl. ~_w is like \W in perl. - - -unspecifiedMatches a digit character. '_d' matches a single digit character. The regex traits are used to determine which characters are digits. Use ~_d to match a character that is not a digit character._d is like \d in perl. ~_d is like \D in perl. - - -unspecifiedMatches a space character. '_s' matches a single space character. The regex traits are used to determine which characters are space characters. Use ~_s to match a character that is not a space character._s is like \s in perl. ~_s is like \S in perl. - - -proto::terminal< char >::type constMatches a literal newline character, '\n'. '_n' matches a single newline character, '\n'. Use ~_n to match a character that is not a newline.~_n is like '.' in perl without the /s modifier. - - -unspecifiedMatches a logical newline sequence. '_ln' matches a logical newline sequence. This can be any character in the line separator class, as determined by the regex traits, or the '\r\n' sequence. For the purpose of back-tracking, '\r\n' is treated as a unit. To match any one character that is not a logical newline, use ~_ln. -unspecifiedMatches any one character. Match any character, similar to '.' in perl syntax with the /s modifier. '_' matches any one character, including the newline.To match any character except the newline, use ~_n - - -unspecifiedReference to the current regex object. Useful when constructing recursive regular expression objects. The 'self' identifier is a short-hand for the current regex object. For instance, sregex rx = '(' >> (self | nil) >> ')'; will create a regex object that matches balanced parens such as "((()))". -unspecifiedUsed to create character sets. There are two ways to create character sets with the 'set' identifier. The easiest is to create a comma-separated list of the characters in the set, as in (set= 'a','b','c'). This set will match 'a', 'b', or 'c'. The other way is to define the set as an argument to the set subscript operator. For instance, set[ 'a' | range('b','c') | digit ] will match an 'a', 'b', 'c' or a digit character.To complement a set, apply the '~' operator. For instance, ~(set= 'a','b','c') will match any character that is not an 'a', 'b', or 'c'.Sets can be composed of other, possibly complemented, sets. For instance, set[ ~digit | ~(set= 'a','b','c') ]. -mark_tag constSub-match placeholder, like $& in Perl. -mark_tag constSub-match placeholder, like $1 in perl. To create a sub-match, assign a sub-expression to the sub-match placeholder. For instance, (s1= _) will match any one character and remember which character was matched in the 1st sub-match. Later in the pattern, you can refer back to the sub-match. For instance, (s1= _) >> s1 will match any character, and then match the same character again.After a successful regex_match() or regex_search(), the sub-match placeholders can be used to index into the match_results<> object to retrieve the Nth sub-match. -mark_tag const -mark_tag const -mark_tag const -mark_tag const -mark_tag const -mark_tag const -mark_tag const -mark_tag const -unspecified -unspecified -unspecified -unspecified -unspecified -unspecified -unspecified -unspecified -unspecified - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -unspecifiedExpr const &Makes a sub-expression case-insensitive. Use icase() to make a sub-expression case-insensitive. For instance, "foo" >> icase(set['b'] >> "ar") will match "foo" exactly followed by "bar" irrespective of case. -unspecifiedLiteral const &Makes a literal into a regular expression. Use as_xpr() to turn a literal into a regular expression. For instance, "foo" >> "bar" will not compile because both operands to the right-shift operator are const char*, and no such operator exists. Use as_xpr("foo") >> "bar" instead.You can use as_xpr() with character literals in addition to string literals. For instance, as_xpr('a') will match an 'a'. You can also complement a character literal, as with ~as_xpr('a'). This will match any one character that is not an 'a'. -proto::terminal< reference_wrapper< basic_regex< BidiIter > const > >::type constbasic_regex< BidiIter > const &The basic_regex object to embed by reference. Embed a regex object by reference. - -unspecifiedCharThe lower end of the range to match. CharThe upper end of the range to match. Match a range of characters. Match any character in the range [ch_min, ch_max]. - -proto::result_of::make_expr< proto::tag::logical_not, proto::default_domain, Expr const & >::type constExpr const &The sub-expression to make optional. Make a sub-expression optional. Equivalent to !as_xpr(expr). - -unspecifiedExpr const &The sub-expression to repeat. unspecifiedExpr2 const &Repeat a sub-expression multiple times. There are two forms of the repeat<>() function template. To match a sub-expression N times, use repeat<N>(expr). To match a sub-expression from M to N times, use repeat<M,N>(expr).The repeat<>() function creates a greedy quantifier. To make the quantifier non-greedy, apply the unary minus operator, as in -repeat<M,N>(expr). - - -unspecifiedExpr const &The sub-expression to modify. Create an independent sub-expression. Turn off back-tracking for a sub-expression. Any branches or repeats within the sub-expression will match only one way, and no other alternatives are tried.keep(expr) is equivalent to the perl (?>...) extension. - - - -unspecifiedExpr const &The sub-expression to put in the look-ahead assertion. Look-ahead assertion. before(expr) succeeds if the expr sub-expression would match at the current position in the sequence, but expr is not included in the match. For instance, before("foo") succeeds if we are before a "foo". Look-ahead assertions can be negated with the bit-compliment operator.before(expr) is equivalent to the perl (?=...) extension. ~before(expr) is a negative look-ahead assertion, equivalent to the perl (?!...) extension. - - - -unspecifiedExpr const &The sub-expression to put in the look-ahead assertion.Look-behind assertion. after(expr) succeeds if the expr sub-expression would match at the current position minus N in the sequence, where N is the width of expr. expr is not included in the match. For instance, after("foo") succeeds if we are after a "foo". Look-behind assertions can be negated with the bit-complement operator.after(expr) is equivalent to the perl (?<=...) extension. ~after(expr) is a negative look-behind assertion, equivalent to the perl (?<!...) extension. - - - -expr cannot match a variable number of characters. - -unspecifiedLocale const &The std::locale or regex traits object. Specify a regex traits or a std::locale. imbue() instructs the regex engine to use the specified traits or locale when matching the regex. The entire expression must use the same traits/locale. For instance, the following specifies a locale for use with a regex: std::locale loc; sregex rx = imbue(loc)(+digit); - -unspecifiedSkip const &A regex that specifies which characters to skip. Specify which characters to skip when matching a regex. skip() instructs the regex engine to skip certain characters when matching a regex. It is most useful for writing regexes that ignore whitespace. For instance, the following specifies a regex that skips whitespace and punctuation:// A sentence is one or more words separated by whitespace -// and punctuation. -sregex word = +alpha; -sregex sentence = skip(set[_s | punct])( +word ); -The way it works in the above example is to insert keep(*set[_s | punct]) before each primitive within the regex. A "primitive" includes terminals like strings, character sets and nested regexes. A final *set[_s | punct] is added to the end of the regex. The regex sentence specified above is equivalent to the following:sregex sentence = +( keep(*set[_s | punct]) >> word ) - >> *set[_s | punct]; -Skipping does not affect how nested regexes are handled because they are treated atomically. String literals are also treated atomically; that is, no skipping is done within a string literal. So skip(_s)("this that") is not the same as skip(_s)("this" >> as_xpr("that")). The first will only match when there is only one space between "this" and "that". The second will skip any and all whitespace between "this" and "that". - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Contains the definition of regex_token_iterator, and STL-compatible iterator for tokenizing a string using a regular expression. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Includes the C regex traits or the CPP regex traits header file depending on the BOOST_XPRESSIVE_USE_C_TRAITS macro. - -Tag used to denote that a traits class conforms to the version 1 traits interface. boost::xpressive::regex_traits_version_1_tagTag used to denote that a traits class conforms to the version 2 traits interface. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Contains the definition of the class template sub_match<> and associated helper functions - -BidiItersub_match< BidiIter > &the sub_match<> object denoting the range BidiItersub_match< BidiIter > const &range_begin() to make sub_match<> a valid range - - -sub.first is not singular -sub.first - - -BidiItersub_match< BidiIter > &the sub_match<> object denoting the range BidiItersub_match< BidiIter > const &range_end() to make sub_match<> a valid range - - -sub.second is not singular -sub.second - - -std::basic_ostream< Char, Traits > &std::basic_ostream< Char, Traits > &output stream. sub_match< BidiIter > const &sub_match object to be written to the stream. insertion operator for sending sub-matches to ostreams - -sout << sub.str() - -boolsub_match< BidiIter > const &sub_match< BidiIter > const & -boolsub_match< BidiIter > const &sub_match< BidiIter > const & -boolsub_match< BidiIter > const &sub_match< BidiIter > const & -boolsub_match< BidiIter > const &sub_match< BidiIter > const & -boolsub_match< BidiIter > const &sub_match< BidiIter > const & -boolsub_match< BidiIter > const &sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const *sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const *sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const *sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const *sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const *sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const *sub_match< BidiIter > const & -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const * -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const * -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const * -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const * -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const * -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const * -booltypename iterator_value< BidiIter >::type const &sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const &sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const &sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const &sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const &sub_match< BidiIter > const & -booltypename iterator_value< BidiIter >::type const &sub_match< BidiIter > const & -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const & -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const & -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const & -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const & -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const & -boolsub_match< BidiIter > const &typename iterator_value< BidiIter >::type const & -sub_match< BidiIter >::string_typesub_match< BidiIter > const &sub_match< BidiIter > const & -sub_match< BidiIter >::string_typesub_match< BidiIter > const &typename iterator_value< BidiIter >::type const & -sub_match< BidiIter >::string_typetypename iterator_value< BidiIter >::type const &sub_match< BidiIter > const & -sub_match< BidiIter >::string_typesub_match< BidiIter > const &typename iterator_value< BidiIter >::type const * -sub_match< BidiIter >::string_typetypename iterator_value< BidiIter >::type const *sub_match< BidiIter > const & -sub_match< BidiIter >::string_typesub_match< BidiIter > const &typename sub_match< BidiIter >::string_type const & -sub_match< BidiIter >::string_typetypename sub_match< BidiIter >::string_type const &sub_match< BidiIter > const & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Contains the definition of the c_regex_traits<> template, which is a wrapper for the C locale functions that can be used to customize the behavior of static and dynamic regexes. - -c_regex_traits< char >true_ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Contains the definition of the cpp_regex_traits<> template, which is a wrapper for std::locale that can be used to customize the behavior of static and dynamic regexes. - -cpp_regex_traits< char >true_ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Contains the definition of the null_regex_traits<> template, which is a stub regex traits implementation that can be used by static and dynamic regexes for searching non-character data. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Includes all of xpressive including support for both static and dynamic regular expressions.
-
-Includes everything you need to write and use dynamic regular expressions.
-
-Forward declarations for all of xpressive's public data types. - -Class template basic_regex<> is a class for holding a compiled regular expression. -std::size_tReturns the count of capturing sub-expressions in this regular expression -regex_id_typeReturns a token which uniquely identifies this regular expression. -voidbasic_regex< BidiIter > &The other basic_regex object. Swaps the contents of this basic_regex object with another. -This is a shallow swap that does not do reference tracking. If you embed a basic_regex object by reference in another regular expression and then swap its contents with another basic_regex object, the change will not be visible to the enclosing regular expression. It is done this way to ensure that swap() cannot throw. - - -Will not throw. - - - -regex_id() == 0 -mark_count() == 0 - -basic_regex< BidiIter > const &The basic_regex object to copy. - - -regex_id() == that.regex_id() -mark_count() == that.mark_count() - -basic_regex< BidiIter > &basic_regex< BidiIter > const &The basic_regex object to copy. - - - -regex_id() == that.regex_id() -mark_count() == that.mark_count() -*this - -Expr const &The static regular expression Construct from a static regular expression. - - - -Expr is the type of a static regular expression. -regex_id() != 0 -mark_count() >= 0 - -basic_regex< BidiIter > &Expr const &The static regular expression. Construct from a static regular expression. - - - - - -Expr is the type of a static regular expression. -regex_id() != 0 -mark_count() >= 0 -*this -std::bad_alloc on out of memory - -basic_regex< BidiIter >InputIterThe beginning of a range of characters representing the regular expression to compile. InputIterThe end of a range of characters representing the regular expression to compile. flag_typeregex_constants::ECMAScriptOptional bitmask that determines how the pat string is interpreted. (See syntax_option_type.) Factory method for building a regex object from a range of characters. Equivalent to regex_compiler< BidiIter >().compile(begin, end, flags); - - - - -[begin,end) is a valid range. -The range of characters specified by [begin,end) contains a valid string-based representation of a regular expression. -A basic_regex object corresponding to the regular expression represented by the character range. -regex_error when the range of characters has invalid regular expression syntax. -basic_regex< BidiIter >InputRange const &flag_typeregex_constants::ECMAScriptThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -basic_regex< BidiIter >char_type const *flag_typeregex_constants::ECMAScriptThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -basic_regex< BidiIter >char_type const *std::size_tflag_typeThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. - - - -Encapsaulates the standard C locale functions for use by the basic_regex<> class template. -boolc_regex_traits< char_type > const &Checks two c_regex_traits objects for equality -true. - -boolc_regex_traits< char_type > const &Checks two c_regex_traits objects for inequality -false. - -string_typechar_typeThe source character. Returns a string_type containing all the characters that compare equal disregrarding case to the one passed in. This function can only be called if has_fold_case<c_regex_traits<Char> >::value is true. - -string_type containing all chars which are equal to ch when disregarding case - -locale_typelocale_typeNo-op - -locale_type const &locale_type()Initialize a c_regex_traits object to use the global C locale. - -char_typecharThe source character. Convert a char to a Char - -ch if Char is char, std::btowc(ch) if Char is wchar_t. - -unsigned charchar_typeThe source character. Returns a hash value for a Char in the range [0, UCHAR_MAX] - -a value between 0 and UCHAR_MAX, inclusive. - -char_typechar_typeThe source character. No-op - -ch - -char_typechar_typeThe source character. Converts a character to lower-case using the current global C locale. - -std::tolower(ch) if Char is char, std::towlower(ch) if Char is wchar_t. - -char_typechar_typeThe source character. Converts a character to lower-case using the current global C locale. - -std::tolower(ch) if Char is char, std::towlower(ch) if Char is wchar_t. - -char_typechar_typeThe source character. Converts a character to upper-case using the current global C locale. - -std::toupper(ch) if Char is char, std::towupper(ch) if Char is wchar_t. - -boolchar_typeThe bottom of the range, inclusive. char_typeThe top of the range, inclusive. char_typeThe source character. Checks to see if a character is within a character range. - -first <= ch && ch <= last. - -boolchar_typeThe bottom of the range, inclusive. char_typeThe top of the range, inclusive. char_typeThe source character. Checks to see if a character is within a character range, irregardless of case. - -The default implementation doesn't do proper Unicode case folding, but this is the best we can do with the standard C locale functions. - -in_range(first, last, ch) || in_range(first, last, tolower(ch)) || in_range(first, last, toupper(ch)) - -string_typeFwdIterFwdIterReturns a sort key for the character sequence designated by the iterator range [F1, F2) such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2) then v.transform(G1, G2) < v.transform(H1, H2).Not currently used - - -string_typeFwdIterFwdIterReturns a sort key for the character sequence designated by the iterator range [F1, F2) such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2) when character case is not considered then v.transform_primary(G1, G2) < v.transform_primary(H1, H2).Not currently used - - -string_typeFwdIterFwdIterReturns a sequence of characters that represents the collating element consisting of the character sequence designated by the iterator range [F1, F2). Returns an empty string if the character sequence is not a valid collating element.Not currently used - - -char_class_typeFwdIterA forward iterator to the start of the character sequence representing the name of the character class. FwdIterThe end of the character sequence. boolSpecifies whether the returned bitmask should represent the case-insensitive version of the character class. For the character class name represented by the specified character sequence, return the corresponding bitmask representation. - -A bitmask representing the character class. - -boolchar_typeThe character to test. char_class_typeThe character class bitmask against which to test. Tests a character against a character class bitmask. - - -mask is a bitmask returned by lookup_classname, or is several such masks bit-or'ed together. -true if the character is a member of any of the specified character classes, false otherwise. - -intchar_typeThe digit character. intThe radix to use for the conversion. Convert a digit character into the integer it represents. - - -radix is one of 8, 10, or 16. --1 if ch is not a digit character, the integer value of the character otherwise. If char_type is char, std::strtol is used for the conversion. If char_type is wchar_t, std::wcstol is used. - -locale_typeNo-op - -Encapsaulates a std::locale for use by the basic_regex<> class template. -boolcpp_regex_traits< char_type > const &Checks two cpp_regex_traits objects for equality -this->getloc() == that.getloc(). - -boolcpp_regex_traits< char_type > const &Checks two cpp_regex_traits objects for inequality -this->getloc() != that.getloc(). - -char_typecharThe source character. Convert a char to a Char - -std::use_facet<std::ctype<char_type> >(this->getloc()).widen(ch). - -char_typechar_typeThe source character. Converts a character to lower-case using the internally-stored std::locale. - -std::tolower(ch, this->getloc()). - -char_typechar_typeThe source character. Converts a character to lower-case using the internally-stored std::locale. - -std::tolower(ch, this->getloc()). - -char_typechar_typeThe source character. Converts a character to upper-case using the internally-stored std::locale. - -std::toupper(ch, this->getloc()). - -string_typechar_typeThe source character. Returns a string_type containing all the characters that compare equal disregrarding case to the one passed in. This function can only be called if has_fold_case<cpp_regex_traits<Char> >::value is true. - -string_type containing all chars which are equal to ch when disregarding case - -boolchar_typeThe bottom of the range, inclusive. char_typeThe top of the range, inclusive. char_typeThe source character. Checks to see if a character is within a character range, irregardless of case. - -The default implementation doesn't do proper Unicode case folding, but this is the best we can do with the standard ctype facet. - -in_range(first, last, ch) || in_range(first, last, tolower(ch, this->getloc())) || in_range(first, last, toupper(ch, this->getloc())) - -string_typeFwdIterFwdIterReturns a sort key for the character sequence designated by the iterator range [F1, F2) such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2) when character case is not considered then v.transform_primary(G1, G2) < v.transform_primary(H1, H2).Not currently used - - -string_typeFwdIterFwdIterReturns a sequence of characters that represents the collating element consisting of the character sequence designated by the iterator range [F1, F2). Returns an empty string if the character sequence is not a valid collating element.Not currently used - - -char_class_typeFwdIterA forward iterator to the start of the character sequence representing the name of the character class. FwdIterThe end of the character sequence. boolSpecifies whether the returned bitmask should represent the case-insensitive version of the character class. For the character class name represented by the specified character sequence, return the corresponding bitmask representation. - -A bitmask representing the character class. - -boolchar_typeThe character to test. char_class_typeThe character class bitmask against which to test. Tests a character against a character class bitmask. - - -mask is a bitmask returned by lookup_classname, or is several such masks bit-or'ed together. -true if the character is a member of any of the specified character classes, false otherwise. - -intchar_typeThe digit character. intThe radix to use for the conversion. Convert a digit character into the integer it represents. - - -radix is one of 8, 10, or 16. --1 if ch is not a digit character, the integer value of the character otherwise. The conversion is performed by imbueing a std::stringstream with this->getloc(); setting the radix to one of oct, hex or dec; inserting ch into the stream; and extracting an int. - -locale_typelocale_typeA std::locale. Imbues *this with loc - -the previous std::locale used by *this. - -locale_typeReturns the current std::locale used by *this. -unsigned charunsigned char -unsigned charchar -unsigned charsigned char -unsigned charwchar_t - -locale_type const &locale_type()Initialize a cpp_regex_traits object to use the specified std::locale, or the global std::locale if none is specified. - -unsigned charchar_typeThe source character. Returns a hash value for a Char in the range [0, UCHAR_MAX] - -a value between 0 and UCHAR_MAX, inclusive. - -char_typechar_typeThe source character. No-op - -ch - -boolchar_typeThe bottom of the range, inclusive. char_typeThe top of the range, inclusive. char_typeThe source character. Checks to see if a character is within a character range. - -first <= ch && ch <= last. - - - - -is_convertible< Traits::version_tag *, regex_traits_version_1_case_fold_tag * >Trait used to denote that a traits class has the fold_case member function. proto::terminal::type< reference_wrapper< T > >local<> is a lazy wrapper for a reference to a value that is stored within the local itself. It is for use within xpressive semantic actions. -Below is an example of how to use local<> in semantic actions.using namespace boost::xpressive; -local<int> i(0); -std::string str("1!2!3?"); -// count the exciting digits, but not the -// questionable ones. -sregex rex = +( _d [ ++i ] >> '!' ); -regex_search(str, rex); -assert( i.get() == 2 ); -As the name "local" suggests, local<> objects and the regexes that refer to them should never leave the local scope. The value stored within the local object will be destroyed at the end of the local<>'s lifetime, and any regex objects still holding the local<> will be left with a dangling reference. - - -T &Fetch the wrapped value. -T const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. - -Store a default-constructed value of type T. -T const &The initial value. Store a default-constructed value of type T. - -Class template match_results<> holds the results of a regex_match() or a regex_search() as a collection of sub_match objects. Class template match_results<> denotes a collection of sequences representing the result of a regular expression match. Storage for the collection is allocated and freed as necessary by the member functions of class match_results<>.The class template match_results<> conforms to the requirements of a Sequence, as specified in (lib.sequence.reqmts), except that only operations defined for const-qualified Sequences are supported. -size_typeReturns one plus the number of marked sub-expressions in the regular expression that was matched if *this represents the result of a successful match. Otherwise returns 0. -boolReturns size() == 0. -difference_typesize_type0Returns (*this)[sub].length(). -difference_typesize_type0If !(*this)[sub].matched then returns -1. Otherwise returns std::distance(base, (*this)[sub].first), where base is the start iterator of the sequence that was searched. [Note - unless this is part of a repeated search with a regex_iterator then base is the same as prefix().first - end note] -string_typesize_type0Returns (*this)[sub].str(). -const_referenceSub const &Returns a reference to the sub_match object representing the sequence that matched marked sub-expression sub. If sub == 0 then returns a reference to a sub_match object representing the sequence that matched the whole regular expression. If sub >= size() then returns a sub_match object representing an unmatched sub-expression. -const_referenceReturns a reference to the sub_match object representing the character sequence from the start of the string being matched/searched, to the start of the match found. -(*this)[0].matched is true - -const_referenceReturns a reference to the sub_match object representing the character sequence from the end of the match found to the end of the string being matched/searched. -(*this)[0].matched is true - -const_iteratorReturns a starting iterator that enumerates over all the marked sub-expression matches stored in *this. -const_iteratorReturns a terminating iterator that enumerates over all the marked sub-expression matches stored in *this. -bool_typeReturns a true value if (*this)[0].matched, else returns a false value. -boolReturns true if empty() || !(*this)[0].matched, else returns false. -regex_id_typeReturns the id of the basic_regex object most recently used with this match_results object. -nested_results_type const &Returns a Sequence of nested match_results elements. -OutputIteratorOutputIteratorFormat const &regex_constants::match_flag_typeregex_constants::format_defaultunspecified0If Format models ForwardRange or is a null-terminated string, this function copies the character sequence in fmt to OutputIterator out. For each format specifier or escape sequence in fmt, replace that sequence with either the character(s) it represents, or the sequence within *this to which it refers. The bitmasks specified in flags determines what format specifiers or escape sequences are recognized. By default, this is the format used by ECMA-262, ECMAScript Language Specification, Chapter 15 part 5.4.11 String.prototype.replace.Otherwise, if Format models Callable<match_results<BidiIter>, OutputIterator, regex_constants::match_flag_type>, this function returns fmt(*this, out, flags).Otherwise, if Format models Callable<match_results<BidiIter>, OutputIterator>, this function returns fmt(*this, out).Otherwise, if Format models Callable<match_results<BidiIter> >, this function returns std::copy(x.begin(), x.end(), out), where x is the result of calling fmt(*this). -OutputIteratorOutputIteratorchar_type const *regex_constants::match_flag_typeregex_constants::format_defaultThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -string_typeFormat const &regex_constants::match_flag_typeregex_constants::format_defaultunspecified0If Format models ForwardRange or is a null-terminated string, this function returns a copy of the character sequence fmt. For each format specifier or escape sequence in fmt, replace that sequence with either the character(s) it represents, or the sequence within *this to which it refers. The bitmasks specified in flags determines what format specifiers or escape sequences are recognized. By default this is the format used by ECMA-262, ECMAScript Language Specification, Chapter 15 part 5.4.11 String.prototype.replace.Otherwise, if Format models Callable<match_results<BidiIter>, OutputIterator, regex_constants::match_flag_type>, this function returns a string_type object x populated by calling fmt(*this, out, flags), where out is a back_insert_iterator into x.Otherwise, if Format models Callable<match_results<BidiIter>, OutputIterator>, this function returns a string_type object x populated by calling fmt(*this, out), where out is a back_insert_iterator into x.Otherwise, if Format models Callable<match_results<BidiIter> >, this function returns fmt(*this). -string_typechar_type const *regex_constants::match_flag_typeregex_constants::format_defaultThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidmatch_results< BidiIter > &The match_results object to swap with. Swaps the contents of two match_results objects. Guaranteed not to throw. - - -*this contains the sequence of matched sub-expressions that were in that, that contains the sequence of matched sub-expressions that were in *this. -Will not throw. -match_results< BidiIter > &Arg const &TODO document me - - - - - -regex_id() == 0 -size() == 0 -empty() == true -str() == string_type() - -match_results< BidiIter > const &The match_results object to copy - - - - - - - - - -regex_id() == that.regex_id(). -size() == that.size(). -empty() == that.empty(). -str(n) == that.str(n) for all positive integers n < that.size(). -prefix() == that.prefix(). -suffix() == that.suffix(). -(*this)[n] == that[n] for all positive integers n < that.size(). -length(n) == that.length(n) for all positive integers n < that.size(). -position(n) == that.position(n) for all positive integers n < that.size(). - - -match_results< BidiIter > &match_results< BidiIter > const &The match_results object to copy. - - - - - - - - - -regex_id() == that.regex_id(). -size() == that.size(). -empty() == that.empty(). -str(n) == that.str(n) for all positive integers n < that.size(). -prefix() == that.prefix(). -suffix() == that.suffix(). -(*this)[n] == that[n] for all positive integers n < that.size(). -length(n) == that.length(n) for all positive integers n < that.size(). -position(n) == that.position(n) for all positive integers n < that.size(). - -stub regex_traits for non-char data -boolnull_regex_traits< char_type > const &Checks two null_regex_traits objects for equality -true. - -boolnull_regex_traits< char_type > const &Checks two null_regex_traits objects for inequality -false. - -char_typecharThe source character. Convert a char to a Elem - -Elem(ch). - - -locale_typelocale_type()Initialize a null_regex_traits object. - -unsigned charchar_typeThe source character. Returns a hash value for a Elem in the range [0, UCHAR_MAX] - -a value between 0 and UCHAR_MAX, inclusive. - -char_typechar_typeThe source character. No-op - -ch - -char_typechar_typeThe source character. No-op - -ch - -boolchar_typeThe bottom of the range, inclusive. char_typeThe top of the range, inclusive. char_typeThe source character. Checks to see if a character is within a character range. - -first <= ch && ch <= last. - -boolchar_typeThe bottom of the range, inclusive. char_typeThe top of the range, inclusive. char_typeThe source character. Checks to see if a character is within a character range. - -Since the null_regex_traits does not do case-folding, this function is equivalent to in_range(). - -first <= ch && ch <= last. - -string_typeFwdIterFwdIterReturns a sort key for the character sequence designated by the iterator range [F1, F2) such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2) then v.transform(G1, G2) < v.transform(H1, H2).Not currently used - - -string_typeFwdIterFwdIterReturns a sort key for the character sequence designated by the iterator range [F1, F2) such that if the character sequence [G1, G2) sorts before the character sequence [H1, H2) when character case is not considered then v.transform_primary(G1, G2) < v.transform_primary(H1, H2).Not currently used - - -string_typeFwdIterFwdIterReturns a sequence of characters that represents the collating element consisting of the character sequence designated by the iterator range [F1, F2). Returns an empty string if the character sequence is not a valid collating element.Not currently used - - -char_class_typeFwdIternot used FwdIternot used boolnot used The null_regex_traits does not have character classifications, so lookup_classname() is unused. - -static_cast<char_class_type>(0) - -boolchar_typenot used char_class_typenot used The null_regex_traits does not have character classifications, so isctype() is unused. - -false - -intchar_typenot used intnot used The null_regex_traits recognizes no elements as digits, so value() is unused. - --1 - -locale_typelocale_typenot used Not used - -loc - -locale_typeReturns locale_type(). -locale_type() - - -For defining a placeholder to stand in for a variable a semantic action. Use placeholder<> to define a placeholder for use in semantic actions to stand in for real objects. The use of placeholders allows regular expressions with actions to be defined once and reused in many contexts to read and write from objects which were not available when the regex was defined. -You can use placeholder<> by creating an object of type placeholder<T> and using that object in a semantic action exactly as you intend an object of type T to be used.placeholder<int> _i; -placeholder<double> _d; - -sregex rex = ( some >> regex >> here ) - [ ++_i, _d *= _d ]; -Then, when doing a pattern match with either regex_search(), regex_match() or regex_replace(), pass a match_results<> object that contains bindings for the placeholders used in the regex object's semantic actions. You can create the bindings by calling match_results::let as follows:int i = 0; -double d = 3.14; - -smatch what; -what.let(_i = i) - .let(_d = d); - -if(regex_match("some string", rex, what)) - // i and d mutated here -If a semantic action executes that contains an unbound placeholder, a exception of type regex_error is thrown.See the discussion for xpressive::let() and the "Referring to Non-Local Variables" section in the Users' Guide for more information.Example:// Define a placeholder for a map object: -placeholder<std::map<std::string, int> > _map; - -// Match a word and an integer, separated by =>, -// and then stuff the result into a std::map<> -sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) ) - [ _map[s1] = as<int>(s2) ]; - -// Match one or more word/integer pairs, separated -// by whitespace. -sregex rx = pair >> *(+_s >> pair); - -// The string to parse -std::string str("aaa=>1 bbb=>23 ccc=>456"); - -// Here is the actual map to fill in: -std::map<std::string, int> result; - -// Bind the _map placeholder to the actual map -smatch what; -what.let( _map = result ); - -// Execute the match and fill in result map -if(regex_match(str, what, rx)) -{ - std::cout << result["aaa"] << '\n'; - std::cout << result["bbb"] << '\n'; - std::cout << result["ccc"] << '\n'; -} - - -unspecifiedT &The object to associate with this placeholder - -An object of unspecified type that records the association of t with *this. - -unspecifiedT const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -proto::extends< proto::terminal< reference_wrapper< T > >::type, reference< T > >reference<> is a lazy wrapper for a reference that can be used in xpressive semantic actions. -Here is an example of how to use reference<> to create a lazy reference to an existing object so it can be read and written in an xpressive semantic action.using namespace boost::xpressive; -std::map<std::string, int> result; -reference<std::map<std::string, int> > result_ref(result); - -// Match a word and an integer, separated by =>, -// and then stuff the result into a std::map<> -sregex pair = ( (s1= +_w) >> "=>" >> (s2= +_d) ) - [ result_ref[s1] = as<int>(s2) ]; - -T &Fetch the stored value. - -T &Reference to object Store a reference to t. - -Class template regex_compiler is a factory for building basic_regex objects from a string. Class template regex_compiler is used to construct a basic_regex object from a string. The string should contain a valid regular expression. You can imbue a regex_compiler object with a locale, after which all basic_regex objects created with that regex_compiler object will use that locale. After creating a regex_compiler object, and optionally imbueing it with a locale, you can call the compile() method to construct a basic_regex object, passing it the string representing the regular expression. You can call compile() multiple times on the same regex_compiler object. Two basic_regex objects compiled from the same string will have different regex_id's. -locale_typelocale_typeThe locale that this regex_compiler should use. Specify the locale to be used by a regex_compiler. - -The previous locale. - -locale_typeGet the locale used by a regex_compiler. -The locale used by this regex_compiler. - -basic_regex< BidiIter >InputIterThe beginning of a range of characters representing the regular expression to compile. InputIterThe end of a range of characters representing the regular expression to compile. flag_typeregex_constants::ECMAScriptOptional bitmask that determines how the pat string is interpreted. (See syntax_option_type.) Builds a basic_regex object from a range of characters. - - - - - -InputIter is a model of the InputIterator concept. -[begin,end) is a valid range. -The range of characters specified by [begin,end) contains a valid string-based representation of a regular expression. -A basic_regex object corresponding to the regular expression represented by the character range. -regex_error when the range of characters has invalid regular expression syntax. -disable_if< is_pointer< InputRange >, basic_regex< BidiIter > >::typeInputRange const &flag_typeregex_constants::ECMAScriptThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -basic_regex< BidiIter >char_type const *flag_typeregex_constants::ECMAScriptThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -basic_regex< BidiIter >char_type const *std::size_tflag_typeThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -basic_regex< BidiIter > &string_type const &A std::string containing the name of the regular expression. Return a reference to the named regular expression. If no such named regular expression exists, create a new regular expression and return a reference to it. - - -The string is not empty. -bad_alloc on allocation failure. -basic_regex< BidiIter > const &string_type const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. - -RegexTraits const &RegexTraits() - -boolchar_type - - -boolmatch_results< BidiIter > const & - -regex_id_type - -value_type const & -value_type const * -regex_iterator< BidiIter > &If what.prefix().first != what[0].second and if the element match_prev_avail is not set in flags then sets it. Then behaves as if by calling regex_search(what[0].second, end, what, *pre, flags), with the following variation: in the event that the previous match found was of zero length (what[0].length() == 0) then attempts to find a non-zero length match starting at what[0].second, only if that fails and provided what[0].second != suffix().second does it look for a (possibly zero length) match starting from what[0].second + 1. If no further match is found then sets *this equal to the end of sequence iterator. - - - - - - - - - - - - - - -(*this)->size() == pre->mark_count() + 1 -(*this)->empty() == false -(*this)->prefix().first == An iterator denoting the end point of the previous match found -(*this)->prefix().last == (**this)[0].first -(*this)->prefix().matched == (*this)->prefix().first != (*this)->prefix().second -(*this)->suffix().first == (**this)[0].second -(*this)->suffix().last == end -(*this)->suffix().matched == (*this)->suffix().first != (*this)->suffix().second -(**this)[0].first == The starting iterator for this match. -(**this)[0].second == The ending iterator for this match. -(**this)[0].matched == true if a full match was found, and false if it was a partial match (found as a result of the match_partial flag being set). -(**this)[n].first == For all integers n < (*this)->size(), the start of the sequence that matched sub-expression n. Alternatively, if sub-expression n did not participate in the match, then end. -(**this)[n].second == For all integers n < (*this)->size(), the end of the sequence that matched sub-expression n. Alternatively, if sub-expression n did not participate in the match, then end. -(**this)[n].matched == For all integers n < (*this)->size(), true if sub-expression n participated in the match, false otherwise. -(*this)->position() == The distance from the start of the original sequence being iterated, to the start of this match. - -regex_iterator< BidiIter >int - - -BidiIterBidiIterbasic_regex< BidiIter > const &regex_constants::match_flag_typeregex_constants::match_default -BidiIterBidiIterbasic_regex< BidiIter > const &unspecifiedregex_constants::match_flag_typeregex_constants::match_default -regex_iterator< BidiIter > const & -regex_iterator< BidiIter > &regex_iterator< BidiIter > const & - - - -value_type const & -value_type const * -regex_token_iterator< BidiIter > &If N == -1 then sets *this equal to the end of sequence iterator. Otherwise if N+1 < subs.size(), then increments N and sets result equal to ((subs[N] == -1) ? value_type(what.prefix().str()) : value_type(what[subs[N]].str())). Otherwise if what.prefix().first != what[0].second and if the element match_prev_avail is not set in flags then sets it. Then locates the next match as if by calling regex_search(what[0].second, end, what, *pre, flags), with the following variation: in the event that the previous match found was of zero length (what[0].length() == 0) then attempts to find a non-zero length match starting at what[0].second, only if that fails and provided what[0].second != suffix().second does it look for a (possibly zero length) match starting from what[0].second + 1. If such a match is found then sets N equal to zero, and sets result equal to ((subs[N] == -1) ? value_type(what.prefix().str()) : value_type(what[subs[N]].str())). Otherwise if no further matches were found, then let last_end be the endpoint of the last match that was found. Then if last_end != end and subs[0] == -1 sets N equal to -1 and sets result equal to value_type(last_end, end). Otherwise sets *this equal to the end of sequence iterator. -regex_token_iterator< BidiIter >int - - -*this is the end of sequence iterator. - -BidiIterThe beginning of the character range to search. BidiIterThe end of the character range to search. basic_regex< BidiIter > const &The regex pattern to search for. - -[begin,end) is a valid range. - -BidiIterThe beginning of the character range to search. BidiIterThe end of the character range to search. basic_regex< BidiIter > const &The regex pattern to search for. unspecifiedA let() expression with argument bindings for semantic actions. - -[begin,end) is a valid range. - -BidiIterThe beginning of the character range to search. BidiIterThe end of the character range to search. basic_regex< BidiIter > const &The regex pattern to search for. Subs const &A range of integers designating sub-matches to be treated as tokens. regex_constants::match_flag_typeregex_constants::match_defaultOptional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.) - - -[begin,end) is a valid range. -subs is either an integer greater or equal to -1, or else an array or non-empty std::vector<> of such integers. - -BidiIterThe beginning of the character range to search. BidiIterThe end of the character range to search. basic_regex< BidiIter > const &The regex pattern to search for. Subs const &A range of integers designating sub-matches to be treated as tokens. unspecifiedA let() expression with argument bindings for semantic actions. regex_constants::match_flag_typeregex_constants::match_defaultOptional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.) - - -[begin,end) is a valid range. -subs is either an integer greater or equal to -1, or else an array or non-empty std::vector<> of such integers. - -regex_token_iterator< BidiIter > const & -*this == that - -regex_token_iterator< BidiIter > &regex_token_iterator< BidiIter > const & -*this == that - - - -ImplThin wrapper around the default regex_traits implementation, either cpp_regex_traits or c_regex_traits - - -locale_type const & -std::pair< BidiIter, BidiIter >Class template sub_match denotes the sequence of characters matched by a particular marked sub-expression. When the marked sub-expression denoted by an object of type sub_match<> participated in a regular expression match then member matched evaluates to true, and members first and second denote the range of characters [first,second) which formed that match. Otherwise matched is false, and members first and second contained undefined values.If an object of type sub_match<> represents sub-expression 0 - that is to say the whole match - then member matched is always true, unless a partial match was obtained as a result of the flag match_partial being passed to a regular expression algorithm, in which case member matched is false, and members first and second represent the character range that formed the partial match. -string_type -string_type -difference_type -bool_type -bool -intstring_type const &the string against which to compare Performs a lexicographic string comparison. - -the results of (*this).str().compare(str) - -intsub_match const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -intvalue_type const *This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. - - -BidiIterBidiIterboolfalse -proto::extends< proto::terminal< T >::type, value< T > >value<> is a lazy wrapper for a value that can be used in xpressive semantic actions. -Below is an example that shows where value<> is useful.sregex good_voodoo(boost::shared_ptr<int> pi) -{ - using namespace boost::xpressive; - // Use val() to hold the shared_ptr by value: - sregex rex = +( _d [ ++*val(pi) ] >> '!' ); - // OK, rex holds a reference count to the integer. - return rex; -} -In the above code, xpressive::val() is a function that returns a value<> object. Had val() not been used here, the operation ++*pi would have been evaluated eagerly once, instead of lazily when the regex match happens. -T &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -T const &Fetch the stored value. - -Store a default-constructed T. -T const &The initial value. Store a copy of t. - - -as<> is a PolymorphicFunctionObject for lexically casting a parameter to a different type. - -TValue const &The value to lexically cast. - -boost::lexical_cast<T>(val) - - - - -const_cast_<> is a PolymorphicFunctionObject for const-casting a parameter to a cv qualification. - -TValue const &The value to const-cast. - - -Types T and Value differ only in cv-qualification. -const_cast<T>(val) - - -construct<> is a PolymorphicFunctionObject for constructing a new object. - -TThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -TA0 const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -TA0 const &A1 const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -TA0 const &The first argument to the constructor A1 const &The second argument to the constructor A2 const &The third argument to the constructor - -T(a0,a1,...) - - -dynamic_cast_<> is a PolymorphicFunctionObject for dynamically casting a parameter to a different type. - -TValue const &The value to dynamically cast. - -dynamic_cast<T>(val) - - -static_cast_<> is a PolymorphicFunctionObject for statically casting a parameter to a different type. - -TValue const &The value to statically cast. - -static_cast<T>(val) - - -throw_<> is a PolymorphicFunctionObject for throwing an exception. - -voidThis is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidA0 const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidA0 const &A1 const &This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. -voidA0 const &The first argument to the constructor A1 const &The second argument to the constructor A2 const &The third argument to the constructor - -This function makes use of the BOOST_THROW_EXCEPTION macro to actually throw the exception. See the documentation for the Boost.Exception library. - -<tt>Except(a0 - - -void const * -basic_regex< std::string::const_iterator > -basic_regex< char const * > -basic_regex< std::wstring::const_iterator > -basic_regex< wchar_t const * > -sub_match< std::string::const_iterator > -sub_match< char const * > -sub_match< std::wstring::const_iterator > -sub_match< wchar_t const * > -regex_compiler< std::string::const_iterator > -regex_compiler< char const * > -regex_compiler< std::wstring::const_iterator > -regex_compiler< wchar_t const * > -regex_iterator< std::string::const_iterator > -regex_iterator< char const * > -regex_iterator< std::wstring::const_iterator > -regex_iterator< wchar_t const * > -regex_token_iterator< std::string::const_iterator > -regex_token_iterator< char const * > -regex_token_iterator< std::wstring::const_iterator > -regex_token_iterator< wchar_t const * > -match_results< std::string::const_iterator > -match_results< char const * > -match_results< std::wstring::const_iterator > -match_results< wchar_t const * > -regex_id_filter_predicate< std::string::const_iterator > -regex_id_filter_predicate< char const * > -regex_id_filter_predicate< std::wstring::const_iterator > -regex_id_filter_predicate< wchar_t const * > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Includes everything you need to write static regular expressions and use them.
-
-Type registrations so that xpressive can be used with the Boost.Typeof library.
-
\ No newline at end of file diff -Nru boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/libs/circular_buffer/doc/circular_buffer.qbk boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/libs/circular_buffer/doc/circular_buffer.qbk --- boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/libs/circular_buffer/doc/circular_buffer.qbk 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/libs/circular_buffer/doc/circular_buffer.qbk 1970-01-01 00:00:00.000000000 +0000 @@ -1,626 +0,0 @@ -[article Boost.Circular Buffer - [quickbook 1.6] - [id circular_buffer] - [copyright 2003-2013 Jan Gaspar] - [license - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - [@http://www.boost.org/LICENSE_1_0.txt]) - ] - [authors [Gaspar, Jan]] - [source-mode c++] -] - -[/ Links - by (most common) convention, prefixed with double underscore so not confused with other names.] -[def __alert [$./images/alert.png]] [/ Examples of your own images (in doc/html/images/ .] -[def __tip [$./images/tip.png]] -[/ If you provide a file type like .png, you will probably find that the file is missing in the pdf version.] -[/ This is because the default file type specified is .png in html, but .svg for pdf version.] - -[/ Some links to external sources.] -[/ You often want to link more than once, so using a def ensures you always refer to the same location.] -[def __boost [@http://www.boost.org/ Boost]] [/Boost.org] -[def __boostroot [@boost: Boost root]] [/ Your boost root] -[/Note the custom boost root url schema for linking to files within the Boost distribution.] -[/Note It can't be used for images, nor for pdf, so not so useful.] -[/def __boostlicense [@http://www.boost.org/LICENSE_1_0.txt Boost License]] -[/ Or refer to your most recent version of Boost.] -[def __boostlicense [@boost:/LICENSE_1_0.txt Boost License]] -[def __boostbook [@http://www.boost.org/doc/html/boostbook.html BoostBook]] -[def __boostbook_docs [@http://www.boost.org/doc/libs/1_53_0/doc/html/boostbook.html BoostBook documentation]] -[def __quickbook [@http://www.boost.org/doc/tools/quickbook/index.html Quickbook]] -[def __quickbook_syntax [@http://www.boost.org/doc/libs/1_53_0/doc/html/quickbook/ref.html Quickbook Syntax Compendium]] -[def __docbook [@http://www.docbook.org/ DocBook]] -[def __doxygen [@http://www.doxygen.org/ Doxygen]] -[def __autoindex [@boost:/tools/auto_index/doc/html/index.html AutoIndex]] -[def __pdf [@http://www.adobe.com/products/acrobat/adobepdf.html PDF]] -[def __textpad [@http://www.textpad.com Textpad]] -[def __emacs [@http://www.gnu.org/software/emacs/ GNU emacs]] -[def __css [@http://en.wikipedia.org/wiki/Cascading_Style_Sheets Cascading Style Sheet]] -[def __intro [link circular_buffer.intro Introduction]] [/Link to a Quickbook section (see below).] - -[def __docbook_params [@http://docbook.sourceforge.net/release/xsl/current/doc/ Docbook xsl:param format options]] - -[def __cb [classref boost::circular_buffer circular_buffer]] -[def __cbso [classref boost::circular_buffer_space_optimized circular_buffer_space_optimized]] -[def __min_capacity [memberref boost::circular_buffer_space_optimized::min_capacity() min_capacity]] -[def __capacity_control [memberref boost::circular_buffer_space_optimized::capacity_control () capacity_control ]] - -[def __debug_support [link circular_buffer.implementation.debug_support debug support]] - -[include ../../../tools/auto_index/include/auto_index_helpers.qbk] -[/ Must be first included file!] - -[note A printer-friendly PDF version of this manual is also available.] - -[section:intro Introduction] - -A Circular Buffer. - -[h2 Description] - -The term [@http://en.wikipedia.org/wiki/Circular_buffer circular buffer] -(also called a ['ring] or ['cyclic buffer]) -refers to an area in memory which is used to store incoming data. -When the buffer is filled, -new data is written starting at the beginning of the buffer and overwriting the old. - -[classref boost::circular_buffer] is a STL compliant container. - -It is a kind of sequence similar to [@https://www.boost.org/sgi/stl/List.html std::list] -or [@https://www.boost.org/sgi/stl/Deque.html std::deque]. -It supports random access iterators, constant time insert and erase operations -at the beginning or the end of the buffer and interoperability with std algorithms. - -The __cb is especially designed to provide [*fixed capacity] storage. -When its capacity is exhausted, newly inserted elements will cause elements -to be overwritten, either at the beginning or end of the buffer -(depending on what insert operation is used). - -The __cb only allocates memory when created, -when the capacity is adjusted explicitly, -or as necessary to accommodate resizing or assign operations. - -[$../../libs/circular_buffer/doc/images/circular_buffer.png] - -There is also a __cbso version available. - -[$../../libs/circular_buffer/doc/images/space_optimized.png] - -__cbso is an adaptation of the __cb -which [*does not allocate memory all at once when created], -instead it allocates memory as needed. - -The predictive memory allocation is similar to typical `std::vector` implementation. -Memory is automatically freed as the size of the container decreases. - -The memory allocation process of the space-optimized circular buffer. -The __min_capacity of the capacity controller represents -the minimal guaranteed amount of allocated memory. -The allocated memory will never drop under this value. -The default value of the `min_capacity` is set to 0. -The `min_capacity` can be set using the constructor parameter __capacity_control -or the function `set_capacity`. - -The space-optimized version is, of course, a little slower. - -[endsect] [/section:intro Introduction] - -[section:example Circular_buffer example] - -Here is a simple example to introduce the class __cb. - -[import ../example/circular_buffer_example.cpp] - -[circular_buffer_example_1] - -This example shows construction, inserting elements, overwriting and popping. - -[circular_buffer_example_2] - -[/circular_buffer_example_output - there is no output for this example] - -You can see the full example code at [@boost:libs/circular_buffer/example/circular_buffer_example.cpp circular_buffer_example.cpp]. - -The full annotated description is in the C++ Reference section. - -[endsect] [/section:example circular_buffer example] - -[section:rationale Rationale] - -The basic motivation behind the __cb was to create a container which would [*work seamlessly with STL]. - -Additionally, the design of the __cb was guided by the following principles: - -* Maximum ['efficiency] for envisaged applications. -* Suitable for ['general purpose use]. -* The behaviour of the buffer as ['intuitive] as possible. -* Suitable for ['specialization] by means of adaptors. (The __cbso is such an example of the adaptor.) -* Easy to ['debug]. (See Debug Support for details.) - -In order to achieve maximum efficiency, the __cb and __cbso store their elements in a -[*contiguous region of memory], which then enables: - -* Use of fixed memory and no implicit or unexpected memory allocation. -* Fast constant-time insertion and removal of elements from the front and back. -* Fast constant-time random access of elements. -* Suitability for real-time and performance critical applications. - -Possible applications of the circular buffer include: - -* Storage of the ['most recently received samples], overwriting the oldest as new samples arrive. -* As an underlying container for a ['bounded buffer] -(see the Bounded Buffer example, code at [@boost:libs/circular_buffer/example/circular_buffer_bound_example.cpp circular_buffer_bound_example.cpp]). -* A kind of ['cache] storing a specified number of last inserted elements. -* Efficient fixed capacity ['FIFO (First In, First Out)], -* Efficient fixed capacity ['LIFO (Last In, First Out)] queue which removes the oldest (inserted as first) elements when full. - -[endsect] [/section:rationale Rationale] - -[section:implementation Implementation ] - -The following paragraphs describe issues that had to be considered during the implementation of the circular_buffer: - -[h3 Thread-Safety] - -The thread-safety of the __cb is the same as the thread-safety of containers in most STL implementations. -This means the __cb is not fully thread-safe. -The thread-safety is guaranteed only in the sense that simultaneous accesses -to distinct instances of the __cb are safe, -and simultaneous read accesses to a shared __cb are safe. - -If multiple threads access a single __cb, -and at least one of the threads may potentially write, -then the user is responsible for ensuring mutual exclusion between the threads during the container accesses. -The mutual exclusion between the threads can be achieved by wrapping -operations of the underlying __cb with a lock acquisition and release. -(See the Bounded Buffer example code at [@boost:libs/circular_buffer/example/circular_buffer_bound_example.cpp circular_buffer_bound_example.cpp]) - -[h3 Overwrite Operation] - -Overwrite operation occurs when an element is inserted into a full __cb - -the old element is being overwritten by the new one. -There was a discussion what exactly "overwriting of an element" means during the formal review. -It may be either a destruction of the original element and -a consequent inplace construction of a new element -or it may be an assignment of a new element into an old one. -The __cb implements assignment because it is more effective. - -From the point of business logic of a stored element, -the destruction/construction operation and assignment usually mean the same. -However, in very rare cases (if in any) they may differ. -If there is a requirement for elements to be destructed/constructed instead of being assigned, -consider implementing a wrapper of the element which would implement the assign operator, -and store the wrappers instead. -It is necessary to note that storing such wrappers has a drawback. -The destruction/construction will be invoked on every assignment of the wrapper - -not only when a wrapper is being overwritten (when the buffer is full) -but also when the stored wrappers are being shifted -(e.g. as a result of insertion into the middle of container). - -[h3 Writing to a Full Buffer] - -There are several options how to cope if a data source produces more data than can fit in the fixed-sized buffer: - -* Inform the data source to wait until there is room in the buffer (e.g. by throwing an overflow exception). -* If the oldest data is the most important, ignore new data from the source until there is room in the buffer again. -* If the latest data is the most important, write over the oldest data. -* Let the producer to be responsible for checking the size of the buffer prior writing into it. - -It is apparent that the __cb implements the third option. -But it may be less apparent it does not implement any other option - -especially the first two. -One can get an impression that the __cb should implement first three options -and offer a mechanism of choosing among them. This impression is wrong. - -The __cb was designed and optimized to be circular -(which means overwriting the oldest data when full). -If such a controlling mechanism had been enabled, -it would just complicate the matters -and the usage of the __cb would be probably less straightforward. - -Moreover, the first two options (and the fourth option as well) -do not require the buffer to be circular at all. -If there is a need for the first or second option, consider implementing an adaptor of e.g. std::vector. -In this case the __cb is not suitable for adapting, because, -contrary to std::vector, it bears an overhead for its circular behaviour. - -[h3 Reading/Removing from an Empty Buffer] - -When reading or removing an element from an empty buffer, -the buffer should be able to notify the data consumer -(e.g. by throwing underflow exception) that there are no elements stored in it. -The __cb does not implement such a behaviour for two reasons: - -* It would introduce a performance overhead. -* No other std container implements it this way. - -It is considered to be a bug to read or remove an element -(e.g. by calling [memberref boost::circular_buffer::front() front()] -or [memberref boost::circular_buffer::pop_back() pop_back()]) -from an empty std container and from an empty __cb as well. -The data consumer has to test if the container is not empty before reading/removing from it by testing -[memberref boost::circular_buffer::empty empty()]. -However, when reading from the __cb, -there is an option to rely on the [memberref boost::circular_buffer::at() at()] -method which throws an exception when the index is out of range. - -[h3 Iterator Invalidation] - -An iterator is usually considered to be invalidated if an element, -the iterator pointed to, had been removed or overwritten by an another element. -This definition is enforced by the Debug Support and is documented for every method. -However, some applications utilizing __cb may require less strict definition: -an iterator is invalid only if it points to an uninitialized memory. - -Consider following example: - -[import ../example/circular_buffer_iter_example.cpp] - -[circular_buffer_iter_example_1] - -The iterator does not point to the original element any more -(and is considered to be invalid from the "strict" point of view) -but it still points to the same valid place in the memory. -This "soft" definition of iterator invalidation is supported by the __cb -but should be considered as an implementation detail rather than a full-fledged feature. -The rules when the iterator is still valid can be inferred from the code in -[@boost:libs/circular_buffer/test/soft_iterator_invalidation.cpp soft_iterator_invalidation.cpp]. - - -[h3 Move emulation and rvalues] - -Since Boost 1.54.0 support for move semantics was implemented using -the [@boost:libs/move/index.html Boost.Move] library. -If rvalue references are available __cb will use them, but if not it uses a close, -but imperfect emulation. On such compilers: - -* Non-copyable objects can be stored in the containers. - They can be constructed in place using `emplace`, or if they support - Boost.Move, moved into place. -* The containers themselves are not movable. -* Argument forwarding is not perfect. - -__cb will use rvalues and move emulations for value types only if move constructor and move assignment operator of the value type do not throw; -or if the value type has no copy constructor. - -Some methods won't use move constructor for the value type at all, if the constructor throws. This is -required for data consistency and avoidance of situations, when aftrer an exception __cb -contains moved away objects along with the good ones. - -See documentation for [@boost:libs/type_traits/doc/html/boost_typetraits/reference/is_copy_constructible.html `is_copy_constructible`], [@boost:libs/type_traits/doc/html/boost_typetraits/reference/is_nothrow_move_assignable.html `is_nothrow_move_assignable`] and [@boost:libs/type_traits/doc/html/boost_typetraits/reference/is_nothrow_move_constructible.html `is_nothrow_move_constructible`] type triats. -There you'll find information about how to make constructor of class noexcept and how to make a non-copyable -class in C++03 and C++98. - -Performance of __cb will *greatly improve* if value type has noexcept move constructor and noexcept move assignment. - -[h3 Exceptions of move_if_noexcept(T&)] - -Reference documentation of the __cb contains notes like "Throws: See Exceptions of `move_if_noexcept(T&)`". -That note means the following: `move_if_noexcept(T& value)` does not throws exceptions at all, but it returns -`value` as rvalue reference only if class `T` have noexcept move constructor and noexcept move assignment operator; -or if it has no copy constructor. Otherwise `move_if_noexcept(T& value)` returns `value` as const reference. - -This leads us to the following situation: - -* If `value` has a noexcept move constructor and noexcept move assignment operator, then no exceptions will be thrown at all. -* If `value` has a throwing move constructor and some copy constructor, then method may throw exceptions of copy constructor. -* If `value` has no copy constructor, then method may throw exceptions of move constructor. - -`move_if_noexcept(T&)` uses [@boost:libs/move/index.html Boost.Move], [@boost:libs/type_traits/doc/html/boost_typetraits/reference/is_copy_constructible.html `is_copy_constructible`], [@boost:libs/type_traits/doc/html/boost_typetraits/reference/is_nothrow_move_assignable.html `is_nothrow_move_assignable`] and [@boost:libs/type_traits/doc/html/boost_typetraits/reference/is_nothrow_move_constructible.html `is_nothrow_move_constructible`] type triats. - - -[h3 Caveats] - -The __cb should not be used for storing pointers to dynamically allocated objects. -When a circular buffer becomes full, further insertion will overwrite the stored pointers -- resulting in a [*memory leak]. One recommend alternative is the use of smart pointers, for example -[@http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/smart_ptr.htm Boost Smart pointers]. - -[@http://en.wikipedia.org/wiki/Std::auto_ptr std::auto_ptr] - -[caution Any container of `std::auto_ptr` is considered particularly hazardous.] - -[tip Never create a circular buffer of `std::auto_ptr`. -Refer to Scott Meyers' excellent book Effective STL for a detailed discussion. -(Meyers S., Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library. -Addison-Wesley, 2001.) -] - -While internals of a __cb are circular, [*iterators are not]. -Iterators of a __cb are only valid for the range `\[begin(), end()\]`, -so for example: iterators `(begin() - 1)` and `(end() + 1)` are both invalid. - -[h3 Debug Support] - -In order to help a programmer to avoid and find common bugs, -the __cb can be enabled to provide a kind of debug support. - -When the debugging functionality is enabled, the __cb maintains a list of valid iterators. -As soon as any element gets destroyed all iterators pointing to this element -are removed from this list and explicitly invalidated (an invalidation flag is set). -The debug support also consists of many assertions (`BOOST_ASSERT` macros) -which ensure the __cb and its iterators are used in the correct manner at runtime. -In case an invalid iterator is used, the assertion will report an error. -The connection of explicit iterator invalidation and assertions -makes a very robust debug technique which catches most of the errors. - -Moreover, the uninitialized memory allocated by __cb is filled with the value `0xcc` in the debug mode. -When debugging the code, this can help the programmer to recognize the initialized memory from the uninitialized. -For details refer the source code [@boost:boost/circular_buffer/debug.hpp circular_buffer/debug.hpp]. - -[caution Since the debugging code makes __cb and its iterators more interconnected, thread safety guarantees of __cb -are different when debug support is enabled. In addition to the container itself, all iterators tracked by the container -(including any copies thereof) must be protected from concurrent access. In particular, this includes copying, destroying or -obtaining iterators from the container, even if for read-only access.] - -The debug support is disabled by default. To enable it, one has to define `BOOST_CB_ENABLE_DEBUG` macro with the value of 1 -while compiling the code using __cb. - -[h3 Compatibility with Interprocess library] - -The __cb is compatible with the [@boost:libs/interprocess/index.html Boost.Interprocess] -[/ This should be in @boost:libs/interprocess/doc/index.html ] -library used for interprocess communication. -Considering that the circular_buffer's debug support relies on 'raw' pointers -(which is not permitted by the Interprocess library) -the code has to compiled with debug support disabled (i.e. with `BOOST_CB_ENABLE_DEBUG` macro not defined or defined to 0). -Not doing that will cause the compilation to fail. - -[endsect] [/section:implementation Implementation ] - -[section:examples More Examples] - -[h3 Summing all the values in a circular buffer] - -[import ../example/circular_buffer_sum_example.cpp] - -[circular_buffer_sum_example_1] - -[/circular_buffer_example_output - there is no output for this example] - -The __cb has a capacity of three `int`. -Therefore, the size of the buffer will never exceed three. -The `std::accumulate` algorithm evaluates the sum of the stored elements. -The semantics of the __cb can be inferred from the assertions. - -You can see the full example code at [@boost:libs/circular_buffer/example/circular_buffer_sum_example.cpp circular_buffer_sum_example.cpp]. - -[h3 Bounded Buffer Example] - -The bounded buffer is normally used in a producer-consumer mode: -producer threads produce items and store them in the container -and consumer threads remove these items and process them. -The bounded buffer has to guarantee that - -* producers do not insert items into the container when the container is full, -* consumers do not try to remove items when the container is empty, -* each produced item is consumed by exactly one consumer. - -[import ../example/circular_buffer_bound_example.cpp] - -[circular_buffer_bound_example_1] - -[/ there is no output for this example] - -The bounded_buffer relies on [@boost:/doc/html/thread.html Boost.Thread] -and [@boost:libs/bind/index.html Boost.Bind] libraries -and [@boost:libs/utility/call_traits.htm Boost.call_traits utility]. - -The [memberref boost::circular_buffer::push_front() push_front()] -method is called by the producer thread in order to insert a new item into the buffer. -The method locks the mutex and waits until there is a space for the new item. -(The mutex is unlocked during the waiting stage and has to be regained when the condition is met.) -If there is a space in the buffer available, -the execution continues and the method inserts the item at the end of the __cb. -Then it increments the number of unread items and unlocks the mutex -(in case an exception is thrown before the mutex is unlocked, -the mutex is unlocked automatically by the destructor of the scoped_lock). -At last the method notifies one of the consumer threads -waiting for a new item to be inserted into the buffer. - -The [memberref boost::circular_buffer::pop_back() pop_back()] -method is called by the consumer thread in order to read the next item from the buffer. - The method locks the mutex and waits until there is an unread item in the buffer. -If there is at least one unread item, -the method decrements the number of unread items and reads the next item from the __cb. -Then it unlocks the mutex and notifies one of the producer threads -waiting for the buffer to free a space for the next item. - -The `bounded buffer::pop_back()` -method [*does not remove the item] but the item is left -in the circular_buffer which then [*replaces it with a new one] -(inserted by a producer) when the circular_buffer is full. -This technique is more effective than removing the item -explicitly by calling the [memberref boost::circular_buffer::pop_back() circular_buffer::pop_back()] -method of the __cb. - -This claim is based on the assumption that an assignment (replacement) -of a new item into an old one is more effective than a destruction -(removal) of an old item and a consequent inplace construction (insertion) of a new item. - -For comparison of bounded buffers based on different containers compile and -run [@boost:libs/circular_buffer/test/bounded_buffer_comparison.cpp bounded_buffer_comparison.cpp]. -The test should reveal the bounded buffer based on the __cb is most effective -closely followed by the `std::deque` based bounded buffer. -(In reality, the result may differ sometimes because the test -is always affected by external factors such as immediate CPU load.) - -[import ../test/bounded_buffer_comparison.cpp] - -You can see the full test code at [@boost:libs/circular_buffer/test/bounded_buffer_comparison.cpp bounded_buffer_comparison.cpp], -and an example of output is [bounded_buffer_comparison_output]. - -[endsect] [/section:examples More examples] - -[section:headers Header Files] - -The circular buffer library is defined in the file [@boost:boost/circular_buffer.hpp circular_buffer.hpp]. - - #include - -(There is also a forward declaration for the __cb -in the header file [@boost:boost/circular_buffer_fwd.hpp circular_buffer_fwd.hpp]). - -The __cb is defined in the file [@boost:boost/circular_buffer/base.hpp base.hpp]. - -The __cbso is defined in the file [@boost:boost/circular_buffer/space_optimized.hpp space_optimized.hpp]. - -[endsect] [/section:headers Header Files] - -[section:concepts Modelled Concepts] - -[@https://www.boost.org/sgi/stl/RandomAccessContainer.html Random Access Container], -[@https://www.boost.org/sgi/stl/FrontInsertionSequence.html Front Insertion Sequence], and -[@https://www.boost.org/sgi/stl/BackInsertionSequence.html Back Insertion sequence] - -[endsect] [/section:concepts Modelled Concepts] - -[section:template_params Template Parameters] - -[table:templ Template parameter requirements -[[parameter] [Requirements]] -[[T] [The type of the elements stored in the circular_buffer. -The T has to be [@boost:libs/utility/Assignable.html Assignable] -and [@boost:libs/utility/CopyConstructible.html CopyConstructible]. -Moreover T has to be [@https://www.boost.org/sgi/stl/DefaultConstructible.html DefaultConstructible] -if supplied as a default parameter when invoking some of the circular_buffer's methods, -e.g. `insert(iterator pos, const value_type& item = value_type())`. -And [@https://www.boost.org/sgi/stl/EqualityComparable.html EqualityComparable] -and/or [@boost:libs/utility/LessThanComparable.html LessThanComparable] -if the circular_buffer will be compared with another container.]] -[[Alloc] [The allocator type used for all internal memory management. -The Alloc has to meet the allocator requirements imposed by STL.]] -] - -[endsect] [/section:template_params Template Parameters] - -[section:tickets Trac Tickets] - -Report and view bugs and features by adding a ticket at [@https://svn.boost.org/trac/boost Boost.Trac]. - -Existing open tickets for this library alone can be viewed -[@https://svn.boost.org/trac/boost/query?status=assigned&status=new&status=reopened&component=circular_buffer&col=id&col=summary&col=status&col=owner&col=type&col=milestone&order=priority here]. -Existing tickets for this library - including closed ones - can be viewed -[@https://svn.boost.org/trac/boost/query?status=assigned&status=closed&status=new&status=reopened&component=circular_buffer&col=id&col=summary&col=status&col=owner&col=type&col=milestone&order=priority here]. - -Type: Bugs - -[@https://svn.boost.org/trac/boost/ticket/4100 #4100] Some boost classes have sizeof that depends on NDEBUG. - -[@https://svn.boost.org/trac/boost/ticket/5362 #5362] circular_buffer does not compile with BOOST_NO_EXCEPTIONS. - -[@https://svn.boost.org/trac/boost/ticket/6277 #6277] Checked iterators are not threadsafe. - -[@https://svn.boost.org/trac/boost/ticket/6747 #6747] Circular_Buffer / Bounded_Buffer inside Template class problem. - -[@https://svn.boost.org/trac/boost/ticket/7025 #7025] circular buffer reports warning: " type qualifiers ignored on function return type" while compile. - -[@https://svn.boost.org/trac/boost/ticket/7950 #7950] Eliminate W4-warnings under VS2005. - -[@https://svn.boost.org/trac/boost/ticket/8012 #8012] Inconsistency in `linearize()`. - -[@https://svn.boost.org/trac/boost/ticket/8438 #8438] `vector` & __cb storage misbehave when using compiler optimizations. - -Type: Feature Requests - -[@https://svn.boost.org/trac/boost/ticket/5511 #5511] Documentation needs some improvement. - -[@https://svn.boost.org/trac/boost/ticket/7888 #7888] circular_buffer should support move semantics. - -Type: Patches - -[@https://svn.boost.org/trac/boost/ticket/8032 #8032] Warning fixes in circular_buffer. - -[endsect] [/section:tickets Trac Tickets] - -[section:release Release Notes] - -[h4 Boost 1.56] - -* C++11 allocator model support implemented by Glen Fernandes. - -[h4 Boost 1.55] - -* Documentation refactored by Paul A. Bristow using Quickbook, Doxygen and Autoindexing. -* Rvalue references emulation added by Antony Polukhin using Boost.Move. - -[h4 Boost 1.42] - -* Added methods erase_begin(size_type) and erase_end(size_type) with constant complexity for such types of stored elements which do not need an explicit destruction e.g. int or double. -* Similarly changed implementation of the clear() method and the destructor so their complexity is now constant for such types of stored elements which do not require an explicit destruction (the complexity for other types remains linear). - -[h4 Boost 1.37] - - *Added new methods is_linearized() and rotate(const_iterator). -* Fixed bugs: -[@https://svn.boost.org/trac/boost/ticket/1987 #1987] Patch to make circular_buffer.hpp #includes absolute. -[@https://svn.boost.org/trac/boost/ticket/1852 #1852] Copy constructor does not copy capacity. - -[h4 Boost 1.36] - -* Changed behaviour of the circular_buffer(const allocator_type&) constructor. -Since this version the constructor does not allocate any memory and both capacity and size are set to zero. -* Fixed bug: - [@https://svn.boost.org/trac/boost/ticket/191 #1919] Default constructed circular buffer throws std::bad_alloc. - -[h4 Boost 1.35] -* Initial release. - -[endsect] [/section:release Release Notes] - -[section:acknowledgements Acknowledgements] - -Thomas Witt in 2002 produced a prototype called cyclic buffer. - -The circular_buffer has a short history. Its first version was a std::deque adaptor. -This container was not very effective because of many reallocations when inserting/removing an element. -Thomas Wenish did a review of this version and -motivated me to create a circular buffer which allocates memory at once when created. - -The second version adapted `std::vector` but it has been abandoned soon -because of limited control over iterator invalidation. -The current version is a full-fledged STL compliant container. - -Pavel Vozenilek did a thorough review of this version and came with many good ideas and improvements. - -The idea of the space optimized circular buffer has been introduced by Pavel Vozenilek. - -Also, I would like to thank Howard Hinnant, Nigel Stewart and everyone -who participated at the formal review for valuable comments and ideas. - -Paul A. Bristow refactored the documentation in 2013 to use the full power of Quickbook, Doxygen and Autoindexing. - -[endsect] [/section:acknowledgements Acknowledgements] - - -[section:version_id Documentation Version Info] - -Last edit to Quickbook file __FILENAME__ was at __TIME__ on __DATE__. - -[tip This should appear on the pdf version -(but may be redundant on a html version where the last edit date is on the first (home) page).] - -[warning Home page "Last revised" is GMT, not local time. Last edit date is local time.] -[/See also Adobe Reader pdf File Properties for creation date, and PDF producer, version and page count.] - -[endsect] [/section:version_id Version Info] - -[xinclude autodoc.xml] [/ Using Doxygen reference documentation.] -[/ The position of this in the Quickbook determines the location of the Doxygen references section.] -[/ Index(es) should be invoked in the main module, not within a section.] - -''' - -''' - -[/ circular_buffer.qbk - Copyright 2013 Paul A. Bristow. - Copyright 2003-2008 Jan Gaspar. - - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt). -] - - diff -Nru boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/libs/units/doc/units.qbk boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/libs/units/doc/units.qbk --- boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/libs/units/doc/units.qbk 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/libs/units/doc/units.qbk 1970-01-01 00:00:00.000000000 +0000 @@ -1,1475 +0,0 @@ -[library Boost.Units - [quickbook 1.5] - [version 1.1.0] - [authors [Schabel, Matthias C.]] - [authors [Watanabe, Steven]] - [copyright 2003-2008 Matthias Christian Schabel, 2007-2010 Steven Watanabe] - [license - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - [@http://www.boost.org/LICENSE_1_0.txt]) - ] - [purpose zero-overhead compile-time dimensional analysis and unit computations] -] - -[/ Some links to external sources.] -[def __boost [@http://www.boost.org/ Boost]] -[def __boostroot [@boost: Boost root]] -[def __boostlicense [@http://www.boost.org/LICENSE_1_0.txt Boost License]] -[def __boost_mpl [@http://www.boost.org/libs/mpl/doc/index.html Boost Metaprogramming Library]] - -[def __mpl_forward_sequence [@http://www.boost.org/libs/mpl/doc/refmanual/forward-sequence.html MPL Forward Sequence]] - -[/Links within this document.] -[def __ordinal [classref boost::units::ordinal ordinal]] -[def __dim [classref boost::units::dim dim]] -[def __static_rational [classref boost::units::static_rational static_rational]] -[def __make_dimension_list [classref boost::units::make_dimension_list make_dimension_list]] -[def __unit [classref boost::units::unit unit]] -[def __base_unit_info [classref boost::units::base_unit_info base_unit_info]] -[def __quantity [classref boost::units::quantity quantity]] -[def __conversion_helper [classref boost::units::conversion_helper conversion_helper]] -[def __absolute [classref boost::units::absolute absolute]] -[def __base_unit [classref boost::units::base_unit base_unit]] -[def __base_dimension [classref boost::units::base_dimension base_dimension]] -[def __scaled_base_unit [classref boost::units::scaled_base_unit base_unit]] -[def __make_scaled_unit [classref boost::units::make_scaled_unit make_scaled_unit]] - -[def __unary_plus_typeof_helper [classref boost::units::unary_plus_typeof_helper unary_plus_typeof_helper]] -[def __unary_minus_typeof_helper [classref boost::units::unary_minus_typeof_helper unary_minus_typeof_helper]] -[def __add_typeof_helper [classref boost::units::add_typeof_helper add_typeof_helper]] -[def __subtract_typeof_helper [classref boost::units::subtract_typeof_helper subtract_typeof_helper]] -[def __multiply_typeof_helper [classref boost::units::multiply_typeof_helper multiply_typeof_helper]] -[def __divide_typeof_helper [classref boost::units::divide_typeof_helper divide_typeof_helper]] -[def __power_typeof_helper [classref boost::units::power_typeof_helper power_typeof_helper]] -[def __root_typeof_helper [classref boost::units::root_typeof_helper root_typeof_helper]] - -[def __static_negate [classref boost::units::static_negate static_negate]] -[def __static_add [classref boost::units::static_add static_add]] -[def __static_subtract [classref boost::units::static_subtract static_subtract]] -[def __static_multiply [classref boost::units::static_multiply static_multiply]] -[def __static_divide [classref boost::units::static_divide static_divide]] -[def __static_power [classref boost::units::static_power static_power]] -[def __static_root [classref boost::units::static_root static_root]] - -[def __get_dimension [classref boost::units::get_dimension get_dimension]] -[def __get_system [classref boost::units::get_system get_system]] - -[def __pow [funcref boost::units::pow pow]] -[def __root [funcref boost::units::root root]] -[def __quantity_cast [funcref boost::units::quantity_cast quantity_cast]] - -[def __from_value [memberref boost::units::quantity::from_value from_value]] -[def __value [memberref boost::units::quantity::value value]] - -[def __reduce_unit [classref boost::units::reduce_unit reduce_unit]] -[def __unscale [classref boost::units::unscale unscale]] - -[def __BOOST_UNITS_STATIC_CONSTANT [macroref BOOST_UNITS_STATIC_CONSTANT]] -[def __BOOST_UNITS_DEFINE_CONVERSION_FACTOR [macroref BOOST_UNITS_DEFINE_CONVERSION_FACTOR]] -[def __BOOST_UNITS_DEFINE_CONVERSION_FACTOR_TEMPLATE [macroref BOOST_UNITS_DEFINE_CONVERSION_FACTOR_TEMPLATE]] -[def __BOOST_UNITS_DEFAULT_CONVERSION [macroref BOOST_UNITS_DEFAULT_CONVERSION]] - -[section:Introduction Introduction] - -The Boost.Units library is a C++ implementation of dimensional analysis in a general -and extensible manner, treating it as a generic compile-time metaprogramming problem. With appropriate -compiler optimization, no runtime execution cost is introduced, facilitating the use of this library to -provide dimension checking in performance-critical code. Support for units -and quantities (defined as a unit and associated value) for arbitrary unit system models and arbitrary -value types is provided, as is a fine-grained general facility for unit conversions. Complete SI and CGS unit -systems are provided, along with systems for -angles measured in degrees, radians, gradians, and revolutions and -systems for temperatures measured in Kelvin, degrees Celsius and degrees Fahrenheit. -The library architecture has been designed with flexibility and extensibility in mind; demonstrations of the ease -of adding new units and unit conversions are provided in the examples. - -In order to enable complex compile-time dimensional analysis calculations with no runtime overhead, -Boost.Units relies heavily on the [___boost_mpl] (MPL) and on template metaprogramming techniques, and is, as a consequence, -fairly demanding of compiler compliance to ISO standards. At present, it has been successfully -compiled and tested on the following compilers/platforms : - -# g++ 4.0.1 on Mac OSX 10.4 -# Intel CC 9.1, 10.0, and 10.1 on Mac OSX 10.4 -# g++ 3.4.4, 4.2.3, and 4.3.0 on Windows XP -# Microsoft Visual C++ 7.1, 8.0, and 9.0 on Windows XP -# Comeau 4.3.10.1 beta2 on Windows XP -# Metrowerks CodeWarrior 9.2 on Windows XP. -# Sun CC 5.9 on Solaris and Linux - -The following compilers/platforms are known *not* to work : - -# g++ 3.3.x -# Microsoft Visual C++ 6.0 on Windows XP -# Microsoft Visual C++ 7.0 on Windows XP -# Metrowerks CodeWarrior 8.0 on Windows XP. -# All versions of Borland. - -[endsect] - -[section:Quick_Start Quick Start] - -Before discussing the basics of the library, we first define a few terms that will be used frequently -in the following : - -* *Base dimension* : A base dimension is loosely defined as a measurable entity of interest; in conventional - dimensional analysis, base dimensions include length (\[L\]), mass (\[M\]), time (\[T\]), etc... but there is - no specific restriction on what base dimensions can be used. Base dimensions are essentially a tag type and - provide no dimensional analysis functionality themselves. -* *Dimension* : A collection of zero or more base dimensions, each - potentially raised to a different rational power. - For example, length = \[L\]^1, area = \[L\]^2, velocity = \[L\]^1/\[T\]^1, and - energy = \[M\]^1 \[L\]^2/\[T\]^2 are all dimensions. -* *Base unit* : A base unit represents a specific measure of a dimension. For example, while length is an abstract measure of - distance, the meter is a concrete base unit of distance. Conversions are defined using base units. - Much like base dimensions, base units are a tag type used solely to define units and do not support dimensional - analysis algebra. -* *Unit* : A set of base units raised to rational exponents, e.g. m^1, kg^1, m^1/s^2. -* *System* : A unit system is a collection of base units representing all the measurable entities of interest for a - specific problem. For example, the SI unit system defines seven base units : length (\[L\]) in meters, - mass (\[M\]) in kilograms, time (\[T\]) in seconds, current (\[I\]) in amperes, temperature (\[theta\]) in kelvin, - amount (\[N\]) in moles, and luminous intensity (\[J\]) in candelas. All measurable entities within the SI system can - be represented as products of various integer or rational powers of these seven base units. -* *Quantity* : A quantity represents a concrete amount of a unit. Thus, while the meter is the base - unit of length in the SI system, 5.5 meters is a quantity of length in that system. - -To begin, we present two short tutorials. [@../../libs/units/tutorial/tutorial_1.cpp Tutorial1] demonstrates the use of -[@http://en.wikipedia.org/wiki/SI_units SI] units. After including the appropriate system headers -and the headers for the various SI units we will need (all SI units can be included with -[headerref boost/units/systems/si.hpp]) and for quantity I/O ([headerref boost/units/io.hpp]), we define -a function that computes the work, in joules, done by exerting a force in newtons over a specified distance in meters -and outputs the result to `std::cout`. The [___quantity] class accepts a second template parameter as its value type; -this parameter defaults to -`double` if not otherwise specified. To demonstrate the ease of using user-defined types in dimensional -calculations, we also present code for computing the complex impedance using `std::complex` -as the value type : - -[import ../example/tutorial.cpp] - -[tutorial_code] - -The intent and function of the above code should be obvious; the output produced is : - -[tutorial_output] - -While this library attempts to make simple dimensional computations easy to code, it is in no way -tied to any particular unit system (SI or otherwise). Instead, it provides a highly flexible compile-time -system for dimensional analysis, supporting arbitrary collections of base dimensions, rational -powers of units, and explicit quantity conversions. It accomplishes all of this via template metaprogramming techniques. -With modern optimizing compilers, this results in zero runtime overhead for quantity computations relative to the -same code without unit checking. - -[endsect] - -[section:Dimensional_Analysis Dimensional Analysis] - -The concept of -[@http://en.wikipedia.org/wiki/Dimensional_analysis dimensional analysis] -is normally presented early on in introductory physics and engineering classes as a means of determining the -correctness of an equation or computation by propagating the physical measurement -[@http://en.wikipedia.org/wiki/Units_of_measurement units] -of various quantities through the equation along with their numerical values. There are a number of standard -unit systems in common use, the most prominent of which is the -[@http://en.wikipedia.org/wiki/SI_units Systeme International] -(also known as SI or MKS (meter-kilogram-second), which was a metric predecessor to the SI system named -for three of the base units on which the system is based). The SI -is the only official international standard unit system and is widely utilized in science and engineering. -Other common systems include the [@http://en.wikipedia.org/wiki/Cgs_units CGS] -(centimeter-gram-second) system and the -[@http://en.wikipedia.org/wiki/English_units English] -system still in use in some problem domains in the United States and elsewhere. In physics, -there also exist a number of other systems that are in common use in specialized subdisciplines. These are -collectively referred to as [@http://en.wikipedia.org/wiki/Natural_units natural units]. When -quantities representing different measurables are combined, dimensional analysis provides the means of -assessing the consistency of the resulting calculation. For example, the sum of two lengths is also a length, -while the product of two lengths is an area, and the sum of a length and an area is undefined. The fact that the -arguments to many functions (such as exp, log, etc...) must be dimensionless quantities can be easily demonstrated by -examining their series expansions in the context of dimensional analysis. This library facilitates the enforcement -of this type of restriction in code involving dimensioned quantities where appropriate. - -In the following discussion we view dimensional analysis as an abstraction in which an arbitrary set of -[@http://en.wikipedia.org/wiki/Fundamental_units units] obey the rules of a specific algebra. -We will refer to a pair of a base dimension and a rational exponent as a *fundamental dimension*, -and a list composed of an arbitrary number of fundamental dimensions as a *composite dimension* or, simply, -*dimension*. In particular, given a set of [$../../libs/units/images/form_0.png] fundamental dimensions -denoted by [$../../libs/units/images/form_1.png] and a set of [$../../libs/units/images/form_0.png] -rational exponents [$../../libs/units/images/form_2.png], any possible (composite) dimension can be written -as [$../../libs/units/images/form_3.png]. - -Composite dimensions obey the algebraic rules for dimensional analysis. In particular, for any scalar value, -[$../../libs/units/images/form_4.png], -and composite dimensions [$../../libs/units/images/form_5.png] -and [$../../libs/units/images/form_6.png], where -[$../../libs/units/images/form_7.png], we have: - -[$../../libs/units/images/form_8.png] - -Users of a dimensional analysis library should be able to specify an arbitrary list of base dimensions to -produce a composite dimension. This potentially includes repeated tags. For example, -it should be possible to express energy as [$../../libs/units/images/form_9.png], [$../../libs/units/images/form_10.png], -[$../../libs/units/images/form_11.png], or any other permutation of mass, length, and time having aggregate exponents of -1, 2, and -2, respectively. -In order to be able to perform computations on arbitrary sets of dimensions, -all composite dimensions must be reducible to an unambiguous final composite dimension, which we will refer to as a -*reduced dimension*, for which - -# fundamental dimensions are consistently ordered -# dimensions with zero exponent are elided. Note that reduced dimensions never have more than - [$../../libs/units/images/form_0.png] base dimensions, one for each distinct fundamental dimension, but may have fewer. - -In our implementation, base dimensions are associated with tag types. As we will ultimately -represent composite dimensions as typelists, we must provide some mechanism for sorting -base dimension tags in order to make it possible to convert an arbitrary composite dimension -into a reduced dimension. For this purpose, we assign a unique integer to each base dimension. -The [___base_dimension] class (found in [headerref boost/units/base_dimension.hpp]) uses the -curiously recurring template pattern (CRTP) technique to ensure that ordinals specified for -base dimensions are unique: - - template struct base_dimension { ... }; - -With this, we can define the base dimensions for length, mass, and time as: - -[import ../example/test_system.hpp] -[test_system_snippet_1] - -It is important to note that the choice of order is completely arbitrary as long as each tag has a unique enumerable -value; non-unique ordinals are flagged as errors at compile-time. Negative ordinals are reserved for use by the library. -To define composite dimensions corresponding to the base dimensions, we -simply create MPL-conformant typelists of fundamental dimensions by using the [___dim] class to encapsulate pairs of base dimensions -and [___static_rational] exponents. The [___make_dimension_list] class acts as a wrapper to ensure -that the resulting type is in the form of a reduced dimension: - -[test_system_snippet_2] - -This can also be easily accomplished using a convenience typedef provided by [___base_dimension]: - -[test_system_snippet_3] - -so that the above code is identical to the full typelist definition. Composite dimensions are similarly defined via a typelist: - -[test_system_snippet_4] - -A convenience class for composite dimensions with integer powers is also provided: - -[test_system_snippet_5] - -[endsect] - -[section:Units Units] - -We define a *unit* as a set of base units each of which can be raised to an arbitrary rational -exponent. Thus, the SI unit corresponding to the dimension of force is kg m s^-2, where kg, m, -and s are base units. We use the notion of a *unit system* such as SI to specify the mapping -from a dimension to a particular unit so that instead of specifying the base units explicitly, -we can just ask for the representation of a dimension in a particular system. - -Units are, like dimensions, purely compile-time variables with no associated value. -Units obey the same algebra as dimensions do; the presence of the unit system serves to ensure that units having identical -reduced dimension in different systems (like feet and meters) cannot be inadvertently mixed in computations. - -There are two distinct types of systems that can be envisioned: - -* *Homogeneous systems* : Systems which hold a linearly independent set of base units which - can be used to represent many different dimensions. For example, the SI system has seven - base dimensions and seven base units corresponding to them. It can represent any unit which - uses only those seven base dimensions. Thus it is a homogeneous_system. -* *Heterogeneous systems* : Systems which store the exponents of every base unit involved - are termed heterogeneous. Some units can only be represented in this way. For example, - area in m ft is intrinsically heterogeneous, because the base units of meters and feet - have identical dimensions. As a result, simply storing a dimension and a set of base - units does not yield a unique solution. A practical example of the need for heterogeneous - units, is an empirical equation used in aviation: H = (r/C)^2 where H is the radar beam - height in feet and r is the radar range in nautical miles. In order to enforce dimensional - correctness of this equation, the constant, C, must be expressed in nautical miles per foot^(1/2), - mixing two distinct base units of length. - -Units are implemented by the [___unit] template class defined in [headerref boost/units/unit.hpp] : - - template class unit; - -In addition to supporting the compile-time dimensional analysis operations, the +, -, *, and / runtime operators are provided -for [___unit] variables. Because the dimension associated with powers and roots must be computed at compile-time, it is not -possible to provide overloads for `std::pow` that function correctly for [___unit]s. These operations are supported through -free functions [___pow] and [___root] that are templated on integer and [___static_rational] values and can take as an argument -any type for which the utility classes [___power_typeof_helper] and [___root_typeof_helper] have been defined. - -[section Base Units] - -Base units are defined much like base dimensions. - - template struct base_unit { ... }; - -Again negative ordinals are reserved. - -As an example, in the following we will implement a subset of the SI unit system based on the fundamental dimensions -given above, demonstrating all steps necessary for a completely functional system. First, we simply define a unit system -that includes type definitions for commonly used units: - -[test_system_snippet_6] - -The macro [___BOOST_UNITS_STATIC_CONSTANT] is provided in [headerref boost/units/static_constant.hpp] -to facilitate ODR- and thread-safe constant definition in header files. We then define some constants for the supported units -to simplify variable definitions: - -[test_system_snippet_7] - -If support for textual output of units is desired, we can also specialize the [___base_unit_info] class for each fundamental -dimension tag: - -[test_system_snippet_8] - -and similarly for `kilogram_base_unit` and `second_base_unit`. A future version of the library will provide a more flexible system -allowing for internationalization through a facet/locale-type mechanism. -The `name()` and `symbol()` methods of [___base_unit_info] provide full and short names for the base unit. With these definitions, -we have the rudimentary beginnings of our unit system, which can be used to determine reduced dimensions for arbitrary -unit calculations. - -[endsect] [/section Base Units] - -[section Scaled Base Units] - -Now, it is also possible to define a base unit as being a multiple of -another base unit. For example, the way that `kilogram_base_unit` is -actually defined by the library is along the following lines - - struct gram_base_unit : boost::units::base_unit {}; - typedef scaled_base_unit > > kilogram_base_unit; - -This basically defines a kilogram as being 10^3 times a gram. - -There are several advantages to this approach. - -* It reflects the real meaning of these units better than treating them as independent units. -* If a conversion is defined between grams or kilograms and some other units, - it will automatically work for both kilograms and grams, with only one specialization. -* Similarly, if the symbol for grams is defined as "g", then the symbol for kilograms - will be "kg" without any extra effort. - -[endsect] [/section Scaled Base Units] - -[section Scaled Units] - -We can also scale a [___unit] as a whole, rather than scaling the individual -base units which comprise it. For this purpose, we use the metafunction -[___make_scaled_unit]. The main motivation for this feature is the metric -prefixes defined in [headerref boost/units/systems/si/prefixes.hpp]. - -A simple example of its usage would be. - - typedef make_scaled_unit > >::type nanosecond; - -nanosecond is a specialization of [___unit], and can be used in a quantity normally. - - quantity t(1.0 * si::seconds); - std::cout << t << std::endl; // prints 1e9 ns - -[endsect] [/section Scaled Units] - -[endsect] [/section:Units Units] - -[section:Quantities Quantities] - -A *quantity* is defined as a value of an arbitrary value type that is associated with a specific unit. For example, -while meter is a unit, 3.0 meters is a quantity. Quantities obey two separate algebras: the native algebra for their -value type, and the dimensional analysis algebra for the associated unit. In addition, algebraic operations are defined -between units and quantities to simplify the definition of quantities; it is effectively equivalent to algebra with -a unit-valued quantity. - -Quantities are implemented by the [___quantity] template class defined in [headerref boost/units/quantity.hpp] : - - template class quantity; - -This class is templated on both unit type (`Unit`) and value type (`Y`), with the latter defaulting to double-precision -floating point if not otherwise specified. The value type must have a normal copy constructor and copy -assignment operator. Operators +, -, *, and / are provided for algebraic operations between -scalars and units, scalars and quantities, units and quantities, and between quantities. In addition, integral and -rational powers and roots can be computed using the [___pow] and [___root] functions. Finally, -the standard set of boolean comparison operators ( `==, !=, <, <=, >, and >=` ) are provided to allow -comparison of quantities from the same unit system. All operators simply delegate to the -corresponding operator of the value type if the units permit. - -[section:Heterogeneous_Operators Heterogeneous Operators] - -For most common value types, the result type of arithmetic operators is the same as the value type itself. For example, -the sum of two double precision floating point numbers is another double precision floating point number. However, there -are instances where this is not the case. A simple example is given by the [@http://en.wikipedia.org/wiki/Natural_number -natural numbers] where the operator arithmetic obeys the following rules (using the standard notation for -[@http://en.wikipedia.org/wiki/Number number systems]): - -* [$../../libs/units/images/form_12.png] -* [$../../libs/units/images/form_13.png] -* [$../../libs/units/images/form_14.png] -* [$../../libs/units/images/form_15.png] - -This library is designed to support arbitrary value type algebra for addition, subtraction, multiplication, division, and -rational powers and roots. It uses Boost.Typeof to deduce the result of these operators. For compilers that -support `typeof`, the appropriate value type will be automatically deduced. For compilers that do not provide -language support for `typeof` it is necessary to register all the types used. For the case of natural numbers, -this would amount to something like the following: - - BOOST_TYPEOF_REGISTER_TYPE(natural); - BOOST_TYPEOF_REGISTER_TYPE(integer); - BOOST_TYPEOF_REGISTER_TYPE(rational); - -[endsect] - -[section:Conversions Conversions] - -Conversion is only meaningful for quantities as it implies the presence of at -least a multiplicative scale factor and, possibly, and affine linear offset. -Macros for simplifying the definition of conversions between units can be found in -[headerref boost/units/conversion.hpp] and [headerref boost/units/absolute.hpp] -(for affine conversions with offsets). - -The macro [___BOOST_UNITS_DEFINE_CONVERSION_FACTOR] specifies a scale -factor for conversion from the first unit type to the second. The -first argument must be a [___base_unit]. The second argument -can be either a [___base_unit] or a [___unit]. - -Let's declare a simple base unit: - - struct foot_base_unit : base_unit { }; - -Now, we want to be able to convert feet to meters and vice versa. The foot -is defined as exactly 0.3048 meters, so we can write the following - - BOOST_UNITS_DEFINE_CONVERSION_FACTOR(foot_base_unit, meter_base_unit, double, 0.3048); - -Alternately, we could use the SI length `typedef`: - - BOOST_UNITS_DEFINE_CONVERSION_FACTOR(foot_base_unit, SI::length, double, 0.3048); - -Since the SI unit of length is the meter, these two definitions are equivalent. -If these conversions have been defined, then converting between -scaled forms of these units will also automatically work. - -The macro [___BOOST_UNITS_DEFAULT_CONVERSION] specifies a conversion -that will be applied to a base unit when no direct conversion is -possible. This can be used to make arbitrary conversions work -with a single specialization: - - struct my_unit_tag : boost::units::base_unit {}; - // define the conversion factor - BOOST_UNITS_DEFINE_CONVERSION_FACTOR(my_unit_tag, SI::force, double, 3.14159265358979323846); - // make conversion to SI the default. - BOOST_UNITS_DEFAULT_CONVERSION(my_unit_tag, SI::force); - -[endsect] - -[section:Quantity_Construction_and_Conversion Construction and Conversion of Quantities] - -This library is designed to emphasize safety above convenience when performing operations with dimensioned quantities. -Specifically, construction of quantities is required to fully specify both value and unit. Direct construction from a scalar value -is prohibited (though the static member function [___from_value] is provided to enable -this functionality where it is necessary. In addition, a [___quantity_cast] to a reference allows direct access to the -underlying value of a [___quantity] variable. An explicit constructor is provided to enable conversion between -dimensionally compatible quantities in different unit systems. Implicit conversions between unit systems are -allowed only when the reduced units are identical, allowing, for example, trivial conversions between -equivalent units in different systems (such as SI seconds and CGS seconds) while simultaneously enabling -unintentional unit system mismatches to be caught at compile time and preventing potential loss of precision and -performance overhead from unintended conversions. Assignment follows the same rules. -An exception is made for quantities for which the unit reduces to dimensionless; in this case, implicit conversion -to the underlying value type is allowed via class template specialization. Quantities of different value types are implicitly -convertible only if the value types are themselves implicitly convertible. The [___quantity] class also defines -a `value()` member for directly accessing the underlying value. - -To summarize, conversions are allowed under the following conditions : - -* implicit conversion of `quantity` to `quantity` is allowed if `Y` and `Z` are implicitly convertible. -* assignment between `quantity` and `quantity` is allowed if `Y` and `Z` are implicitly convertible. -* explicit conversion between `quantity` and `quantity` is allowed if `Unit1` and `Unit2` have the same dimensions - and if `Y` and `Z` are implicitly convertible. -* implicit conversion between `quantity` and `quantity` is allowed if `Unit1` - reduces to exactly the same combination of base units as `Unit2` and if `Y` and `Z` are convertible. -* assignment between `quantity` and `quantity` is allowed under the same - conditions as implicit conversion. -* `quantity` can be directly constructed from a value of type `Y` using the static member function [___from_value]. Doing so, - naturally, bypasses any type-checking of the newly assigned value, so this method should be used only when absolutely necessary. - -Of course, any time implicit conversion is allowed, an explicit conversion is -also legal. - -Because dimensionless quantities have no associated units, they behave as normal scalars, and allow implicit conversion to and from -the underlying value type or types that are convertible to/from that value type. - -[endsect] - -[endsect] - -[section:Examples Examples] - -[section:DimensionExample Dimension Example] - -([@../../libs/units/example/dimension.cpp dimension.cpp]) - -By using MPL metafunctions and the template specializations for operations on composite dimensions -(defined in [headerref boost/units/dimension.hpp]) it is possible to perform compile time arithmetic -according to the dimensional analysis rules described [link boost_units.Dimensional_Analysis above] -to produce new composite dimensions : - -[import ../example/dimension.cpp] - -[dimension_snippet_1] - -outputting (with symbol demangling, implemented in -[@boost:/boost/units/detail/utility.hpp utility.hpp]) - -[dimension_output] - -[endsect] - -[section:UnitExample Unit Example] - -([@../../libs/units/example/unit.cpp unit.cpp]) - -This example demonstrates the use of the simple but functional unit system implemented in -[@boost:/libs/units/example/test_system.hpp test_system.hpp] - -[import ../example/unit.cpp] - -[unit_snippet_1] - -We can perform various algebraic operations on these units, resulting in the following output: - -[unit_output] - -[endsect] - -[section:QuantityExample Quantity Example] - -([@../../libs/units/example/quantity.cpp quantity.cpp]) - -This example demonstrates how to use quantities of our toy unit system : - -[import ../example/quantity.cpp] - -[quantity_snippet_1] - -giving us the basic quantity functionality : - -[quantity_output_double] - -As a further demonstration of the flexibility of the system, we replace the `double` value type -with a `std::complex` value type (ignoring the question of the meaningfulness of -complex lengths and energies) : - -[quantity_snippet_2] - -and find that the code functions exactly as expected with no additional work, delegating operations -to `std::complex` and performing the appropriate dimensional analysis : - -[quantity_output_complex] - -[endsect] - -[section:KitchenSinkExample Kitchen Sink Example using SI units] - -([@../../libs/units/example/kitchen_sink.cpp kitchen_sink.cpp]) - -This example provides a fairly extensive set of tests covering most of the [___quantity] functionality. -It uses the SI unit system defined in [headerref boost/units/systems/si.hpp]. - -If we define a few units and associated quantities, - -[import ../example/kitchen_sink.cpp] - -[kitchen_sink_snippet_1] - -the various algebraic operations between scalars, units, and quantities give - -[kitchen_sink_output_1] - -Scalar/unit operations : - -[kitchen_sink_output_2] - -Unit/unit operations and integral/rational powers of units : - -[kitchen_sink_output_3] - -Scalar/quantity operations : - -[kitchen_sink_output_4] - -Unit/quantity operations : - -[kitchen_sink_output_5] - -Quantity/quantity operations and integral/rational powers of quantities : - -[kitchen_sink_output_6] - -Logical comparison operators are also defined between quantities : - -[kitchen_sink_snippet_2] - -giving - -[kitchen_sink_output_7] - -Implicit conversion is allowed between dimensionless quantities and their corresponding value types : - -[kitchen_sink_snippet_3] - -A generic function for computing mechanical work can be defined that takes force and distance arguments -in an arbitrary unit system and returns energy in the same system: - -[kitchen_sink_function_snippet_3] - -[kitchen_sink_snippet_4] - -which functions as expected for SI quantities : - -[kitchen_sink_output_9] - -The ideal gas law can also be implemented in SI units : - -[kitchen_sink_function_snippet_4] - -[kitchen_sink_snippet_5] - -with the resulting output : - -[kitchen_sink_output_10] - -Trigonometric and inverse trigonometric functions can be implemented for any unit system -that provides an angular base dimension. For radians, these functions are found in -[headerref boost/units/cmath.hpp] These behave as one expects, with trigonometric functions -taking an angular quantity and returning a dimensionless quantity, while the inverse trigonometric functions -take a dimensionless quantity and return an angular quantity : - -Defining a few angular quantities, - -[kitchen_sink_snippet_6] - -yields - -[kitchen_sink_output_11] - -Dealing with complex quantities is trivial. Here is the calculation of complex impedance : - -[kitchen_sink_snippet_7] - -giving - -[kitchen_sink_output_12] - -[section:UDT_Quantities User-defined value types] - -User-defined value types that support the appropriate arithmetic operations are automatically supported -as quantity value types. The operators that are supported by default for quantity value types are unary plus, unary minus, -addition, subtraction, multiplication, division, equal-to, not-equal-to, less-than, less-or-equal-to, -greater-than, and greater-or-equal-to. Support for rational powers and roots can be added by overloading -the [___power_typeof_helper] and [___root_typeof_helper] classes. Here we implement a user-defined `measurement` -class that models a numerical measurement with an associated measurement error and the appropriate algebra and -demonstrates its use as a quantity value type; the full code is found in [@../../libs/units/example/measurement.hpp measurement.hpp]. - -Then, defining some `measurement` [___quantity] variables - -[kitchen_sink_snippet_8] - -gives - -[kitchen_sink_output_13] - -If we implement the overloaded helper classes for rational powers and roots -then we can also compute rational powers of measurement quantities : - -[kitchen_sink_output_14] - -[endsect] - -[endsect] - -[section:ConversionExample Conversion Example] - -([@../../libs/units/example/conversion.cpp conversion.cpp]) - -This example demonstrates the various allowed conversions between SI and CGS units. Defining some -quantities - -[import ../example/conversion.cpp] - -[conversion_snippet_1] - -illustrates implicit conversion of quantities of different value types where implicit conversion -of the value types themselves is allowed. N.B. The conversion from double to int is treated -as an explicit conversion because there is no way to emulate the exact behavior of the built-in -conversion. Explicit constructors allow conversions for two cases: - -* explicit casting of a [___quantity] to a different `value_type` : - -[conversion_snippet_3] - -* and explicit casting of a [___quantity] to a different unit : - -[conversion_snippet_4] - -giving the following output : - -[conversion_output_1] - -A few more explicit unit system conversions : - -[conversion_snippet_5] - -which produces the following output: - -[conversion_output_2] - -[endsect] - -[section:UDTExample User Defined Types] - -([@../../libs/units/example/quaternion.cpp quaternion.cpp]) - -This example demonstrates the use of `boost::math::quaternion` as a value type for [___quantity] and the converse. -For the first case, we first define specializations of [___power_typeof_helper] and [___root_typeof_helper] for -powers and roots, respectively: - -[import ../example/quaternion.cpp] - -[quaternion_class_snippet_1a] - -[quaternion_class_snippet_1b] - -We can now declare a [___quantity] of a `quaternion` : - -[quaternion_snippet_1] - -so that all operations that are defined in the `quaternion` class behave correctly. If rational -powers were defined for this class, it would be possible to compute rational powers and roots with -no additional changes. - -[quaternion_output_1] - -Now, if for some reason we preferred the [___quantity] to be the value type of the `quaternion` class we would have : - -[quaternion_snippet_2] - -Here, the unary plus and minus and addition and subtraction operators function correctly. Unfortunately, -the multiplication and division operations fail because `quaternion` implements them in terms of the `*=` and -`/=` operators, respectively, which are incapable of representing the heterogeneous unit algebra needed for -quantities (an identical problem -occurs with `std::complex`, for the same reason). In order to compute rational powers and roots, we need to -specialize [___power_typeof_helper] and [___root_typeof_helper] as follows: - -[quaternion_class_snippet_2a] - -[quaternion_class_snippet_2b] - -giving: - -[quaternion_output_2] - -[endsect] - -[section:ComplexExample Complex Example] - -([@../../libs/units/example/complex.cpp complex.cpp]) - -This example demonstrates how to implement a replacement `complex` class that functions correctly both as a -quantity value type and as a quantity container class, including heterogeneous multiplication and division -operations and rational powers and roots. Naturally, heterogeneous operations are only supported on -compilers that implement `typeof`. The primary differences are that binary operations are not implemented -using the `op=` operators and use the utility classes [___add_typeof_helper], [___subtract_typeof_helper], -[___multiply_typeof_helper], and [___divide_typeof_helper]. In addition, [___power_typeof_helper] and -[___root_typeof_helper] are defined for both cases : - -[import ../example/complex.cpp] - -[complex_class_snippet_1] - -With this replacement `complex` class, we can declare a complex variable : - -[complex_snippet_1] - -to get the correct behavior for all cases supported by [___quantity] with a `complex` value type : - -[complex_output_1] - -and, similarly, `complex` with a [___quantity] value type - -[complex_snippet_2] - -gives - -[complex_output_2] - -[endsect] - -[section:PerformanceExample Performance Example] - -([@../../libs/units/example/performance.cpp performance.cpp]) - -This example provides an ad hoc performance test to verify that zero runtime overhead -is incurred when using [___quantity] in place of `double`. Note that performance -optimization and testing is not trivial, so some care must be taken in profiling. It -is also critical to have a compiler capable of optimizing the many template instantiations -and inline calls effectively to achieve maximal performance. Zero overhead for this test -has been verified using gcc 4.0.1, and icc 9.0, 10.0, and 10.1 on Mac OS 10.4 and 10.5, and -using msvc 8.0 on Windows XP. - -[endsect] - -[section:RadarBeamHeightExample Radar Beam Height] - -([@../../libs/units/example/radar_beam_height.cpp radar_beam_height.cpp]) - -[import ../example/radar_beam_height.cpp] - -This example demonstrates the implementation of two non-SI units of length, the -nautical mile : - -[radar_beam_height_class_snippet_1] - -and the imperial foot : - -[radar_beam_height_class_snippet_2] - -These units include conversions between themselves and the meter. Three functions -for computing radar beam height from radar range and the local earth radius are -defined. The first takes arguments in one system and returns a value in the same -system : - -[radar_beam_height_function_snippet_1] - -The second is similar, but is templated on return type, so that the arguments are -converted to the return unit system internally : - -[radar_beam_height_function_snippet_2] - -Finally, the third function is an empirical approximation that is only valid for -radar ranges specified in nautical miles, returning beam height in feet. This -function uses the heterogeneous unit of nautical miles per square root of feet to -ensure dimensional correctness : - -[radar_beam_height_function_snippet_3] - -With these, we can compute radar beam height in various unit systems : - -[radar_beam_height_snippet_1] - -giving - -[radar_beam_height_output] - -[endsect] - -[section:HeterogeneousUnitExample Heterogeneous Unit Example] - -([@../../libs/units/example/heterogeneous_unit.cpp heterogeneous_unit.cpp]) - -[import ../example/heterogeneous_unit.cpp] - -Mixed units and mixed unit conversions. - -This code: - -[heterogeneous_unit_snippet_1] - -gives - -[heterogeneous_unit_output_1] - -Arbitrary conversions also work: - -[heterogeneous_unit_snippet_2] - -yielding - -[heterogeneous_unit_output_2] - -[endsect] - -[section:AbsoluteRelativeTemperatureExample Absolute and Relative Temperature Example] - -([@../../libs/units/example/temperature.cpp temperature.cpp]) - -[import ../example/temperature.cpp] - -This example demonstrates using of absolute temperatures and relative temperature differences in Fahrenheit -and converting between these and the Kelvin temperature scale. This issue touches on some surprisingly deep mathematical -concepts (see [@http://en.wikipedia.org/wiki/Affine_space Wikipedia] for a basic review), but for our purposes here, we -will simply observe that it is important to be able to differentiate between an absolute temperature measurement and a -measurement of temperature difference. This is accomplished by using the [___absolute] wrapper class. - -First we define a system using the predefined fahrenheit base unit: - -[temperature_snippet_1] - -Now we can create some quantities: - -[temperature_snippet_3] - -Note the use of [___absolute] to wrap a unit. The resulting output is: - -[temperature_output_1] - -[endsect] - -[section:RuntimeConversionFactorExample Runtime Conversion Factor Example] - -([@../../libs/units/example/runtime_conversion_factor.cpp runtime_conversion_factor.cpp]) - -[import ../example/runtime_conversion_factor.cpp] - -The Boost.Units library does not require that the conversion factors be compile time constants, -as is demonstrated in this example: - -[runtime_conversion_factor_snippet_1] - -[endsect] - -[section:UnitsWithNonbaseDimensions Units with Non-base Dimensions] - -([@../../libs/units/example/non_base_dimension.cpp non_base_dimension.cpp]) - -[import ../example/non_base_dimension.cpp] - -It is also possible to define base units that have derived rather than base dimensions: - -[non_base_dimension_snippet_1] - -[endsect] - -[section:OutputForCompositeUnits Output for Composite Units] - -([@../../libs/units/example/composite_output.cpp composite_output.cpp]) - -[import ../example/composite_output.cpp] - -If a unit has a special name and/or symbol, the free functions `name_string` and -`symbol_string` can be overloaded directly. - -[composite_output_snippet_1] - -In this case, any unit that reduces -to the overloaded unit will be output with the replacement symbol. - -Special names and symbols for the SI and CGS unit systems are found in -[headerref boost/units/systems/si/io.hpp] and [headerref boost/units/systems/cgs/io.hpp], -respectively. If these headers are not included, the output will simply follow -default rules using the appropriate fundamental dimensions. -Note that neither of these functions is defined for quantities -because doing so would require making assumptions on how the corresponding value -type should be formatted. - -Three `ostream` formatters, `symbol_format`, `name_format`, and `typename_format` -are provided for convenience. These select the textual representation of units -provided by `symbol_string` or `name_string` in the first two cases, while the -latter returns a demangled typename for debugging purposes. Formatting of scaled -unit is also done correctly. - -[endsect] - -[section:autoscale Automatically Scaled Units] - -It is often desirable to scale a [___unit] automatically, depending on its value, -to keep the integral part in a limited range, usually between 1 and 999. - -For example, using [@http://en.wikipedia.org/wiki/Engineering_notation engineering notation prefixes], - - "1234.5 m" is more helpfully displayed as "1.234 km" - "0.000000001234 m" is more clearly displayed as "1.2345 nanometer". - -The iostream manipulators `engineering_prefixes` or `binary_prefixes` make this easy. - -[import ../example/autoprefixes.cpp] - -[autoprefixes_snippet_1] - -(The complete set of [@http://physics.nist.gov/cuu/Units/prefixes.html engineering and scientific multiples] -is not used (not centi or deci for example), but only powers of ten that are multiples of three, 10^3). - -Similarly, the equivalent [@http://en.wikipedia.org/wiki/Binary_prefixes binary prefixes] -used for displaying computing kilobytes, megabytes, gigabytes... - -These are the 2^10 = 1024, 2^20 = 1 048 576, 2^30 ... multiples. - -(See also [@http://physics.nist.gov/cuu/Units/binary.html Prefixes for binary multiples] - -This scale is specified in IEC 60027-2, Second edition, 2000-11, -Letter symbols to be used in electrical technology - -Part 2: Telecommunications and electronics). - -[autoprefixes_snippet_2] - -But note that scalar dimensionless values, like int, float and double, -are *not* prefixed automatically by the engineering_prefix or binary_prefix iostream manipulators. - -[autoprefixes_snippet_3] - -You can output the name or symbol of a unit (rather than the most common quantity of a unit). - -[autoprefixes_snippet_4] - -Note too that all the formatting flags are persistent, -so that if you set engineering_prefix, then it applies to all future outputs, -until you select binary_prefix, or explicitly switch autoprefix off. -You can specify no prefix (the default of course) in two ways: - -[autoprefixes_snippet_5] - -And you can get the format flags for diagnosing problems. - -[autoprefixes_snippet_6] - -[endsect] [/section:autoscale Automatically Scaled Units] - -[section:ConversionFactor Conversion Factor] - -This code demonstrates the use of the `conversion_factor` free function to determine -the scale factor between two units. - -([@../../libs/units/example/conversion_factor.cpp conversion_factor.cpp]) - -[import ../example/conversion_factor.cpp] - -[conversion_factor_snippet_1] - -Produces - -[conversion_factor_output] - -[endsect] - -[section:RuntimeUnits Runtime Units] - -([@../../libs/units/example/runtime_unit.cpp runtime_unit.cpp]) - -[import ../example/runtime_unit.cpp] - -This example shows how to implement an interface that -allow different units at runtime while still maintaining -type safety for internal calculations. - -[runtime_unit_snippet_1] - -[endsect] - -[section:lambda Interoperability with Boost.Lambda] - -([@../../libs/units/example/lambda.cpp lambda.cpp]) - -[import ../example/lambda.cpp] - -The header [headerref boost/units/lambda.hpp] provides overloads -and specializations needed to make Boost.Units usable with the -Boost.Lambda library. - -[lambda_snippet_1] - -[endsect] - -[endsect] - -[section:Utilities Utilities] - -Relatively complete SI and CGS unit systems are provided in [headerref boost/units/systems/si.hpp] and -[headerref boost/units/systems/cgs.hpp], respectively. - -[section:Metaprogramming_Classes Metaprogramming Classes] - - template struct ordinal; - - template struct get_tag< dim >; - template struct get_value< dim >; - template struct get_system_tag_of_dim; - template struct make_dimension_list; - template struct fundamental_dimension
; - template struct composite_dimension; - - template struct get_dimension< unit >; - template struct get_dimension< quantity >; - template struct get_system< unit >; - template struct get_system quantity >; - - struct dimensionless_type; - template struct dimensionless_unit; - template struct dimensionless_quantity; - - struct implicitly_convertible; - struct trivial_conversion; - template struct base_unit_converter; - - template class conversion_helper; - -[endsect] - -[section:Metaprogramming_Predicates Metaprogramming Predicates] - - template struct is_dim< dim >; - template struct is_empty_dim< dim >; - - template struct is_dimension_list; - - template struct is_system< homogeneous_system >; - template struct is_system< heterogeneous_system >; - template struct is_homogeneous_system< homogeneous_system >; - template struct is_heterogeneous_system< heterogeneous_system >; - - template struct is_unit< unit >; - template struct is_unit_of_system< unit,System >; - template struct is_unit_of_dimension< unit,Dim >; - - template struct is_quantity< quantity >; - template struct is_quantity_of_system< quantity,Y>,System >; - template struct is_quantity_of_dimension< quantity,Y>,Dim >; - - template struct is_dimensionless< unit >; - template struct is_dimensionless_unit< unit >; - template struct is_dimensionless< quantity,Y> >; - template struct is_dimensionless_quantity< quantity,Y> >; - -[endsect] - -[endsect] - -[section:Reference Reference] - -[xinclude units_reference.xml] - -[xinclude dimensions_reference.xml] -[xinclude si_reference.xml] -[xinclude cgs_reference.xml] -[xinclude trig_reference.xml] -[xinclude temperature_reference.xml] -[xinclude information_reference.xml] -[xinclude abstract_reference.xml] - -[section Base Units by Category] - -[xinclude angle_base_units_reference.xml] -[xinclude astronomical_base_units_reference.xml] -[xinclude cgs_base_units_reference.xml] -[xinclude imperial_base_units_reference.xml] -[xinclude metric_base_units_reference.xml] -[xinclude si_base_units_reference.xml] -[xinclude temperature_base_units_reference.xml] -[xinclude us_base_units_reference.xml] - -[endsect] - -[section Alphabetical Listing of Base Units] -[include base_units.qbk] -[endsect] - -[endsect] - -[section:Installation Installation] - -The core header files are located in `boost/units`. Unit system headers are -located in ``. There are no source files for the library -itself - the library is header-only. Example programs demonstrating various aspects of the library can be found in -`boost/libs/units/example`. Programs for unit testing are provided in `boost/libs/units/test`. - -[endsect] - -[section:FAQ FAQ] - -[section:Distinguishing_Quantities_With_Same_Units -How does one distinguish between quantities that are physically different but have the same units (such as -energy and torque)?] - -Because Boost.Units includes plane and solid angle units in the SI system, torque and energy -are, in fact, distinguishable (see [@http://en.wikipedia.org/wiki/SI_units torque]). -In addition, energy is a true -[@http://mathworld.wolfram.com/Scalar.html scalar] quantity, while torque, despite -having the same units as energy if plane angle is not included, is in fact a -[@http://mathworld.wolfram.com/Pseudovector.html pseudovector]. Thus, a value type representing pseudovectors -and encapsulating their algebra could also be implemented. - -There are, -however, a few SI units that are dimensionally indistinguishable within the SI system. These -include the [@http://en.wikipedia.org/wiki/Becquerel becquerel], which has units identical to -frequency (Hz), and the [@http://en.wikipedia.org/wiki/Sievert sievert], which is degenerate -with the [@http://en.wikipedia.org/wiki/Gray_%28unit%29 gray]. In cases such as this, -the proper way to treat this difference is to recognize that expanding the set of base dimensions -can provide disambiguation. For example, adding a base dimension for radioactive decays would -allow the becquerel to be written as decays/second, differentiating it from the signature of hertz, -which is simply 1/second. - -[endsect] - -[section:Angle_Are_Units Angles are treated as units] - -If you don't like this, you can just ignore the angle units and -go on your merry way (periodically screwing up when a routine wants degrees and you give it -radians instead...) - -[endsect] - -[section:Why_Homogeneous_Systems Why are there homogeneous systems? Aren't heterogeneous systems sufficient?] - -Consider the following code: - - cout << asin(sin(90.0 * degrees)); - -What should this print? If only heterogeneous -systems are available it would print 1.5708 rad -Why? Well, `sin` would return a `quantity` -effectively losing the information that degrees -are being used. In order to propogate this extra information -we need homogeneous systems. - -[endsect] - -[section:NoConstructorFromValueType Why can't I construct a quantity directly from the value type?] - -This only breaks generic code--which ought to break anyway. The only -literal value that ought to be converted to a quantity by generic code -is zero, which should be handled by the default constructor. In addition, -consider the search and replace problem allowing this poses: - - quantity q(1.0); - -Here, the intent is clear - we want a length of one in the SI system, which is one meter. However, -imagine some well-intentioned coder attempting to reuse this code, but to have it perform the -calculations in the CGS unit system instead. After searching for `si::` and replacing it with `cgs::` , -we have: - - quantity q(1.0); - -Unfortunately, the meaning of this statement has suddenly changed from one meter to one centimeter. In -contrast, as implemented, we begin with: - - quantity q(1.0*si::meter); - -and, after search and replace: - - quantity q(1.0*cgs::meter); - -which gives us an error. Even if the code has a @using namespace boost::units::si; declaration, the latter -is still safe, with: - - using namespace boost::units::si; - quantity q(1.0*meter); - -going to - - using namespace boost::units::cgs; - quantity q(1.0*meter); - -The latter will involve an explicit conversion from meters to centimeters, but the value remains correct. - -[endsect] - -[section:ExplicitConversions Why are conversions explicit by default?] - -Safety and the potential for unintended conversions leading to precision loss and hidden performance costs. -Options are provided for forcing implicit conversions between specific units to be allowed. - -[endsect] - -[endsect] - -[section:Acknowledgements Acknowledgements] - -Matthias C. Schabel would like to acknowledge the Department of Defense for its support of this work under -the Prostate Cancer Research Program New Investigator Award W81XWH-04-1-0042 and the National Institutes of Health for their -support of this work under the NIBIB Mentored Quantitative Research Development Award K25EB005077. - -Thanks to David Walthall for his assistance in debugging and testing on a variety of platforms and Torsten Maehne for -his work on interfacing the Boost Units and Boost Lambda libraries. - -Thanks to: - -* Paul Bristow, -* Michael Fawcett, -* Ben FrantzDale, -* Ron Garcia, -* David Greene, -* Peder Holt, -* Janek Kozicki, -* Andy Little, -* Kevin Lynch, -* Torsten Maehne -* Noah Roberts, -* Andrey Semashev, -* David Walthall, -* Deane Yang, - -and all the members of the Boost mailing list who provided their input into -the design and implementation of this library. - -[endsect] [/section:Acknowledgements Acknowledgements] - -[section:HelpWanted Help Wanted] - - Any help in the following areas would be much appreciated: - -* testing on other compilers and operating systems -* performance testing on various architectures -* tutorials - -[endsect] - -[section:version_id Version Info] - -__boostroot - -Last edit to Quickbook file __FILENAME__ was at __TIME__ on __DATE__. - -[tip This should appear on the pdf version (but may be redundant on html).] -[/ Useful on pdf version. See also Last revised timestamp on first page of html version.] -[/See also Adobe Reader pdf File Properties for creation date, and PDF producer, version and page count.] - -[endsect] [/section:version_id Version Info] - -[section:ReleaseNotes Release Notes] - -1.2 (March 2010) - -* Added autoprefix ready for Boost 1.43 - -1.0.0 (August 1, 2008) : - -* Initial release with Boost 1.36 - -0.7.1 (March 14, 2007) : - -* Boost.Typeof emulation support. -* attempting to rebind a heterogeneous_system to a different set of dimensions now fails. -* cmath.hpp now works with como-win32. -* minor changes to the tests and examples to make msvc 7.1 happy. - -0.7.0 (March 13, 2007) : - -* heterogeneous and mixed system functionality added. -* added fine-grained implicit unit conversion on a per fundamental dimension basis. -* added a number of utility metafunction classes and predicates. -* [headerref boost/units/operators.hpp] now uses `BOOST_TYPEOF` when possible. -* angular units added in [headerref boost/units/systems/angle/gradians.hpp] - and [headerref boost/units/systems/angle/gradians.hpp]. - Implicit conversion of radians between trigonometric, SI, and CGS systems is allowed. -* a variety of [___unit] and [___quantity] tests added. -* examples now provide self-tests. - -0.6.2 (February 22, 2007) : - -* changed template order in `unit` so dimension precedes unit system -* added `homogeneous_system` for unit systems -* incorporated changes to [headerref boost/units/dimension.hpp] (compile-time sorting by predicate), - [headerref boost/units/conversion.hpp] (thread-safe implementation of quantity conversions), - and [headerref boost/units/io.hpp] (now works with any `std::basic_ostream`) by SW -* added abstract units in [headerref boost/units/systems/abstract.hpp] to allow abstract dimensional - analysis -* new example demonstrating implementation of code based on requirements from - Michael Fawcett ([@../../libs/units/example/radar_beam_height.cpp radar_beam_height.cpp]) - -0.6.1 (February 13, 2007) : - -* added metafunctions to test if a type is - * a valid dimension list (`is_dimension_list`) - * a unit (`is_unit` and `is_unit_of_system`) - * a quantity (`is_quantity` and `is_quantity_of_system`) -* quantity conversion factor is now computed at compile time -* static constants now avoid ODR problems -* unit_example_14.cpp now uses Boost.Timer -* numerous minor fixes suggested by SW - -0.6.0 (February 8, 2007) : - -* incorporated Steven Watanabe's optimized code for dimension.hpp, leading to *dramatic* - decreases in compilation time (nearly a factor of 10 for unit_example_4.cpp in my tests). - -0.5.8 (February 7, 2007) : - -* fixed `#include` in [headerref boost/units/systems/si/base.hpp] (thanks to Michael Fawcett and - Steven Watanabe) -* removed references to obsolete `base_type` in [___unit_info] (thanks to Michael Fawcett) -* moved functions in [headerref boost/units/cmath.hpp] into `boost::units` namespace - (thanks to Steven Watanabe) -* fixed `#include` guards to be consistently named `BOOST_UNITS_XXX` (thanks to Steven - Watanabe) - -0.5.7 (February 5, 2007) : - -* changed quantity conversion helper to increase flexibility -* minor documentation changes -* submitted for formal review as a Boost library - -0.5.6 (January 22, 2007) : - -* added IEEE 1541 standard binary prefixes along with SI prefixes to and extended algebra of - `scale` and `scaled_value` classes (thanks to Kevin Lynch) -* split SI units into separate header files to minimize the "kitchen sink" include problem - (thanks to Janek Kozicki) -* added convenience classes for declaring fundamental dimensions and composite dimensions - with integral powers (`fundamental_dimension` and `composite_dimension` respectively) - -0.5.5 (January 18, 2007) : - -* template parameter order in `quantity` switched and default `value_type` of `double` added - (thanks to Andrey Semashev and Paul Bristow) -* added implicit `value_type` conversion where allowed (thanks to Andrey Semashev) -* added `quantity_cast` for three cases (thanks to Andrey Semashev): - * constructing `quantity` from raw `value_type` - * casting from one `value_type` to another - * casting from one `unit` to another (where conversion is allowed) -* added` metre` and `metres` and related constants to the SI system for the convenience of - our Commonwealth friends... - -0.5.4 (January 12, 2007) : - -* completely reimplemented unit conversion to allow for arbitrary unit conversions - between systems -* strict quantity construction is default; quantities can be constructed from bare values - by using static member `from_value` - -0.5.3 (December 12, 2006) : - -* added Boost.Serialization support to `unit` and `quantity` classes -* added option to enforce strict construction of quantities (only constructible - by multiplication of scalar by unit or quantity by unit) by preprocessor - `MCS_STRICT_QUANTITY_CONSTRUCTION` switch - -0.5.2 (December 4, 2006) : - -* added `` wrappers in the `std` namespace for functions that can support quantities - -0.5.1 (November 3, 2006) : - -* converted to Boost Software License -* boostified directory structure and file paths - -0.5 (November 2, 2006) : - -* completely reimplemented SI and CGS unit systems and changed syntax for quantities -* significantly streamlined `pow` and `root` so for most applications it is only - necessary to define `power_typeof_helper` and `root_typeof_helper` to gain this - functionality -* added a selection of physical constants from the CODATA tables -* added a skeleton `complex` class that correctly supports both `complex >` - and `quantity,Unit>` as an example -* investigate using Boost.Typeof for compilers that do not support `typeof` - -0.4 (October 13, 2006) : - -* `pow` and `root` improved for user-defined types -* added unary + and unary - operators -* added new example of interfacing with `boost::math::quaternion` -* added optional preprocessor switch to enable implicit unit conversions - (`BOOST_UNITS_ENABLE_IMPLICIT_UNIT_CONVERSIONS`) - -0.3 (September 6, 2006) : - -* Support for `op(X x,Y y)` for g++ added. This is automatically - active when compiling with gcc and can be optionally enabled by defining the preprocessor - constant `BOOST_UNITS_HAS_TYPEOF` - -0.2 (September 4, 2006) : Second alpha release based on slightly modified code from 0.1 release - -0.1 (December 13, 2003) : written as a Boost demonstration of MPL-based dimensional analysis -in 2003. - -[endsect] - -[section:TODO TODO] - -* Document concepts -* Implementation of I/O is rudimentary; consider methods of i18n using facets -* Consider runtime variant, perhaps using overload like `quantity` - -[endsect] [/section:TODO TODO] diff -Nru boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/tools/boostbook/xsl/html-base.xsl boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/tools/boostbook/xsl/html-base.xsl --- boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/tools/boostbook/xsl/html-base.xsl 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/tools/boostbook/xsl/html-base.xsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,428 +0,0 @@ - - - - - - - - - - - boostbook.css - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - false - yes - UTF-8 - - 2 - 15 - - - - - - - - - - - - - -appendix toc,title -article/appendix nop -article toc,title -book toc,title -chapter toc,title -part toc,title -preface toc,title -qandadiv toc -qandaset toc -reference toc,title -sect1 toc -sect2 toc -sect3 toc -sect4 toc -sect5 toc -section toc -set toc,title - - - - - - - - - - - - - - - - - - - - - - - - - - - January - February - March - April - May - June - July - August - September - October - November - December - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - January - February - March - April - May - June - July - August - September - October - November - December - - - - - - - - - - - - -
-
- - - - - - copyright - - - - - - - - - -
- - - - - - - - - - - - -
- - - - - - - -

- - Last revised: - - - - - - - - - - - - - - - - -

-
-
-
- -
-
- - - - - - - -
-
- - -

Synopsis

-
- -
-
- - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - diff -Nru boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/tools/quickbook/doc/block.qbk boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/tools/quickbook/doc/block.qbk --- boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/tools/quickbook/doc/block.qbk 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/0001-Remove-timestamps-and-dates-from-documentation.patch/tools/quickbook/doc/block.qbk 1970-01-01 00:00:00.000000000 +0000 @@ -1,1358 +0,0 @@ -[/ - Copyright 2002,2004,2006 Joel de Guzman, Eric Niebler - Copyright 2010-2011 Daniel James - - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -] - -[chapter Block Level Elements - [quickbook 1.7] - [compatibility-mode 1.5] - [id quickbook.syntax.block] - [source-mode teletype] -] - -[#quickbook.ref.xinclude] -[section:xinclude xinclude] - -You can include another XML file with: - -``` -[xinclude file.xml] -``` - -This is useful when file.xml has been generated by Doxygen and contains your -reference section. - -=xinclude= paths are normally used unchanged in the generated documentation, -which will not work if you wish them to be relative to the current quickbook -file. Quickbook can add a =xml:base= attribute to the boostbook documentation -to specify where =xinclude= files should be found. For example, if you wish -them to be relative to the current quickbook file: - - [article Article with xincludes - [quickbook 1.7] - [xmlbase .] - ] - - [xinclude file.xml] - -Now the xinclude should work if =file.xml= is in the same directory as the -quickbook file. Although it might not work if you distribute the generated -files (as their relative directories can change). - -Say the article is generated in a sub-directory, by running something like: - - quickbook article.qbk --output-file=output/article.xml - -This will generate a boostbook root tag: - -
- -Because =xml:base= is set to =..=, the xml processor will know to look in -the parent directory to find =file.xml=, which it comes across the -=xi:include= tag. - -[endsect:xinclude] - -[#quickbook.ref.paragraphs] -[section:paragraphs Paragraphs] - -Paragraphs start left-flushed and are terminated by two or more newlines. No -markup is needed for paragraphs. QuickBook automatically detects paragraphs from -the context. Block markups \[section, endsect, h1, h2, h3, h4, h5, h6, blurb, -(block-quote) ':', pre, def, table and include \] may also terminate a paragraph. - [/ <-- There's a space here. Don't remove. this is intentianal, for testing] -This is a new paragraph... - -[endsect:paragraphs] - -[#quickbook.ref.lists] -[section:lists Lists] -[#quickbook.ref.ordered_lists] -[section:ordered_lists Ordered lists] - -[pre -# One -# Two -# Three -] - -will generate: - -# One -# Two -# Three - -[endsect:ordered_lists] -[#quickbook.ref.list_hierarchies] -[section:list_hierarchies List Hierarchies] - -List hierarchies are supported. Example: - -[pre -# One -# Two -# Three - # Three.a - # Three.b - # Three.c -# Four - # Four.a - # Four.a.i - # Four.a.ii -# Five -] - -will generate: - -# One -# Two -# Three - # Three.a - # Three.b - # Three.c -# Fourth - # Four.a - # Four.a.i - # Four.a.ii -# Five - -[endsect:list_hierarchies] -[#quickbook.ref.long_list_lines] -[section:long_list_lines Long List Lines] - -Long lines will be wrapped appropriately. Example: - -[pre -# A short item. -# A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. -# A short item. -] - -# A short item. -# A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. -# A short item. - -[endsect:long_list_lines] -[#quickbook.ref.unordered_lists] -[section:unordered_lists Unordered lists] - -``` -* First -* Second -* Third -``` - -will generate: - -* First -* Second -* Third - -[endsect:unordered_lists] -[#quickbook.ref.mixed_lists] -[section:mixed_lists Mixed lists] - -Mixed lists (ordered and unordered) are supported. Example: - -``` -# One -# Two -# Three - * Three.a - * Three.b - * Three.c -# Four -``` - -will generate: - -# One -# Two -# Three - * Three.a - * Three.b - * Three.c -# Four - -And... - -``` -# 1 - * 1.a - # 1.a.1 - # 1.a.2 - * 1.b -# 2 - * 2.a - * 2.b - # 2.b.1 - # 2.b.2 - * 2.b.2.a - * 2.b.2.b -``` - -will generate: - -# 1 - * 1.a - # 1.a.1 - # 1.a.2 - * 1.b -# 2 - * 2.a - * 2.b - # 2.b.1 - # 2.b.2 - * 2.b.2.a - * 2.b.2.b - -[endsect:mixed_lists] - -[#quickbook.ref.list_paragraphs] -[section:list_paragraphs Paragraphs in lists] - -In quickbook 1.7 onwards, you can nest paragraphs in lists -by separating them with blank lines: - -``` -* List item 1, paragraph 1 - - List item 1, paragraph 2 - -* List item 2, paragraph 1 - - List item 2, paragraph 2 -``` - -will generate: - -* List item 1, paragraph 1 - - List item 1, paragraph 2 - -* List item 2, paragraph 1 - - List item 2, paragraph 2 - -[endsect:list_paragraphs] - -[#quickbook.ref.list_tags] -[section:list_tags Explicit list tags] - -Sometimes the wiki-style list markup can be tricky to use, especially -if you wish to include more complicated markup with the list. So in -quickbook 1.6, an alternative way to mark up lists introduced: - - [ordered_list [item1][item2]] - -is equivalent to: - - # item1 - # item2 - -And: - - [itemized_list [item1][item2]] - -is equivalent to: - - * item1 - * item2 - -[endsect:list_tags] -[endsect:lists] - -[#quickbook.ref.code] -[section:code Code] - -Preformatted code starts with a space or a tab. The code will be -syntax highlighted according to the current __source_mode__: - -[c++] - - #include - - int main() - { - // Sample code - std::cout << "Hello, World\n"; - return 0; - } - -[python] - - import cgi - - def cookForHtml(text): - '''"Cooks" the input text for HTML.''' - - return cgi.escape(text) - -[teletype] - -Macros that are already defined are expanded in source code. Example: - -``` -[def __array__ [@http://www.boost.org/doc/html/array/reference.html array]] -[def __boost__ [@http://www.boost.org/libs/libraries.htm boost]] - - using __boost__::__array__; -``` - -Generates: - -[def __array__ [@http://www.boost.org/doc/html/array/reference.html array]] -[def __boost__ [@http://www.boost.org/libs/libraries.htm boost]] - - using __boost__::__array__; - -In quickbook 1.7 and later, you can include [link quickbook.ref.callouts callouts] -in code blocks, like so: - -[!teletype] - - [!c++] - std::string foo_bar() /*< The /Mythical/ FooBar. - See [@http://en.wikipedia.org/wiki/Foobar Foobar for details] >*/ - { - return "foo-bar"; /*< return 'em, foo-bar man! >*/ - } - -Which will generate: - -[!c++] - std::string foo_bar() /*< The /Mythical/ FooBar. - See [@http://en.wikipedia.org/wiki/Foobar Foobar for details] >*/ - { - return "foo-bar"; /*< return 'em, foo-bar man! >*/ - } - -[endsect:code] - -[#quickbook.ref.escape_back] -[section:escape_back Escaping Back To QuickBook] - -Inside code, code blocks and inline code, QuickBook does not allow any -markup to avoid conflicts with the target syntax (e.g. c++). In case you -need to switch back to QuickBook markup inside code, you can do so using a -language specific /escape-back/ delimiter. In C++ and Python, the delimiter -is the double tick (back-quote): "\`\`" and "\`\`". Example: - -``` -void ``[@http://en.wikipedia.org/wiki/Foo#Foo.2C_Bar_and_Baz foo]``() -{ -} -``` - -Will generate: - - void ``[@http://en.wikipedia.org/wiki/Foo#Foo.2C_Bar_and_Baz foo]``() - { - } - -When escaping from code to QuickBook, only phrase level markups are -allowed. Block level markups like lists, tables etc. are not allowed. - -[endsect:escape_back] - -[#quickbook.ref.preformatted] -[section:preformatted Preformatted] - -Sometimes, you don't want some preformatted text to be parsed as source code. In such -cases, use the [^\[pre ... \]] markup block. - -``` -[pre - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - -] -``` - -Spaces, tabs and newlines are rendered as-is. Unlike all quickbook block level -markup, pre (and Code) are the only ones that allow multiple newlines. The -markup above will generate: - -[pre - -Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - -] - -Notice that unlike Code, phrase markup such as font style is still permitted -inside =pre= blocks. - -[endsect:preformatted] - -[#quickbook.ref.blockquote] -[section:blockquote Blockquote] - -[pre -'''[:sometext...]''' -] - -[:Indents the paragraph. This applies to one paragraph only.] - -[endsect:blockquote] - -[#quickbook.ref.admonitions] -[section:admonitions Admonitions] - -``` -[note This is a note] -[tip This is a tip] -[important This is important] -[caution This is a caution] -[warning This is a warning] -``` - -generates __docbook__ admonitions: - -[note This is a note] -[tip This is a tip] -[important This is important] -[caution This is a caution] -[warning This is a warning] - -These are the only admonitions supported by __docbook__. So, -for example [^\[information This is some information\]] is unlikely -to produce the desired effect. - -[endsect:admonitions] - -[#quickbook.ref.headings] -[section:headings Headings] - -``` -[h1 Heading 1] -[h2 Heading 2] -[h3 Heading 3] -[h4 Heading 4] -[h5 Heading 5] -[h6 Heading 6] -``` - -[h1 Heading 1] -[h2 Heading 2] -[h3 Heading 3] -[h4 Heading 4] -[h5 Heading 5] -[h6 Heading 6] - -You can specify an id for a heading: - -``` -[h1:heading_id A heading to link to] -``` - -To link to it, you'll need to include the enclosing section's id: - -``` -[link document_id.section_id.heading_id The link text] -``` - -Although you can preceed a heading by an [link quickbook.ref.anchors anchor] -if you wish to use a location independent link. - -If a heading doesn't have an id, one will be automatically generated -with a normalized name with -[^name="document_id.section_id.normalized_header_text"] (i.e. valid -characters are =a-z=, =A-Z=, =0-9= and =_=. All non-valid characters are -converted to underscore and all upper-case are converted to lower-case. -For example: Heading 1 in section Section 2 will be normalized to -[^section_2.heading_1]). You can use: - -``` -[link document_id.section_id.normalized_header_text The link text] -``` - -to link to them. See __anchor_links__ and __section__ for more info. - -[note Specifying heading ids is a quickbook 1.6 feature, earlier - versions don't support them.] - -[endsect:headings] - -[#quickbook.ref.generic_heading] -[section:generic_heading Generic Heading] - -In cases when you don't want to care about the heading level (1 to 6), you -can use the /Generic Heading/: - -``` -[heading Heading] -``` - -The /Generic Heading/ assumes the level, plus one, of the innermost section -where it is placed. For example, if it is placed in the outermost section, -then, it assumes /h2/. - -Headings are often used as an alternative to sections. It is used -particularly if you do not want to start a new section. In many cases, -however, headings in a particular section is just flat. Example: - -``` -[section A] -[h2 X] -[h2:link_id Y] -[h2 Z] -[endsect] -``` - -Here we use h2 assuming that section A is the outermost level. If it is -placed in an inner level, you'll have to use h3, h4, etc. depending on -where the section is. In general, it is the section level plus one. It is -rather tedious, however, to scan the section level everytime. If you -rewrite the example above as shown below, this will be automatic: - -``` -[section A] -[heading X] -[heading Y] -[heading Z] -[endsect] -``` - -They work well regardless where you place them. You can rearrange sections -at will without any extra work to ensure correct heading levels. In fact, -with /section/ and /heading/, you have all you need. /h1/../h6/ becomes -redundant. /h1/../h6/ might be deprecated in the future. - -[endsect:generic_heading] - -[#quickbook.ref.macros] -[section:macros Macros] - -``` -[def macro_identifier some text] -``` - -When a macro is defined, the identifier replaces the text anywhere in the -file, in paragraphs, in markups, etc. macro_identifier is a string of non- -white space characters except '\]'. A macro may not follow an alphabetic -character or the underscore. The replacement text can be any phrase (even -marked up). Example: - -``` -[def sf_logo []] -sf_logo -``` - -Now everywhere the sf_logo is placed, the picture will be inlined. - - -[tip It's a good idea to use macro identifiers that are distinguishable. -For instance, in this document, macro identifiers have two leading and -trailing underscores (e.g. [^\__spirit__]). The reason is to avoid -unwanted macro replacement.] - -Links (URLS) and images are good candidates for macros. *1*) They tend to -change a lot. It is a good idea to place all links and images in one place near the top -to make it easy to make changes. *2*) The syntax is not pretty. It's easier to read and -write, e.g. [^\__spirit__] than `[@http://spirit.sourceforge.net Spirit]`. - -Some more examples: - -``` -[def ``\:-)`` [$theme/smiley.png]] -[def ``\__spirit__`` [@http://spirit.sourceforge.net Spirit]] -``` - -(See __images__ and __links__) - -Invoking these macros: - -``` -Hi ``\__spirit__`` ``\:-)`` -``` - -will generate this: - -Hi __spirit__ :-) - -[endsect:macros] - -[#quickbook.ref.predefined_macros] -[section:predefined_macros Predefined Macros] - -Quickbook has some predefined macros that you can already use. - -[table Predefined Macros - [[Macro] [Meaning] [Example]] - [[[^\__DATE__]] [Today's date] [__DATE__]] - [[[^\__TIME__]] [The current time] [__TIME__]] - [[[^\__FILENAME__]][Quickbook source filename] [__FILENAME__]] -] - -[endsect:predefined_macros] - -[#quickbook.ref.templates] -[section:templates Templates] - -Templates provide a more versatile text substitution mechanism. Templates -come in handy when you need to create parameterizable, multi-line, -boilerplate text that you specify once and expand many times. Templates -accept one or more arguments. These arguments act like place-holders for -text replacement. Unlike simple macros, which are limited to phrase level -markup, templates can contain block level markup (e.g. paragraphs, code -blocks and tables). - -Example template: - -``` -[template person[name age what] - -Hi, my name is [name]. I am [age] years old. I am a [what]. - -] -``` - -[template person[name age what] - -Hi, my name is [name]. I am [age] years old. I am a [what]. - -] - -[#quickbook.ref.template_identifier] -[heading Template Identifier] - -Template identifiers can either consist of: - -* An initial alphabetic character or the underscore, followed by - zero or more alphanumeric characters or the underscore. This is - similar to your typical C/C++ identifier. -* A single character punctuation (a non-alphanumeric printable character) - -[heading Formal Template Arguments] - -Template formal arguments are identifiers consisting of an initial -alphabetic character or the underscore, followed by zero or more -alphanumeric characters or the underscore. This is similar to your typical -C/C++ identifier. - -A template formal argument temporarily hides a template of the same name at -the point where the [link quickbook.ref.template_expansion -template is expanded]. Note that the body of the [^person] template above -refers to [^name] [^age] and [^what] as [^\[name\]] [^\[age\]] and -[^\[what\]]. [^name] [^age] and [^what] are actually templates that exist -in the duration of the template call. - -[heading Template Body] - -The template body can be just about any QuickBook block or phrase. There -are actually two forms. Templates may be phrase or block level. Phrase -templates are of the form: - -``` -[template sample[arg1 arg2...argN] replacement text... ] -``` - -Block templates are of the form: - -``` -[template sample[arg1 arg2...argN] -replacement text... -] -``` - -The basic rule is as follows: if a newline immediately follows the argument -list, then it is a block template, otherwise, it is a phrase template. -Phrase templates are typically expanded as part of phrases. Like macros, -block level elements are not allowed in phrase templates. - -[heading Template Expansion] - -You expand a template this way: - -``` -[template_identifier arg1..arg2..arg3] -``` - -At template expansion, you supply the actual arguments. The template will -be expanded with your supplied arguments. Example: - -``` -[person James Bond..39..Spy] -[person Santa Clause..87..Big Red Fatso] -``` - -Which will expand to: - -[person James Bond..39..Spy] -[person Santa Clause..87..Big Red Fatso] - -[caution A word of caution: Templates are recursive. A template can call -another template or even itself, directly or indirectly. There are no -control structures in QuickBook (yet) so this will always mean infinite -recursion. QuickBook can detect this situation and report an error if -recursion exceeds a certain limit.] - -Each actual argument can be a word, a text fragment or just about any [link -quickbook.syntax.phrase QuickBook phrase]. Arguments are separated by the -double dot [^".."] and terminated by the close parenthesis. - -Note that templates and template parameters can't be expanded -everywhere, only where text is interpreted as a phrase. So they can't be -expanded in places such as table titles and link's urls. If you want to -use a template to generate a link based of the template parameter, you -can't use a normal link and will need to use escaped docbook instead. -Example: - -[teletype] -``` -[template boost_ticket[key] '''#'''[key]''''''] - -[boost_ticket 2035] -``` - -will expand to: - -[template boost_ticket[key] '''#'''[key]''''''] - -[boost_ticket 2035] - -[caution Since quickbook doesn't understand the context where the -parameter is being used, it will interpret it as quickbook markup, so -when writing a template like this, you'll need to escape any meaningful -punctuation.] - -[heading Nullary Templates] - -Nullary templates look and act like simple macros. Example: - -``` -[template alpha[]'''&#945;'''] -[template beta[]'''&#946;'''] -``` - -[template alpha[]'''α'''] -[template beta[]'''β'''] - -Expanding: - -```Some squigles...[*[alpha][beta]]``` - -We have: - -Some squiggles...[*[alpha][beta]] - -The difference with macros are - -* The explicit [link quickbook.ref.template_expansion - template expansion syntax]. This is an advantage because, now, we don't - have to use obscure naming conventions like double underscores (e.g. - \_\_alpha\_\_) to avoid unwanted - macro replacement. -* The template is expanded at the point where it is invoked. A macro is - expanded immediately at its point of declaration. This is subtle and - can cause a slight difference in behavior especially if you refer to - other macros and templates in the body. - -The empty brackets after the template identifier ([^alpha\[\]]) indicates no -arguments. If the template body does not look like a template argument list, we -can elide the empty brackets. Example: - -``` -[template aristotle_quote Aristotle: [*['Education is the best provision -for the journey to old age.]]] -``` - -[template aristotle_quote\ Aristotle: [*['Education is the best provision -for the journey to old age.]]] - -Expanding: - -``` -Here's a quote from [aristotle_quote]. -``` - -We have: - -Here's a quote from [aristotle_quote]. - -The disadvantage is that you can't avoid the space between the template -identifier, `aristotle_quote`, and the template body "Aristotle...". This space -will be part of the template body. If that space is unwanted, use empty -brackets or use the space escape: "`\ `". Example: - -``` -[template tag\ _tag] -``` - -[template tag\ _tag] - -Then expanding: - -``` -`struct` x[tag]; -``` - -We have: - -`struct` x[tag]; - -You have a couple of ways to do it. I personally prefer the explicit empty -brackets, though. - -[heading Simple Arguments] - -As mentioned, arguments are separated by the double dot [^".."]. Alternatively, -if the double dot isn't used and more than one argument is expected, QuickBook -uses whitespace to separate the arguments, following this logic: - -* Break the last argument into two, at the first space found ([^'', '\\n', - \\t' or '\\r']). -* Repeat until there are enough arguments or if there are no more spaces - found (in which case, an error is reported). - -For example: - -``` -[template simple[a b c d] [a][b][c][d]] -[simple w x y z] -``` - -will produce: - -[template simple[a b c d] [a][b][c][d]] -[simple w x y z] - -"w x y z" is initially treated as a single argument because we didn't -supply any [^".."] separators. However, since [^simple] expects 4 -arguments, "w x y z" is broken down iteratively (applying the logic above) -until we have "w", "x", "y" and "z". - -QuickBook only tries to get the arguments it needs. For example: - -``` -[simple w x y z trail] -``` - -will produce: - -[simple w x y z trail] - -The arguments being: "w", "x", "y" and "z trail". - -[caution The behavior described here is for QuickBook 1.5. In older versions you -could use both the double dot and whitespace as separators in the same template -call. If your document is marked up as an older version, it will use the old -behavior, which is described in the -[@http://www.boost.org/doc/libs/1_40_0/doc/html/quickbook/syntax.html#quickbook.syntax.block.templates.simple_arguments -QuickBook 1.4 documentation].] - -[heading Punctuation Templates] - -With templates, one of our objectives is to allow us to rewrite QuickBook -in QuickBook (as a qbk library). For that to happen, we need to accommodate -single character punctuation templates which are fairly common in -QuickBook. You might have noticed that single character punctuations are -allowed as [link quickbook.ref.template_identifier -template identifiers]. Example: - -``` -[template ![bar] [bar]] -``` - -Now, expanding this: - -``` -[!baz] -``` - -We will have: - -[pre -baz -] - -[endsect:templates] - -[#quickbook.ref.blurbs] -[section:blurbs Blurbs] - -``` -[blurb ``\:-)`` [*An eye catching advertisement or note...] - - __spirit__ is an object-oriented recursive-descent parser generator framework - implemented using template meta-programming techniques. Expression templates - allow us to approximate the syntax of Extended Backus-Normal Form (EBNF) - completely in C++. -] -``` - -will generate this: - -[blurb :-) [*An eye catching advertisement or note...] - - __spirit__ is an object-oriented recursive-descent parser generator - framework implemented using template meta-programming techniques. Expression - templates allow us to approximate the syntax of Extended Backus-Normal Form - (EBNF) completely in C++. -] - -[note Prefer [link quickbook.ref.admonitions admonitions] wherever -appropriate.] - -[endsect:blurbs] - -[#quickbook.ref.tables] -[section:tables Tables] - -``` -[table:id A Simple Table - [[Heading 1] [Heading 2] [Heading 3]] - [[R0-C0] [R0-C1] [R0-C2]] - [[R1-C0] [R1-C1] [R1-C2]] - [[R2-C0] [R2-C1] [R2-C2]] -] -``` - -will generate: - -[table:id A Simple Table - [[Heading 1] [Heading 2] [Heading 3]] - [[R0-C0] [R0-C1] [R0-C2]] - [[R1-C0] [R1-C1] [R1-C2]] - [[R2-C0] [R2-C1] [R2-C2]] -] - -The table title is optional. The first row of the table is automatically -treated as the table header; that is, it is wrapped in [^...] -XML tags. Note that unlike the original QuickDoc, the columns are nested in -[cells... ]. - -Giving tables an id is a new feature for quickbook 1.5 onwards. As with -sections, the id is optional. If the table has a title but no id, an id will -be generated from the title. The table above can be linked to using: - -``` -[link quickbook.syntax.block.tables.id link to table] -``` - -which will generate: - -[link quickbook.syntax.block.tables.id link to table] - -The syntax is free-format and allows big cells to be formatted -nicely. Example: - -``` -[table Table with fat cells - [[Heading 1] [Heading 2]] - [ - [Row 0, Col 0: a small cell] - [ - Row 0, Col 1: a big fat cell with paragraphs - - Boost provides free peer-reviewed portable C++ source libraries. - - We emphasize libraries that work well with the C++ Standard Library. - Boost libraries are intended to be widely useful, and usable across - a broad spectrum of applications. The Boost license encourages both - commercial and non-commercial use. - ] - ] - [ - [Row 1, Col 0: a small cell] - [Row 1, Col 1: a small cell] - ] -] -``` - -and thus: - -[table Table with fat cells - [[Heading 1] [Heading 2]] - [ - [Row 0, Col 0: a small cell] - [ - Row 0, Col 1: a big fat cell with paragraphs - - Boost provides free peer-reviewed portable C++ source libraries. - [/ <-- There's a space here. Don't remove. This is intentional, for testing] - We emphasize libraries that work well with the C++ Standard Library. - Boost libraries are intended to be widely useful, and usable across - a broad spectrum of applications. The Boost license encourages both - commercial and non-commercial use. - ] - ] - [ - [Row 1, Col 0: a small cell] - [Row 1, Col 1: a small cell] - ] -] - -Here's how to have preformatted blocks of code in a table cell: - -``` -[table Table with code - [[Comment] [Code]] - [ - [My first program] - [``\`\`\ `` - #include - - int main() - { - std::cout << "Hello, World!" << std::endl; - return 0; - } - ``\`\`\ ``] - ] -] -``` - -[table Table with code - [[Comment] [Code]] - [ - [My first program] - [`` - #include - - int main() - { - std::cout << "Hello, World!" << std::endl; - return 0; - } - ``] - ] -] - -[endsect:tables] - -[#quickbook.ref.variable_lists] -[section:variable_lists Variable Lists] - -``` -[variablelist A Variable List - [[term 1] [The definition of term 1]] - [[term 2] [The definition of term 2]] - [[term 3] [ - The definition of term 3. - - Definitions may contain paragraphs. - ]] -] -``` - -will generate: - -[variablelist A Variable List - [[term 1] [The definition of term 1]] - [[term 2] [The definition of term 2]] - [[term 3] [ - The definition of term 3. - - Definitions may contain paragraphs. - ]] -] - -The rules for variable lists are the same as for tables, except that -only 2 "columns" are allowed. The first column contains the terms, and -the second column contains the definitions. Those familiar with HTML -will recognize this as a "definition list". - -[endsect:variable_lists] - -[#quickbook.ref.include] -[section:include Include] - -You can include one QuickBook file from another. The syntax is simply: - -``` -[include someother.qbk] -``` - -In quickbook 1.6 and later, if the included file has a -[link quickbook.ref.docinfo docinfo block] then it will create a nested -document. This will be processed as a standalone document, although any macros -or templates from the enclosing file will still be defined. - -Otherwise the included file will be processed as if it had been cut and pasted -into the current document, with the following exceptions: - -* The '''__FILENAME__''' predefined macro will reflect the name of the - file currently being processed. -* Any macros or templates defined in the included file are scoped to that file, - i.e. they are not added to the enclosing file. - -[note In quickbook 1.5 and earlier templates weren't scoped in included files. -If you want to use templates or macros from a file in quickbook 1.6, -use [link quickbook.ref.import import] instead.] - -The [^\[include\]] directive lets you specify a document id to use for the -included file. You can specify the id like this: - -``` -[include:someid someother.qbk] -``` - -All auto-generated anchors will use the document id as a unique prefix. So -for instance, if there is a top section in someother.qbk named "Intro", the -named anchor for that section will be "someid.intro", and you can link to -it with [^\[link someid.intro The Intro\]]. - -If the included file has a docinfo block, an id specified in an [^\[include\]] -directive will overwrite it. - -You can also include C, C++ and python source files. This will include any -quickbook blocks in the file that aren't inside of named code snippets. See -the [link quickbook.ref.import Import section] for syntax details. For example, -say you included this file: - - /** - * Hello world example - */ - - // In this comment, the backtick indicates that this is a - // quickbook source block that will be included. - - /*` - First include the appropriate header: [hello_includes] - Then write your main function: [hello_main] - */ - - // This defines a code snippet, the syntax is - // described in the import section. It's available - // in the whole of this source file, not just after - // its definition. - - //[hello_includes - #include - //] - - //[hello_main - int main() { - std::cout << "Hello, trivial example" << std::endl; - } - //] - -It will generate: - - First include the appropriate header: - - #include - - Then write your main function: - - int main() { - std::cout << "Hello, trivial example" << std::endl; - } - -[endsect:include] - -[#quickbook.ref.import] -[section:import Import] - -In quickbook 1.6 and later if you wish to use a template, macro or code -snippet from a file, you need to import it. This will not include any -of the content from that file, but will pull templates, macros and code -snippets into the current file's scope. - -With quickbook files, this allows you to create template and macro -libraries. For python (indicated by the `.py` extension), C or -C++ files this allows you to include code snippets from source files, -so that your code examples can be kept up to date and fully tested. - -[/ Old justification text, might move this into a new section: - -When documenting code, you'd surely need to present code from actual source -files. While it is possible to copy some code and paste them in your QuickBook -file, doing so is error prone and the extracted code in the documentation tends -to get out of sync with the actual code as the code evolves. The problem, as -always, is that once documentation is written, the tendency is for the docs to -languish in the archives without maintenance. - -QuickBook's import facility provides a nice solution. -] - -[heading Example] - -You can effortlessly import code snippets from source code into your QuickBook. -The following illustrates how this is done: - -``` -[import ../test/stub.cpp] -[foo] -[bar] -``` - -The first line: - -``` -[import ../test/stub.cpp] -``` - -collects specially marked-up code snippets from -[@boost:/tools/quickbook/test/stub.cpp stub.cpp] -and places them in your QuickBook file as virtual templates. Each of the -specially marked-up code snippets has a name (e.g. `foo` and `bar` in the -example above). This shall be the template identifier for that particular code -snippet. The second and third line above does the actual template expansion: - -``` -[foo] -[bar] -``` - -And the result is: - -[import ../test/stub.cpp] -[foo] -[bar] - -[heading Code Snippet Markup] - -Note how the code snippets in [@boost:/tools/quickbook/test/stub.cpp stub.cpp] -get marked up. We use distinguishable comments following the form: - - //[id - some code here - //] - -The first comment line above initiates a named code-snippet. This prefix will -not be visible in quickbook. The entire code-snippet in between `//[id` and -`//]` will be inserted as a template in quickbook with name ['/id/]. The comment -`//]` ends a code-snippet This too will not be visible in quickbook. - -[#quickbook.ref.callouts] -[heading Special Comments] - -Special comments of the form: - - //` some [*quickbook] markup here - -and: - - /*` some [*quickbook] markup here */ - -will be parsed by QuickBook. This can contain quickbook /blocks/ (e.g. sections, -paragraphs, tables, etc). In the first case, the initial slash-slash, tick and -white-space shall be ignored. In the second, the initial slash-star-tick and the -final star-slash shall be ignored. - -Special comments of the form: - - /*<- this C++ comment will be ignored ->*/ - -or - - /*<-*/ "this c++ code will be ignored" /*->*/ - -or - - //<- - private: - int some_member; - //-> - -can be used to inhibit code from passing through to quickbook. All text between -the delimeters will simply be ignored. - -Comments of this form: - - //=int main() {} - -or - - /*=foo()*/ - -will be displayed as code that isn't in comments. This allows you to -include some code in the snippet but not actually use it when -compiling your example. - -[heading Callouts] - -Special comments of the form: - - /*< some [*quickbook] markup here >*/ - -will be regarded as callouts. These will be collected, numbered and -rendered as a "callout bug" (a small icon with a number). After the -whole snippet is parsed, the callout list is generated. See -[@http://www.docbook.org/tdg/en/html/callout.html Callouts] for details. -Example: - -[foo_bar] - -This is the actual code: - - //[ foo_bar - std::string foo_bar() /*< The /Mythical/ FooBar. - See [@http://en.wikipedia.org/wiki/Foobar Foobar for details] >*/ - { - return "foo-bar"; /*< return 'em, foo-bar man! >*/ - } - //] - -The callouts bugs are placed exactly where the special callout comment -is situated. It can be anywhere in the code. The bugs can be rather -obtrusive, however. They get in the way of the clarity of the code. -Another special callout comment style is available: - - /*<< some [*quickbook] markup here >>*/ - -This is the line-oriented version of the callout. With this, the "bug" -is placed at the very left of the code block, away from the actual code. -By placing it at the far left, the code is rendered un-obscured. -Example: - -[class_] - -See the actual code here: -[@boost:/tools/quickbook/test/stub.cpp tools/quickbook/test/stub.cpp] - -[endsect:import] - -[#quickbook.ref.block] -[section:block Plain blocks] - -`block` is a plain block element, that doesn't wrap its contents -in any docbook or boostbook tags. This can be useful when using -escaped docbook block tags, such as: - - [template chapter[title] - [block''''''[title]''''''] - ] - - [template chapterend - [block''''''] - ] - - [chapter An example chapter] - - Content - - [chapterend] - -Without the `block` element, the `chapter` and `chapterend` templates -would be wrapped in paragraph tags. - -[note In this example, the template body has to start with a newline so that -the template will be interpreted in block mode.] - -[endsect:block] diff -Nru boost1.81-1.81.0/.pc/116.patch/libs/phoenix/include/boost/phoenix/stl/tuple.hpp boost1.81-1.81.0/.pc/116.patch/libs/phoenix/include/boost/phoenix/stl/tuple.hpp --- boost1.81-1.81.0/.pc/116.patch/libs/phoenix/include/boost/phoenix/stl/tuple.hpp 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/116.patch/libs/phoenix/include/boost/phoenix/stl/tuple.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -/*============================================================================== - Copyright (c) 2005-2008 Hartmut Kaiser - Copyright (c) 2005-2010 Joel de Guzman - Copyright (c) 2010 Thomas Heller - Copyright (c) 2021 Beojan Stanislaus - - Distributed under the Boost Software License, Version 1.0. (See accompanying - file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -==============================================================================*/ - -#ifndef BOOST_PHOENIX_STL_TUPLE_H_ -#define BOOST_PHOENIX_STL_TUPLE_H_ - -#if __cplusplus >= 201402L \ - || (defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190024210) - -#include -#include -#include -#include -#include -#include - -// Lazy functions for std::tuple (and similar) -// get will work wherever it is accessible through ADL -// Cribbing from functions in object - -namespace boost { namespace phoenix { namespace tuple_detail -{ - // Wrappers to pass a type or an index - template - struct type_wrap - { - typedef T type; - }; - template - struct idx_wrap - { - static constexpr int idx = N; - }; -}}} // namespace boost::phoenix::tuple_detail - -BOOST_PHOENIX_DEFINE_EXPRESSION( - (boost)(phoenix)(get_with_type), - (proto::terminal >)(meta_grammar)) - -BOOST_PHOENIX_DEFINE_EXPRESSION( - (boost)(phoenix)(get_with_idx), - (proto::terminal)(meta_grammar)) - -namespace boost { namespace phoenix { - namespace impl { - struct get_with_type - { - // Don't need to use result_of protocol since this only works with C++11+ - // anyway - template - auto& operator()(T, const Expr& t, const Context& ctx) const - { - using std::get; // Prevents the next line from being a syntax error < - // C++20 - using T_ = typename proto::result_of::value::type; - return get(boost::phoenix::eval(t, ctx)); - } - }; - - struct get_with_idx - { - // Don't need to use result_of protocol since this only works with C++11+ - // anyway - template - auto& operator()(T, const Expr& t, const Context& ctx) const - { - using std::get; // Prevents the next line from being a syntax error < - // C++20 - using T_ = typename proto::result_of::value::type; - return get(boost::phoenix::eval(t, ctx)); - } - }; - } - - template - struct default_actions::when - : call - {}; - template - struct default_actions::when - : call - {}; - - template - inline typename expression::get_with_type, Tuple>:: - type const - get_(const Tuple& t) - { - return expression::get_with_type, Tuple>::make( - tuple_detail::type_wrap(), t); - } - - template - inline typename expression::get_with_idx, Tuple>:: - type const - get_(const Tuple& t) - { - return expression::get_with_idx, Tuple>::make( - tuple_detail::idx_wrap(), t); - } - - // Make unpacked argument placeholders - namespace placeholders { - #define BOOST_PP_LOCAL_LIMITS (1, BOOST_PHOENIX_ARG_LIMIT) - #define BOOST_PP_LOCAL_MACRO(N) \ - auto uarg##N = \ - boost::phoenix::get_<(N)-1>(boost::phoenix::placeholders::arg1); - #include BOOST_PP_LOCAL_ITERATE() - } -}} // namespace boost::phoenix - -#endif // C++ 14 -#endif // BOOST_PHOENIX_STL_TUPLE_H_ diff -Nru boost1.81-1.81.0/.pc/15.patch/tools/boostbook/xsl/annotation.xsl boost1.81-1.81.0/.pc/15.patch/tools/boostbook/xsl/annotation.xsl --- boost1.81-1.81.0/.pc/15.patch/tools/boostbook/xsl/annotation.xsl 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/15.patch/tools/boostbook/xsl/annotation.xsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,453 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - warning: Cannot find library ' - - ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - warning: cannot find macro ` - - ' - - - - - - - - - - - - - - - - - - error: macro ` - - ' is multiply defined. - - - - - - - - - - - - - - - - - - - - - - - warning: cannot find header ` - - ' - - - - - - - - - - - - - - - - - - error: header ` - - ' is multiply defined. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/doc/block.qbk boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/doc/block.qbk --- boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/doc/block.qbk 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/doc/block.qbk 1970-01-01 00:00:00.000000000 +0000 @@ -1,1360 +0,0 @@ -[/ - Copyright 2002,2004,2006 Joel de Guzman, Eric Niebler - Copyright 2010-2011 Daniel James - - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -] - -[chapter Block Level Elements - [quickbook 1.7] - [compatibility-mode 1.5] - [id quickbook.syntax.block] - [source-mode teletype] -] - -[#quickbook.ref.xinclude] -[section:xinclude xinclude] - -You can include another XML file with: - -``` -[xinclude file.xml] -``` - -This is useful when file.xml has been generated by Doxygen and contains your -reference section. - -=xinclude= paths are normally used unchanged in the generated documentation, -which will not work if you wish them to be relative to the current quickbook -file. Quickbook can add a =xml:base= attribute to the boostbook documentation -to specify where =xinclude= files should be found. For example, if you wish -them to be relative to the current quickbook file: - - [article Article with xincludes - [quickbook 1.7] - [xmlbase .] - ] - - [xinclude file.xml] - -Now the xinclude should work if =file.xml= is in the same directory as the -quickbook file. Although it might not work if you distribute the generated -files (as their relative directories can change). - -Say the article is generated in a sub-directory, by running something like: - - quickbook article.qbk --output-file=output/article.xml - -This will generate a boostbook root tag: - -
- -Because =xml:base= is set to =..=, the xml processor will know to look in -the parent directory to find =file.xml=, which it comes across the -=xi:include= tag. - -[endsect:xinclude] - -[#quickbook.ref.paragraphs] -[section:paragraphs Paragraphs] - -Paragraphs start left-flushed and are terminated by two or more newlines. No -markup is needed for paragraphs. QuickBook automatically detects paragraphs from -the context. Block markups \[section, endsect, h1, h2, h3, h4, h5, h6, blurb, -(block-quote) ':', pre, def, table and include \] may also terminate a paragraph. - [/ <-- There's a space here. Don't remove. this is intentianal, for testing] -This is a new paragraph... - -[endsect:paragraphs] - -[#quickbook.ref.lists] -[section:lists Lists] -[#quickbook.ref.ordered_lists] -[section:ordered_lists Ordered lists] - -[pre -# One -# Two -# Three -] - -will generate: - -# One -# Two -# Three - -[endsect:ordered_lists] -[#quickbook.ref.list_hierarchies] -[section:list_hierarchies List Hierarchies] - -List hierarchies are supported. Example: - -[pre -# One -# Two -# Three - # Three.a - # Three.b - # Three.c -# Four - # Four.a - # Four.a.i - # Four.a.ii -# Five -] - -will generate: - -# One -# Two -# Three - # Three.a - # Three.b - # Three.c -# Fourth - # Four.a - # Four.a.i - # Four.a.ii -# Five - -[endsect:list_hierarchies] -[#quickbook.ref.long_list_lines] -[section:long_list_lines Long List Lines] - -Long lines will be wrapped appropriately. Example: - -[pre -# A short item. -# A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. -# A short item. -] - -# A short item. -# A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. -# A short item. - -[endsect:long_list_lines] -[#quickbook.ref.unordered_lists] -[section:unordered_lists Unordered lists] - -``` -* First -* Second -* Third -``` - -will generate: - -* First -* Second -* Third - -[endsect:unordered_lists] -[#quickbook.ref.mixed_lists] -[section:mixed_lists Mixed lists] - -Mixed lists (ordered and unordered) are supported. Example: - -``` -# One -# Two -# Three - * Three.a - * Three.b - * Three.c -# Four -``` - -will generate: - -# One -# Two -# Three - * Three.a - * Three.b - * Three.c -# Four - -And... - -``` -# 1 - * 1.a - # 1.a.1 - # 1.a.2 - * 1.b -# 2 - * 2.a - * 2.b - # 2.b.1 - # 2.b.2 - * 2.b.2.a - * 2.b.2.b -``` - -will generate: - -# 1 - * 1.a - # 1.a.1 - # 1.a.2 - * 1.b -# 2 - * 2.a - * 2.b - # 2.b.1 - # 2.b.2 - * 2.b.2.a - * 2.b.2.b - -[endsect:mixed_lists] - -[#quickbook.ref.list_paragraphs] -[section:list_paragraphs Paragraphs in lists] - -In quickbook 1.7 onwards, you can nest paragraphs in lists -by separating them with blank lines: - -``` -* List item 1, paragraph 1 - - List item 1, paragraph 2 - -* List item 2, paragraph 1 - - List item 2, paragraph 2 -``` - -will generate: - -* List item 1, paragraph 1 - - List item 1, paragraph 2 - -* List item 2, paragraph 1 - - List item 2, paragraph 2 - -[endsect:list_paragraphs] - -[#quickbook.ref.list_tags] -[section:list_tags Explicit list tags] - -Sometimes the wiki-style list markup can be tricky to use, especially -if you wish to include more complicated markup with the list. So in -quickbook 1.6, an alternative way to mark up lists introduced: - - [ordered_list [item1][item2]] - -is equivalent to: - - # item1 - # item2 - -And: - - [itemized_list [item1][item2]] - -is equivalent to: - - * item1 - * item2 - -[endsect:list_tags] -[endsect:lists] - -[#quickbook.ref.code] -[section:code Code] - -Preformatted code starts with a space or a tab. The code will be -syntax highlighted according to the current __source_mode__: - -[c++] - - #include - - int main() - { - // Sample code - std::cout << "Hello, World\n"; - return 0; - } - -[python] - - import cgi - - def cookForHtml(text): - '''"Cooks" the input text for HTML.''' - - return cgi.escape(text) - -[teletype] - -Macros that are already defined are expanded in source code. Example: - -``` -[def __array__ [@http://www.boost.org/doc/html/array/reference.html array]] -[def __boost__ [@http://www.boost.org/libs/libraries.htm boost]] - - using __boost__::__array__; -``` - -Generates: - -[def __array__ [@http://www.boost.org/doc/html/array/reference.html array]] -[def __boost__ [@http://www.boost.org/libs/libraries.htm boost]] - - using __boost__::__array__; - -In quickbook 1.7 and later, you can include [link quickbook.ref.callouts callouts] -in code blocks, like so: - -[!teletype] - - [!c++] - std::string foo_bar() /*< The /Mythical/ FooBar. - See [@http://en.wikipedia.org/wiki/Foobar Foobar for details] >*/ - { - return "foo-bar"; /*< return 'em, foo-bar man! >*/ - } - -Which will generate: - -[!c++] - std::string foo_bar() /*< The /Mythical/ FooBar. - See [@http://en.wikipedia.org/wiki/Foobar Foobar for details] >*/ - { - return "foo-bar"; /*< return 'em, foo-bar man! >*/ - } - -[endsect:code] - -[#quickbook.ref.escape_back] -[section:escape_back Escaping Back To QuickBook] - -Inside code, code blocks and inline code, QuickBook does not allow any -markup to avoid conflicts with the target syntax (e.g. c++). In case you -need to switch back to QuickBook markup inside code, you can do so using a -language specific /escape-back/ delimiter. In C++ and Python, the delimiter -is the double tick (back-quote): "\`\`" and "\`\`". Example: - -``` -void ``[@http://en.wikipedia.org/wiki/Foo#Foo.2C_Bar_and_Baz foo]``() -{ -} -``` - -Will generate: - - void ``[@http://en.wikipedia.org/wiki/Foo#Foo.2C_Bar_and_Baz foo]``() - { - } - -When escaping from code to QuickBook, only phrase level markups are -allowed. Block level markups like lists, tables etc. are not allowed. - -[endsect:escape_back] - -[#quickbook.ref.preformatted] -[section:preformatted Preformatted] - -Sometimes, you don't want some preformatted text to be parsed as source code. In such -cases, use the [^\[pre ... \]] markup block. - -``` -[pre - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - -] -``` - -Spaces, tabs and newlines are rendered as-is. Unlike all quickbook block level -markup, pre (and Code) are the only ones that allow multiple newlines. The -markup above will generate: - -[pre - -Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - -] - -Notice that unlike Code, phrase markup such as font style is still permitted -inside =pre= blocks. - -[endsect:preformatted] - -[#quickbook.ref.blockquote] -[section:blockquote Blockquote] - -[pre -'''[:sometext...]''' -] - -[:Indents the paragraph. This applies to one paragraph only.] - -[endsect:blockquote] - -[#quickbook.ref.admonitions] -[section:admonitions Admonitions] - -``` -[note This is a note] -[tip This is a tip] -[important This is important] -[caution This is a caution] -[warning This is a warning] -``` - -generates __docbook__ admonitions: - -[note This is a note] -[tip This is a tip] -[important This is important] -[caution This is a caution] -[warning This is a warning] - -These are the only admonitions supported by __docbook__. So, -for example [^\[information This is some information\]] is unlikely -to produce the desired effect. - -[endsect:admonitions] - -[#quickbook.ref.headings] -[section:headings Headings] - -``` -[h1 Heading 1] -[h2 Heading 2] -[h3 Heading 3] -[h4 Heading 4] -[h5 Heading 5] -[h6 Heading 6] -``` - -[h1 Heading 1] -[h2 Heading 2] -[h3 Heading 3] -[h4 Heading 4] -[h5 Heading 5] -[h6 Heading 6] - -You can specify an id for a heading: - -``` -[h1:heading_id A heading to link to] -``` - -To link to it, you'll need to include the enclosing section's id: - -``` -[link document_id.section_id.heading_id The link text] -``` - -Although you can preceed a heading by an [link quickbook.ref.anchors anchor] -if you wish to use a location independent link. - -If a heading doesn't have an id, one will be automatically generated -with a normalized name with -[^name="document_id.section_id.normalized_header_text"] (i.e. valid -characters are =a-z=, =A-Z=, =0-9= and =_=. All non-valid characters are -converted to underscore and all upper-case are converted to lower-case. -For example: Heading 1 in section Section 2 will be normalized to -[^section_2.heading_1]). You can use: - -``` -[link document_id.section_id.normalized_header_text The link text] -``` - -to link to them. See __anchor_links__ and __section__ for more info. - -[note Specifying heading ids is a quickbook 1.6 feature, earlier - versions don't support them.] - -[endsect:headings] - -[#quickbook.ref.generic_heading] -[section:generic_heading Generic Heading] - -In cases when you don't want to care about the heading level (1 to 6), you -can use the /Generic Heading/: - -``` -[heading Heading] -``` - -The /Generic Heading/ assumes the level, plus one, of the innermost section -where it is placed. For example, if it is placed in the outermost section, -then, it assumes /h2/. - -Headings are often used as an alternative to sections. It is used -particularly if you do not want to start a new section. In many cases, -however, headings in a particular section is just flat. Example: - -``` -[section A] -[h2 X] -[h2:link_id Y] -[h2 Z] -[endsect] -``` - -Here we use h2 assuming that section A is the outermost level. If it is -placed in an inner level, you'll have to use h3, h4, etc. depending on -where the section is. In general, it is the section level plus one. It is -rather tedious, however, to scan the section level everytime. If you -rewrite the example above as shown below, this will be automatic: - -``` -[section A] -[heading X] -[heading Y] -[heading Z] -[endsect] -``` - -They work well regardless where you place them. You can rearrange sections -at will without any extra work to ensure correct heading levels. In fact, -with /section/ and /heading/, you have all you need. /h1/../h6/ becomes -redundant. /h1/../h6/ might be deprecated in the future. - -[endsect:generic_heading] - -[#quickbook.ref.macros] -[section:macros Macros] - -``` -[def macro_identifier some text] -``` - -When a macro is defined, the identifier replaces the text anywhere in the -file, in paragraphs, in markups, etc. macro_identifier is a string of non- -white space characters except '\]'. A macro may not follow an alphabetic -character or the underscore. The replacement text can be any phrase (even -marked up). Example: - -``` -[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] -sf_logo -``` - -Now everywhere the sf_logo is placed, the picture will be inlined. - -[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] -sf_logo - -[tip It's a good idea to use macro identifiers that are distinguishable. -For instance, in this document, macro identifiers have two leading and -trailing underscores (e.g. [^\__spirit__]). The reason is to avoid -unwanted macro replacement.] - -Links (URLS) and images are good candidates for macros. *1*) They tend to -change a lot. It is a good idea to place all links and images in one place near the top -to make it easy to make changes. *2*) The syntax is not pretty. It's easier to read and -write, e.g. [^\__spirit__] than `[@http://spirit.sourceforge.net Spirit]`. - -Some more examples: - -``` -[def ``\:-)`` [$theme/smiley.png]] -[def ``\__spirit__`` [@http://spirit.sourceforge.net Spirit]] -``` - -(See __images__ and __links__) - -Invoking these macros: - -``` -Hi ``\__spirit__`` ``\:-)`` -``` - -will generate this: - -Hi __spirit__ :-) - -[endsect:macros] - -[#quickbook.ref.predefined_macros] -[section:predefined_macros Predefined Macros] - -Quickbook has some predefined macros that you can already use. - -[table Predefined Macros - [[Macro] [Meaning] [Example]] - [[[^\__DATE__]] [Today's date] [__DATE__]] - [[[^\__TIME__]] [The current time] [__TIME__]] - [[[^\__FILENAME__]][Quickbook source filename] [__FILENAME__]] -] - -[endsect:predefined_macros] - -[#quickbook.ref.templates] -[section:templates Templates] - -Templates provide a more versatile text substitution mechanism. Templates -come in handy when you need to create parameterizable, multi-line, -boilerplate text that you specify once and expand many times. Templates -accept one or more arguments. These arguments act like place-holders for -text replacement. Unlike simple macros, which are limited to phrase level -markup, templates can contain block level markup (e.g. paragraphs, code -blocks and tables). - -Example template: - -``` -[template person[name age what] - -Hi, my name is [name]. I am [age] years old. I am a [what]. - -] -``` - -[template person[name age what] - -Hi, my name is [name]. I am [age] years old. I am a [what]. - -] - -[#quickbook.ref.template_identifier] -[heading Template Identifier] - -Template identifiers can either consist of: - -* An initial alphabetic character or the underscore, followed by - zero or more alphanumeric characters or the underscore. This is - similar to your typical C/C++ identifier. -* A single character punctuation (a non-alphanumeric printable character) - -[heading Formal Template Arguments] - -Template formal arguments are identifiers consisting of an initial -alphabetic character or the underscore, followed by zero or more -alphanumeric characters or the underscore. This is similar to your typical -C/C++ identifier. - -A template formal argument temporarily hides a template of the same name at -the point where the [link quickbook.ref.template_expansion -template is expanded]. Note that the body of the [^person] template above -refers to [^name] [^age] and [^what] as [^\[name\]] [^\[age\]] and -[^\[what\]]. [^name] [^age] and [^what] are actually templates that exist -in the duration of the template call. - -[heading Template Body] - -The template body can be just about any QuickBook block or phrase. There -are actually two forms. Templates may be phrase or block level. Phrase -templates are of the form: - -``` -[template sample[arg1 arg2...argN] replacement text... ] -``` - -Block templates are of the form: - -``` -[template sample[arg1 arg2...argN] -replacement text... -] -``` - -The basic rule is as follows: if a newline immediately follows the argument -list, then it is a block template, otherwise, it is a phrase template. -Phrase templates are typically expanded as part of phrases. Like macros, -block level elements are not allowed in phrase templates. - -[heading Template Expansion] - -You expand a template this way: - -``` -[template_identifier arg1..arg2..arg3] -``` - -At template expansion, you supply the actual arguments. The template will -be expanded with your supplied arguments. Example: - -``` -[person James Bond..39..Spy] -[person Santa Clause..87..Big Red Fatso] -``` - -Which will expand to: - -[person James Bond..39..Spy] -[person Santa Clause..87..Big Red Fatso] - -[caution A word of caution: Templates are recursive. A template can call -another template or even itself, directly or indirectly. There are no -control structures in QuickBook (yet) so this will always mean infinite -recursion. QuickBook can detect this situation and report an error if -recursion exceeds a certain limit.] - -Each actual argument can be a word, a text fragment or just about any [link -quickbook.syntax.phrase QuickBook phrase]. Arguments are separated by the -double dot [^".."] and terminated by the close parenthesis. - -Note that templates and template parameters can't be expanded -everywhere, only where text is interpreted as a phrase. So they can't be -expanded in places such as table titles and link's urls. If you want to -use a template to generate a link based of the template parameter, you -can't use a normal link and will need to use escaped docbook instead. -Example: - -[teletype] -``` -[template boost_ticket[key] '''#'''[key]''''''] - -[boost_ticket 2035] -``` - -will expand to: - -[template boost_ticket[key] '''#'''[key]''''''] - -[boost_ticket 2035] - -[caution Since quickbook doesn't understand the context where the -parameter is being used, it will interpret it as quickbook markup, so -when writing a template like this, you'll need to escape any meaningful -punctuation.] - -[heading Nullary Templates] - -Nullary templates look and act like simple macros. Example: - -``` -[template alpha[]'''&#945;'''] -[template beta[]'''&#946;'''] -``` - -[template alpha[]'''α'''] -[template beta[]'''β'''] - -Expanding: - -```Some squigles...[*[alpha][beta]]``` - -We have: - -Some squiggles...[*[alpha][beta]] - -The difference with macros are - -* The explicit [link quickbook.ref.template_expansion - template expansion syntax]. This is an advantage because, now, we don't - have to use obscure naming conventions like double underscores (e.g. - \_\_alpha\_\_) to avoid unwanted - macro replacement. -* The template is expanded at the point where it is invoked. A macro is - expanded immediately at its point of declaration. This is subtle and - can cause a slight difference in behavior especially if you refer to - other macros and templates in the body. - -The empty brackets after the template identifier ([^alpha\[\]]) indicates no -arguments. If the template body does not look like a template argument list, we -can elide the empty brackets. Example: - -``` -[template aristotle_quote Aristotle: [*['Education is the best provision -for the journey to old age.]]] -``` - -[template aristotle_quote\ Aristotle: [*['Education is the best provision -for the journey to old age.]]] - -Expanding: - -``` -Here's a quote from [aristotle_quote]. -``` - -We have: - -Here's a quote from [aristotle_quote]. - -The disadvantage is that you can't avoid the space between the template -identifier, `aristotle_quote`, and the template body "Aristotle...". This space -will be part of the template body. If that space is unwanted, use empty -brackets or use the space escape: "`\ `". Example: - -``` -[template tag\ _tag] -``` - -[template tag\ _tag] - -Then expanding: - -``` -`struct` x[tag]; -``` - -We have: - -`struct` x[tag]; - -You have a couple of ways to do it. I personally prefer the explicit empty -brackets, though. - -[heading Simple Arguments] - -As mentioned, arguments are separated by the double dot [^".."]. Alternatively, -if the double dot isn't used and more than one argument is expected, QuickBook -uses whitespace to separate the arguments, following this logic: - -* Break the last argument into two, at the first space found ([^'', '\\n', - \\t' or '\\r']). -* Repeat until there are enough arguments or if there are no more spaces - found (in which case, an error is reported). - -For example: - -``` -[template simple[a b c d] [a][b][c][d]] -[simple w x y z] -``` - -will produce: - -[template simple[a b c d] [a][b][c][d]] -[simple w x y z] - -"w x y z" is initially treated as a single argument because we didn't -supply any [^".."] separators. However, since [^simple] expects 4 -arguments, "w x y z" is broken down iteratively (applying the logic above) -until we have "w", "x", "y" and "z". - -QuickBook only tries to get the arguments it needs. For example: - -``` -[simple w x y z trail] -``` - -will produce: - -[simple w x y z trail] - -The arguments being: "w", "x", "y" and "z trail". - -[caution The behavior described here is for QuickBook 1.5. In older versions you -could use both the double dot and whitespace as separators in the same template -call. If your document is marked up as an older version, it will use the old -behavior, which is described in the -[@http://www.boost.org/doc/libs/1_40_0/doc/html/quickbook/syntax.html#quickbook.syntax.block.templates.simple_arguments -QuickBook 1.4 documentation].] - -[heading Punctuation Templates] - -With templates, one of our objectives is to allow us to rewrite QuickBook -in QuickBook (as a qbk library). For that to happen, we need to accommodate -single character punctuation templates which are fairly common in -QuickBook. You might have noticed that single character punctuations are -allowed as [link quickbook.ref.template_identifier -template identifiers]. Example: - -``` -[template ![bar] [bar]] -``` - -Now, expanding this: - -``` -[!baz] -``` - -We will have: - -[pre -baz -] - -[endsect:templates] - -[#quickbook.ref.blurbs] -[section:blurbs Blurbs] - -``` -[blurb ``\:-)`` [*An eye catching advertisement or note...] - - __spirit__ is an object-oriented recursive-descent parser generator framework - implemented using template meta-programming techniques. Expression templates - allow us to approximate the syntax of Extended Backus-Normal Form (EBNF) - completely in C++. -] -``` - -will generate this: - -[blurb :-) [*An eye catching advertisement or note...] - - __spirit__ is an object-oriented recursive-descent parser generator - framework implemented using template meta-programming techniques. Expression - templates allow us to approximate the syntax of Extended Backus-Normal Form - (EBNF) completely in C++. -] - -[note Prefer [link quickbook.ref.admonitions admonitions] wherever -appropriate.] - -[endsect:blurbs] - -[#quickbook.ref.tables] -[section:tables Tables] - -``` -[table:id A Simple Table - [[Heading 1] [Heading 2] [Heading 3]] - [[R0-C0] [R0-C1] [R0-C2]] - [[R1-C0] [R1-C1] [R1-C2]] - [[R2-C0] [R2-C1] [R2-C2]] -] -``` - -will generate: - -[table:id A Simple Table - [[Heading 1] [Heading 2] [Heading 3]] - [[R0-C0] [R0-C1] [R0-C2]] - [[R1-C0] [R1-C1] [R1-C2]] - [[R2-C0] [R2-C1] [R2-C2]] -] - -The table title is optional. The first row of the table is automatically -treated as the table header; that is, it is wrapped in [^...] -XML tags. Note that unlike the original QuickDoc, the columns are nested in -[cells... ]. - -Giving tables an id is a new feature for quickbook 1.5 onwards. As with -sections, the id is optional. If the table has a title but no id, an id will -be generated from the title. The table above can be linked to using: - -``` -[link quickbook.syntax.block.tables.id link to table] -``` - -which will generate: - -[link quickbook.syntax.block.tables.id link to table] - -The syntax is free-format and allows big cells to be formatted -nicely. Example: - -``` -[table Table with fat cells - [[Heading 1] [Heading 2]] - [ - [Row 0, Col 0: a small cell] - [ - Row 0, Col 1: a big fat cell with paragraphs - - Boost provides free peer-reviewed portable C++ source libraries. - - We emphasize libraries that work well with the C++ Standard Library. - Boost libraries are intended to be widely useful, and usable across - a broad spectrum of applications. The Boost license encourages both - commercial and non-commercial use. - ] - ] - [ - [Row 1, Col 0: a small cell] - [Row 1, Col 1: a small cell] - ] -] -``` - -and thus: - -[table Table with fat cells - [[Heading 1] [Heading 2]] - [ - [Row 0, Col 0: a small cell] - [ - Row 0, Col 1: a big fat cell with paragraphs - - Boost provides free peer-reviewed portable C++ source libraries. - [/ <-- There's a space here. Don't remove. This is intentional, for testing] - We emphasize libraries that work well with the C++ Standard Library. - Boost libraries are intended to be widely useful, and usable across - a broad spectrum of applications. The Boost license encourages both - commercial and non-commercial use. - ] - ] - [ - [Row 1, Col 0: a small cell] - [Row 1, Col 1: a small cell] - ] -] - -Here's how to have preformatted blocks of code in a table cell: - -``` -[table Table with code - [[Comment] [Code]] - [ - [My first program] - [``\`\`\ `` - #include - - int main() - { - std::cout << "Hello, World!" << std::endl; - return 0; - } - ``\`\`\ ``] - ] -] -``` - -[table Table with code - [[Comment] [Code]] - [ - [My first program] - [`` - #include - - int main() - { - std::cout << "Hello, World!" << std::endl; - return 0; - } - ``] - ] -] - -[endsect:tables] - -[#quickbook.ref.variable_lists] -[section:variable_lists Variable Lists] - -``` -[variablelist A Variable List - [[term 1] [The definition of term 1]] - [[term 2] [The definition of term 2]] - [[term 3] [ - The definition of term 3. - - Definitions may contain paragraphs. - ]] -] -``` - -will generate: - -[variablelist A Variable List - [[term 1] [The definition of term 1]] - [[term 2] [The definition of term 2]] - [[term 3] [ - The definition of term 3. - - Definitions may contain paragraphs. - ]] -] - -The rules for variable lists are the same as for tables, except that -only 2 "columns" are allowed. The first column contains the terms, and -the second column contains the definitions. Those familiar with HTML -will recognize this as a "definition list". - -[endsect:variable_lists] - -[#quickbook.ref.include] -[section:include Include] - -You can include one QuickBook file from another. The syntax is simply: - -``` -[include someother.qbk] -``` - -In quickbook 1.6 and later, if the included file has a -[link quickbook.ref.docinfo docinfo block] then it will create a nested -document. This will be processed as a standalone document, although any macros -or templates from the enclosing file will still be defined. - -Otherwise the included file will be processed as if it had been cut and pasted -into the current document, with the following exceptions: - -* The '''__FILENAME__''' predefined macro will reflect the name of the - file currently being processed. -* Any macros or templates defined in the included file are scoped to that file, - i.e. they are not added to the enclosing file. - -[note In quickbook 1.5 and earlier templates weren't scoped in included files. -If you want to use templates or macros from a file in quickbook 1.6, -use [link quickbook.ref.import import] instead.] - -The [^\[include\]] directive lets you specify a document id to use for the -included file. You can specify the id like this: - -``` -[include:someid someother.qbk] -``` - -All auto-generated anchors will use the document id as a unique prefix. So -for instance, if there is a top section in someother.qbk named "Intro", the -named anchor for that section will be "someid.intro", and you can link to -it with [^\[link someid.intro The Intro\]]. - -If the included file has a docinfo block, an id specified in an [^\[include\]] -directive will overwrite it. - -You can also include C, C++ and python source files. This will include any -quickbook blocks in the file that aren't inside of named code snippets. See -the [link quickbook.ref.import Import section] for syntax details. For example, -say you included this file: - - /** - * Hello world example - */ - - // In this comment, the backtick indicates that this is a - // quickbook source block that will be included. - - /*` - First include the appropriate header: [hello_includes] - Then write your main function: [hello_main] - */ - - // This defines a code snippet, the syntax is - // described in the import section. It's available - // in the whole of this source file, not just after - // its definition. - - //[hello_includes - #include - //] - - //[hello_main - int main() { - std::cout << "Hello, trivial example" << std::endl; - } - //] - -It will generate: - - First include the appropriate header: - - #include - - Then write your main function: - - int main() { - std::cout << "Hello, trivial example" << std::endl; - } - -[endsect:include] - -[#quickbook.ref.import] -[section:import Import] - -In quickbook 1.6 and later if you wish to use a template, macro or code -snippet from a file, you need to import it. This will not include any -of the content from that file, but will pull templates, macros and code -snippets into the current file's scope. - -With quickbook files, this allows you to create template and macro -libraries. For python (indicated by the `.py` extension), C or -C++ files this allows you to include code snippets from source files, -so that your code examples can be kept up to date and fully tested. - -[/ Old justification text, might move this into a new section: - -When documenting code, you'd surely need to present code from actual source -files. While it is possible to copy some code and paste them in your QuickBook -file, doing so is error prone and the extracted code in the documentation tends -to get out of sync with the actual code as the code evolves. The problem, as -always, is that once documentation is written, the tendency is for the docs to -languish in the archives without maintenance. - -QuickBook's import facility provides a nice solution. -] - -[heading Example] - -You can effortlessly import code snippets from source code into your QuickBook. -The following illustrates how this is done: - -``` -[import ../test/stub.cpp] -[foo] -[bar] -``` - -The first line: - -``` -[import ../test/stub.cpp] -``` - -collects specially marked-up code snippets from -[@boost:/tools/quickbook/test/stub.cpp stub.cpp] -and places them in your QuickBook file as virtual templates. Each of the -specially marked-up code snippets has a name (e.g. `foo` and `bar` in the -example above). This shall be the template identifier for that particular code -snippet. The second and third line above does the actual template expansion: - -``` -[foo] -[bar] -``` - -And the result is: - -[import ../test/stub.cpp] -[foo] -[bar] - -[heading Code Snippet Markup] - -Note how the code snippets in [@boost:/tools/quickbook/test/stub.cpp stub.cpp] -get marked up. We use distinguishable comments following the form: - - //[id - some code here - //] - -The first comment line above initiates a named code-snippet. This prefix will -not be visible in quickbook. The entire code-snippet in between `//[id` and -`//]` will be inserted as a template in quickbook with name ['/id/]. The comment -`//]` ends a code-snippet This too will not be visible in quickbook. - -[#quickbook.ref.callouts] -[heading Special Comments] - -Special comments of the form: - - //` some [*quickbook] markup here - -and: - - /*` some [*quickbook] markup here */ - -will be parsed by QuickBook. This can contain quickbook /blocks/ (e.g. sections, -paragraphs, tables, etc). In the first case, the initial slash-slash, tick and -white-space shall be ignored. In the second, the initial slash-star-tick and the -final star-slash shall be ignored. - -Special comments of the form: - - /*<- this C++ comment will be ignored ->*/ - -or - - /*<-*/ "this c++ code will be ignored" /*->*/ - -or - - //<- - private: - int some_member; - //-> - -can be used to inhibit code from passing through to quickbook. All text between -the delimeters will simply be ignored. - -Comments of this form: - - //=int main() {} - -or - - /*=foo()*/ - -will be displayed as code that isn't in comments. This allows you to -include some code in the snippet but not actually use it when -compiling your example. - -[heading Callouts] - -Special comments of the form: - - /*< some [*quickbook] markup here >*/ - -will be regarded as callouts. These will be collected, numbered and -rendered as a "callout bug" (a small icon with a number). After the -whole snippet is parsed, the callout list is generated. See -[@http://www.docbook.org/tdg/en/html/callout.html Callouts] for details. -Example: - -[foo_bar] - -This is the actual code: - - //[ foo_bar - std::string foo_bar() /*< The /Mythical/ FooBar. - See [@http://en.wikipedia.org/wiki/Foobar Foobar for details] >*/ - { - return "foo-bar"; /*< return 'em, foo-bar man! >*/ - } - //] - -The callouts bugs are placed exactly where the special callout comment -is situated. It can be anywhere in the code. The bugs can be rather -obtrusive, however. They get in the way of the clarity of the code. -Another special callout comment style is available: - - /*<< some [*quickbook] markup here >>*/ - -This is the line-oriented version of the callout. With this, the "bug" -is placed at the very left of the code block, away from the actual code. -By placing it at the far left, the code is rendered un-obscured. -Example: - -[class_] - -See the actual code here: -[@boost:/tools/quickbook/test/stub.cpp tools/quickbook/test/stub.cpp] - -[endsect:import] - -[#quickbook.ref.block] -[section:block Plain blocks] - -`block` is a plain block element, that doesn't wrap its contents -in any docbook or boostbook tags. This can be useful when using -escaped docbook block tags, such as: - - [template chapter[title] - [block''''''[title]''''''] - ] - - [template chapterend - [block''''''] - ] - - [chapter An example chapter] - - Content - - [chapterend] - -Without the `block` element, the `chapter` and `chapterend` templates -would be wrapped in paragraph tags. - -[note In this example, the template body has to start with a newline so that -the template will be interpreted in block mode.] - -[endsect:block] diff -Nru boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.gold boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.gold --- boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.gold 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.gold 1970-01-01 00:00:00.000000000 +0000 @@ -1,3945 +0,0 @@ - - -
- Quickbook 1.4 - - - - Joel de Guzman - - - Eric Niebler - - - - 2002 2004 2006 Joel de Guzman, - Eric Niebler - - - - Distributed under the Boost Software License, Version 1.0. (See accompanying - file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - - - - WikiWiki style documentation tool - - -
- <link linkend="quickbook.intro">Introduction</link> -
- - Why program by hand in five days what - you can spend five years of your life automating? - - - -- Terrence Parr, author ANTLR/PCCTS - -
- - Well, QuickBook started as a weekend hack. It was originally intended to be - a sample application using Spirit. - What is it? What you are viewing now, this documentation, is autogenerated - by QuickBook. These files were generated from one master: - -
- - quickbook.qbk - -
- - Originally named QuickDoc, this funky tool that never dies evolved into a funkier - tool thanks to Eric Niebler who resurrected the project making it generate - BoostBook - instead of HTML. The BoostBook - documentation format is an extension of DocBook, - an SGML or XML based format for describing documentation. - - - QuickBook is a WikiWiki style documentation tool geared towards C++ documentation - using simple rules and markup for simple formatting tasks. QuickBook extends - the WikiWiki concept. Like the WikiWiki, QuickBook documents are simple text - files. A single QuickBook document can generate a fully linked set of nice - HTML and PostScript/PDF documents complete with images and syntax- colorized - source code. - - - Features include: - - - - - generate BoostBook - xml, to generate HTML, PostScript and PDF - - - - - simple markup to link to Doxygen-generated entities - - - - - macro system for simple text substitution - - - - - simple markup for italics, bold, preformatted, blurbs, code samples, tables, - URLs, anchors, images, etc. - - - - - automatic syntax coloring of code samples - - - - - CSS support - - - -
-
- <link linkend="quickbook.change_log">Change Log</link> - - Version - 1.3 - - - - - Quickbook file inclusion [include]. - - - - - Better xml output (pretty layout). Check out the generated XML. - - - - - Regression testing facility: to make sure your document will always be - compatible (full backward compatibility) regardless of changes to QuickBook. - - - - - Code cleanup and refactoring. - - - - - Allow phrase markup in the doc-info. - - - - - Preformatted code blocks via ``code`` (double ticks) allows code in tables - and lists, for example. - - - - - Quickbook versioning; allows full backward compatibility. You have to add - [quickbook 1.3] to the doc-info header to enable the new features. Without - this, QuickBook will assume that the document is a pre-1.3 document. - - - - - Better (intuitive) paragraph termination. Some markups may terminate a - paragraph. Example: -[section x] -blah... -[endsect] - - - - - Fully qualified section and headers. Subsection names are concatenated - to the ID to avoid clashing. Example: doc_name.sect_name.sub_sect_name.sub_sub_sect_name - - - - - Better &nbsp; and whitespace handling in code snippets. - - - - - [xinclude] fixes up the relative path to the target XML file when input_directory - is not the same as the output_directory. - - - - - Allow untitled tables. - - - - - Allow phrase markups in section titles. - - - - - Allow escaping back to QuickBook from code, code blocks and inline code. - - - - - Footnotes, with the [footnote This is the footnote] syntax. - - - - - Post-processor bug fix for escaped XML code that it does not recognize. - - - - - Replaceable, with the [~replacement] syntax. - - - - - Generic Headers - - - - - Code changes to allow full recursion (i.e. Collectors and push/pop functions) - - - - - Various code cleanup/maintenance - - - - - Templates! - - - - - [conceptref] for referencing BoostBook <concept> entities. - - - - - Allow escape of spaces. The escaped space is removed from the output. Syntax: - \ . - - - - - Nested comments are now allowed. - - - - - Quickbook blocks can nest inside comments. - - - - - Import facility. - - - - - Callouts on imported code - - - - - Simple markups can now span a whole block. - - - - - Blurbs, Admonitions - and table cells (see Tables) - may now contain paragraphs. - - - - - \n - and [br] are now deprecated. - - - -
-
- <link linkend="quickbook.syntax">Syntax Summary</link> - - A QuickBook document is composed of one or more blocks. An example of a block - is the paragraph or a C++ code snippet. Some blocks have special mark-ups. - Blocks, except code snippets which have their own grammar (C++ or Python), - are composed of one or more phrases. A phrase can be a simple contiguous run - of characters. Phrases can have special mark-ups. Marked up phrases can recursively - contain other phrases, but cannot contain blocks. A terminal is a self contained - block-level or phrase-level element that does not nest anything. - - - Blocks, in general, are delimited by two end-of-lines (the block terminator). - Phrases in each block cannot contain a block terminator. This way, syntax errors - such as un-matched closing brackets do not go haywire and corrupt anything - past a single block. - -
- <link linkend="quickbook.syntax.comments">Comments</link> - - Can be placed anywhere. - -[/ comment (no output generated) ] - -[/ comments can be nested [/ some more here] ] - -[/ Quickbook blocks can nest inside comments. [*Comment this out too!] ] - -
-
- <link linkend="quickbook.syntax.phrase">Phrase Level Elements</link> -
- <link linkend="quickbook.syntax.phrase.font_styles">Font Styles</link> -['italic], [*bold], [_underline], [^teletype], [-strikethrough] - - - will generate: - - - italic, bold, underline, teletype, strikethrough - - - Like all non-terminal phrase level elements, this can of course be nested: - -[*['bold-italic]] - - - will generate: - - - bold-italic - -
-
- <link linkend="quickbook.syntax.phrase.replaceable">Replaceable</link> - - When you want content that may or must be replaced by the user, use the - syntax: - -[~replacement] - - - This will generate: - - - replacement - -
-
- <link linkend="quickbook.syntax.phrase.quotations">Quotations</link> -["A question that sometimes drives me hazy: am I or are the others crazy?]--Einstein - - - will generate: - - - A question that sometimes drives me hazy: am I or are the others - crazy?--Einstein - - - Note the proper left and right quote marks. Also, while you can simply - use ordinary quote marks like "quoted", our quotation, above, - will generate correct DocBook quotations (e.g. <quote>quoted</quote>). - - - Like all phrase elements, quotations may be nested. Example: - -["Here's the rule for bargains: ["Do other men, for they would do you.] That's -the true business precept.] - - - will generate: - - - Here's the rule for bargains: Do other men, for they would - do you. That's the true business precept. - -
-
- <link linkend="quickbook.syntax.phrase.simple_formatting">Simple formatting</link> - - Simple markup for formatting text, common in many applications, is now - supported: - -/italic/, *bold*, _underline_, =teletype= - - - will generate: - - - italic, bold, underline, teletype - - - Unlike QuickBook's standard formatting scheme, the rules for simpler alternatives - are much stricter - - Thanks to David Barrett, author of Qwiki, - for sharing these samples and teaching me these obscure formatting rules. - I wasn't sure at all if Spirit, - being more or less a formal EBNF parser, can handle the context sensitivity - and ambiguity. - - . - - - - - Simple markups cannot nest. You can combine a simple markup with a - nestable markup. - - - - - Simple markups cannot contain any other form of quickbook markup. - - - - - A non-space character must follow the leading markup - - - - - A non-space character must precede the trailing markup - - - - - A space or a punctuation must follow the trailing markup - - - - - If the matching markup cannot be found within a block, the formatting - will not be applied. This is to ensure that un-matched formatting markups, - which can be a common mistake, does not corrupt anything past a single - block. We do not want the rest of the document to be rendered bold - just because we forgot a trailing '*'. A single block is terminated - by two end of lines or the close bracket: ']'. - - - - - A line starting with the star will be interpreted as an unordered list. - See Unordered - lists. - - - - - More Formatting Samples - - - - - - Markup - - - - - Result - - - - - - - - - *Bold* - - - - - Bold - - - - - - - *Is bold* - - - - - Is bold - - - - - - - * Not bold* *Not bold * * Not bold * - - - - - * Not bold* *Not bold * * Not bold * - - - - - - - This*Isn't*Bold (no bold) - - - - - This*Isn't*Bold (no bold) - - - - - - - (*Bold Inside*) (parenthesis not bold) - - - - - (Bold Inside) (parenthesis not - bold) - - - - - - - *(Bold Outside)* (parenthesis bold) - - - - - (Bold Outside) (parenthesis - bold) - - - - - - - 3*4*5 = 60 (no bold) - - - - - 3*4*5 = 60 (no bold) - - - - - - - 3 * 4 * 5 = 60 (no bold) - - - - - 3 * 4 * 5 = 60 (no bold) - - - - - - - 3 *4* 5 = 60 (4 is bold) - - - - - 3 4 5 = 60 (4 is bold) - - - - - - - *This is bold* this is not *but this is* - - - - - This is bold this is not but this is - - - - - - - *This is bold*. - - - - - This is bold. - - - - - - - *B*. (bold B) - - - - - B. (bold B) - - - - - - - ['*Bold-Italic*] - - - - - Bold-Italic - - - - - - - *side-by*/-side/ - - - - - side-by-side - - - - - -
- - As mentioned, simple markups cannot go past a single block. The text from - "have" to "full" in the following paragraph will be - rendered as bold: - -Baa baa black sheep, *have you any wool? -Yes sir, yes sir, three bags full!* -One for the master, one for the dame, -And one for the little boy who lives down the lane. - - - Baa baa black sheep, have you any wool? Yes sir, - yes sir, three bags full! One for the master, one for the dame, - And one for the little boy who lives down the lane. - - - But in the following paragraph, bold is not applied: - -Baa baa black sheep, *have you any wool? -Yes sir, yes sir, three bags full! -One for the master, one for the dame, -And one for the little boy who lives down the lane. - - - Baa baa black sheep, *have you any wool? Yes sir, yes sir, three bags full! - One for the master, one for the dame, And one for the little boy who lives - down the lane. - -
-
- <link linkend="quickbook.syntax.phrase.inline_code">Inline code</link> - - Inlining code in paragraphs is quite common when writing C++ documentation. - We provide a very simple markup for this. For example, this: - -This text has inlined code `int main() { return 0; }` in it. - - - will generate: - - - This text has inlined code int main() { return 0; } - in it. The code will be syntax highlighted. - - - - We simply enclose the code with the tick: "`", not the - single quote: "'". - Note too that `some code` is preferred over [^some code]. - - -
-
- <link linkend="quickbook.syntax.phrase.code_blocks">Code blocks</link> - - Preformatted code simply starts with a space or a tab (See Code). - However, such a simple syntax cannot be used as phrase elements in lists - (See Ordered - lists and Unordered - lists), tables (See Tables), - etc. Inline code (see above) can. The problem is, inline code does not - allow formatting with newlines, spaces, and tabs. These are lost. - - - We provide a phrase level markup that is a mix between the two. By using - the double-tick, instead of the single-tick, we are telling QuickBook to - use preformatted blocks of code. Example: - -`` - #include <iostream> - - int main() - { - std::cout << "Hello, World!" << std::endl; - return 0; - } -`` - - - will generate: - - -#include <iostream> - -int main() -{ - std::cout << "Hello, World!" << std::endl; - return 0; -} - - -
-
- <link linkend="quickbook.syntax.phrase.source_mode">Source Mode</link> - - If a document contains more than one type of source code then the source - mode may be changed dynamically as the document is processed. All QuickBook - documents are initially in C++ mode by default, though an alternative initial - value may be set in the Document - section. - - - To change the source mode, use the [source-mode] markup, - where source-mode is one of the supported modes. For - example, this: - -Python's [python] `import` is rather like C++'s [c++] `#include`. A -C++ comment `// looks like this` whereas a Python comment [python] -`# looks like this`. - - - will generate: - - - Python's import is rather - like C++'s #include. - A C++ comment // looks like this - whereas a Python comment #looks like this. - - - Supported Source Modes - - - - - - Mode - - - - - Source Mode Markup - - - - - - - - - C++ - - - - - [c++] - - - - - - - Python - - - - - [python] - - - - - -
- - - The source mode strings are lowercase. - - -
-
- <link linkend="quickbook.syntax.phrase.line_break">line-break</link> -[br] - - - - [br] is now deprecated. Blurbs, - Admonitions - and table cells (see Tables) - may now contain paragraphs. - - -
-
- <link linkend="quickbook.syntax.phrase.anchors">Anchors</link> -[#named_anchor] - - - A named anchor is a hook that can be referenced by a link elsewhere in - the document. You can then reference an anchor with [link named_anchor -Some link text]. - See Anchor links, - Section and Heading. - -
- - - - -
- <link linkend="quickbook.syntax.phrase.escape">Escape</link> - - The escape mark-up is used when we don't want to do any processing. - -''' -escape (no processing/formatting) -''' - - - Escaping allows us to pass XML markup to BoostBook - or DocBook. For example: - -''' -<emphasis role="bold">This is direct XML markup</emphasis> -''' - - - This is direct XML markup - - - - Be careful when using the escape. The text must conform to BoostBook/DocBook syntax. - - -
-
- <link linkend="quickbook.syntax.phrase.single_char_escape">Single - char escape</link> - - The backslash may be used to escape a single punctuation character. The - punctuation immediately after the backslash is passed without any processing. - This is useful when we need to escape QuickBook punctuations such as [ and ]. - For example, how do you escape the triple quote? Simple: \'\'\' - - - \n - has a special meaning. It is used to generate line breaks. - - - - \n - and [br] are now deprecated. Blurbs, - Admonitions - and table cells (see Tables) - may now contain paragraphs. - - - - The escaped space: \ also - has a special meaning. The escaped space is removed from the output. - -
-
- <link linkend="quickbook.syntax.phrase.images">Images</link> -[$image.jpg] - -
-
- <link linkend="quickbook.syntax.phrase.footnotes">Footnotes</link> - - As of version 1.3, QuickBook supports footnotes. Just put the text of the - footnote in a [footnote] block, and the text will be put at the - bottom of the current page. For example, this: - -[footnote A sample footnote] - - - will generate this - - A sample footnote - - . - -
- <link linkend="quickbook.syntax.phrase.footnotes.macro_expansion">Macro - Expansion</link> -__a_macro_identifier__ - - - See Macros for details. - -
-
- <link linkend="quickbook.syntax.phrase.footnotes.template_expansion">Template - Expansion</link> -[a_template_identifier] - - - See Templates - for details. - -
-
-
-
- <link linkend="quickbook.syntax.block">Block Level Elements</link> -
- <link linkend="quickbook.syntax.block.document">Document</link> - - Every document must begin with a Document Info section, which should look - like this: - -[document-type The Document Title - [quickbook 1.3] - [version 1.0] - [id the_document_name] - [dirname the_document_dir] - [copyright 2000 2002 2003 Joe Blow, Jane Doe] - [purpose The document's reason for being] - [category The document's category] - [authors [Blow, Joe], [Doe, Jane]] - [license The document's license] - [source-mode source-type] -] - - - Where document-type is one of: - - - - - book - - - - - article - - - - - library - - - - - chapter - - - - - part - - - - - appendix - - - - - preface - - - - - qandadiv - - - - - qandaset - - - - - reference - - - - - set - - - - - quickbook 1.3 declares the version of quickbook the document is written - for. In its absence, version 1.1 is assumed. - - - version, id, dirname, - copyright, purpose, category, - authors, license, last-revision - and source-mode are optional information. - - - source-type is a lowercase string setting the initial - Source Mode. - If the source-mode field is omitted, a default value - of c++ will be used. - -
-
- <link linkend="quickbook.syntax.block.section">Section</link> - - Starting a new section is accomplished with: - -[section:id The Section Title] - - - where id is optional. id will be the filename of the - generated section. If it is not present, "The Section Title" - will be normalized and become the id. Valid characters are a-Z, - A-Z, 0-9 and _. - All non-valid characters are converted to underscore and all upper-case - are converted to lower case. Thus: "The Section Title" will be - normalized to "the_section_title". - - - End a section with: - -[endsect] - - - Sections can nest, and that results in a hierarchy in the table of contents. - -
-
- <link linkend="quickbook.syntax.block.xinclude">xinclude</link> - - You can include another XML file with: - -[xinclude file.xml] - - - This is useful when file.xml has been generated by Doxygen and contains - your reference section. - -
-
- <link linkend="quickbook.syntax.block.paragraphs">Paragraphs</link> - - Paragraphs start left-flushed and are terminated by two or more newlines. - No markup is needed for paragraphs. QuickBook automatically detects paragraphs - from the context. Block markups [section, endsect, h1, h2, h3, h4, h5, - h6, blurb, (block-quote) ':', pre, def, table and include ] may also terminate - a paragraph. - -
-
- <link linkend="quickbook.syntax.block.lists">Lists</link> -
- <link linkend="quickbook.syntax.block.lists.ordered_lists">Ordered - lists</link> -# One -# Two -# Three - - - will generate: - - - - - One - - - - - Two - - - - - Three - - - -
-
- <link linkend="quickbook.syntax.block.lists.list_hierarchies">List - Hierarchies</link> - - List hierarchies are supported. Example: - -# One -# Two -# Three - # Three.a - # Three.b - # Three.c -# Four - # Four.a - # Four.a.i - # Four.a.ii -# Five - - - will generate: - - - - - One - - - - - Two - - - - - Three - - - - Three.a - - - - - Three.b - - - - - Three.c - - - - - - - - Fourth - - - - Four.a - - - - Four.a.i - - - - - Four.a.ii - - - - - - - - - - - Five - - - -
-
- <link linkend="quickbook.syntax.block.lists.long_list_lines">Long - List Lines</link> - - Long lines will be wrapped appropriately. Example: - -# A short item. -# A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. -# A short item. - - - - - A short item. - - - - - A very long item. A very long item. A very long item. A very long - item. A very long item. A very long item. A very long item. A very - long item. A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. A very long - item. - - - - - A short item. - - - -
-
- <link linkend="quickbook.syntax.block.lists.unordered_lists">Unordered - lists</link> -* First -* Second -* Third - - - will generate: - - - - - First - - - - - Second - - - - - Third - - - -
-
- <link linkend="quickbook.syntax.block.lists.mixed_lists">Mixed lists</link> - - Mixed lists (ordered and unordered) are supported. Example: - -# One -# Two -# Three - * Three.a - * Three.b - * Three.c -# Four - - - will generate: - - - - - One - - - - - Two - - - - - Three - - - - Three.a - - - - - Three.b - - - - - Three.c - - - - - - - - Four - - - - - And... - -# 1 - * 1.a - # 1.a.1 - # 1.a.2 - * 1.b -# 2 - * 2.a - * 2.b - # 2.b.1 - # 2.b.2 - * 2.b.2.a - * 2.b.2.b - - - will generate: - - - - - 1 - - - - 1.a - - - - 1.a.1 - - - - - 1.a.2 - - - - - - - - 1.b - - - - - - - - 2 - - - - 2.a - - - - - 2.b - - - - 2.b.1 - - - - - 2.b.2 - - - - 2.b.2.a - - - - - 2.b.2.b - - - - - - - - - - - - -
-
-
- <link linkend="quickbook.syntax.block.code">Code</link> - - Preformatted code starts with a space or a tab. The code will be syntax - highlighted according to the current Source - Mode: - -#include <iostream> - -int main() -{ - // Sample code - std::cout << "Hello, World\n"; - return 0; -} - -import cgi - -def cookForHtml(text): - '''"Cooks" the input text for HTML.''' - - return cgi.escape(text) - - - Macros that are already defined are expanded in source code. Example: - -[def __array__ [@http://www.boost.org/doc/html/array/reference.html array]] -[def __boost__ [@http://www.boost.org/libs/libraries.htm boost]] - - using __boost__::__array__; - - - Generates: - -using boost::array; - -
-
- <link linkend="quickbook.syntax.block.escape_back">Escaping Back To - QuickBook</link> - - Inside code, code blocks and inline code, QuickBook does not allow any - markup to avoid conflicts with the target syntax (e.g. c++). In case you - need to switch back to QuickBook markup inside code, you can do so using - a language specific escape-back delimiter. In C++ - and Python, the delimiter is the double tick (back-quote): "``" - and "``". Example: - -void ``[@http://en.wikipedia.org/wiki/Foo#Foo.2C_Bar_and_Baz foo]``() -{ -} - - - Will generate: - -void foo() -{ -} - - - When escaping from code to QuickBook, only phrase level markups are allowed. - Block level markups like lists, tables etc. are not allowed. - -
-
- <link linkend="quickbook.syntax.block.preformatted">Preformatted</link> - - Sometimes, you don't want some preformatted text to be parsed as C++. In - such cases, use the [pre ... ] markup block. - -[pre - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - -] - - - Spaces, tabs and newlines are rendered as-is. Unlike all quickbook block - level markup, pre (and Code) are the only ones that allow multiple newlines. - The markup above will generate: - -Some preformatted text Some preformatted text - - Some preformatted text Some preformatted text - - Some preformatted text Some preformatted text - - - - Notice that unlike Code, phrase markup such as font style is still permitted - inside pre blocks. - -
-
- <link linkend="quickbook.syntax.block.blockquote">Blockquote</link> -[:sometext...] - -
- - Indents the paragraph. This applies to one paragraph only. - -
-
-
- <link linkend="quickbook.syntax.block.admonitions">Admonitions</link> -[note This is a note] -[tip This is a tip] -[important This is important] -[caution This is a caution] -[warning This is a warning] - - - generates DocBook admonitions: - - - - This is a note - - - - - This is a tip - - - - - This is important - - - - - This is a caution - - - - - This is a warning - - - - These are the only admonitions supported by DocBook. - So, for example [information This is some information] - is unlikely to produce the desired effect. - -
-
- <link linkend="quickbook.syntax.block.headings">Headings</link> -[h1 Heading 1] -[h2 Heading 2] -[h3 Heading 3] -[h4 Heading 4] -[h5 Heading 5] -[h6 Heading 6] - - - Heading - 1 - - - Heading - 2 - - - Heading - 3 - - - Heading - 4 - - - Heading - 5 - - - Heading - 6 - - - Headings 1-3 [h1 h2 and h3] will automatically have anchors with normalized - names with name="section_id.normalized_header_text" - (i.e. valid characters are a-z, A-Z, - 0-9 and _. All non-valid characters - are converted to underscore and all upper-case are converted to lower-case. - For example: Heading 1 in section Section 2 will be normalized to section_2.heading_1). - You can use: - -[link section_id.normalized_header_text The link text] - - - to link to them. See Anchor - links and Section - for more info. - -
-
- <link linkend="quickbook.syntax.block.generic_heading">Generic Heading</link> - - In cases when you don't want to care about the heading level (1 to 6), - you can use the Generic Heading: - -[heading Heading] - - - The Generic Heading assumes the level, plus one, of - the innermost section where it is placed. For example, if it is placed - in the outermost section, then, it assumes h2. - - - Headings are often used as an alternative to sections. It is used particularly - if you do not want to start a new section. In many cases, however, headings - in a particular section is just flat. Example: - -[section A] -[h2 X] -[h2 Y] -[h2 Z] -[endsect] - - - Here we use h2 assuming that section A is the outermost level. If it is - placed in an inner level, you'll have to use h3, h4, etc. depending on - where the section is. In general, it is the section level plus one. It - is rather tedious, however, to scan the section level everytime. If you - rewrite the example above as shown below, this will be automatic: - -[section A] -[heading X] -[heading Y] -[heading Z] -[endsect] - - - They work well regardless where you place them. You can rearrange sections - at will without any extra work to ensure correct heading levels. In fact, - with section and heading, you - have all you need. h1..h6 becomes - redundant. h1..h6 might be deprecated - in the future. - -
-
- <link linkend="quickbook.syntax.block.macros">Macros</link> -[def macro_identifier some text] - - - When a macro is defined, the identifier replaces the text anywhere in the - file, in paragraphs, in markups, etc. macro_identifier is a string of non- - white space characters except ']'. A macro may not follow an alphabetic - character or the underscore. The replacement text can be any phrase (even - marked up). Example: - -[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] -sf_logo - - - Now everywhere the sf_logo is placed, the picture will be inlined. - - - - - sflogo - - - - - - It's a good idea to use macro identifiers that are distinguishable. For - instance, in this document, macro identifiers have two leading and trailing - underscores (e.g. __spirit__). The reason is to avoid unwanted - macro replacement. - - - - Links (URLS) and images are good candidates for macros. 1) - They tend to change a lot. It is a good idea to place all links and images - in one place near the top to make it easy to make changes. 2) - The syntax is not pretty. It's easier to read and write, e.g. __spirit__ - than [@http://spirit.sourceforge.net Spirit]. - - - Some more examples: - -[def :-) [$theme/smiley.png]] -[def __spirit__ [@http://spirit.sourceforge.net Spirit]] - - - (See Images and - Links) - - - Invoking these macros: - -Hi __spirit__ :-) - - - will generate this: - - - Hi Spirit - - smiley - - - -
-
- <link linkend="quickbook.syntax.block.predefined_macros">Predefined - Macros</link> - - Quickbook has some predefined macros that you can already use. - - - Predefined Macros - - - - - - Macro - - - - - Meaning - - - - - Example - - - - - - - - - __DATE__ - - - - - Today's date - - - - - 2000-Dec-20 - - - - - - - __TIME__ - - - - - The current time - - - - - 12:00:00 PM - - - - - - - __FILENAME__ - - - - - Quickbook source filename - - - - - quickbook_manual-1_4.quickbook - - - - - -
-
-
- <link linkend="quickbook.syntax.block.templates">Templates</link> - - Templates provide a more versatile text substitution mechanism. Templates - come in handy when you need to create parameterizable, multi-line, boilerplate - text that you specify once and expand many times. Templates accept one - or more arguments. These arguments act like place-holders for text replacement. - Unlike simple macros, which are limited to phrase level markup, templates - can contain block level markup (e.g. paragraphs, code blocks and tables). - - - Example template: - -[template person[name age what] - -Hi, my name is [name]. I am [age] years old. I am a [what]. - -] - - - Template - Identifier - - - Template identifiers can either consist of: - - - - - An initial alphabetic character or the underscore, followed by zero - or more alphanumeric characters or the underscore. This is similar - to your typical C/C++ identifier. - - - - - A single character punctuation (a non-alphanumeric printable character) - - - - - Formal - Template Arguments - - - Template formal arguments are identifiers consisting of an initial alphabetic - character or the underscore, followed by zero or more alphanumeric characters - or the underscore. This is similar to your typical C/C++ identifier. - - - A template formal argument temporarily hides a template of the same name - at the point where the template - is expanded. Note that the body of the person - template above refers to name age - and what as [name] [age] - and [what]. name age - and what are actually templates that exist in the duration - of the template call. - - - Template - Body - - - The template body can be just about any QuickBook block or phrase. There - are actually two forms. Templates may be phrase or block level. Phrase - templates are of the form: - -[template sample[arg1 arg2...argN] replacement text... ] - - - Block templates are of the form: - -[template sample[arg1 arg2...argN] -replacement text... -] - - - The basic rule is as follows: if a newline immediately follows the argument - list, then it is a block template, otherwise, it is a phrase template. - Phrase templates are typically expanded as part of phrases. Like macros, - block level elements are not allowed in phrase templates. - - - Template - Expansion - - - You expand a template this way: - -[template_identifier arg1..arg2..arg3] - - - At template expansion, you supply the actual arguments. The template will - be expanded with your supplied arguments. Example: - -[person James Bond..39..Spy] -[person Santa Clause..87..Big Red Fatso] - - - Which will expand to: - - - Hi, my name is James Bond. I am 39 years old. I am a Spy. - - - Hi, my name is Santa Clause. I am 87 years old. I am a Big Red Fatso. - - - - A word of caution: Templates are recursive. A template can call another - template or even itself, directly or indirectly. There are no control - structures in QuickBook (yet) so this will always mean infinite recursion. - QuickBook can detect this situation and report an error if recursion - exceeds a certain limit. - - - - Each actual argument can be a word, a text fragment or just about any - QuickBook phrase. Arguments - are separated by the double dot ".." and terminated - by the close parenthesis. - - - Nullary Templates - - - Nullary templates look and act like simple macros. Example: - -[template alpha[]'''&#945;'''] -[template beta[]'''&#946;'''] - - - Expanding: - -Some squigles...[*[alpha][beta]] - - We have: - - - Some squiggles...αβ - - - The difference with macros are - - - - - The explicit template - expansion syntax. This is an advantage because, now, we don't - have to use obscure naming conventions like double underscores (e.g. - __alpha__) to avoid unwanted macro replacement. - - - - - The template is expanded at the point where it is invoked. A macro - is expanded immediately at its point of declaration. This is subtle - and can cause a slight difference in behavior especially if you refer - to other macros and templates in the body. - - - - - The empty brackets after the template identifier (alpha[]) - indicates no arguments. If the template body does not look like a template - argument list, we can elide the empty brackets. Example: - -[template aristotle_quote Aristotle: [*['Education is the best provision -for the journey to old age.]]] - - - Expanding: - -Here's a quote from [aristotle_quote]. - - - We have: - - - Here's a quote from Aristotle: Education - is the best provision for the journey to old age.. - - - The disadvantage is that you can't avoid the space between the template - identifier, aristotle_quote, - and the template body "Aristotle...". This space will be part - of the template body. If that space is unwanted, use empty brackets or - use the space escape: "\ ". - Example: - -[template tag\ _tag] - - - Then expanding: - -`struct` x[tag]; - - - We have: - - - struct x_tag; - - - You have a couple of ways to do it. I personally prefer the explicit empty - brackets, though. - - - Simple - Arguments - - - As mentioned, arguments are separated by the double dot "..". - If there are less arguments passed than expected, QuickBook attempts to - break the last argument into two or more arguments following this logic: - - - - - Break the last argument into two, at the first space found ('', - '\n', \t' or '\r'). - - - - - Repeat until there are enough arguments or if there are no more spaces - found (in which case, an error is reported). - - - - - For example: - -[template simple[a b c d] [a][b][c][d]] -[simple w x y z] - - - will produce: - - - wxyz - - - "w x y z" is initially treated as a single argument because we - didn't supply any ".." separators. However, - since simple expects 4 arguments, "w x y z" - is broken down iteratively (applying the logic above) until we have "w", - "x", "y" and "z". - - - QuickBook only tries to get the arguments it needs. For example: - -[simple w x y z trail] - - - will produce: - - - wxyz trail - - - The arguments being: "w", "x", "y" and "z - trail". - - - It should be obvious now that for simple arguments with no spaces, we can - get by without separating the arguments with ".." - separators. It is possible to combine ".." - separators with the argument passing simplification presented above. Example: - -[simple what do you think ..m a n?] - - - will produce: - - - what do you think man? - - - Punctuation - Templates - - - With templates, one of our objectives is to allow us to rewrite QuickBook - in QuickBook (as a qbk library). For that to happen, we need to accommodate - single character punctuation templates which are fairly common in QuickBook. - You might have noticed that single character punctuations are allowed as - template - identifiers. Example: - -[template ![bar] <hey>[bar]</hey>] - - - Now, expanding this: - -[!baz] - - - We will have: - -<hey>baz</hey> - -
-
- <link linkend="quickbook.syntax.block.blurbs">Blurbs</link> -[blurb :-) [*An eye catching advertisement or note...] - - __spirit__ is an object-oriented recursive-descent parser generator framework - implemented using template meta-programming techniques. Expression templates - allow us to approximate the syntax of Extended Backus-Normal Form (EBNF) - completely in C++. -] - - - will generate this: - - - - - - smiley - - An eye catching advertisement - or note... - - - Spirit is an object-oriented - recursive-descent parser generator framework implemented using template - meta-programming techniques. Expression templates allow us to approximate - the syntax of Extended Backus-Normal Form (EBNF) completely in C++. - - - - - Prefer admonitions - wherever appropriate. - - -
-
- <link linkend="quickbook.syntax.block.tables">Tables</link> -[table A Simple Table - [[Heading 1] [Heading 2] [Heading 3]] - [[R0-C0] [R0-C1] [R0-C2]] - [[R1-C0] [R1-C1] [R1-C2]] - [[R2-C0] [R2-C1] [R2-C2]] -] - - - will generate: - - - A Simple Table - - - - - - Heading 1 - - - - - Heading 2 - - - - - Heading 3 - - - - - - - - - R0-C0 - - - - - R0-C1 - - - - - R0-C2 - - - - - - - R2-C0 - - - - - R2-C1 - - - - - R2-C2 - - - - - - - R3-C0 - - - - - R3-C1 - - - - - R3-C2 - - - - - -
- - The table title is optional. The first row of the table is automatically - treated as the table header; that is, it is wrapped in <thead>...</thead> - XML tags. Note that unlike the original QuickDoc, the columns are nested - in [ cells... ]. The syntax is free-format and allows big cells to be formatted - nicely. Example: - -[table Table with fat cells - [[Heading 1] [Heading 2]] - [ - [Row 0, Col 0: a small cell] - [ - Row 0, Col 1: a big fat cell with paragraphs - - Boost provides free peer-reviewed portable C++ source libraries. - - We emphasize libraries that work well with the C++ Standard Library. - Boost libraries are intended to be widely useful, and usable across - a broad spectrum of applications. The Boost license encourages both - commercial and non-commercial use. - ] - ] - [ - [Row 1, Col 0: a small cell] - [Row 1, Col 1: a small cell] - ] -] - - - and thus: - - - Table with fat cells - - - - - - Heading 1 - - - - - Heading 2 - - - - - - - - - Row 0, Col 0: a small cell - - - - - Row 0, Col 1: a big fat cell with paragraphs - - - Boost provides free peer-reviewed portable C++ source libraries. - - - We emphasize libraries that work well with the C++ Standard Library. - Boost libraries are intended to be widely useful, and usable - across a broad spectrum of applications. The Boost license encourages - both commercial and non-commercial use. - - - - - - - Row 1, Col 0: a small cell - - - - - Row 1, Col 1: a small cell - - - - - -
- - Here's how to have preformatted blocks of code in a table cell: - -[table Table with code - [[Comment] [Code]] - [ - [My first program] - [`` - #include <iostream> - - int main() - { - std::cout << "Hello, World!" << std::endl; - return 0; - } - ``] - ] -] - - - Table with code - - - - - - Comment - - - - - Code - - - - - - - - - My first program - - - - -#include <iostream> - -int main() -{ - std::cout << "Hello, World!" << std::endl; - return 0; -} - - - - - - -
-
-
- <link linkend="quickbook.syntax.block.variable_lists">Variable Lists</link> -[variablelist A Variable List - [[term 1] [The definition of term 1]] - [[term 2] [The definition of term 2]] - [[term 3] [The definition of term 3]] -] - - - will generate: - - - A Variable List - - term 1 - - - The definition of term 1 - - - - - term 2 - - - The definition of term 2 - - - - - term 3 - - - The definition of term 3 - - - - - - The rules for variable lists are the same as for tables, except that only - 2 "columns" are allowed. The first column contains the terms, - and the second column contains the definitions. Those familiar with HTML - will recognize this as a "definition list". - -
-
- <link linkend="quickbook.syntax.block.include">Include</link> - - You can include one QuickBook file from another. The syntax is simply: - -[include someother.qbk] - - - The included file will be processed as if it had been cut and pasted into - the current document, with the following exceptions: - - - - - The __FILENAME__ predefined macro will reflect the name of the file currently being - processed. - - - - - Any macros defined in the included file are scoped to that file. - - - - - The [include] directive lets you specify a document - id to use for the included file. When this id is not explicitly specified, - the id defaults to the filename ("someother", in the example - above). You can specify the id like this: - -[include:someid someother.qbk] - - - All auto-generated anchors will use the document id as a unique prefix. - So for instance, if there is a top section in someother.qbk named "Intro", - the named anchor for that section will be "someid.intro", and - you can link to it with [link someid.intro The Intro]. - -
-
- <link linkend="quickbook.syntax.block.import">Import</link> - - When documenting code, you'd surely need to present code from actual source - files. While it is possible to copy some code and paste them in your QuickBook - file, doing so is error prone and the extracted code in the documentation - tends to get out of sync with the actual code as the code evolves. The - problem, as always, is that once documentation is written, the tendency - is for the docs to languish in the archives without maintenance. - - - QuickBook's import facility provides a nice solution. - - - Example - - - You can effortlessly import code snippets from source code into your QuickBook. - The following illustrates how this is done: - -[import ../test/stub.cpp] -[foo] -[bar] - - - The first line: - -[import ../test/stub.cpp] - - - collects specially marked-up code snippets from stub.cpp - and places them in your QuickBook file as virtual templates. Each of the - specially marked-up code snippets has a name (e.g. foo - and bar in the example - above). This shall be the template identifier for that particular code - snippet. The second and third line above does the actual template expansion: - -[foo] -[bar] - - - And the result is: - - - This is the foo function. - - - This description can have paragraphs... - - - - - lists - - - - - etc. - - - - - And any quickbook block markup. - - -std::string foo() -{ - // return 'em, foo man! - return "foo"; -} - - - - This is the bar function - - -std::string bar() -{ - // return 'em, bar man! - return "bar"; -} - - - - Some trailing text here - - - Code - Snippet Markup - - - Note how the code snippets in stub.cpp - get marked up. We use distinguishable comments following the form: - -//[id -some code here -//] - - - The first comment line above initiates a named code-snippet. This prefix - will not be visible in quickbook. The entire code-snippet in between //[id and //] - will be inserted as a template in quickbook with name id. - The comment //] ends a code-snippet - This too will not be visible in quickbook. - - - Special - Comments - - - Special comments of the form: - -//` some [*quickbook] markup here - - - and: - -/*` some [*quickbook] markup here */ - - - will be parsed by QuickBook. This can contain quickbook blocks - (e.g. sections, paragraphs, tables, etc). In the first case, the initial - slash-slash, tick and white-space shall be ignored. In the second, the - initial slash-star-tick and the final star-slash shall be ignored. - - - Callouts - - - Special comments of the form: - -/*< some [*quickbook] markup here >*/ - - - will be regarded as callouts. These will be collected, numbered and rendered - as a "callout bug" (a small icon with a number). After the whole - snippet is parsed, the callout list is generated. See Callouts - for details. Example: - - -std::string foo_bar() -{ - return "foo-bar"; -} - - - - - - The Mythical FooBar. See Foobar - for details - - - - - return 'em, foo-bar man! - - - - - Checkout stub.cpp to see the actual - code. - -
-
-
-
- <link linkend="quickbook.install">Installation and configuration</link> - - This section provides some guidelines on how to install and configure BoostBook - and Quickbook under several operating systems. - - - Before continuing, it is very important that you keep this in mind: if you - try to build some documents and the process breaks due to misconfiguration, - be absolutely sure to delete any bin - and bin.v2 directories generated by the build before - trying again. Otherwise your configuration fixes will not take any effect. - -
- <link linkend="quickbook.install.windows">Windows 2000, XP, 2003, Vista</link> -
- - Section contributed by Julio M. Merino Vidal - -
- - The following instructions apply to any Windows system based on Windows 2000, - including Windows XP, Windows 2003 Server and Windows Vista. The paths shown - below are taken from a Windows Vista machine; you will need to adjust them - to match your system in case you are running an older version. - - - - - First of all you need to have a copy of xsltproc - for Windows. There are many ways to get this tool, but to keep things - simple, use the binary - packages made by Igor Zlatkovic. At the very least, you need - to download the following packages: iconv, - zlib, libxml2 - and libxslt. - - - - - Unpack all these packages in the same directory so that you get unique - bin, include - and lib directories within - the hierarchy. These instructions use C:\Users\example\Documents\boost\xml - as the root for all files. - - - - - From the command line, go to the bin - directory and launch xsltproc.exe - to ensure it works. You should get usage information on screen. - - - - - Download Docbook - XML 4.2 and unpack it in the same directory used above. That - is: C:\Users\example\Documents\boost\xml\docbook-xml. - - - - - Download the latest Docbook - XSL version and unpack it, again in the same directory used before. - To make things easier, rename the directory created during the extraction - to docbook-xsl (bypassing the version name): - C:\Users\example\Documents\boost\xml\docbook-xsl. - - - - - Add the following to your user-config.jam - file, which should live in your home directory (%HOMEDRIVE%%HOMEPATH%). - You must already have it somewhere or otherwise you could not be building - Boost (i.e. missing tools configuration). - - - -using xsltproc - : "C:/Users/example/Documents/boost/xml/bin/xsltproc.exe" - ; - -using boostbook - : "C:/Users/example/Documents/boost/xml/docbook-xsl" - : "C:/Users/example/Documents/boost/xml/docbook-xml" - ; - - - The above steps are enough to get a functional BoostBook setup. Quickbook - will be automatically built when needed. If you want to avoid these rebuilds: - - - - - Go to Quickbook's source directory (BOOST_ROOT\tools\quickbook). - - - - - Build the utility by issuing bjam - --v2. - - - - - Copy the resulting quickbook.exe - binary (located under the BOOST_ROOT\bin.v2 - hierarchy) to a safe place. Following our previous example, you can install - it into: C:\Users\example\Documents\boost\xml\bin. - - - - - Add the following to your user-config.jam - file: - - - -using quickbook - : "C:/Users/example/Documents/boost/xml/bin/quickbook.exe" - ; - -
-
- <link linkend="quickbook.install.linux">Debian, Ubuntu</link> - - The following instructions apply to Debian and its derivatives. They are - based on a Ubuntu Edgy install but should work on other Debian based systems. - - - First install the bjam, - xsltproc, docbook-xsl and - docbook-xml packages. For example, using apt-get: - -sudo apt-get install xsltprc docbook-xsl docbook-xml - - - If you're planning on building boost's documentation, you'll also need to - install the doxygen package - as well. - - - Next, we need to configure Boost Build to compile BoostBook files. Add the - following to your user-config.jam file, which should be in your home - directory. If you don't have one, create a file containing this text. For - more information on setting up user-config.jam, see - the Boost - Build documentation. - -using xsltproc ; - -using boostbook - : /usr/share/xml/docbook/stylesheet/nwalsh - : /usr/share/xml/docbook/schema/dtd/4.2 - ; - -# Remove this line if you're not using doxygen -using doxygen ; - - - The above steps are enough to get a functional BoostBook setup. Quickbook - will be automatically built when needed. If you want to avoid these rebuilds: - - - - - Go to Quickbook's source directory (BOOST_ROOT/tools/quickbook). - - - - - Build the utility by issuing bjam - --v2. - - - - - Copy the resulting quickbook - binary (located under the BOOST_ROOT/bin.v2 - hierarchy) to a safe place. The traditional location is /usr/local/bin. - - - - - Add the following to your user-config.jam - file, using the full path of the quickbook executable: - - - -using quickbook - : /usr/local/bin/quickbook - ; - -
-
-
- <link linkend="quickbook.editors">Editor Support</link> - - Editing quickbook files is usually done with text editors both simple and powerful. - The following sections list the settings for some editors which can help make - editing quickbook files a bit easier. - - - - - - note - - You may submit your settings, tips, and suggestions to - the authors, or through the docs - Boost Docs mailing list. - - -
- <link linkend="quickbook.editors.scite">Scintilla Text Editor</link> -
- - Section contributed by Dean Michael Berris - -
- - The Scintilla Text Editor (SciTE) is a free source code editor for Win32 - and X. It uses the SCIntilla source code editing component. - - - - - - tip - - SciTE can be downloaded from http://www.scintilla.org/SciTE.html - - - - You can use the following settings to highlight quickbook tags when editing - quickbook files. - -qbk=*.qbk -lexer.*.qbk=props -use.tabs.$(qbk)=0 -tab.size.$(qbk)=4 -indent.size.$(qbk)=4 -style.props.32=$(font.base) -comment.stream.start.props=[/ -comment.stream.end.props=] -comment.box.start.props=[/ -comment.box.middle.props= -comment.box.end.props=] - - - - - - note - - Thanks to Rene Rivera for the above SciTE settings. - - -
-
-
- <link linkend="quickbook.faq">Frequently Asked Questions</link> - - Can - I use QuickBook for non-Boost documentation? - - - QuickBook can be used for non-Boost documentation with a little extra work. - -
- - Faq contributed by Michael Marcin - -
- - When building HTML documentation with BoostBook a Boost C++ Libraries header - is added to the files. When using QuickBook to document projects outside of - Boost this is not desirable. This behavior can be overridden at the BoostBook - level by specifying some XSLT options. When using Boost Build version 2 (BBv2) - this can be achieved by adding parameters to the BoostBook target declaration. - - - For example: - -using quickbook ; - -xml my_doc : my_doc.qbk ; - -boostbook standalone - : - my_doc - : - <xsl:param>boost.image.src=images/my_project_logo.png - <xsl:param>boost.image.alt="\"My Project\"" - <xsl:param>boost.image.w=100 - <xsl:param>boost.image.h=50 - <xsl:param>nav.layout=none - ; - -
-
- <link linkend="quickbook.ref">Quick Reference</link> - - [cpp] - - - Syntax Compendium - - - - - - To do this... - - - - - Use this... - - - - - See this... - - - - - - - - - comment - - - - - [/ some comment] - - - - - Comments - - - - - - - italics - - - - - ['italics] or /italics/ - - - - - Font Styles - and Simple - formatting - - - - - - - bold - - - - - [*bold] or *bold* - - - - - Font Styles - and Simple - formatting - - - - - - - underline - - - - - [_underline] or _underline_ - - - - - Font Styles - and Simple - formatting - - - - - - - teletype - - - - - [^teletype] or =teletype= - - - - - Font Styles - and Simple - formatting - - - - - - - strikethrough - - - - - [-strikethrough] - - - - - Font Styles - and Simple - formatting - - - - - - - replaceable - - - - - [~replaceable] - - - - - Replaceble - - - - - - - source mode - - - - - [c++] or [python] - - - - - Source Mode - - - - - - - inline code - - - - - `int main();` - - - - - Inline code - - - - - - - code block - - - - - ``int main();`` - - - - - Code - - - - - - - code escape - - - - - ``from c++ to QuickBook`` - - - - - Escaping Back - To QuickBook - - - - - - - line break - - - - - [br] or \n - - - - - line-break - DEPRECATED - - - - - - - anchor - - - - - [#anchor] - - - - - Anchors - - - - - - - link - - - - - [@http://www.boost.org Boost] - - - - - Links - - - - - - - anchor link - - - - - [link section.anchor Link text] - - - - - Anchor links - - - - - - - refentry link - - - - - [link xml.refentry Link text] - - - - - refentry links - - - - - - - function link - - - - - [funcref fully::qualified::function_name Link text] - - - - - function, class, - member, enum, macro, concept or header links - - - - - - - class link - - - - - [classref fully::qualified::class_name Link text] - - - - - function, class, - member, enum, macro, concept or header links - - - - - - - member link - - - - - [memberref fully::qualified::member_name Link text] - - - - - function, class, - member, enum, macro, concept or header links - - - - - - - enum link - - - - - [enumref fully::qualified::enum_name Link text] - - - - - function, class, - member, enum, macro, concept or header links - - - - - - - macro link - - - - - [macroref MACRO_NAME Link text] - - - - - function, class, - member, enum, macro, concept or header links - - - - - - - concept link - - - - - [conceptref ConceptName Link text] - - - - - function, class, - member, enum, macro, concept or header links - - - - - - - header link - - - - - [headerref path/to/header.hpp Link text] - - - - - function, class, - member, enum, macro, concept or header links - - - - - - - escape - - - - - '''escaped text (no processing/formatting)''' - - - - - Escape - - - - - - - single char escape - - - - - \c - - - - - Single - char escape - - - - - - - images - - - - - [$image.jpg] - - - - - Images - - - - - - - begin section - - - - - [section The Section Title] - - - - - Section - - - - - - - end section - - - - - [endsect] - - - - - Section - - - - - - - paragraph - - - - - No markup. Paragraphs start left-flushed and are terminated by two - or more newlines. - - - - - Paragraphs - - - - - - - ordered list - - - -# one -# two -# three - - - - - Ordered - lists - - - - - - - unordered list - - - -* one -* two -* three - - - - - Unordered - lists - - - - - - - code - - - - - No markup. Preformatted code starts with a space or a tab. - - - - - Code - - - - - - - preformatted - - - - - [pre preformatted] - - - - - Preformatted - - - - - - - block quote - - - - - [:sometext...] - - - - - Blockquote - - - - - - - heading 1 - - - - - [h1 Heading 1] - - - - - Heading - - - - - - - heading 2 - - - - - [h2 Heading 2] - - - - - Heading - - - - - - - heading 3 - - - - - [h3 Heading 3] - - - - - Heading - - - - - - - heading 4 - - - - - [h4 Heading 4] - - - - - Heading - - - - - - - heading 5 - - - - - [h5 Heading 5] - - - - - Heading - - - - - - - heading 6 - - - - - [h6 Heading 6] - - - - - Heading - - - - - - - macro - - - - - [def macro_identifier some text] - - - - - Macros - - - - - - - template - - - - - [template[a b] [a] body [b]] - - - - - Templates - - - - - - - blurb - - - - - [blurb advertisement or note...] - - - - - Blurbs - - - - - - - admonition - - - - - [warning Warning text...] - - - - - Admonitions - - - - - - - table - - - -[table Title -[[a][b][c]] -[[a][b][c]] -] - - - - - Tables - - - - - - - variablelist - - - -[variablelist Title -[[a][b]] -[[a][b]] -] - - - - - Variable Lists - - - - - - - include - - - - - [include someother.qbk] - - - - - Include - - - - - -
-
-
diff -Nru boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.gold-html boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.gold-html --- boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.gold-html 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.gold-html 1970-01-01 00:00:00.000000000 +0000 @@ -1,4177 +0,0 @@ - - - - -

- Quickbook 1.4 -

-
-

- Joel de Guzman -

-

- Eric Niebler -

-
- -
-

- Distributed under the Boost Software License, Version 1.0. (See accompanying - file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -

-
- -
-

- Introduction -

-
-
-

- Why program - by hand in five days what you can spend five years of your life automating? -

-

- -- Terrence Parr, author ANTLR/PCCTS -

-
-

- Well, QuickBook started as a weekend hack. It was originally intended to - be a sample application using Spirit. - What is it? What you are viewing now, this documentation, is autogenerated - by QuickBook. These files were generated from one master: -

-
-

- quickbook.qbk -

-
-

- Originally named QuickDoc, this funky tool that never dies evolved into - a funkier tool thanks to Eric Niebler who resurrected the project making - it generate BoostBook - instead of HTML. The BoostBook - documentation format is an extension of DocBook, - an SGML or XML based format for describing documentation. -

-

- QuickBook is a WikiWiki style documentation tool geared towards C++ documentation - using simple rules and markup for simple formatting tasks. QuickBook extends - the WikiWiki concept. Like the WikiWiki, QuickBook documents are simple - text files. A single QuickBook document can generate a fully linked set - of nice HTML and PostScript/PDF documents complete with images and syntax- - colorized source code. -

-

- Features include: -

-
    -
  • -
    - generate BoostBook - xml, to generate HTML, PostScript and PDF -
    -
  • -
  • -
    - simple markup to link to Doxygen-generated entities -
    -
  • -
  • -
    - macro system for simple text substitution -
    -
  • -
  • -
    - simple markup for italics, bold, preformatted, blurbs, code samples, - tables, URLs, anchors, images, etc. -
    -
  • -
  • -
    - automatic syntax coloring of code samples -
    -
  • -
  • -
    - CSS support -
    -
  • -
-
-
-
-

- Change Log -

-
-

- Version 1.3 -

-
    -
  • -
    - Quickbook file inclusion [include]. -
    -
  • -
  • -
    - Better xml output (pretty layout). Check out the generated XML. -
    -
  • -
  • -
    - Regression testing facility: to make sure your document will always - be compatible (full backward compatibility) regardless of changes to - QuickBook. -
    -
  • -
  • -
    - Code cleanup and refactoring. -
    -
  • -
  • -
    - Allow phrase markup in the doc-info. -
    -
  • -
  • -
    - Preformatted code blocks via ``code`` (double ticks) allows code in - tables and lists, for example. -
    -
  • -
  • -
    - Quickbook versioning; allows full backward compatibility. You have - to add [quickbook 1.3] to the doc-info header to enable the new features. - Without this, QuickBook will assume that the document is a pre-1.3 - document. -
    -
  • -
  • -
    - Better (intuitive) paragraph termination. Some markups may terminate - a paragraph. Example: -
    [section x]
    -blah...
    -[endsect]
    -
    -
  • -
  • -
    - Fully qualified section and headers. Subsection names are concatenated - to the ID to avoid clashing. Example: doc_name.sect_name.sub_sect_name.sub_sub_sect_name -
    -
  • -
  • -
    - Better &nbsp; and whitespace handling in code snippets. -
    -
  • -
  • -
    - [xinclude] fixes up the relative path to the target XML file when input_directory - is not the same as the output_directory. -
    -
  • -
  • -
    - Allow untitled tables. -
    -
  • -
  • -
    - Allow phrase markups in section titles. -
    -
  • -
  • -
    - Allow escaping back to QuickBook from code, code blocks and inline - code. -
    -
  • -
  • -
    - Footnotes, with the [footnote This is the footnote] syntax. -
    -
  • -
  • -
    - Post-processor bug fix for escaped XML code that it does not recognize. -
    -
  • -
  • -
    - Replaceable, with the [~replacement] syntax. -
    -
  • -
  • -
    - Generic Headers -
    -
  • -
  • -
    - Code changes to allow full recursion (i.e. Collectors and push/pop - functions) -
    -
  • -
  • -
    - Various code cleanup/maintenance -
    -
  • -
  • -
    - Templates! -
    -
  • -
  • -
    - [conceptref] for referencing BoostBook <concept> entities. -
    -
  • -
  • -
    - Allow escape of spaces. The escaped space is removed from the output. - Syntax: \ . -
    -
  • -
  • -
    - Nested comments are now allowed. -
    -
  • -
  • -
    - Quickbook blocks can nest inside comments. -
    -
  • -
  • -
    - Import facility. -
    -
  • -
  • -
    - Callouts on imported code -
    -
  • -
  • -
    - Simple markups can now span a whole block. -
    -
  • -
  • -
    - Blurbs, Admonitions - and table cells (see Tables) - may now contain paragraphs. -
    -
  • -
  • -
    - \n - and [br] are now deprecated. -
    -
  • -
-
-
-
-

- Syntax Summary -

-
-

- A QuickBook document is composed of one or more blocks. An example of a - block is the paragraph or a C++ code snippet. Some blocks have special - mark-ups. Blocks, except code snippets which have their own grammar (C++ - or Python), are composed of one or more phrases. A phrase can be a simple - contiguous run of characters. Phrases can have special mark-ups. Marked - up phrases can recursively contain other phrases, but cannot contain blocks. - A terminal is a self contained block-level or phrase-level element that - does not nest anything. -

-

- Blocks, in general, are delimited by two end-of-lines (the block terminator). - Phrases in each block cannot contain a block terminator. This way, syntax - errors such as un-matched closing brackets do not go haywire and corrupt - anything past a single block. -

-
-
-

- Comments -

-
-

- Can be placed anywhere. -

-
[/ comment (no output generated) ]
-
-
[/ comments can be nested [/ some more here] ]
-
-
[/ Quickbook blocks can nest inside comments. [*Comment this out too!] ]
-
-
-
-
-

- Phrase Level Elements -

-
-
-
-

- Font Styles -

-
-
['italic], [*bold], [_underline], [^teletype], [-strikethrough]
-
-

- will generate: -

-

- italic, bold, - underline, teletype, strikethrough -

-

- Like all non-terminal phrase level elements, this can of course be - nested: -

-
[*['bold-italic]]
-
-

- will generate: -

-

- bold-italic -

-
-
-
-

- Replaceable -

-
-

- When you want content that may or must be replaced by the user, use - the syntax: -

-
[~replacement]
-
-

- This will generate: -

-

- replacement -

-
-
-
-

- Quotations -

-
-
["A question that sometimes drives me hazy: am I or are the others crazy?]--Einstein
-
-

- will generate: -

-

- A question that sometimes drives me hazy: am I or are the others - crazy?--Einstein -

-

- Note the proper left and right quote marks. Also, while you can simply - use ordinary quote marks like "quoted", our quotation, above, - will generate correct DocBook quotations (e.g. <quote>quoted</quote>). -

-

- Like all phrase elements, quotations may be nested. Example: -

-
["Here's the rule for bargains: ["Do other men, for they would do you.] That's
-the true business precept.]
-
-

- will generate: -

-

- Here's the rule for bargains: Do other men, for they would do - you. That's the true business precept. -

-
-
-
-

- Simple formatting -

-
-

- Simple markup for formatting text, common in many applications, is - now supported: -

-
/italic/, *bold*, _underline_, =teletype=
-
-

- will generate: -

-

- italic, bold, - underline, teletype -

-

- Unlike QuickBook's standard formatting scheme, the rules for simpler - alternatives are much stricter[1]. -

-
    -
  • -
    - Simple markups cannot nest. You can combine a simple markup with - a nestable markup. -
    -
  • -
  • -
    - Simple markups cannot contain any other form of quickbook markup. -
    -
  • -
  • -
    - A non-space character must follow the leading markup -
    -
  • -
  • -
    - A non-space character must precede the trailing markup -
    -
  • -
  • -
    - A space or a punctuation must follow the trailing markup -
    -
  • -
  • -
    - If the matching markup cannot be found within a block, the formatting - will not be applied. This is to ensure that un-matched formatting - markups, which can be a common mistake, does not corrupt anything - past a single block. We do not want the rest of the document to - be rendered bold just because we forgot a trailing '*'. A single - block is terminated by two end of lines or the close bracket: ']'. -
    -
  • -
  • -
    - A line starting with the star will be interpreted as an unordered - list. See Unordered - lists. -
    -
  • -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
More Formatting Samples
-

- Markup -

-
-

- Result -

-
-

- *Bold* -

-
-

- Bold -

-
-

- *Is bold* -

-
-

- Is bold -

-
-

- * Not bold* *Not bold * * Not bold * -

-
-

- * Not bold* *Not bold * * Not bold * -

-
-

- This*Isn't*Bold (no bold) -

-
-

- This*Isn't*Bold (no bold) -

-
-

- (*Bold Inside*) (parenthesis not bold) -

-
-

- (Bold Inside) - (parenthesis not bold) -

-
-

- *(Bold Outside)* (parenthesis bold) -

-
-

- (Bold Outside) - (parenthesis bold) -

-
-

- 3*4*5 = 60 (no bold) -

-
-

- 3*4*5 = 60 (no bold) -

-
-

- 3 * 4 * 5 = 60 (no bold) -

-
-

- 3 * 4 * 5 = 60 (no bold) -

-
-

- 3 *4* 5 = 60 (4 is bold) -

-
-

- 3 4 5 = 60 (4 - is bold) -

-
-

- *This is bold* this is not *but this is* -

-
-

- This is bold this - is not but this is -

-
-

- *This is bold*. -

-
-

- This is bold. -

-
-

- *B*. (bold B) -

-
-

- B. (bold B) -

-
-

- ['*Bold-Italic*] -

-
-

- Bold-Italic -

-
-

- *side-by*/-side/ -

-
-

- side-by-side -

-
-
-

- As mentioned, simple markups cannot go past a single block. The text - from "have" to "full" in the following paragraph - will be rendered as bold: -

-
Baa baa black sheep, *have you any wool?
-Yes sir, yes sir, three bags full!*
-One for the master, one for the dame,
-And one for the little boy who lives down the lane.
-
-

- Baa baa black sheep, have you any wool? - Yes sir, yes sir, three bags full! One for the master, - one for the dame, And one for the little boy who lives down the lane. -

-

- But in the following paragraph, bold is not applied: -

-
Baa baa black sheep, *have you any wool?
-Yes sir, yes sir, three bags full!
-One for the master, one for the dame,
-And one for the little boy who lives down the lane.
-
-

- Baa baa black sheep, *have you any wool? Yes sir, yes sir, three bags - full! One for the master, one for the dame, And one for the little - boy who lives down the lane. -

-
-
-
-

- Inline code -

-
-

- Inlining code in paragraphs is quite common when writing C++ documentation. - We provide a very simple markup for this. For example, this: -

-
This text has inlined code `int main() { return 0; }` in it.
-
-

- will generate: -

-

- This text has inlined code int - main() - { return - 0; } - in it. The code will be syntax highlighted. -

-
-

- We simply enclose the code with the tick: "`", not the single - quote: "'". Note - too that `some code` is preferred over [^some code]. -

-
-
-
-
-

- Code blocks -

-
-

- Preformatted code simply starts with a space or a tab (See Code). - However, such a simple syntax cannot be used as phrase elements in - lists (See Ordered - lists and Unordered - lists), tables (See Tables), - etc. Inline code (see above) can. The problem is, inline code does - not allow formatting with newlines, spaces, and tabs. These are lost. -

-

- We provide a phrase level markup that is a mix between the two. By - using the double-tick, instead of the single-tick, we are telling QuickBook - to use preformatted blocks of code. Example: -

-
``
-    #include <iostream>
-
-    int main()
-    {
-        std::cout << "Hello, World!" << std::endl;
-        return 0;
-    }
-``
-
-

- will generate: -

-

-

#include <iostream>
-
-int main()
-{
-    std::cout << "Hello, World!" << std::endl;
-    return 0;
-}
-
-

-
-
-
-

- Source Mode -

-
-

- If a document contains more than one type of source code then the source - mode may be changed dynamically as the document is processed. All QuickBook - documents are initially in C++ mode by default, though an alternative - initial value may be set in the Document - section. -

-

- To change the source mode, use the [source-mode] markup, where - source-mode is one of the supported modes. For example, this: -

-
Python's [python] `import` is rather like C++'s [c++] `#include`. A
-C++ comment `// looks like this` whereas a Python comment [python]
-`# looks like this`.
-
-

- will generate: -

-

- Python's import is rather - like C++'s #include. - A C++ comment // looks like this - whereas a Python comment #looks like this. -

-
- - - - - - - - - - - - - - - - - - -
Supported Source Modes
-

- Mode -

-
-

- Source Mode Markup -

-
-

- C++ -

-
-

- [c++] -

-
-

- Python -

-
-

- [python] -

-
-
-
-

- The source mode strings are lowercase. -

-
-
-
-
-

- line-break -

-
-
[br]
-
-
-

- [br] is now deprecated. Blurbs, - Admonitions and - table cells (see Tables) - may now contain paragraphs. -

-
-
-
-
-

- Anchors -

-
-
[#named_anchor]
-
-

- A named anchor is a hook that can be referenced by a link elsewhere - in the document. You can then reference an anchor with [link named_anchor - Some link text]. See Anchor - links, Section and - Heading. -

-
-
- - - - -
-

- Escape -

-
-

- The escape mark-up is used when we don't want to do any processing. -

-
'''
-escape (no processing/formatting)
-'''
-
-

- Escaping allows us to pass XML markup to BoostBook - or DocBook. For example: -

-
'''
-<emphasis role="bold">This is direct XML markup</emphasis>
-'''
-
-

- This is direct XML markup -

-
-

- Be careful when using the escape. The text must conform to BoostBook/DocBook syntax. -

-
-
-
-
-

- Single char escape -

-
-

- The backslash may be used to escape a single punctuation character. - The punctuation immediately after the backslash is passed without any - processing. This is useful when we need to escape QuickBook punctuations - such as [ and ]. For example, how do you escape the - triple quote? Simple: \'\'\' -

-

- \n - has a special meaning. It is used to generate line breaks. -

-
-

- \n - and [br] are now deprecated. Blurbs, - Admonitions and - table cells (see Tables) - may now contain paragraphs. -

-
-

- The escaped space: \ also - has a special meaning. The escaped space is removed from the output. -

-
-
-
-

- Images -

-
-
[$image.jpg]
-
-
-
-
-

- Footnotes -

-
-

- As of version 1.3, QuickBook supports footnotes. Just put the text - of the footnote in a [footnote] block, and the text will be put at - the bottom of the current page. For example, this: -

-
[footnote A sample footnote]
-
-

- will generate this[2]. -

-
-
-

- Macro Expansion -

-
-
__a_macro_identifier__
-
-

- See Macros for details. -

-
-
-
-

- Template Expansion -

-
-
[a_template_identifier]
-
-

- See Templates for - details. -

-
-
-
-
-
-

- Block Level Elements -

-
-
-
-

- Document -

-
-

- Every document must begin with a Document Info section, which should - look like this: -

-
[document-type The Document Title
-    [quickbook 1.3]
-    [version 1.0]
-    [id the_document_name]
-    [dirname the_document_dir]
-    [copyright 2000 2002 2003 Joe Blow, Jane Doe]
-    [purpose The document's reason for being]
-    [category The document's category]
-    [authors [Blow, Joe], [Doe, Jane]]
-    [license The document's license]
-    [source-mode source-type]
-]
-
-

- Where document-type is one of: -

-
    -
  • -
    - book -
    -
  • -
  • -
    - article -
    -
  • -
  • -
    - library -
    -
  • -
  • -
    - chapter -
    -
  • -
  • -
    - part -
    -
  • -
  • -
    - appendix -
    -
  • -
  • -
    - preface -
    -
  • -
  • -
    - qandadiv -
    -
  • -
  • -
    - qandaset -
    -
  • -
  • -
    - reference -
    -
  • -
  • -
    - set -
    -
  • -
-

- quickbook 1.3 declares the version of quickbook the document is written - for. In its absence, version 1.1 is assumed. -

-

- version, id, dirname, copyright, - purpose, category, authors, license, - last-revision and source-mode are optional information. -

-

- source-type is a lowercase string setting the initial Source - Mode. If the source-mode field is omitted, a default value - of c++ will be used. -

-
-
-
-

- Section -

-
-

- Starting a new section is accomplished with: -

-
[section:id The Section Title]
-
-

- where id is optional. id will - be the filename of the generated section. If it is not present, "The - Section Title" will be normalized and become the id. Valid characters - are a-Z, A-Z, 0-9 and _. All non-valid - characters are converted to underscore and all upper-case are converted - to lower case. Thus: "The Section Title" will be normalized - to "the_section_title". -

-

- End a section with: -

-
[endsect]
-
-

- Sections can nest, and that results in a hierarchy in the table of - contents. -

-
-
-
-

- xinclude -

-
-

- You can include another XML file with: -

-
[xinclude file.xml]
-
-

- This is useful when file.xml has been generated by Doxygen and contains - your reference section. -

-
-
-
-

- Paragraphs -

-
-

- Paragraphs start left-flushed and are terminated by two or more newlines. - No markup is needed for paragraphs. QuickBook automatically detects - paragraphs from the context. Block markups [section, endsect, h1, h2, - h3, h4, h5, h6, blurb, (block-quote) ':', pre, def, table and include - ] may also terminate a paragraph. -

-
-
-
-

- Lists -

-
-
-
-

- Ordered lists -

-
-
# One
-# Two
-# Three
-
-

- will generate: -

-
    -
  1. -
    - One -
    -
  2. -
  3. -
    - Two -
    -
  4. -
  5. -
    - Three -
    -
  6. -
-
-
-
-

- List Hierarchies -

-
-

- List hierarchies are supported. Example: -

-
# One
-# Two
-# Three
-    # Three.a
-    # Three.b
-    # Three.c
-# Four
-    # Four.a
-        # Four.a.i
-        # Four.a.ii
-# Five
-
-

- will generate: -

-
    -
  1. -
    - One -
    -
  2. -
  3. -
    - Two -
    -
  4. -
  5. -
    - Three -
      -
    1. -
      - Three.a -
      -
    2. -
    3. -
      - Three.b -
      -
    4. -
    5. -
      - Three.c -
      -
    6. -
    -
    -
  6. -
  7. -
    - Fourth -
      -
    1. -
      - Four.a -
        -
      1. -
        - Four.a.i -
        -
      2. -
      3. -
        - Four.a.ii -
        -
      4. -
      -
      -
    2. -
    -
    -
  8. -
  9. -
    - Five -
    -
  10. -
-
-
-
-

- Long List Lines -

-
-

- Long lines will be wrapped appropriately. Example: -

-
# A short item.
-# A very long item. A very long item. A very long item.
-  A very long item. A very long item. A very long item.
-  A very long item. A very long item. A very long item.
-  A very long item. A very long item. A very long item.
-  A very long item. A very long item. A very long item.
-# A short item.
-
-
    -
  1. -
    - A short item. -
    -
  2. -
  3. -
    - A very long item. A very long item. A very long item. A very - long item. A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. A very - long item. A very long item. A very long item. A very long item. - A very long item. -
    -
  4. -
  5. -
    - A short item. -
    -
  6. -
-
-
-
-

- Unordered lists -

-
-
* First
-* Second
-* Third
-
-

- will generate: -

-
    -
  • -
    - First -
    -
  • -
  • -
    - Second -
    -
  • -
  • -
    - Third -
    -
  • -
-
-
-
-

- Mixed lists -

-
-

- Mixed lists (ordered and unordered) are supported. Example: -

-
# One
-# Two
-# Three
-    * Three.a
-    * Three.b
-    * Three.c
-# Four
-
-

- will generate: -

-
    -
  1. -
    - One -
    -
  2. -
  3. -
    - Two -
    -
  4. -
  5. -
    - Three -
      -
    • -
      - Three.a -
      -
    • -
    • -
      - Three.b -
      -
    • -
    • -
      - Three.c -
      -
    • -
    -
    -
  6. -
  7. -
    - Four -
    -
  8. -
-

- And... -

-
# 1
-    * 1.a
-        # 1.a.1
-        # 1.a.2
-    * 1.b
-# 2
-    * 2.a
-    * 2.b
-        # 2.b.1
-        # 2.b.2
-            * 2.b.2.a
-            * 2.b.2.b
-
-

- will generate: -

-
    -
  1. -
    - 1 -
      -
    • -
      - 1.a -
        -
      1. -
        - 1.a.1 -
        -
      2. -
      3. -
        - 1.a.2 -
        -
      4. -
      -
      -
    • -
    • -
      - 1.b -
      -
    • -
    -
    -
  2. -
  3. -
    - 2 -
      -
    • -
      - 2.a -
      -
    • -
    • -
      - 2.b -
        -
      1. -
        - 2.b.1 -
        -
      2. -
      3. -
        - 2.b.2 -
          -
        • -
          - 2.b.2.a -
          -
        • -
        • -
          - 2.b.2.b -
          -
        • -
        -
        -
      4. -
      -
      -
    • -
    -
    -
  4. -
-
-
-
-
-

- Code -

-
-

- Preformatted code starts with a space or a tab. The code will be syntax - highlighted according to the current Source - Mode: -

-
#include <iostream>
-
-int main()
-{
-    // Sample code
-    std::cout << "Hello, World\n";
-    return 0;
-}
-
-
import cgi
-
-def cookForHtml(text):
-    '''"Cooks" the input text for HTML.'''
-
-    return cgi.escape(text)
-
-

- Macros that are already defined are expanded in source code. Example: -

-
[def __array__ [@http://www.boost.org/doc/html/array/reference.html array]]
-[def __boost__ [@http://www.boost.org/libs/libraries.htm boost]]
-
-    using __boost__::__array__;
-
-

- Generates: -

-
using boost::array;
-
-
-
-
-

- Escaping Back To QuickBook -

-
-

- Inside code, code blocks and inline code, QuickBook does not allow - any markup to avoid conflicts with the target syntax (e.g. c++). In - case you need to switch back to QuickBook markup inside code, you can - do so using a language specific escape-back - delimiter. In C++ and Python, the delimiter is the double tick (back-quote): - "``" and "``". Example: -

-
void ``[@http://en.wikipedia.org/wiki/Foo#Foo.2C_Bar_and_Baz foo]``()
-{
-}
-
-

- Will generate: -

-
void foo()
-{
-}
-
-

- When escaping from code to QuickBook, only phrase level markups are - allowed. Block level markups like lists, tables etc. are not allowed. -

-
-
-
-

- Preformatted -

-
-

- Sometimes, you don't want some preformatted text to be parsed as C++. - In such cases, use the [pre ... ] markup block. -

-
[pre
-
-    Some *preformatted* text                    Some *preformatted* text
-
-        Some *preformatted* text            Some *preformatted* text
-
-            Some *preformatted* text    Some *preformatted* text
-
-]
-
-

- Spaces, tabs and newlines are rendered as-is. Unlike all quickbook - block level markup, pre (and Code) are the only ones that allow multiple - newlines. The markup above will generate: -

-
Some preformatted text                    Some preformatted text
-
-    Some preformatted text            Some preformatted text
-
-        Some preformatted text    Some preformatted text
-
-
-

- Notice that unlike Code, phrase markup such as font style is still - permitted inside pre blocks. -

-
-
-
-

- Blockquote -

-
-
[:sometext...]
-
-
-

- Indents the paragraph. This applies to one paragraph only. -

-
-
-
-
-

- Admonitions -

-
-
[note This is a note]
-[tip This is a tip]
-[important This is important]
-[caution This is a caution]
-[warning This is a warning]
-
-

- generates DocBook admonitions: -

-
-

- This is a note -

-
-
-

- This is a tip -

-
-
-

- This is important -

-
-
-

- This is a caution -

-
-
-

- This is a warning -

-
-

- These are the only admonitions supported by DocBook. - So, for example [information This is some information] is - unlikely to produce the desired effect. -

-
-
-
-

- Headings -

-
-
[h1 Heading 1]
-[h2 Heading 2]
-[h3 Heading 3]
-[h4 Heading 4]
-[h5 Heading 5]
-[h6 Heading 6]
-
-

- Heading 1 -

-

- Heading 2 -

-

- Heading 3 -

-

- Heading 4 -

-
- Heading 5 -
-
- Heading 6 -
-

- Headings 1-3 [h1 h2 and h3] will automatically have anchors with normalized - names with name="section_id.normalized_header_text" - (i.e. valid characters are a-z, A-Z, 0-9 - and _. All non-valid characters are converted to underscore - and all upper-case are converted to lower-case. For example: Heading - 1 in section Section 2 will be normalized to section_2.heading_1). - You can use: -

-
[link section_id.normalized_header_text The link text]
-
-

- to link to them. See Anchor - links and Section - for more info. -

-
-
-
-

- Generic Heading -

-
-

- In cases when you don't want to care about the heading level (1 to - 6), you can use the Generic Heading: -

-
[heading Heading]
-
-

- The Generic Heading assumes - the level, plus one, of the innermost section where it is placed. For - example, if it is placed in the outermost section, then, it assumes - h2. -

-

- Headings are often used as an alternative to sections. It is used particularly - if you do not want to start a new section. In many cases, however, - headings in a particular section is just flat. Example: -

-
[section A]
-[h2 X]
-[h2 Y]
-[h2 Z]
-[endsect]
-
-

- Here we use h2 assuming that section A is the outermost level. If it - is placed in an inner level, you'll have to use h3, h4, etc. depending - on where the section is. In general, it is the section level plus one. - It is rather tedious, however, to scan the section level everytime. - If you rewrite the example above as shown below, this will be automatic: -

-
[section A]
-[heading X]
-[heading Y]
-[heading Z]
-[endsect]
-
-

- They work well regardless where you place them. You can rearrange sections - at will without any extra work to ensure correct heading levels. In - fact, with section and heading, you have all you need. h1..h6 - becomes redundant. h1..h6 might be deprecated in the future. -

-
-
-
-

- Macros -

-
-
[def macro_identifier some text]
-
-

- When a macro is defined, the identifier replaces the text anywhere - in the file, in paragraphs, in markups, etc. macro_identifier is a - string of non- white space characters except ']'. A macro may not follow - an alphabetic character or the underscore. The replacement text can - be any phrase (even marked up). Example: -

-
[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]]
-sf_logo
-
-

- Now everywhere the sf_logo is placed, the picture will be inlined. -

-

- [] -

-
-

- It's a good idea to use macro identifiers that are distinguishable. - For instance, in this document, macro identifiers have two leading - and trailing underscores (e.g. __spirit__). The reason is - to avoid unwanted macro replacement. -

-
-

- Links (URLS) and images are good candidates for macros. 1) - They tend to change a lot. It is a good idea to place all links and - images in one place near the top to make it easy to make changes. - 2) The syntax is not pretty. - It's easier to read and write, e.g. __spirit__ than [@http://spirit.sourceforge.net - Spirit]. -

-

- Some more examples: -

-
[def :-)            [$theme/smiley.png]]
-[def __spirit__     [@http://spirit.sourceforge.net Spirit]]
-
-

- (See Images and Links) -

-

- Invoking these macros: -

-
Hi __spirit__  :-)
-
-

- will generate this: -

-

- Hi Spirit [] -

-
-
-
-

- Predefined Macros -

-
-

- Quickbook has some predefined macros that you can already use. -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Predefined Macros
-

- Macro -

-
-

- Meaning -

-
-

- Example -

-
-

- __DATE__ -

-
-

- Today's date -

-
-

- 2000-Dec-20 -

-
-

- __TIME__ -

-
-

- The current time -

-
-

- 12:00:00 PM -

-
-

- __FILENAME__ -

-
-

- Quickbook source filename -

-
-

- quickbook_manual-1_4.quickbook -

-
-
-
-
-
-

- Templates -

-
-

- Templates provide a more versatile text substitution mechanism. Templates - come in handy when you need to create parameterizable, multi-line, - boilerplate text that you specify once and expand many times. Templates - accept one or more arguments. These arguments act like place-holders - for text replacement. Unlike simple macros, which are limited to phrase - level markup, templates can contain block level markup (e.g. paragraphs, - code blocks and tables). -

-

- Example template: -

-
[template person[name age what]
-
-Hi, my name is [name]. I am [age] years old. I am a [what].
-
-]
-
-
- Template Identifier -
-

- Template identifiers can either consist of: -

-
    -
  • -
    - An initial alphabetic character or the underscore, followed by - zero or more alphanumeric characters or the underscore. This is - similar to your typical C/C++ identifier. -
    -
  • -
  • -
    - A single character punctuation (a non-alphanumeric printable character) -
    -
  • -
-
- Formal Template Arguments -
-

- Template formal arguments are identifiers consisting of an initial - alphabetic character or the underscore, followed by zero or more alphanumeric - characters or the underscore. This is similar to your typical C/C++ - identifier. -

-

- A template formal argument temporarily hides a template of the same - name at the point where the template - is expanded. Note that the body of the person template - above refers to name age and what as [name] - [age] and [what]. name age and - what are actually templates that exist in the duration of - the template call. -

-
- Template Body -
-

- The template body can be just about any QuickBook block or phrase. - There are actually two forms. Templates may be phrase or block level. - Phrase templates are of the form: -

-
[template sample[arg1 arg2...argN] replacement text... ]
-
-

- Block templates are of the form: -

-
[template sample[arg1 arg2...argN]
-replacement text...
-]
-
-

- The basic rule is as follows: if a newline immediately follows the - argument list, then it is a block template, otherwise, it is a phrase - template. Phrase templates are typically expanded as part of phrases. - Like macros, block level elements are not allowed in phrase templates. -

-
- Template Expansion -
-

- You expand a template this way: -

-
[template_identifier arg1..arg2..arg3]
-
-

- At template expansion, you supply the actual arguments. The template - will be expanded with your supplied arguments. Example: -

-
[person James Bond..39..Spy]
-[person Santa Clause..87..Big Red Fatso]
-
-

- Which will expand to: -

-

- Hi, my name is James Bond. I am 39 years old. I am a Spy. -

-

- Hi, my name is Santa Clause. I am 87 years old. I am a Big Red Fatso. -

-
-

- A word of caution: Templates are recursive. A template can call another - template or even itself, directly or indirectly. There are no control - structures in QuickBook (yet) so this will always mean infinite recursion. - QuickBook can detect this situation and report an error if recursion - exceeds a certain limit. -

-
-

- Each actual argument can be a word, a text fragment or just about any - QuickBook phrase. Arguments - are separated by the double dot ".." and terminated - by the close parenthesis. -

-
- Nullary Templates -
-

- Nullary templates look and act like simple macros. Example: -

-
[template alpha[]'''&#945;''']
-[template beta[]'''&#946;''']
-
-

- Expanding: -

-
Some squigles...[*[alpha][beta]]
-

- We have: -

-

- Some squiggles...αβ -

-

- The difference with macros are -

-
    -
  • -
    - The explicit template - expansion syntax. This is an advantage because, now, we don't - have to use obscure naming conventions like double underscores - (e.g. __alpha__) to avoid unwanted macro replacement. -
    -
  • -
  • -
    - The template is expanded at the point where it is invoked. A macro - is expanded immediately at its point of declaration. This is subtle - and can cause a slight difference in behavior especially if you - refer to other macros and templates in the body. -
    -
  • -
-

- The empty brackets after the template identifier (alpha[]) - indicates no arguments. If the template body does not look like a template - argument list, we can elide the empty brackets. Example: -

-
[template aristotle_quote Aristotle: [*['Education is the best provision
-for the journey to old age.]]]
-
-

- Expanding: -

-
Here's a quote from [aristotle_quote].
-
-

- We have: -

-

- Here's a quote from Aristotle: Education - is the best provision for the journey to old age.. -

-

- The disadvantage is that you can't avoid the space between the template - identifier, aristotle_quote, - and the template body "Aristotle...". This space will be - part of the template body. If that space is unwanted, use empty brackets - or use the space escape: "\ - ". Example: -

-
[template tag\ _tag]
-
-

- Then expanding: -

-
`struct` x[tag];
-
-

- We have: -

-

- struct x_tag; -

-

- You have a couple of ways to do it. I personally prefer the explicit - empty brackets, though. -

-
- Simple Arguments -
-

- As mentioned, arguments are separated by the double dot "..". - If there are less arguments passed than expected, QuickBook attempts - to break the last argument into two or more arguments following this - logic: -

-
    -
  • -
    - Break the last argument into two, at the first space found ('', - '\n', \t' or '\r'). -
    -
  • -
  • -
    - Repeat until there are enough arguments or if there are no more - spaces found (in which case, an error is reported). -
    -
  • -
-

- For example: -

-
[template simple[a b c d] [a][b][c][d]]
-[simple w x y z]
-
-

- will produce: -

-

- wxyz -

-

- "w x y z" is initially treated as a single argument because - we didn't supply any ".." separators. However, since - simple expects 4 arguments, "w x y z" is broken - down iteratively (applying the logic above) until we have "w", - "x", "y" and "z". -

-

- QuickBook only tries to get the arguments it needs. For example: -

-
[simple w x y z trail]
-
-

- will produce: -

-

- wxyz trail -

-

- The arguments being: "w", "x", "y" and - "z trail". -

-

- It should be obvious now that for simple arguments with no spaces, - we can get by without separating the arguments with ".." - separators. It is possible to combine ".." separators - with the argument passing simplification presented above. Example: -

-
[simple what do you think ..m a n?]
-
-

- will produce: -

-

- what do you think man? -

-
- Punctuation Templates -
-

- With templates, one of our objectives is to allow us to rewrite QuickBook - in QuickBook (as a qbk library). For that to happen, we need to accommodate - single character punctuation templates which are fairly common in QuickBook. - You might have noticed that single character punctuations are allowed - as template - identifiers. Example: -

-
[template ![bar] <hey>[bar]</hey>]
-
-

- Now, expanding this: -

-
[!baz]
-
-

- We will have: -

-
<hey>baz</hey>
-
-
-
-
-

- Blurbs -

-
-
[blurb :-) [*An eye catching advertisement or note...]
-
-    __spirit__ is an object-oriented recursive-descent parser generator framework
-    implemented using template meta-programming techniques. Expression templates
-    allow us to approximate the syntax of Extended Backus-Normal Form (EBNF)
-    completely in C++.
-]
-
-

- will generate this: -

-
-

- [] - An eye catching advertisement or note... -

-

- Spirit is an object-oriented - recursive-descent parser generator framework implemented using template - meta-programming techniques. Expression templates allow us to approximate - the syntax of Extended Backus-Normal Form (EBNF) completely in C++. -

-
-
-

- Prefer admonitions - wherever appropriate. -

-
-
-
-
-

- Tables -

-
-
[table A Simple Table
-    [[Heading 1] [Heading 2] [Heading 3]]
-    [[R0-C0]     [R0-C1]     [R0-C2]]
-    [[R1-C0]     [R1-C1]     [R1-C2]]
-    [[R2-C0]     [R2-C1]     [R2-C2]]
-]
-
-

- will generate: -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
A Simple Table
-

- Heading 1 -

-
-

- Heading 2 -

-
-

- Heading 3 -

-
-

- R0-C0 -

-
-

- R0-C1 -

-
-

- R0-C2 -

-
-

- R2-C0 -

-
-

- R2-C1 -

-
-

- R2-C2 -

-
-

- R3-C0 -

-
-

- R3-C1 -

-
-

- R3-C2 -

-
-
-

- The table title is optional. The first row of the table is automatically - treated as the table header; that is, it is wrapped in <thead>...</thead> - XML tags. Note that unlike the original QuickDoc, the columns are nested - in [ cells... ]. The syntax is free-format and allows big cells to - be formatted nicely. Example: -

-
[table Table with fat cells
-    [[Heading 1] [Heading 2]]
-    [
-        [Row 0, Col 0: a small cell]
-        [
-            Row 0, Col 1: a big fat cell with paragraphs
-
-            Boost provides free peer-reviewed portable C++ source libraries.
-
-            We emphasize libraries that work well with the C++ Standard Library.
-            Boost libraries are intended to be widely useful, and usable across
-            a broad spectrum of applications. The Boost license encourages both
-            commercial and non-commercial use.
-        ]
-    ]
-    [
-        [Row 1, Col 0: a small cell]
-        [Row 1, Col 1: a small cell]
-    ]
-]
-
-

- and thus: -

-
- - - - - - - - - - - - - - - - - - -
Table with fat cells
-

- Heading 1 -

-
-

- Heading 2 -

-
-

- Row 0, Col 0: a small cell -

-
-

- Row 0, Col 1: a big fat cell with paragraphs -

-

- Boost provides free peer-reviewed portable C++ source libraries. -

-

- We emphasize libraries that work well with the C++ Standard - Library. Boost libraries are intended to be widely useful, - and usable across a broad spectrum of applications. The Boost - license encourages both commercial and non-commercial use. -

-
-

- Row 1, Col 0: a small cell -

-
-

- Row 1, Col 1: a small cell -

-
-
-

- Here's how to have preformatted blocks of code in a table cell: -

-
[table Table with code
-    [[Comment] [Code]]
-    [
-        [My first program]
-        [``
-            #include <iostream>
-
-            int main()
-            {
-                std::cout << "Hello, World!" << std::endl;
-                return 0;
-            }
-        ``]
-    ]
-]
-
-
- - - - - - - - - - - - - - -
Table with code
-

- Comment -

-
-

- Code -

-
-

- My first program -

-
-

-

#include <iostream>
-
-int main()
-{
-    std::cout << "Hello, World!" << std::endl;
-    return 0;
-}
-
-

-
-
-
-
-
-

- Variable Lists -

-
-
[variablelist A Variable List
-    [[term 1] [The definition of term 1]]
-    [[term 2] [The definition of term 2]]
-    [[term 3] [The definition of term 3]]
-]
-
-

- will generate: -

-
-
- term 1 -
-
-

- The definition of term 1 -

-
-
- term 2 -
-
-

- The definition of term 2 -

-
-
- term 3 -
-
-

- The definition of term 3 -

-
-
-

- The rules for variable lists are the same as for tables, except that - only 2 "columns" are allowed. The first column contains the - terms, and the second column contains the definitions. Those familiar - with HTML will recognize this as a "definition list". -

-
-
-
-

- Include -

-
-

- You can include one QuickBook file from another. The syntax is simply: -

-
[include someother.qbk]
-
-

- The included file will be processed as if it had been cut and pasted - into the current document, with the following exceptions: -

-
    -
  • -
    - The __FILENAME__ predefined macro will reflect the name of the - file currently being processed. -
    -
  • -
  • -
    - Any macros defined in the included file are scoped to that file. -
    -
  • -
-

- The [include] directive lets you specify a document id to - use for the included file. When this id is not explicitly specified, - the id defaults to the filename ("someother", in the example - above). You can specify the id like this: -

-
[include:someid someother.qbk]
-
-

- All auto-generated anchors will use the document id as a unique prefix. - So for instance, if there is a top section in someother.qbk named "Intro", - the named anchor for that section will be "someid.intro", - and you can link to it with [link someid.intro The Intro]. -

-
-
-
-

- Import -

-
-

- When documenting code, you'd surely need to present code from actual - source files. While it is possible to copy some code and paste them - in your QuickBook file, doing so is error prone and the extracted code - in the documentation tends to get out of sync with the actual code - as the code evolves. The problem, as always, is that once documentation - is written, the tendency is for the docs to languish in the archives - without maintenance. -

-

- QuickBook's import facility provides a nice solution. -

-
- Example -
-

- You can effortlessly import code snippets from source code into your - QuickBook. The following illustrates how this is done: -

-
[import ../test/stub.cpp]
-[foo]
-[bar]
-
-

- The first line: -

-
[import ../test/stub.cpp]
-
-

- collects specially marked-up code snippets from stub.cpp - and places them in your QuickBook file as virtual templates. Each of - the specially marked-up code snippets has a name (e.g. foo and bar - in the example above). This shall be the template identifier for that - particular code snippet. The second and third line above does the actual - template expansion: -

-
[foo]
-[bar]
-
-

- And the result is: -

-

- This is the foo - function. -

-

- This description can have paragraphs... -

-
    -
  • -
    - lists -
    -
  • -
  • -
    - etc. -
    -
  • -
-

- And any quickbook block markup. -

-

-

std::string foo()
-{
-    // return 'em, foo man!
-    return "foo";
-}
-
-

-

- This is the bar - function -

-

-

std::string bar()
-{
-    // return 'em, bar man!
-    return "bar";
-}
-
-

-

- Some trailing text here -

-
- Code Snippet Markup -
-

- Note how the code snippets in stub.cpp - get marked up. We use distinguishable comments following the form: -

-
//[id
-some code here
-//]
-
-

- The first comment line above initiates a named code-snippet. This prefix - will not be visible in quickbook. The entire code-snippet in between - //[id and //] - will be inserted as a template in quickbook with name id. The comment //] ends a code-snippet This too will - not be visible in quickbook. -

-
- Special Comments -
-

- Special comments of the form: -

-
//` some [*quickbook] markup here
-
-

- and: -

-
/*` some [*quickbook] markup here */
-
-

- will be parsed by QuickBook. This can contain quickbook blocks - (e.g. sections, paragraphs, tables, etc). In the first case, the initial - slash-slash, tick and white-space shall be ignored. In the second, - the initial slash-star-tick and the final star-slash shall be ignored. -

-
- Callouts -
-

- Special comments of the form: -

-
/*< some [*quickbook] markup here >*/
-
-

- will be regarded as callouts. These will be collected, numbered and - rendered as a "callout bug" (a small icon with a number). - After the whole snippet is parsed, the callout list is generated. See - Callouts - for details. Example: -

-

-

std::string foo_bar() (1)
-{
-    return "foo-bar"; (2)
-}
-
-

-
-
- (1) -

- The Mythical FooBar. See - Foobar for details -

-
-
- (2) -

- return 'em, foo-bar man! -

-
-
-

- Checkout stub.cpp to see the actual - code. -

-
-
-
-
-
-

- Installation and configuration -

-
-

- This section provides some guidelines on how to install and configure BoostBook - and Quickbook under several operating systems. -

-

- Before continuing, it is very important that you keep this in mind: if - you try to build some documents and the process breaks due to misconfiguration, - be absolutely sure to delete any bin - and bin.v2 directories generated by the build - before trying again. Otherwise your configuration fixes will not take any - effect. -

-
-
-

- Windows 2000, XP, 2003, Vista -

-
-
-

- Section contributed by Julio M. Merino Vidal -

-
-

- The following instructions apply to any Windows system based on Windows - 2000, including Windows XP, Windows 2003 Server and Windows Vista. The - paths shown below are taken from a Windows Vista machine; you will need - to adjust them to match your system in case you are running an older - version. -

-
    -
  1. -
    - First of all you need to have a copy of xsltproc - for Windows. There are many ways to get this tool, but to keep things - simple, use the binary - packages made by Igor Zlatkovic. At the very least, you need - to download the following packages: iconv, - zlib, libxml2 - and libxslt. -
    -
  2. -
  3. -
    - Unpack all these packages in the same directory so that you get unique - bin, include - and lib directories - within the hierarchy. These instructions use C:\Users\example\Documents\boost\xml - as the root for all files. -
    -
  4. -
  5. -
    - From the command line, go to the bin - directory and launch xsltproc.exe - to ensure it works. You should get usage information on screen. -
    -
  6. -
  7. -
    - Download Docbook - XML 4.2 and unpack it in the same directory used above. That - is: C:\Users\example\Documents\boost\xml\docbook-xml. -
    -
  8. -
  9. -
    - Download the latest Docbook - XSL version and unpack it, again in the same directory used before. - To make things easier, rename the directory created during the extraction - to docbook-xsl (bypassing the version name): - C:\Users\example\Documents\boost\xml\docbook-xsl. -
    -
  10. -
  11. -
    - Add the following to your user-config.jam - file, which should live in your home directory (%HOMEDRIVE%%HOMEPATH%). - You must already have it somewhere or otherwise you could not be - building Boost (i.e. missing tools configuration). -
    -
  12. -
-
using xsltproc
-    : "C:/Users/example/Documents/boost/xml/bin/xsltproc.exe"
-    ;
-
-using boostbook
-    : "C:/Users/example/Documents/boost/xml/docbook-xsl"
-    : "C:/Users/example/Documents/boost/xml/docbook-xml"
-    ;
-
-

- The above steps are enough to get a functional BoostBook setup. Quickbook - will be automatically built when needed. If you want to avoid these rebuilds: -

-
    -
  1. -
    - Go to Quickbook's source directory (BOOST_ROOT\tools\quickbook). -
    -
  2. -
  3. -
    - Build the utility by issuing bjam - --v2. -
    -
  4. -
  5. -
    - Copy the resulting quickbook.exe - binary (located under the BOOST_ROOT\bin.v2 - hierarchy) to a safe place. Following our previous example, you can - install it into: C:\Users\example\Documents\boost\xml\bin. -
    -
  6. -
  7. -
    - Add the following to your user-config.jam - file: -
    -
  8. -
-
using quickbook
-    : "C:/Users/example/Documents/boost/xml/bin/quickbook.exe"
-    ;
-
-
-
-
-

- Debian, Ubuntu -

-
-

- The following instructions apply to Debian and its derivatives. They - are based on a Ubuntu Edgy install but should work on other Debian based - systems. -

-

- First install the bjam, - xsltproc, docbook-xsl and - docbook-xml packages. For example, using apt-get: -

-
sudo apt-get install xsltprc docbook-xsl docbook-xml
-
-

- If you're planning on building boost's documentation, you'll also need - to install the doxygen package - as well. -

-

- Next, we need to configure Boost Build to compile BoostBook files. Add - the following to your user-config.jam file, which should be in your home - directory. If you don't have one, create a file containing this text. - For more information on setting up user-config.jam, see the Boost - Build documentation. -

-
using xsltproc ;
-
-using boostbook
-    : /usr/share/xml/docbook/stylesheet/nwalsh
-    : /usr/share/xml/docbook/schema/dtd/4.2
-    ;
-
-# Remove this line if you're not using doxygen
-using doxygen ;
-
-

- The above steps are enough to get a functional BoostBook setup. Quickbook - will be automatically built when needed. If you want to avoid these rebuilds: -

-
    -
  1. -
    - Go to Quickbook's source directory (BOOST_ROOT/tools/quickbook). -
    -
  2. -
  3. -
    - Build the utility by issuing bjam - --v2. -
    -
  4. -
  5. -
    - Copy the resulting quickbook - binary (located under the BOOST_ROOT/bin.v2 - hierarchy) to a safe place. The traditional location is /usr/local/bin. -
    -
  6. -
  7. -
    - Add the following to your user-config.jam - file, using the full path of the quickbook executable: -
    -
  8. -
-
using quickbook
-    : /usr/local/bin/quickbook
-    ;
-
-
-
-
-
-

- Editor Support -

-
-

- Editing quickbook files is usually done with text editors both simple and - powerful. The following sections list the settings for some editors which - can help make editing quickbook files a bit easier. -

-
-

- [] - You may submit your settings, tips, and suggestions to the authors, or - through the docs - Boost Docs mailing list. -

-
-
-
-

- Scintilla Text Editor -

-
-
-

- Section contributed by Dean Michael Berris -

-
-

- The Scintilla Text Editor (SciTE) is a free source code editor for Win32 - and X. It uses the SCIntilla source code editing component. -

-
-

- [] - SciTE can be downloaded from http://www.scintilla.org/SciTE.html -

-
-

- You can use the following settings to highlight quickbook tags when editing - quickbook files. -

-
qbk=*.qbk
-lexer.*.qbk=props
-use.tabs.$(qbk)=0
-tab.size.$(qbk)=4
-indent.size.$(qbk)=4
-style.props.32=$(font.base)
-comment.stream.start.props=[/
-comment.stream.end.props=]
-comment.box.start.props=[/
-comment.box.middle.props=
-comment.box.end.props=]
-
-
-

- [] - Thanks to Rene Rivera for the above SciTE settings. -

-
-
-
-
-
-

- Frequently Asked Questions -

-
-

- Can I use QuickBook for non-Boost documentation? -

-

- QuickBook can be used for non-Boost documentation with a little extra work. -

-
-

- Faq contributed by Michael Marcin -

-
-

- When building HTML documentation with BoostBook a Boost C++ Libraries header - is added to the files. When using QuickBook to document projects outside - of Boost this is not desirable. This behavior can be overridden at the - BoostBook level by specifying some XSLT options. When using Boost Build - version 2 (BBv2) this can be achieved by adding parameters to the BoostBook - target declaration. -

-

- For example: -

-
using quickbook ;
-
-xml my_doc : my_doc.qbk ;
-
-boostbook standalone
-    :
-        my_doc
-    :
-        <xsl:param>boost.image.src=images/my_project_logo.png
-        <xsl:param>boost.image.alt="\"My Project\""
-        <xsl:param>boost.image.w=100
-        <xsl:param>boost.image.h=50
-        <xsl:param>nav.layout=none
-    ;
-
-
-
-
-

- Quick Reference -

-
-

- [cpp] -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Syntax Compendium
-

- To do this... -

-
-

- Use this... -

-
-

- See this... -

-
-

- comment -

-
-

- [/ some comment] -

-
-

- Comments -

-
-

- italics -

-
-

- ['italics] or /italics/ -

-
-

- Font Styles - and Simple - formatting -

-
-

- bold -

-
-

- [*bold] or *bold* -

-
-

- Font Styles - and Simple - formatting -

-
-

- underline -

-
-

- [_underline] or _underline_ -

-
-

- Font Styles - and Simple - formatting -

-
-

- teletype -

-
-

- [^teletype] or =teletype= -

-
-

- Font Styles - and Simple - formatting -

-
-

- strikethrough -

-
-

- [-strikethrough] -

-
-

- Font Styles - and Simple - formatting -

-
-

- replaceable -

-
-

- [~replaceable] -

-
-

- Replaceble -

-
-

- source mode -

-
-

- [c++] or [python] -

-
-

- Source Mode -

-
-

- inline code -

-
-

- `int main();` -

-
-

- Inline code -

-
-

- code block -

-
-

- ``int main();`` -

-
-

- Code -

-
-

- code escape -

-
-

- ``from c++ to QuickBook`` -

-
-

- Escaping Back To - QuickBook -

-
-

- line break -

-
-

- [br] or \n -

-
-

- line-break - DEPRECATED -

-
-

- anchor -

-
-

- [#anchor] -

-
-

- Anchors -

-
-

- link -

-
-

- [@http://www.boost.org Boost] -

-
-

- Links -

-
-

- anchor link -

-
-

- [link section.anchor Link text] -

-
-

- Anchor links -

-
-

- refentry link -

-
-

- [link xml.refentry Link text] -

-
-

- refentry links -

-
-

- function link -

-
-

- [funcref fully::qualified::function_name Link text] -

-
-

- function, class, - member, enum, macro, concept or header links -

-
-

- class link -

-
-

- [classref fully::qualified::class_name Link text] -

-
-

- function, class, - member, enum, macro, concept or header links -

-
-

- member link -

-
-

- [memberref fully::qualified::member_name Link text] -

-
-

- function, class, - member, enum, macro, concept or header links -

-
-

- enum link -

-
-

- [enumref fully::qualified::enum_name Link text] -

-
-

- function, class, - member, enum, macro, concept or header links -

-
-

- macro link -

-
-

- [macroref MACRO_NAME Link text] -

-
-

- function, class, - member, enum, macro, concept or header links -

-
-

- concept link -

-
-

- [conceptref ConceptName Link text] -

-
-

- function, class, - member, enum, macro, concept or header links -

-
-

- header link -

-
-

- [headerref path/to/header.hpp Link text] -

-
-

- function, class, - member, enum, macro, concept or header links -

-
-

- escape -

-
-

- '''escaped text (no processing/formatting)''' -

-
-

- Escape -

-
-

- single char escape -

-
-

- \c -

-
-

- Single - char escape -

-
-

- images -

-
-

- [$image.jpg] -

-
-

- Images -

-
-

- begin section -

-
-

- [section The Section Title] -

-
-

- Section -

-
-

- end section -

-
-

- [endsect] -

-
-

- Section -

-
-

- paragraph -

-
-

- No markup. Paragraphs start left-flushed and are terminated by - two or more newlines. -

-
-

- Paragraphs -

-
-

- ordered list -

-
-
# one
-# two
-# three
-
-
-

- Ordered - lists -

-
-

- unordered list -

-
-
* one
-* two
-* three
-
-
-

- Unordered - lists -

-
-

- code -

-
-

- No markup. Preformatted code starts with a space or a tab. -

-
-

- Code -

-
-

- preformatted -

-
-

- [pre preformatted] -

-
-

- Preformatted -

-
-

- block quote -

-
-

- [:sometext...] -

-
-

- Blockquote -

-
-

- heading 1 -

-
-

- [h1 Heading 1] -

-
-

- Heading -

-
-

- heading 2 -

-
-

- [h2 Heading 2] -

-
-

- Heading -

-
-

- heading 3 -

-
-

- [h3 Heading 3] -

-
-

- Heading -

-
-

- heading 4 -

-
-

- [h4 Heading 4] -

-
-

- Heading -

-
-

- heading 5 -

-
-

- [h5 Heading 5] -

-
-

- Heading -

-
-

- heading 6 -

-
-

- [h6 Heading 6] -

-
-

- Heading -

-
-

- macro -

-
-

- [def macro_identifier some text] -

-
-

- Macros -

-
-

- template -

-
-

- [template[a b] [a] body [b]] -

-
-

- Templates -

-
-

- blurb -

-
-

- [blurb advertisement or note...] -

-
-

- Blurbs -

-
-

- admonition -

-
-

- [warning Warning text...] -

-
-

- Admonitions -

-
-

- table -

-
-
[table Title
-[[a][b][c]]
-[[a][b][c]]
-]
-
-
-

- Tables -

-
-

- variablelist -

-
-
[variablelist Title
-[[a][b]]
-[[a][b]]
-]
-
-
-

- Variable Lists -

-
-

- include -

-
-

- [include someother.qbk] -

-
-

- Include -

-
-
-
-
-
-
-
-
-

- [1] - Thanks to David Barrett, author of Qwiki, - for sharing these samples and teaching me these obscure formatting rules. - I wasn't sure at all if Spirit, - being more or less a formal EBNF parser, can handle the context sensitivity - and ambiguity. -

-
-
-

- [2] A sample - footnote -

-
-
- - diff -Nru boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.quickbook boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.quickbook --- boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.quickbook 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/20_remove_privacy_breach.patch/tools/quickbook/test/quickbook_manual-1_4.quickbook 1970-01-01 00:00:00.000000000 +0000 @@ -1,1981 +0,0 @@ -[article Quickbook - [quickbook 1.4] - [version 1.4] - [authors [de Guzman, Joel], [Niebler, Eric]] - [copyright 2002 2004 2006 Joel de Guzman, Eric Niebler] - [purpose /WikiWiki/ style documentation tool] - [license - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - [@http://www.boost.org/LICENSE_1_0.txt]) - ] -] - -[/ QuickBook Document version 1.3 ] -[/ Sept 24, 2002 ] -[/ Sept 2, 2004 ] -[/ Feb 14, 2005 ] -[/ Sept 13, 2005 ] - -[/ Some links] - -[def __note__ [$images/note.png]] -[def __alert__ [$images/alert.png]] -[def __tip__ [$images/tip.png]] -[def :-) [$images/smiley.png]] -[def __spirit__ [@http://spirit.sourceforge.net Spirit]] -[def __boostbook__ [@http://www.boost.org/doc/html/boostbook.html BoostBook]] -[def __docbook__ [@http://www.docbook.org/ DocBook]] - -[def __comments__ [link quickbook.syntax.comments Comments]] - -[def __font_styles__ [link quickbook.syntax.phrase.font_styles Font Styles]] -[def __quotations__ [link quickbook.syntax.phrase.quotations Quotations]] -[def __replaceable__ [link quickbook.syntax.phrase.replaceable Replaceble]] -[def __simple_formatting__ [link quickbook.syntax.phrase.simple_formatting Simple formatting]] -[def __inline_code__ [link quickbook.syntax.phrase.inline_code Inline code]] -[def __code_blocks__ [link quickbook.syntax.phrase.code_blocks Code blocks]] -[def __source_mode__ [link quickbook.syntax.phrase.source_mode Source Mode]] -[def __line_break__ [link quickbook.syntax.phrase.line_break line-break]] -[def __anchors__ [link quickbook.syntax.phrase.anchors Anchors]] -[def __links__ [link quickbook.syntax.phrase.links Links]] -[def __anchor_links__ [link quickbook.syntax.phrase.anchor_links Anchor links]] -[def __refentry_links__ [link quickbook.syntax.phrase.refentry_links refentry links]] -[def __code_links__ [link quickbook.syntax.phrase.code_links function, class, member, enum, macro, concept or header links]] -[def __escape__ [link quickbook.syntax.phrase.escape Escape]] -[def __single_char_escape__ [link quickbook.syntax.phrase.single_char_escape Single char escape]] -[def __images__ [link quickbook.syntax.phrase.images Images]] - -[def __document__ [link quickbook.syntax.block.document Document]] -[def __section__ [link quickbook.syntax.block.section Section]] -[def __xinclude__ [link quickbook.syntax.block.xinclude xinclude]] -[def __paragraphs__ [link quickbook.syntax.block.paragraphs Paragraphs]] -[def __ordered_lists__ [link quickbook.syntax.block.lists.ordered_lists Ordered lists]] -[def __list_hierarchies__ [link quickbook.syntax.block.lists.list_hierarchies List Hierarchies]] -[def __long_list_lines__ [link quickbook.syntax.block.lists.long_list_lines Long List Lines]] -[def __unordered_lists__ [link quickbook.syntax.block.lists.unordered_lists Unordered lists]] -[def __mixed_lists__ [link quickbook.syntax.block.lists.mixed_lists Mixed lists]] -[def __code__ [link quickbook.syntax.block.code Code]] -[def __escape_back__ [link quickbook.syntax.block.escape_back Escaping Back To QuickBook]] -[def __preformatted__ [link quickbook.syntax.block.preformatted Preformatted]] -[def __blockquote__ [link quickbook.syntax.block.blockquote Blockquote]] -[def __heading__ [link quickbook.syntax.block.headings Heading]] -[def __macros__ [link quickbook.syntax.block.macros Macros]] -[def __templates__ [link quickbook.syntax.block.templates Templates]] -[def __predefined_macros__ [link quickbook.syntax.block.predefined_macros Predefined Macros]] -[def __blurbs__ [link quickbook.syntax.block.blurbs Blurbs]] -[def __admonitions__ [link quickbook.syntax.block.admonitions Admonitions]] -[def __tables__ [link quickbook.syntax.block.tables Tables]] -[def __variable_lists__ [link quickbook.syntax.block.variable_lists Variable Lists]] -[def __include__ [link quickbook.syntax.block.include Include]] -[def __import__ [link quickbook.syntax.block.import Import]] - -[section:intro Introduction] - -[:[*['["Why program by hand in five days what you can spend five years of your -life automating?]]] - --- Terrence Parr, author ANTLR/PCCTS -] - -Well, QuickBook started as a weekend hack. It was originally intended to be a -sample application using __spirit__. What is it? What you are viewing now, this -documentation, is autogenerated by QuickBook. These files were generated from -one master: - -[:[@../quickbook.qbk quickbook.qbk]] - -Originally named QuickDoc, this funky tool that never dies evolved into a -funkier tool thanks to Eric Niebler who resurrected the project making it -generate __boostbook__ instead of HTML. The __boostbook__ documentation format -is an extension of __docbook__, an SGML or XML based format for describing -documentation. - -QuickBook is a WikiWiki style documentation tool geared towards C++ -documentation using simple rules and markup for simple formatting tasks. -QuickBook extends the WikiWiki concept. Like the WikiWiki, QuickBook documents are -simple text files. A single QuickBook document can generate a fully linked set -of nice HTML and PostScript/PDF documents complete with images and syntax- -colorized source code. - -Features include: - -* generate __boostbook__ xml, to generate HTML, PostScript and PDF -* simple markup to link to Doxygen-generated entities -* macro system for simple text substitution -* simple markup for italics, bold, preformatted, blurbs, code samples, - tables, URLs, anchors, images, etc. -* automatic syntax coloring of code samples -* CSS support - -[endsect] - -[section:change_log Change Log] - -[h3 Version 1.3] - -* Quickbook file inclusion \[include\]. -* Better xml output (pretty layout). Check out the generated XML. -* Regression testing facility: to make sure your document will always be - compatible (full backward compatibility) regardless of changes to - QuickBook. -* Code cleanup and refactoring. -* Allow phrase markup in the doc-info. -* Preformatted code blocks via \`\`code\`\` (double ticks) allows code in tables - and lists, for example. -* Quickbook versioning; allows full backward compatibility. You have to add - \[quickbook 1.3\] to the doc-info header to enable the new features. Without - this, QuickBook will assume that the document is a pre-1.3 document. -* Better (intuitive) paragraph termination. Some markups may terminate a paragraph. - Example:`` - [section x] - blah... - [endsect]`` -* Fully qualified section and headers. Subsection names are concatenated to the - ID to avoid clashing. Example: `doc_name.sect_name.sub_sect_name.sub_sub_sect_name` -* Better   and whitespace handling in code snippets. -* \[xinclude\] fixes up the relative path to the target XML file when - input_directory is not the same as the output_directory. -* Allow untitled tables. -* Allow phrase markups in section titles. -* Allow escaping back to QuickBook from code, code blocks and inline code. -* Footnotes, with the \[footnote This is the footnote\] syntax. -* Post-processor bug fix for escaped XML code that it does not recognize. -* Replaceable, with the \[~replacement\] syntax. -* Generic Headers -* Code changes to allow full recursion (i.e. Collectors and push/pop functions) -* Various code cleanup/maintenance -* Templates! -* \[conceptref\] for referencing BoostBook entities. -* Allow escape of spaces. The escaped space is removed from the output. Syntax: - `\ `. -* Nested comments are now allowed. -* Quickbook blocks can nest inside comments. -* __import__ facility. -* Callouts on imported code -* Simple markups can now span a whole block. -* __blurbs__, __admonitions__ and table cells (see __tables__) may now - contain paragraphs. -* `\n` and `[br]` are now deprecated. - -[endsect] - -[section:syntax Syntax Summary] - -A QuickBook document is composed of one or more blocks. An example of -a block is the paragraph or a C++ code snippet. Some blocks have -special mark-ups. Blocks, except code snippets which have their own -grammar (C++ or Python), are composed of one or more phrases. A phrase -can be a simple contiguous run of characters. Phrases can have special -mark-ups. Marked up phrases can recursively contain other phrases, but -cannot contain blocks. A terminal is a self contained block-level or -phrase-level element that does not nest anything. - -Blocks, in general, are delimited by two end-of-lines (the block terminator). -Phrases in each block cannot contain a block terminator. This way, syntax errors -such as un-matched closing brackets do not go haywire and corrupt anything past -a single block. - -[section Comments] - -Can be placed anywhere. - -[pre -'''[/ comment (no output generated) ]''' -] - -[/ for testing only... ] - -[pre -'''[/ comments can be nested [/ some more here] ]''' -] - -[/ for testing [/ only ] ] - -[pre -'''[/ Quickbook blocks can nest inside comments. [*Comment this out too!] ]''' -] - -[/ for testing [*only ] ] - -[endsect] - -[section:phrase Phrase Level Elements] - -[section Font Styles] - -[pre''' -['italic], [*bold], [_underline], [^teletype], [-strikethrough] -'''] - -will generate: - -['italic], [*bold], [_underline], [^teletype], [-strikethrough] - -Like all non-terminal phrase level elements, this can of course be nested: - -[pre''' -[*['bold-italic]] -'''] - -will generate: - -[*['bold-italic]] - -[endsect] - -[section Replaceable] - -When you want content that may or must be replaced by the user, use the syntax: - -[pre''' -[~replacement] -'''] - -This will generate: - -[~replacement] - -[endsect] - -[section Quotations] - -[pre''' -["A question that sometimes drives me hazy: am I or are the others crazy?]--Einstein -'''] - -will generate: - -["A question that sometimes drives me hazy: am I or are the others crazy?]--Einstein - -Note the proper left and right quote marks. Also, while you can simply use -ordinary quote marks like "quoted", our quotation, above, will generate correct -DocBook quotations (e.g. quoted). - -Like all phrase elements, quotations may be nested. Example: - -[pre''' -["Here's the rule for bargains: ["Do other men, for they would do you.] That's -the true business precept.] -'''] - -will generate: - -["Here's the rule for bargains: ["Do other men, for they would do you.] -That's the true business precept.] - -[endsect] -[section Simple formatting] - -Simple markup for formatting text, common in many applications, is now supported: - -[pre''' -/italic/, *bold*, _underline_, =teletype= -'''] - -will generate: - -/italic/, *bold*, _underline_, =teletype= - -Unlike QuickBook's standard formatting scheme, the rules for simpler -alternatives are much stricter[footnote Thanks to David Barrett, author of -[@http://quinthar.com/qwikiwiki/index.php?page=Home Qwiki], for sharing -these samples and teaching me these obscure formatting rules. I wasn't sure -at all if __spirit__, being more or less a formal EBNF parser, can handle -the context sensitivity and ambiguity.]. - -* Simple markups cannot nest. You can combine a simple markup with a nestable markup. -* Simple markups cannot contain any other form of quickbook markup. -* A non-space character must follow the leading markup -* A non-space character must precede the trailing markup -* A space or a punctuation must follow the trailing markup -* If the matching markup cannot be found within a block, the formatting - will not be applied. This is to ensure that un-matched formatting markups, - which can be a common mistake, does not corrupt anything past a single block. - We do not want the rest of the document to be rendered bold just because we - forgot a trailing '*'. A single block is terminated by two end of lines or - the close bracket: ']'. -* A line starting with the star will be interpreted as an unordered list. - See __unordered_lists__. - -[table More Formatting Samples - [[Markup] [Result]] - [[[^'''*Bold*''']] [*Bold*]] - [[[^'''*Is bold*''']] [*Is bold*]] - [[[^'''* Not bold* *Not bold * * Not bold *''']] [* Not bold* *Not bold * * Not bold *]] - [[[^'''This*Isn't*Bold (no bold)''']] [This*Isn't*Bold (no bold)]] - [[[^'''(*Bold Inside*) (parenthesis not bold)''']] [(*Bold Inside*) (parenthesis not bold)]] - [[[^'''*(Bold Outside)* (parenthesis bold)''']] [*(Bold Outside)* (parenthesis bold)]] - [[[^'''3*4*5 = 60 (no bold)''']] [3*4*5 = 60 (no bold)]] - [[[^'''3 * 4 * 5 = 60 (no bold)''']] [3 * 4 * 5 = 60 (no bold)]] - [[[^'''3 *4* 5 = 60 (4 is bold)''']] [3 *4* 5 = 60 (4 is bold)]] - [[[^'''*This is bold* this is not *but this is*''']][*This is bold* this is not *but this is*]] - [[[^'''*This is bold*.''']] [*This is bold*.]] - [[[^'''*B*. (bold B)''']] [*B*. (bold B)]] - [[[^'''['*Bold-Italic*]''']] [['*Bold-Italic*]]] - [[[^'''*side-by*/-side/''']] [*side-by*/-side/]] -] - -As mentioned, simple markups cannot go past a single block. The text -from "have" to "full" in the following paragraph will be rendered as -bold: - -[pre''' -Baa baa black sheep, *have you any wool? -Yes sir, yes sir, three bags full!* -One for the master, one for the dame, -And one for the little boy who lives down the lane. -'''] - -Baa baa black sheep, *have you any wool? -Yes sir, yes sir, three bags full!* -One for the master, one for the dame, -And one for the little boy who lives down the lane. - -But in the following paragraph, bold is not applied: - -[pre''' -Baa baa black sheep, *have you any wool? -Yes sir, yes sir, three bags full! -One for the master, one for the dame, -And one for the little boy who lives down the lane. -'''] - -Baa baa black sheep, *have you any wool? -Yes sir, yes sir, three bags full! -One for the master, one for the dame, -And one for the little boy who lives down the lane. - -[endsect] -[section Inline code] - -Inlining code in paragraphs is quite common when writing C++ documentation. We -provide a very simple markup for this. For example, this: - -[pre''' -This text has inlined code `int main() { return 0; }` in it. -'''] - -will generate: - -This text has inlined code `int main() { return 0; }` in it. The code will be -syntax highlighted. - -[note We simply enclose the code with the tick: [^'''"`"'''], not the -single quote: `"'"`. Note too that [^'''`some code`'''] is preferred over -[^'''[^some code]''']. ] - -[endsect] -[section Code blocks] - -Preformatted code simply starts with a space or a tab (See __code__). -However, such a simple syntax cannot be used as phrase elements in lists -(See __ordered_lists__ and __unordered_lists__), tables (See __tables__), -etc. Inline code (see above) can. The problem is, inline code does not -allow formatting with newlines, spaces, and tabs. These are lost. - -We provide a phrase level markup that is a mix between the two. By using the -double-tick, instead of the single-tick, we are telling QuickBook to use -preformatted blocks of code. Example: - -[pre -\`\` - #include - - int main() - { - std::cout << "Hello, World!" << std::endl; - return 0; - } -\`\` -] - -will generate: - -`` - #include - - int main() - { - std::cout << "Hello, World!" << std::endl; - return 0; - } -`` - -[endsect] -[section Source Mode] - -If a document contains more than one type of source code then the source -mode may be changed dynamically as the document is processed. All QuickBook -documents are initially in C++ mode by default, though an alternative -initial value may be set in the __document__ section. - -To change the source mode, use the [^\[source-mode\]] markup, where -=source-mode= is one of the supported modes. For example, this: - -[pre''' -Python's [python] `import` is rather like C++'s [c++] `#include`. A -C++ comment `// looks like this` whereas a Python comment [python] -`# looks like this`. -'''] - -will generate: - -Python's [python] `import` is rather like C++'s [c++] `#include`. A -C++ comment `// looks like this` whereas a Python comment [python] -`#looks like this`. - -[table Supported Source Modes - [[Mode] [Source Mode Markup]] - [[C++] [[^\[c++\]]]] - [[Python] [[^\[python\]]]] -] - -[note The source mode strings are lowercase.] - -[endsect] -[section line-break] - -[pre''' -[br] -'''] - -[warning `[br]` is now deprecated. __blurbs__, __admonitions__ and -table cells (see __tables__) may now contain paragraphs.] - -[endsect] -[section Anchors] - -[pre''' -[#named_anchor] -'''] - -A named anchor is a hook that can be referenced by a link elsewhere in the -document. You can then reference an anchor with [^'''[link named_anchor -Some link text]''']. See __anchor_links__, __section__ and __heading__. - -[endsect] -[section Links] - -[pre''' -[@http://www.boost.org this is [*boost's] website....] -'''] - -will generate: - -[@http://www.boost.org this is [*boost's] website....] - -URL links where the link text is the link itself is common. Example: - -[pre''' -see http://spirit.sourceforge.net/ -'''] - -so, when the text is absent in a link markup, the URL is assumed. Example: - -[pre -see '''[@http://spirit.sourceforge.net/]''' -] - -will generate: - -see [@http://spirit.sourceforge.net/] - -[endsect] -[section Anchor links] - -You can link within a document using: - -[pre''' -[link section_id.normalized_header_text The link text] -'''] - -See sections __section__ and __heading__ for more info. - -[endsect] -[section refentry links] - -In addition, you can link internally to an XML refentry like: - -[pre''' -[link xml.refentry The link text] -'''] - -This gets converted into [^The link text]. - -Like URLs, the link text is optional. If this is not present, the link text will -automatically be the refentry. Example: - -[pre''' -[link xml.refentry] -'''] - -This gets converted into [^xml.refentry]. - -[endsect] -[section:code_links Code Links] - -If you want to link to a function, class, member, enum, concept or header in the reference -section, you can use: - -[pre''' -[funcref fully::qualified::function_name The link text] -[classref fully::qualified::class_name The link text] -[memberref fully::qualified::member_name The link text] -[enumref fully::qualified::enum_name The link text] -[macroref MACRO_NAME The link text] -[conceptref ConceptName The link text] -[headerref path/to/header.hpp The link text] -'''] - -Again, the link text is optional. If this is not present, the link text will -automatically be the function, class, member, enum, macro, concept or header. Example: - -[pre''' -[classref boost::bar::baz] -'''] - -would have "boost::bar::baz" as the link text. - -[endsect] -[section Escape] - -The escape mark-up is used when we don't want to do any processing. - -[pre -\'\'\' -escape (no processing/formatting) -\'\'\' -] - -Escaping allows us to pass XML markup to __boostbook__ or __docbook__. For example: - -[pre -\'\'\' -This is direct XML markup -\'\'\' -] - -''' -This is direct XML markup -''' - -[important Be careful when using the escape. The text must conform to -__boostbook__/__docbook__ syntax.] - -[endsect] -[section Single char escape] - -The backslash may be used to escape a single punctuation character. The -punctuation immediately after the backslash is passed without any processing. -This is useful when we need to escape QuickBook punctuations such as `[` and `]`. -For example, how do you escape the triple quote? Simple: [^\\'\\'\\'] - - -`\n` has a special meaning. It is used to generate line breaks. - -[warning `\n` and `[br]` are now deprecated. __blurbs__, __admonitions__ -and table cells (see __tables__) may now contain paragraphs.] - -The escaped space: `\ ` also has a special meaning. The escaped space is removed -from the output. - -[endsect] -[section Images] - -[pre''' -[$image.jpg] -'''] - -[endsect] -[section Footnotes] - -As of version 1.3, QuickBook supports footnotes. Just put the text of the -footnote in a `[footnote]` block, and the text will be put at the bottom -of the current page. For example, this: - -[pre''' -[footnote A sample footnote] -'''] - -will generate this[footnote A sample footnote]. - -[section Macro Expansion] - -[pre''' -__a_macro_identifier__ -'''] - -See __macros__ for details. - -[endsect] - -[section Template Expansion] - -[pre''' -[a_template_identifier] -'''] - -See __templates__ for details. - -[endsect] - -[endsect] -[endsect] -[section:block Block Level Elements] - -[section Document] - -Every document must begin with a Document Info section, which should look -like this: - -[pre''' -[document-type The Document Title - [quickbook 1.3] - [version 1.0] - [id the_document_name] - [dirname the_document_dir] - [copyright 2000 2002 2003 Joe Blow, Jane Doe] - [purpose The document's reason for being] - [category The document's category] - [authors [Blow, Joe], [Doe, Jane]] - [license The document's license] - [source-mode source-type] -] -'''] - -Where document-type is one of: - -* book -* article -* library -* chapter -* part -* appendix -* preface -* qandadiv -* qandaset -* reference -* set - -quickbook 1.3 declares the version of quickbook the document is written for. -In its absence, version 1.1 is assumed. - -=version=, =id=, =dirname=, =copyright=, =purpose=, =category=, =authors=, -=license=, =last-revision= and =source-mode= are optional information. - -=source-type= is a lowercase string setting the initial __source_mode__. If -the =source-mode= field is omitted, a default value of =c++= will be used. - -[endsect] -[section Section] - -Starting a new section is accomplished with: - -[pre''' -[section:id The Section Title] -'''] - -where /id/ is optional. id will be the filename of the generated section. -If it is not present, "The Section Title" will be normalized and become the id. -Valid characters are =a-Z=, =A-Z=, =0-9= and =_=. All non-valid characters are -converted to underscore and all upper-case are converted to lower case. -Thus: "The Section Title" will be normalized to "the_section_title". - -End a section with: - -[pre''' -[endsect] -'''] - -Sections can nest, and that results in a hierarchy in the table of contents. - -[endsect] -[section xinclude] - -You can include another XML file with: - -[pre''' -[xinclude file.xml] -'''] - -This is useful when file.xml has been generated by Doxygen and contains your -reference section. - -[endsect] -[section Paragraphs] - -Paragraphs start left-flushed and are terminated by two or more newlines. No -markup is needed for paragraphs. QuickBook automatically detects paragraphs from -the context. Block markups \[section, endsect, h1, h2, h3, h4, h5, h6, blurb, -(block-quote) ':', pre, def, table and include \] may also terminate a paragraph. - -[endsect] - -[section Lists] -[section Ordered lists] - -[pre -# One -# Two -# Three -] - -will generate: - -# One -# Two -# Three - -[endsect] -[section List Hierarchies] - -List hierarchies are supported. Example: - -[pre -# One -# Two -# Three - # Three.a - # Three.b - # Three.c -# Four - # Four.a - # Four.a.i - # Four.a.ii -# Five -] - -will generate: - -# One -# Two -# Three - # Three.a - # Three.b - # Three.c -# Fourth - # Four.a - # Four.a.i - # Four.a.ii -# Five - -[endsect] -[section Long List Lines] - -Long lines will be wrapped appropriately. Example: - -[pre -# A short item. -# A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. -# A short item. -] - -# A short item. -# A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. - A very long item. A very long item. A very long item. -# A short item. - -[endsect] -[section Unordered lists] - -[pre''' -* First -* Second -* Third -'''] - -will generate: - -* First -* Second -* Third - -[endsect] -[section Mixed lists] - -Mixed lists (ordered and unordered) are supported. Example: - -[pre''' -# One -# Two -# Three - * Three.a - * Three.b - * Three.c -# Four -'''] - -will generate: - -# One -# Two -# Three - * Three.a - * Three.b - * Three.c -# Four - -And... - -[pre''' -# 1 - * 1.a - # 1.a.1 - # 1.a.2 - * 1.b -# 2 - * 2.a - * 2.b - # 2.b.1 - # 2.b.2 - * 2.b.2.a - * 2.b.2.b -'''] - -will generate: - -# 1 - * 1.a - # 1.a.1 - # 1.a.2 - * 1.b -# 2 - * 2.a - * 2.b - # 2.b.1 - # 2.b.2 - * 2.b.2.a - * 2.b.2.b - -[endsect] -[endsect] - -[section Code] - -Preformatted code starts with a space or a tab. The code will be -syntax highlighted according to the current __source_mode__: - -[c++] - - #include - - int main() - { - // Sample code - std::cout << "Hello, World\n"; - return 0; - } - -[python] - - import cgi - - def cookForHtml(text): - '''"Cooks" the input text for HTML.''' - - return cgi.escape(text) - -[c++] - -Macros that are already defined are expanded in source code. Example: - -[pre''' -[def __array__ [@http://www.boost.org/doc/html/array/reference.html array]] -[def __boost__ [@http://www.boost.org/libs/libraries.htm boost]] - - using __boost__::__array__; -'''] - -Generates: - -[def __array__ [@http://www.boost.org/doc/html/array/reference.html array]] -[def __boost__ [@http://www.boost.org/libs/libraries.htm boost]] - - using __boost__::__array__; - -[endsect] -[section:escape_back Escaping Back To QuickBook] - -Inside code, code blocks and inline code, QuickBook does not allow any -markup to avoid conflicts with the target syntax (e.g. c++). In case you -need to switch back to QuickBook markup inside code, you can do so using a -language specific /escape-back/ delimiter. In C++ and Python, the delimiter -is the double tick (back-quote): "\`\`" and "\`\`". Example: - -[pre''' -void ``[@http://en.wikipedia.org/wiki/Foo#Foo.2C_Bar_and_Baz foo]``() -{ -} -'''] - -Will generate: - - void ``[@http://en.wikipedia.org/wiki/Foo#Foo.2C_Bar_and_Baz foo]``() - { - } - -When escaping from code to QuickBook, only phrase level markups are -allowed. Block level markups like lists, tables etc. are not allowed. - -[endsect] -[section Preformatted] - -Sometimes, you don't want some preformatted text to be parsed as C++. In such -cases, use the [^[pre ... \]] markup block. - -[pre''' -[pre - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - -] -'''] - -Spaces, tabs and newlines are rendered as-is. Unlike all quickbook block level -markup, pre (and Code) are the only ones that allow multiple newlines. The -markup above will generate: - -[pre - -Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - - Some *preformatted* text Some *preformatted* text - -] - -Notice that unlike Code, phrase markup such as font style is still permitted -inside =pre= blocks. - -[endsect] -[section Blockquote] - -[pre -'''[:sometext...]''' -] - -[:Indents the paragraph. This applies to one paragraph only.] - -[endsect] -[section Admonitions] - -[pre''' -[note This is a note] -[tip This is a tip] -[important This is important] -[caution This is a caution] -[warning This is a warning] -'''] - -generates __docbook__ admonitions: - -[note This is a note] -[tip This is a tip] -[important This is important] -[caution This is a caution] -[warning This is a warning] - -These are the only admonitions supported by __docbook__. So, -for example [^\[information This is some information\]] is unlikely -to produce the desired effect. - -[endsect] -[section Headings] - -[pre''' -[h1 Heading 1] -[h2 Heading 2] -[h3 Heading 3] -[h4 Heading 4] -[h5 Heading 5] -[h6 Heading 6] -'''] - -[h1 Heading 1] -[h2 Heading 2] -[h3 Heading 3] -[h4 Heading 4] -[h5 Heading 5] -[h6 Heading 6] - -Headings 1-3 \[h1 h2 and h3\] will automatically have anchors with normalized -names with [^name="section_id.normalized_header_text"] (i.e. valid characters are -=a-z=, =A-Z=, =0-9= and =_=. All non-valid characters are converted to underscore -and all upper-case are converted to lower-case. For example: Heading -1 in section Section 2 will be normalized to [^section_2.heading_1]). You can use: - -[pre''' -[link section_id.normalized_header_text The link text] -'''] - -to link to them. See __anchor_links__ and __section__ for more info. - -[endsect] -[section Generic Heading] - -In cases when you don't want to care about the heading level (1 to 6), you -can use the /Generic Heading/: - -[pre''' -[heading Heading] -'''] - -The /Generic Heading/ assumes the level, plus one, of the innermost section -where it is placed. For example, if it is placed in the outermost section, -then, it assumes /h2/. - -Headings are often used as an alternative to sections. It is used -particularly if you do not want to start a new section. In many cases, -however, headings in a particular section is just flat. Example: - -[pre''' -[section A] -[h2 X] -[h2 Y] -[h2 Z] -[endsect] -'''] - -Here we use h2 assuming that section A is the outermost level. If it is -placed in an inner level, you'll have to use h3, h4, etc. depending on -where the section is. In general, it is the section level plus one. It is -rather tedious, however, to scan the section level everytime. If you -rewrite the example above as shown below, this will be automatic: - -[pre''' -[section A] -[heading X] -[heading Y] -[heading Z] -[endsect] -'''] - -They work well regardless where you place them. You can rearrange sections -at will without any extra work to ensure correct heading levels. In fact, -with /section/ and /heading/, you have all you need. /h1/../h6/ becomes -redundant. /h1/../h6/ might be deprecated in the future. - -[endsect] -[section Macros] - -[pre''' -[def macro_identifier some text] -'''] - -When a macro is defined, the identifier replaces the text anywhere in the -file, in paragraphs, in markups, etc. macro_identifier is a string of non- -white space characters except '\]'. A macro may not follow an alphabetic -character or the underscore. The replacement text can be any phrase (even -marked up). Example: - -[pre''' -[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] -sf_logo -'''] - -Now everywhere the sf_logo is placed, the picture will be inlined. - -[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] -sf_logo - -[tip It's a good idea to use macro identifiers that are distinguishable. -For instance, in this document, macro identifiers have two leading and -trailing underscores (e.g. [^'''__spirit__''']). The reason is to avoid -unwanted macro replacement.] - -Links (URLS) and images are good candidates for macros. *1*) They tend to -change a lot. It is a good idea to place all links and images in one place near the top -to make it easy to make changes. *2*) The syntax is not pretty. It's easier to read and -write, e.g. [^'''__spirit__'''] than [^'''[@http://spirit.sourceforge.net Spirit]''']. - -Some more examples: - -[pre''' -[def :-) [$theme/smiley.png]] -[def __spirit__ [@http://spirit.sourceforge.net Spirit]] -'''] - -(See __images__ and __links__) - -Invoking these macros: - -[pre''' -Hi __spirit__ :-) -'''] - -will generate this: - -Hi __spirit__ :-) - -[endsect] -[section Predefined Macros] - -Quickbook has some predefined macros that you can already use. - -[table Predefined Macros - [[Macro] [Meaning] [Example]] - [['''__DATE__'''] [Today's date] [__DATE__]] - [['''__TIME__'''] [The current time] [__TIME__]] - [['''__FILENAME__'''] [Quickbook source filename] [__FILENAME__]] -] - -[endsect] -[section Templates] - -Templates provide a more versatile text substitution mechanism. Templates -come in handy when you need to create parameterizable, multi-line, -boilerplate text that you specify once and expand many times. Templates -accept one or more arguments. These arguments act like place-holders for -text replacement. Unlike simple macros, which are limited to phrase level -markup, templates can contain block level markup (e.g. paragraphs, code -blocks and tables). - -Example template: - -[pre''' -[template person[name age what] - -Hi, my name is [name]. I am [age] years old. I am a [what]. - -] -'''] - -[template person[name age what] - -Hi, my name is [name]. I am [age] years old. I am a [what]. - -] - -[heading Template Identifier] - -Template identifiers can either consist of: - -* An initial alphabetic character or the underscore, followed by - zero or more alphanumeric characters or the underscore. This is - similar to your typical C/C++ identifier. -* A single character punctuation (a non-alphanumeric printable character) - -[heading Formal Template Arguments] - -Template formal arguments are identifiers consisting of an initial -alphabetic character or the underscore, followed by zero or more -alphanumeric characters or the underscore. This is similar to your typical -C/C++ identifier. - -A template formal argument temporarily hides a template of the same name at -the point where the [link quickbook.syntax.block.templates.template_expansion -template is expanded]. Note that the body of the [^person] template above -refers to [^name] [^age] and [^what] as [^\[name\]] [^\[age\]] and -[^\[what\]]. [^name] [^age] and [^what] are actually templates that exist -in the duration of the template call. - -[heading Template Body] - -The template body can be just about any QuickBook block or phrase. There -are actually two forms. Templates may be phrase or block level. Phrase -templates are of the form: - -[pre''' -[template sample[arg1 arg2...argN] replacement text... ] -'''] - -Block templates are of the form: - -[pre''' -[template sample[arg1 arg2...argN] -replacement text... -] -'''] - -The basic rule is as follows: if a newline immediately follows the argument -list, then it is a block template, otherwise, it is a phrase template. -Phrase templates are typically expanded as part of phrases. Like macros, -block level elements are not allowed in phrase templates. - -[heading Template Expansion] - -You expand a template this way: - -[pre''' -[template_identifier arg1..arg2..arg3] -'''] - -At template expansion, you supply the actual arguments. The template will -be expanded with your supplied arguments. Example: - -[pre''' -[person James Bond..39..Spy] -[person Santa Clause..87..Big Red Fatso] -'''] - -Which will expand to: - -[person James Bond..39..Spy] -[person Santa Clause..87..Big Red Fatso] - -[caution A word of caution: Templates are recursive. A template can call -another template or even itself, directly or indirectly. There are no -control structures in QuickBook (yet) so this will always mean infinite -recursion. QuickBook can detect this situation and report an error if -recursion exceeds a certain limit.] - -Each actual argument can be a word, a text fragment or just about any [link -quickbook.syntax.phrase QuickBook phrase]. Arguments are separated by the -double dot [^".."] and terminated by the close parenthesis. - -[heading Nullary Templates] - -Nullary templates look and act like simple macros. Example: - -[pre''' -[template alpha[]'''&#945;'''] -[template beta[]'''&#946;'''] -'''] - -[template alpha[]'''α'''] -[template beta[]'''β'''] - -Expanding: - -[pre'''Some squigles...[*[alpha][beta]]'''] - -We have: - -Some squiggles...[*[alpha][beta]] - -The difference with macros are - -* The explicit [link quickbook.syntax.block.templates.template_expansion - template expansion syntax]. This is an advantage because, now, we don't - have to use obscure naming conventions like double underscores (e.g. - \_\_alpha\_\_) to avoid unwanted - macro replacement. -* The template is expanded at the point where it is invoked. A macro is - expanded immediately at its point of declaration. This is subtle and - can cause a slight difference in behavior especially if you refer to - other macros and templates in the body. - -The empty brackets after the template identifier ([^alpha\[\]]) indicates no -arguments. If the template body does not look like a template argument list, we -can elide the empty brackets. Example: - -[pre''' -[template aristotle_quote Aristotle: [*['Education is the best provision -for the journey to old age.]]] -'''] - -[template aristotle_quote\ Aristotle: [*['Education is the best provision -for the journey to old age.]]] - -Expanding: - -[pre''' -Here's a quote from [aristotle_quote]. -'''] - -We have: - -Here's a quote from [aristotle_quote]. - -The disadvantage is that you can't avoid the space between the template -identifier, `aristotle_quote`, and the template body "Aristotle...". This space -will be part of the template body. If that space is unwanted, use empty -brackets or use the space escape: "`\ `". Example: - -[pre''' -[template tag\ _tag] -'''] - -[template tag\ _tag] - -Then expanding: - -[pre''' -`struct` x[tag]; -'''] - -We have: - -`struct` x[tag]; - -You have a couple of ways to do it. I personally prefer the explicit empty -brackets, though. - -[heading Simple Arguments] - -As mentioned, arguments are separated by the double dot [^".."]. If there -are less arguments passed than expected, QuickBook attempts to break the -last argument into two or more arguments following this logic: - -* Break the last argument into two, at the first space found ([^'', '\\n', - \\t' or '\\r']). -* Repeat until there are enough arguments or if there are no more spaces - found (in which case, an error is reported). - -For example: - -[pre''' -[template simple[a b c d] [a][b][c][d]] -[simple w x y z] -'''] - -will produce: - -[template simple[a b c d] [a][b][c][d]] -[simple w x y z] - -"w x y z" is initially treated as a single argument because we didn't -supply any [^".."] separators. However, since [^simple] expects 4 -arguments, "w x y z" is broken down iteratively (applying the logic above) -until we have "w", "x", "y" and "z". - -QuickBook only tries to get the arguments it needs. For example: - -[pre''' -[simple w x y z trail] -'''] - -will produce: - -[simple w x y z trail] - -The arguments being: "w", "x", "y" and "z trail". - -It should be obvious now that for simple arguments with no spaces, we can -get by without separating the arguments with [^".."] separators. It is -possible to combine [^".."] separators with the argument passing -simplification presented above. Example: - -[pre''' -[simple what do you think ..m a n?] -'''] - -will produce: - -[simple what do you think ..m a n?] - -[heading Punctuation Templates] - -With templates, one of our objectives is to allow us to rewrite QuickBook -in QuickBook (as a qbk library). For that to happen, we need to accommodate -single character punctuation templates which are fairly common in -QuickBook. You might have noticed that single character punctuations are -allowed as [link quickbook.syntax.block.templates.template_identifier -template identifiers]. Example: - -[pre''' -[template ![bar] ''''''[bar]''''''] -'''] - -Now, expanding this: - -[pre''' -[!baz] -'''] - -We will have: - -[pre -baz -] - -[endsect] -[section Blurbs] - -[pre''' -[blurb :-) [*An eye catching advertisement or note...] - - __spirit__ is an object-oriented recursive-descent parser generator framework - implemented using template meta-programming techniques. Expression templates - allow us to approximate the syntax of Extended Backus-Normal Form (EBNF) - completely in C++. -] -'''] - -will generate this: - -[blurb :-) [*An eye catching advertisement or note...] - - __spirit__ is an object-oriented recursive-descent parser generator - framework implemented using template meta-programming techniques. Expression - templates allow us to approximate the syntax of Extended Backus-Normal Form - (EBNF) completely in C++. -] - -[note Prefer [link quickbook.syntax.block.admonitions admonitions] wherever -appropriate.] - -[endsect] -[section Tables] - -[pre''' -[table A Simple Table - [[Heading 1] [Heading 2] [Heading 3]] - [[R0-C0] [R0-C1] [R0-C2]] - [[R1-C0] [R1-C1] [R1-C2]] - [[R2-C0] [R2-C1] [R2-C2]] -] -'''] - -will generate: - -[table A Simple Table - [[Heading 1] [Heading 2] [Heading 3]] - [[R0-C0] [R0-C1] [R0-C2]] - [[R2-C0] [R2-C1] [R2-C2]] - [[R3-C0] [R3-C1] [R3-C2]] -] - -The table title is optional. The first row of the table is automatically -treated as the table header; that is, it is wrapped in -[^...] XML tags. Note that unlike the original QuickDoc, the -columns are nested in [ cells... ]. The syntax is free-format and allows -big cells to be formatted nicely. Example: - -[pre''' -[table Table with fat cells - [[Heading 1] [Heading 2]] - [ - [Row 0, Col 0: a small cell] - [ - Row 0, Col 1: a big fat cell with paragraphs - - Boost provides free peer-reviewed portable C++ source libraries. - - We emphasize libraries that work well with the C++ Standard Library. - Boost libraries are intended to be widely useful, and usable across - a broad spectrum of applications. The Boost license encourages both - commercial and non-commercial use. - ] - ] - [ - [Row 1, Col 0: a small cell] - [Row 1, Col 1: a small cell] - ] -] -'''] - -and thus: - -[table Table with fat cells - [[Heading 1] [Heading 2]] - [ - [Row 0, Col 0: a small cell] - [ - Row 0, Col 1: a big fat cell with paragraphs - - Boost provides free peer-reviewed portable C++ source libraries. - - We emphasize libraries that work well with the C++ Standard Library. - Boost libraries are intended to be widely useful, and usable across - a broad spectrum of applications. The Boost license encourages both - commercial and non-commercial use. - ] - ] - [ - [Row 1, Col 0: a small cell] - [Row 1, Col 1: a small cell] - ] -] - -Here's how to have preformatted blocks of code in a table cell: - -[pre''' -[table Table with code - [[Comment] [Code]] - [ - [My first program] - ['''\`\` - #include - - int main() - { - std::cout << "Hello, World!" << std::endl; - return 0; - } - \`\`'''] - ] -] -'''] - -[table Table with code - [[Comment] [Code]] - [ - [My first program] - [`` - #include - - int main() - { - std::cout << "Hello, World!" << std::endl; - return 0; - } - ``] - ] -] - -[endsect] -[section Variable Lists] - -[pre''' -[variablelist A Variable List - [[term 1] [The definition of term 1]] - [[term 2] [The definition of term 2]] - [[term 3] [The definition of term 3]] -] -'''] - -will generate: - -[variablelist A Variable List - [[term 1] [The definition of term 1]] - [[term 2] [The definition of term 2]] - [[term 3] [The definition of term 3]] -] - -The rules for variable lists are the same as for tables, except that -only 2 "columns" are allowed. The first column contains the terms, and -the second column contains the definitions. Those familiar with HTML -will recognize this as a "definition list". - -[endsect] -[section Include] - -You can include one QuickBook file from another. The syntax is simply: - -[pre''' -[include someother.qbk] -'''] - -The included file will be processed as if it had been cut and pasted -into the current document, with the following exceptions: - -* The '''__FILENAME__''' predefined macro will reflect the name of the - file currently being processed. -* Any macros defined in the included file are scoped to that file. - -The [^\[include\]] directive lets you specify a document id to use for the -included file. When this id is not explicitly specified, the id defaults to -the filename ("someother", in the example above). You can specify the id -like this: - -[pre''' -[include:someid someother.qbk] -'''] - -All auto-generated anchors will use the document id as a unique prefix. So -for instance, if there is a top section in someother.qbk named "Intro", the -named anchor for that section will be "someid.intro", and you can link to -it with [^\[link someid.intro The Intro\]]. - -[endsect] - -[section Import] - -When documenting code, you'd surely need to present code from actual source -files. While it is possible to copy some code and paste them in your QuickBook -file, doing so is error prone and the extracted code in the documentation tends -to get out of sync with the actual code as the code evolves. The problem, as -always, is that once documentation is written, the tendency is for the docs to -languish in the archives without maintenance. - -QuickBook's import facility provides a nice solution. - -[heading Example] - -You can effortlessly import code snippets from source code into your QuickBook. -The following illustrates how this is done: - -[pre''' -[import ../test/stub.cpp] -[foo] -[bar] -'''] - -The first line: - -[pre''' -[import ../test/stub.cpp] -'''] - -collects specially marked-up code snippets from [@../../test/stub.cpp stub.cpp] -and places them in your QuickBook file as virtual templates. Each of the -specially marked-up code snippets has a name (e.g. `foo` and `bar` in the -example above). This shall be the template identifier for that particular code -snippet. The second and third line above does the actual template expansion: - -[pre''' -[foo] -[bar] -'''] - -And the result is: - -[import ../test/stub.cpp] -[foo] -[bar] - -[heading Code Snippet Markup] - -Note how the code snippets in [@../../test/stub.cpp stub.cpp] get marked up. We -use distinguishable comments following the form: - - //[id - some code here - //] - -The first comment line above initiates a named code-snippet. This prefix will -not be visible in quickbook. The entire code-snippet in between `//[id` and -`//]` will be inserted as a template in quickbook with name ['/id/]. The comment -`//]` ends a code-snippet This too will not be visible in quickbook. - -[heading Special Comments] - -Special comments of the form: - - //` some [*quickbook] markup here - -and: - - /*` some [*quickbook] markup here */ - -will be parsed by QuickBook. This can contain quickbook /blocks/ (e.g. sections, -paragraphs, tables, etc). In the first case, the initial slash-slash, tick and -white-space shall be ignored. In the second, the initial slash-star-tick and the -final star-slash shall be ignored. - -[heading Callouts] - -Special comments of the form: - - /*< some [*quickbook] markup here >*/ - -will be regarded as callouts. These will be collected, numbered and -rendered as a "callout bug" (a small icon with a number). After the -whole snippet is parsed, the callout list is generated. See -[@http://www.docbook.org/tdg/en/html/callout.html Callouts] for details. -Example: - -[foo_bar] - -Checkout [@../../test/stub.cpp stub.cpp] to see the actual code. - -[endsect] - -[endsect] -[endsect] - -[section:install Installation and configuration] - -This section provides some guidelines on how to install and configure -BoostBook and Quickbook under several operating systems. - -Before continuing, it is very important that you keep this in mind: if you -try to build some documents and the process breaks due to misconfiguration, -be absolutely sure to delete any `bin` and `bin.v2` directories generated -by the build before trying again. Otherwise your configuration fixes will -not take any effect. - -[section:windows Windows 2000, XP, 2003, Vista] - -[python] - -[:['Section contributed by Julio M. Merino Vidal]] - -The following instructions apply to any Windows system based on Windows -2000, including Windows XP, Windows 2003 Server and Windows Vista. The -paths shown below are taken from a Windows Vista machine; you will need to -adjust them to match your system in case you are running an older version. - -# First of all you need to have a copy of `xsltproc` for Windows. There - are many ways to get this tool, but to keep things simple, use the - [@http://www.zlatkovic.com/pub/libxml/ binary packages] made by Igor - Zlatkovic. At the very least, you need to download the following - packages: `iconv`, `zlib`, `libxml2` and `libxslt`. - -# Unpack all these packages in the same directory so that you get unique - `bin`, `include` and `lib` directories within the hierarchy. These - instructions use `C:\Users\example\Documents\boost\xml` as the root for - all files. - -# From the command line, go to the `bin` directory and launch - `xsltproc.exe` to ensure it works. You should get usage information on - screen. - -# Download [@http://www.docbook.org/xml/4.2/docbook-xml-4.2.zip Docbook XML - 4.2] and unpack it in the same directory used above. That is: - `C:\Users\example\Documents\boost\xml\docbook-xml`. - -# Download the latest - [@http://sourceforge.net/project/showfiles.php?group_id=21935&package_id=16608 - Docbook XSL] version and unpack it, again in the same directory - used before. To make things easier, rename the directory created - during the extraction to `docbook-xsl` (bypassing the version name): - `C:\Users\example\Documents\boost\xml\docbook-xsl`. - -# Add the following to your `user-config.jam` file, which should live in - your home directory (`%HOMEDRIVE%%HOMEPATH%`). You must already have it - somewhere or otherwise you could not be building Boost (i.e. missing - tools configuration). - - using xsltproc - : "C:/Users/example/Documents/boost/xml/bin/xsltproc.exe" - ; - - using boostbook - : "C:/Users/example/Documents/boost/xml/docbook-xsl" - : "C:/Users/example/Documents/boost/xml/docbook-xml" - ; - -The above steps are enough to get a functional BoostBook setup. Quickbook -will be automatically built when needed. If you want to avoid these -rebuilds: - -# Go to Quickbook's source directory (`BOOST_ROOT\tools\quickbook`). - -# Build the utility by issuing `bjam --v2`. - -# Copy the resulting `quickbook.exe` binary (located under the - `BOOST_ROOT\bin.v2` hierarchy) to a safe place. Following our previous - example, you can install it into: - `C:\Users\example\Documents\boost\xml\bin`. - -# Add the following to your `user-config.jam` file: - - using quickbook - : "C:/Users/example/Documents/boost/xml/bin/quickbook.exe" - ; - -[endsect] - -[section:linux Debian, Ubuntu] - -The following instructions apply to Debian and its derivatives. They are based -on a Ubuntu Edgy install but should work on other Debian based systems. - -First install the `bjam`, `xsltproc`, `docbook-xsl` and `docbook-xml` packages. -For example, using `apt-get`: - - sudo apt-get install xsltprc docbook-xsl docbook-xml - -If you're planning on building boost's documentation, you'll also need to -install the `doxygen` package as well. - -Next, we need to configure Boost Build to compile BoostBook files. Add the -following to your `user-config.jam` file, which should be in your home -directory. If you don't have one, create a file containing this text. For more -information on setting up `user-config.jam`, see the -[@http://boost.org/boost-build2/doc/html/bbv2/advanced/configuration.html Boost -Build documentation]. - - using xsltproc ; - - using boostbook - : /usr/share/xml/docbook/stylesheet/nwalsh - : /usr/share/xml/docbook/schema/dtd/4.2 - ; - - # Remove this line if you're not using doxygen - using doxygen ; - -The above steps are enough to get a functional BoostBook setup. Quickbook -will be automatically built when needed. If you want to avoid these -rebuilds: - -# Go to Quickbook's source directory (`BOOST_ROOT/tools/quickbook`). - -# Build the utility by issuing `bjam --v2`. - -# Copy the resulting `quickbook` binary (located under the - `BOOST_ROOT/bin.v2` hierarchy) to a safe place. The traditional location is - `/usr/local/bin`. - -# Add the following to your `user-config.jam` file, using the full path of the - quickbook executable: - - using quickbook - : /usr/local/bin/quickbook - ; - -[endsect] -[endsect] [/Installation and configuration] - -[section:editors Editor Support] - -Editing quickbook files is usually done with text editors both simple and -powerful. The following sections list the settings for some editors which can -help make editing quickbook files a bit easier. - -[blurb __note__ You may submit your settings, tips, and suggestions to the -authors, or through the [@https://lists.sourceforge.net/lists/listinfo/boost- -docs Boost Docs mailing list].] - -[section:scite Scintilla Text Editor] - -[:['Section contributed by Dean Michael Berris]] - -The Scintilla Text Editor (SciTE) is a free source code editor for Win32 and X. -It uses the SCIntilla source code editing component. - -[blurb __tip__ SciTE can be downloaded from [@http://www.scintilla.org/SciTE.html]] - -You can use the following settings to highlight quickbook tags when -editing quickbook files. - -[pre''' -qbk=*.qbk -lexer.*.qbk=props -use.tabs.$(qbk)=0 -tab.size.$(qbk)=4 -indent.size.$(qbk)=4 -style.props.32=$(font.base) -comment.stream.start.props=[/ -comment.stream.end.props=] -comment.box.start.props=[/ -comment.box.middle.props= -comment.box.end.props=] -'''] - -[blurb __note__ Thanks to Rene Rivera for the above SciTE settings.] - -[endsect] [/scite] -[endsect] [/editors] - -[section:faq Frequently Asked Questions] - -[heading Can I use QuickBook for non-Boost documentation?] - -QuickBook can be used for non-Boost documentation with a little extra work. - -[:['Faq contributed by Michael Marcin]] - -When building HTML documentation with BoostBook a Boost C++ Libraries header -is added to the files. When using QuickBook to document projects outside of -Boost this is not desirable. This behavior can be overridden at the BoostBook -level by specifying some XSLT options. When using Boost Build version 2 (BBv2) -this can be achieved by adding parameters to the BoostBook target declaration. - -For example: -[pre -using quickbook ; - -xml my_doc : my_doc.qbk ; - -boostbook standalone - : - my_doc - : - boost.image.src=images/my_project_logo.png - boost.image.alt="\\"My Project\\"" - boost.image.w=100 - boost.image.h=50 - nav.layout=none - ; -] - -[endsect] [/faq] - -[section:ref Quick Reference] - -[cpp] - -[template ordered_list_sample[] -[pre''' -# one -# two -# three -'''] -] - -[template unordered_list_sample[] -[pre''' -* one -* two -* three -'''] -] - -[template table_sample[] -[pre''' -[table Title -[[a][b][c]] -[[a][b][c]] -] -'''] -] - -[template var_list_sample[] -[pre''' -[variablelist Title -[[a][b]] -[[a][b]] -] -'''] -] - - -[table Syntax Compendium - [[To do this...] [Use this...] [See this...]] - [[comment] [[^'''[/ some comment]''']] [__comments__]] - [[['italics]] [[^'''['italics] or /italics/''']] [__font_styles__ and __simple_formatting__]] - [[[*bold]] [[^'''[*bold] or *bold*''']] [__font_styles__ and __simple_formatting__]] - [[[_underline]] [[^'''[_underline] or _underline_''']] [__font_styles__ and __simple_formatting__]] - [[[^teletype]] [[^'''[^teletype] or =teletype=''']] [__font_styles__ and __simple_formatting__]] - [[[-strikethrough]] [[^'''[-strikethrough]''']] [__font_styles__ and __simple_formatting__]] - [[[~replaceable]] [[^'''[~replaceable]''']] [__replaceable__]] - [[source mode] [[^\[c++\]] or [^\[python\]]] [__source_mode__]] - [[inline code] [[^'''`int main();`''']] [__inline_code__]] - [[code block] [[^'''``int main();``''']] [__code__]] - [[code escape] [[^'''``from c++ to QuickBook``''']] [__escape_back__]] - [[line break] [[^'''[br] or \n''']] [__line_break__ *DEPRECATED*]] - [[anchor] [[^'''[#anchor]''']] [__anchors__]] - [[link] [[^'''[@http://www.boost.org Boost]''']] [__links__]] - [[anchor link] [[^'''[link section.anchor Link text]''']] [__anchor_links__]] - [[refentry link] [[^'''[link xml.refentry Link text]''']] [__refentry_links__]] - [[function link] [[^'''[funcref fully::qualified::function_name Link text]''']] [__code_links__]] - [[class link] [[^'''[classref fully::qualified::class_name Link text]''']] [__code_links__]] - [[member link] [[^'''[memberref fully::qualified::member_name Link text]''']] [__code_links__]] - [[enum link] [[^'''[enumref fully::qualified::enum_name Link text]''']] [__code_links__]] - [[macro link] [[^'''[macroref MACRO_NAME Link text]''']] [__code_links__]] - [[concept link] [[^'''[conceptref ConceptName Link text]''']] [__code_links__]] - [[header link] [[^'''[headerref path/to/header.hpp Link text]''']] [__code_links__]] - [[escape] [[^\'\'\'escaped text (no processing/formatting)\'\'\']] [__escape__]] - [[single char escape] [[^\\c]] [__single_char_escape__]] - [[images] [[^'''[$image.jpg]''']] [__images__]] - [[begin section] [[^'''[section The Section Title]''']] [__section__]] - [[end section] [[^'''[endsect]''']] [__section__]] - [[paragraph] [No markup. Paragraphs start left-flushed and are terminated by two or more newlines.] [__paragraphs__]] - [[ordered list] [[ordered_list_sample]] [__ordered_lists__]] - [[unordered list] [[unordered_list_sample]] [__unordered_lists__]] - [[code] [No markup. Preformatted code starts with a space or a tab.] [__code__]] - [[preformatted] [[^'''[pre preformatted]''']] [__preformatted__]] - [[block quote] [[^'''[:sometext...]''']] [__blockquote__]] - [[heading 1] [[^'''[h1 Heading 1]''']] [__heading__]] - [[heading 2] [[^'''[h2 Heading 2]''']] [__heading__]] - [[heading 3] [[^'''[h3 Heading 3]''']] [__heading__]] - [[heading 4] [[^'''[h4 Heading 4]''']] [__heading__]] - [[heading 5] [[^'''[h5 Heading 5]''']] [__heading__]] - [[heading 6] [[^'''[h6 Heading 6]''']] [__heading__]] - [[macro] [[^'''[def macro_identifier some text]''']] [__macros__]] - [[template] [[^'''[template[a b] [a] body [b]]''']] [__templates__]] - [[blurb] [[^'''[blurb advertisement or note...]''']] [__blurbs__]] - [[admonition] [[^'''[warning Warning text...]''']] [__admonitions__]] - [[table] [[table_sample]] [__tables__]] - [[variablelist] [[var_list_sample]] [__variable_lists__]] - [[include] [[^'''[include someother.qbk]''']] [__include__]] -] - -[endsect] diff -Nru boost1.81-1.81.0/.pc/30.patch/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp boost1.81-1.81.0/.pc/30.patch/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp --- boost1.81-1.81.0/.pc/30.patch/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/30.patch/libs/numeric/interval/include/boost/numeric/interval/detail/ppc_rounding_control.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -/* Boost interval/detail/ppc_rounding_control.hpp file - * - * Copyright 2000 Jens Maurer - * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion - * Copyright 2005 Guillaume Melquiond - * - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or - * copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#ifndef BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP -#define BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP - -#if !defined(powerpc) && !defined(__powerpc__) && !defined(__ppc__) -#error This header only works on PPC CPUs. -#endif - -#if defined(__GNUC__ ) || (__IBMCPP__ >= 700) - -namespace boost { -namespace numeric { -namespace interval_lib { -namespace detail { - -typedef union { - ::boost::long_long_type imode; - double dmode; -} rounding_mode_struct; - -static const rounding_mode_struct mode_upward = { 0xFFF8000000000002LL }; -static const rounding_mode_struct mode_downward = { 0xFFF8000000000003LL }; -static const rounding_mode_struct mode_to_nearest = { 0xFFF8000000000000LL }; -static const rounding_mode_struct mode_toward_zero = { 0xFFF8000000000001LL }; - -struct ppc_rounding_control -{ - typedef double rounding_mode; - - static void set_rounding_mode(const rounding_mode mode) - { __asm__ __volatile__ ("mtfsf 255,%0" : : "f"(mode)); } - - static void get_rounding_mode(rounding_mode& mode) - { __asm__ __volatile__ ("mffs %0" : "=f"(mode)); } - - static void downward() { set_rounding_mode(mode_downward.dmode); } - static void upward() { set_rounding_mode(mode_upward.dmode); } - static void to_nearest() { set_rounding_mode(mode_to_nearest.dmode); } - static void toward_zero() { set_rounding_mode(mode_toward_zero.dmode); } -}; - -} // namespace detail - -// Do not declare the following C99 symbols if provides them. -// Otherwise, conflicts may occur, due to differences between prototypes. -#if !defined(_ISOC99_SOURCE) && !defined(__USE_ISOC99) -extern "C" { - float rintf(float); - double rint(double); -} -#endif - -template<> -struct rounding_control: - detail::ppc_rounding_control -{ - static float force_rounding(const float r) - { - float tmp; - __asm__ __volatile__ ("frsp %0, %1" : "=f" (tmp) : "f" (r)); - return tmp; - } - static float to_int(const float& x) { return rintf(x); } -}; - -template<> -struct rounding_control: - detail::ppc_rounding_control -{ - static const double & force_rounding(const double& r) { return r; } - static double to_int(const double& r) { return rint(r); } -}; - -template<> -struct rounding_control: - detail::ppc_rounding_control -{ - static const long double & force_rounding(const long double& r) { return r; } - static long double to_int(const long double& r) { return rint(r); } -}; - -} // namespace interval_lib -} // namespace numeric -} // namespace boost - -#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE -#endif - -#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP */ diff -Nru boost1.81-1.81.0/.pc/applied-patches boost1.81-1.81.0/.pc/applied-patches --- boost1.81-1.81.0/.pc/applied-patches 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/applied-patches 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -15.patch -20_remove_privacy_breach.patch -116.patch -fix-mpi-python37.patch -fix_extension.patch -0001-Remove-timestamps-and-dates-from-documentation.patch -30.patch diff -Nru boost1.81-1.81.0/.pc/fix_extension.patch/tools/build/src/tools/python.jam boost1.81-1.81.0/.pc/fix_extension.patch/tools/build/src/tools/python.jam --- boost1.81-1.81.0/.pc/fix_extension.patch/tools/build/src/tools/python.jam 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/fix_extension.patch/tools/build/src/tools/python.jam 1970-01-01 00:00:00.000000000 +0000 @@ -1,1345 +0,0 @@ -# Copyright 2004 Vladimir Prus. -# Distributed under the Boost Software License, Version 1.0. (See -# accompanying file LICENSE.txt or copy at -# https://www.bfgroup.xyz/b2/LICENSE.txt) - -# Support for Python and the the Boost.Python library. -# -# This module defines -# -# - a project 'python' with a target 'python' in it, that corresponds to the -# python library -# -# - a main target rule 'python-extension' which can be used to build a python -# extension. -# -# Extensions that use Boost.Python must explicitly link to it. - -import type ; -import testing ; -import generators ; -import project ; -import errors ; -import targets ; -import "class" : new ; -import os ; -import common ; -import toolset ; -import regex ; -import numbers ; -import string ; -import property ; -import sequence ; -import path ; -import feature ; -import set ; -import builtin ; -import property-set ; - - -# Make this module a project. -project.initialize $(__name__) ; -project python ; - -# Save the project so that if 'init' is called several times we define new -# targets in the python project, not in whatever project we were called by. -.project = [ project.current ] ; - -# Dynamic linker lib. Necessary to specify it explicitly on some platforms. -lib dl ; -# This contains 'openpty' function need by python. Again, on some system need to -# pass this to linker explicitly. -lib util ; -# Python uses pthread symbols. -lib pthread : - : linux:shared - ; - -# Extra library needed by phtread on some platforms. -lib rt ; - -# The pythonpath feature specifies additional elements for the PYTHONPATH -# environment variable, set by run-pyd. For example, pythonpath can be used to -# access Python modules that are part of the product being built, but are not -# installed in the development system's default paths. -feature.feature pythonpath : : free optional path ; - -# The best configured version of Python 2 and 3. -py2-version = ; -py3-version = ; - -# Initializes the Python toolset. Note that all parameters are optional. -# -# - version -- the version of Python to use. Should be in Major.Minor format, -# for example 2.3. Do not include the subminor version. -# -# - cmd-or-prefix: Preferably, a command that invokes a Python interpreter. -# Alternatively, the installation prefix for Python libraries and includes. If -# empty, will be guessed from the version, the platform's installation -# patterns, and the python executables that can be found in PATH. -# -# - includes: the include path to Python headers. If empty, will be guessed. -# -# - libraries: the path to Python library binaries. If empty, will be guessed. -# On MacOS/Darwin, you can also pass the path of the Python framework. -# -# - condition: if specified, should be a set of properties that are matched -# against the build configuration when B2 selects a Python -# configuration to use. -# -# - extension-suffix: A string to append to the name of extension modules before -# the true filename extension. Ordinarily we would just compute this based on -# the value of the feature. However ubuntu's python-dbg -# package uses the windows convention of appending _d to debug-build extension -# modules. We have no way of detecting ubuntu, or of probing python for the -# "_d" requirement, and if you configure and build python using -# --with-pydebug, you'll be using the standard *nix convention. Defaults to "" -# (or "_d" when targeting windows and is set). -# -# Example usage: -# -# using python : 2.3 ; -# using python : 2.3 : /usr/local/bin/python ; -# -rule init ( version ? : cmd-or-prefix ? : includes * : libraries ? - : condition * : extension-suffix ? ) -{ - project.push-current $(.project) ; - - debug-message Configuring python... ; - for local v in version cmd-or-prefix includes libraries condition - { - if $($(v)) - { - debug-message " user-specified $(v):" \"$($(v))\" ; - } - } - - configure $(version) : $(cmd-or-prefix) : $(includes) : $(libraries) : $(condition) : $(extension-suffix) ; - - project.pop-current ; -} - -# A simpler version of SHELL that grabs stderr as well as stdout, but returns -# nothing if there was an error. -# -local rule shell-cmd ( cmd ) -{ - debug-message running command '$(cmd)" 2>&1"' ; - x = [ SHELL $(cmd)" 2>&1" : exit-status ] ; - if $(x[2]) = 0 - { - return $(x[1]) ; - } - else - { - return ; - } -} - - -# Try to identify Cygwin symlinks. Invoking such a file directly as an NT -# executable from a native Windows build of bjam would be fatal to the bjam -# process. One /can/ invoke them through sh.exe or bash.exe, if you can prove -# that those are not also symlinks. ;-) -# -# If a symlink is found returns non-empty; we try to extract the target of the -# symlink from the file and return that. -# -# Note: 1. only works on NT 2. path is a native path. -local rule is-cygwin-symlink ( path ) -{ - local is-symlink = ; - - # Look for a file with the given path having the S attribute set, as cygwin - # symlinks do. /-C means "do not use thousands separators in file sizes." - local dir-listing = [ shell-cmd "DIR /-C /A:S \""$(path)"\"" ] ; - - if $(dir-listing) - { - # Escape any special regex characters in the base part of the path. - local base-pat = [ regex.escape $(path:D=) : "].[()*+?|\\$^" : \\ ] ; - - # Extract the file's size from the directory listing. - local size-of-system-file = [ MATCH "([0-9]+) "$(base-pat) : $(dir-listing) : 1 ] ; - - # If the file has a reasonably small size, look for the special symlink - # identification text. - if $(size-of-system-file) && [ numbers.less $(size-of-system-file) 1000 ] - { - local link = [ SHELL "FIND /OFF \"!\" \""$(path)"\" 2>&1" ] ; - if $(link[2]) != 0 - { - local nl = " - -" ; - is-symlink = [ MATCH ".*!([^"$(nl)"]*)" : $(link[1]) : 1 ] ; - if $(is-symlink) - { - is-symlink = [ *nix-path-to-native $(is-symlink) ] ; - is-symlink = $(is-symlink:R=$(path:D)) ; - } - - } - } - } - return $(is-symlink) ; -} - - -# Append ext to each member of names that does not contain '.'. -# -local rule default-extension ( names * : ext * ) -{ - local result ; - for local n in $(names) - { - switch $(n) - { - case *.* : result += $(n) ; - case * : result += $(n)$(ext) ; - } - } - return $(result) ; -} - - -# Tries to determine whether invoking "cmd" would actually attempt to launch a -# cygwin symlink. -# -# Note: only works on NT. -# -local rule invokes-cygwin-symlink ( cmd ) -{ - local dirs = $(cmd:D) ; - if ! $(dirs) - { - dirs = . [ os.executable-path ] ; - } - local base = [ default-extension $(cmd:D=) : .exe .cmd .bat ] ; - local paths = [ GLOB $(dirs) : $(base) ] ; - if $(paths) - { - # Make sure we have not run into a Cygwin symlink. Invoking such a file - # as an NT executable would be fatal for the bjam process. - return [ is-cygwin-symlink $(paths[1]) ] ; - } -} - - -local rule debug-message ( message * ) -{ - if --debug-configuration in [ modules.peek : ARGV ] - { - ECHO "notice:" "[python-cfg]" $(message) ; - } -} - - -# Like W32_GETREG, except prepend HKEY_CURRENT_USER\SOFTWARE and -# HKEY_LOCAL_MACHINE\SOFTWARE to the first argument, returning the first result -# found. Also accounts for the fact that on 64-bit machines, 32-bit software has -# its own area, under SOFTWARE\Wow6432node. -# -local rule software-registry-value ( path : data ? ) -{ - local result ; - for local root in HKEY_CURRENT_USER HKEY_LOCAL_MACHINE - { - for local x64elt in "" Wow6432node\\ # Account for 64-bit windows - { - if ! $(result) - { - result = [ W32_GETREG $(root)\\SOFTWARE\\$(x64elt)$(path) : $(data) ] ; - } - } - - } - return $(result) ; -} - - -.windows-drive-letter-re = "^([A-Za-z]):[\\/](.*)" ; -.cygwin-drive-letter-re = "^/cygdrive/([a-z])/(.*)" ; - -.working-directory = [ PWD ] ; -.working-drive-letter = [ SUBST $(.working-directory) $(.windows-drive-letter-re) $1 ] ; -.working-drive-letter ?= [ SUBST $(.working-directory) $(.cygwin-drive-letter-re) $1 ] ; - - -local rule windows-to-cygwin-path ( path ) -{ - # If path is rooted with a drive letter, rewrite it using the /cygdrive - # mountpoint. - local p = [ SUBST $(path:T) $(.windows-drive-letter-re) /cygdrive/$1/$2 ] ; - - # Else if path is rooted without a drive letter, use the working directory. - p ?= [ SUBST $(path:T) ^/(.*) /cygdrive/$(.working-drive-letter:L)/$2 ] ; - - # Else return the path unchanged. - return $(p:E=$(path:T)) ; -} - - -# :W only works in Cygwin builds of bjam. This one works on NT builds as well. -# -local rule cygwin-to-windows-path ( path ) -{ - path = $(path:R="") ; # strip any trailing slash - - local drive-letter = [ SUBST $(path) $(.cygwin-drive-letter-re) "$1:/$2" ] ; - if $(drive-letter) - { - path = $(drive-letter) ; - } - else if $(path:R=/x) = $(path) # already rooted? - { - # Look for a cygwin mount that includes each head sequence in $(path). - local head = $(path) ; - local tail = "" ; - - while $(head) - { - local root = [ software-registry-value - "Cygnus Solutions\\Cygwin\\mounts v2\\"$(head) : native ] ; - - if $(root) - { - path = $(tail:R=$(root)) ; - head = ; - } - tail = $(tail:R=$(head:D=)) ; - - if $(head) = / - { - head = ; - } - else - { - head = $(head:D) ; - } - } - } - return [ regex.replace $(path:R="") / \\ ] ; -} - - -# Convert a *nix path to native. -# -local rule *nix-path-to-native ( path ) -{ - if [ os.name ] = NT - { - path = [ cygwin-to-windows-path $(path) ] ; - } - return $(path) ; -} - - -# Convert an NT path to native. -# -local rule windows-path-to-native ( path ) -{ - if [ os.name ] = NT - { - return $(path) ; - } - else - { - return [ windows-to-cygwin-path $(path) ] ; - } -} - - -# Return nonempty if path looks like a windows path, i.e. it starts with a drive -# letter or contains backslashes. -# -local rule guess-windows-path ( path ) -{ - return [ SUBST $(path) "($(.windows-drive-letter-re)|.*([\\]).*)" $1 ] ; -} - - -local rule path-to-native ( paths * ) -{ - local result ; - - for local p in $(paths) - { - if [ guess-windows-path $(p) ] - { - result += [ windows-path-to-native $(p) ] ; - } - else - { - result += [ *nix-path-to-native $(p:T) ] ; - } - } - return $(result) ; -} - - -# Validate the version string and extract the major/minor part we care about. -# -local rule split-version ( version ) -{ - local major-minor = [ MATCH "^([0-9]+)\.([0-9]+)(.*)$" : $(version) : 1 2 3 ] ; - if ! $(major-minor[2]) || $(major-minor[3]) - { - ECHO "Warning: \"using python\" expects a two part (major, minor) version number; got" $(version) instead ; - - # Add a zero to account for the missing digit if necessary. - major-minor += 0 ; - } - - return $(major-minor[1]) $(major-minor[2]) ; -} - - -# Build a list of versions from 3.4 down to 1.5. Because bjam can not enumerate -# registry sub-keys, we have no way of finding a version with a 2-digit minor -# version, e.g. 2.10 -- let us hope that never happens. -# -.version-countdown = ; -for local v in [ numbers.range 15 34 ] -{ - .version-countdown = [ SUBST $(v) (.)(.*) $1.$2 ] $(.version-countdown) ; -} - - -local rule windows-installed-pythons ( version ? ) -{ - version ?= $(.version-countdown) ; - local interpreters ; - - for local v in $(version) - { - local install-path = [ - software-registry-value "Python\\PythonCore\\"$(v)"\\InstallPath" ] ; - - if $(install-path) - { - install-path = [ windows-path-to-native $(install-path) ] ; - debug-message Registry indicates Python $(v) installed at \"$(install-path)\" ; - } - - interpreters += $(:E=python:R=$(install-path)) ; - } - return $(interpreters) ; -} - - -local rule darwin-installed-pythons ( version ? ) -{ - version ?= $(.version-countdown) ; - - local prefix - = [ GLOB /System/Library/Frameworks /Library/Frameworks - : Python.framework ] ; - - return $(prefix)/Versions/$(version)/bin/python ; -} - - -# Assume "python-cmd" invokes a python interpreter and invoke it to extract all -# the information we care about from its "sys" module. Returns void if -# unsuccessful. -# -local rule probe ( python-cmd ) -{ - # Avoid invoking a Cygwin symlink on NT. - local skip-symlink ; - if [ os.name ] = NT - { - skip-symlink = [ invokes-cygwin-symlink $(python-cmd) ] ; - } - - if $(skip-symlink) - { - debug-message -------------------------------------------------------------------- ; - debug-message \"$(python-cmd)\" would attempt to invoke a Cygwin symlink, ; - debug-message causing a bjam built for Windows to hang. ; - debug-message ; - debug-message If you intend to target a Cygwin build of Python, please ; - debug-message replace the path to the link with the path to a real executable ; - debug-message "(guessing:" \"$(skip-symlink)\") "in" your 'using python' line ; - debug-message "in" user-config.jam or site-config.jam. Do not forget to escape ; - debug-message backslashes ; - debug-message -------------------------------------------------------------------- ; - } - else - { - # Prepare a List of Python format strings and expressions that can be - # used to print the constants we want from the sys module. - - # We do not really want sys.version since that is a complicated string, - # so get the information from sys.version_info instead. - local format = "version=%d.%d" ; - local exprs = "version_info[0]" "version_info[1]" ; - - for local s in $(sys-elements[2-]) - { - format += $(s)=%s ; - exprs += $(s) ; - } - - # Invoke Python and ask it for all those values. - local full-cmd = - $(python-cmd)" -c \"from sys import *; print('"$(format:J=\\n)"' % ("$(exprs:J=,)"))\"" ; - - local output = [ shell-cmd $(full-cmd) ] ; - if $(output) - { - # Parse the output to get all the results. - local nl = " - -" ; - for s in $(sys-elements) - { - # These variables are expected to be declared local in the - # caller, so Jam's dynamic scoping will set their values there. - sys.$(s) = [ SUBST $(output) "\\<$(s)=([^$(nl)]+)" $1 ] ; - } - } - return $(output) ; - } -} - - -# Make sure the "libraries" and "includes" variables (in an enclosing scope) -# have a value based on the information given. -# -local rule compute-default-paths ( target-os : version ? : prefix ? : - exec-prefix ? ) -{ - exec-prefix ?= $(prefix) ; - - if $(target-os) = windows - { - # The exec_prefix is where you're supposed to look for machine-specific - # libraries. - local default-library-path = $(exec-prefix)\\libs ; - local default-include-path = $(:E=Include:R=$(prefix)) ; - - # If the interpreter was found in a directory called "PCBuild" or - # "PCBuild8," assume we're looking at a Python built from the source - # distro, and go up one additional level to the default root. Otherwise, - # the default root is the directory where the interpreter was found. - - # We ask Python itself what the executable path is in case of - # intermediate symlinks or shell scripts. - local executable-dir = $(sys.executable:D) ; - - if [ MATCH ^(PCBuild) : $(executable-dir:D=) ] - { - debug-message "This Python appears to reside in a source distribution;" ; - debug-message "prepending \""$(executable-dir)"\" to default library search path" ; - - default-library-path = $(executable-dir) $(default-library-path) ; - - default-include-path = $(:E=PC:R=$(executable-dir:D)) $(default-include-path) ; - - debug-message "and \""$(default-include-path[1])"\" to default #include path" ; - } - - libraries ?= $(default-library-path) ; - includes ?= $(default-include-path) ; - } - else - { - local default-include-path = $(prefix)/include/python$(version) ; - if ! [ path.exists $(default-include-path) ] && [ path.exists $(default-include-path)m ] - { - default-include-path = $(default-include-path)m ; - } - - includes ?= $(default-include-path) ; - - local lib = $(exec-prefix)/lib ; - libraries ?= $(lib)/python$(version)/config $(lib) ; - } -} - -# The version of the python interpreter to use. -feature.feature python : : propagated symmetric ; -feature.feature python.interpreter : : free ; - -toolset.flags python.capture-output PYTHON : ; - -# -# Support for Python configured --with-pydebug -# -feature.feature python-debugging : off on : propagated ; -variant debug-python : debug : on ; - - -# Return a list of candidate commands to try when looking for a Python -# interpreter. prefix is expected to be a native path. -# -local rule candidate-interpreters ( version ? : prefix ? : target-os ) -{ - local bin-path = bin ; - if $(target-os) = windows - { - # On Windows, look in the root directory itself and, to work with the - # result of a build-from-source, the PCBuild directory. - bin-path = PCBuild8 PCBuild "" ; - } - - bin-path = $(bin-path:R=$(prefix)) ; - - if $(target-os) in windows darwin - { - return # Search: - $(:E=python:R=$(bin-path)) # Relative to the prefix, if any - python # In the PATH - [ $(target-os)-installed-pythons $(version) ] # Standard install locations - ; - } - else - { - # Search relative to the prefix, or if none supplied, in PATH. - local unversioned = $(:E=python:R=$(bin-path:E=)) ; - - # If a version was specified, look for a python with that specific - # version appended before looking for one called, simply, "python" - return $(unversioned)$(version) $(unversioned) ; - } -} - - -# Compute system library dependencies for targets linking with static Python -# libraries. -# -# On many systems, Python uses libraries such as pthreads or libdl. Since static -# libraries carry no library dependency information of their own that the linker -# can extract, these extra dependencies have to be given explicitly on the link -# line of the client. The information about these dependencies is packaged into -# the "python" target below. -# -# Even where Python itself uses pthreads, it never allows extension modules to -# be entered concurrently (unless they explicitly give up the interpreter lock). -# Therefore, extension modules do not need the efficiency overhead of threadsafe -# code as produced by multi, and we handle libpthread along with -# other libraries here. Note: this optimization is based on an assumption that -# the compiler generates link-compatible code in both the single- and -# multi-threaded cases, and that system libraries do not change their ABIs -# either. -# -# Returns a list of usage-requirements that link to the necessary system -# libraries. -# -local rule system-library-dependencies ( target-os ) -{ - switch $(target-os) - { - case s[uo][nl]* : # solaris, sun, sunos - # Add a librt dependency for the gcc toolset on SunOS (the sun - # toolset adds -lrt unconditionally). While this appears to - # duplicate the logic already in gcc.jam, it does not as long as - # we are not forcing multi. - - # On solaris 10, distutils.sysconfig.get_config_var('LIBS') yields - # '-lresolv -lsocket -lnsl -lrt -ldl'. However, that does not seem - # to be the right list for extension modules. For example, on my - # installation, adding -ldl causes at least one test to fail because - # the library can not be found and removing it causes no failures. - - # Apparently, though, we need to add -lrt for gcc. - return gcc:rt ; - - case osf : return pthread gcc:rt ; - - case qnx* : return ; - case darwin : return ; - case windows : return ; - case haiku : return ; - - case hpux : return rt ; - case *bsd : return pthread gcc:util ; - - case aix : return pthread dl ; - - case * : return pthread dl - gcc:util linux:util ; - } -} - - -# Define a version suffix for libraries depending on Python. -# For example, Boost.Python built for Python 2.7 uses the suffix "27" -rule version-suffix ( version ) -{ - local major-minor = [ split-version $(version) ] ; - local suffix = $(major-minor:J="") ; - return $(suffix) ; -} - -# Declare a target to represent Python's library. -# -local rule declare-libpython-target ( version ? : requirements * ) -{ - # Compute the representation of Python version in the name of Python's - # library file. - local lib-version = $(version) ; - if windows in $(requirements) - { - local major-minor = [ split-version $(version) ] ; - lib-version = $(major-minor:J="") ; - if on in $(requirements) - { - lib-version = $(lib-version)_d ; - } - } - - if ! $(lib-version) - { - ECHO *** "warning:" could not determine Python version, which will ; - ECHO *** "warning:" probably prevent us from linking with the python ; - ECHO *** "warning:" library. Consider explicitly passing the version ; - ECHO *** "warning:" to 'using python'. ; - } - - # Declare it. - lib python.lib : : python$(lib-version) $(requirements) ; -} - - -# Implementation of init. -local rule configure ( version ? : cmd-or-prefix ? : includes * : libraries ? : - condition * : extension-suffix ? ) -{ - local prefix ; - local exec-prefix ; - local cmds-to-try ; - local interpreter-cmd ; - - local target-os = [ feature.get-values target-os : $(condition) ] ; - target-os ?= [ feature.defaults target-os ] ; - target-os = $(target-os:G=) ; - - if $(target-os) = windows && on in $(condition) - { - extension-suffix ?= _d ; - } - extension-suffix ?= "" ; - - local cmds-to-try ; - - if ! $(cmd-or-prefix) || [ GLOB $(cmd-or-prefix) : * ] - { - # If the user did not pass a command, whatever we got was a prefix. - prefix = $(cmd-or-prefix) ; - cmds-to-try = [ candidate-interpreters $(version) : $(prefix) : $(target-os) ] ; - } - else - { - # Work with the command the user gave us. - cmds-to-try = $(cmd-or-prefix) ; - - # On Windows, do not nail down the interpreter command just yet in case - # the user specified something that turns out to be a cygwin symlink, - # which could bring down bjam if we invoke it. - if $(target-os) != windows - { - interpreter-cmd = $(cmd-or-prefix) ; - } - } - - # Values to use in case we can not really find anything in the system. - local fallback-cmd = $(cmds-to-try[1]) ; - local fallback-version ; - - # Anything left to find or check? - if ! ( $(interpreter-cmd) && $(version) && $(includes) && $(libraries) ) - { - # Values to be extracted from python's sys module. These will be set by - # the probe rule, above, using Jam's dynamic scoping. - local sys-elements = version platform prefix exec_prefix executable ; - local sys.$(sys-elements) ; - - # Compute the string Python's sys.platform needs to match. If not - # targeting Windows or cygwin we will assume only native builds can - # possibly run, so we will not require a match and we leave sys.platform - # blank. - local platform ; - switch $(target-os) - { - case windows : platform = win32 ; - case cygwin : platform = cygwin ; - } - - while $(cmds-to-try) - { - # Pop top command. - local cmd = $(cmds-to-try[1]) ; - cmds-to-try = $(cmds-to-try[2-]) ; - - debug-message Checking interpreter command \"$(cmd)\"... ; - if [ probe $(cmd) ] - { - fallback-version ?= $(sys.version) ; - - # Check for version/platform validity. - for local x in version platform - { - if $($(x)) && $($(x)) != $(sys.$(x)) - { - debug-message ...$(x) "mismatch (looking for" - $($(x)) but found $(sys.$(x))")" ; - cmd = ; - } - } - - if $(cmd) - { - debug-message ...requested configuration matched! ; - - exec-prefix = $(sys.exec_prefix) ; - - compute-default-paths $(target-os) : $(sys.version) : - $(sys.prefix) : $(sys.exec_prefix) ; - - version = $(sys.version) ; - interpreter-cmd ?= $(cmd) ; - cmds-to-try = ; # All done. - } - } - else - { - debug-message ...does not invoke a working interpreter ; - } - } - } - - # Check whether configuration succeeded. - if ! ( $(includes) && $(libraries) ) - { - debug-message Python headers and libraries not found. ; - return ; - } - - .configured = true ; - - if ! $(interpreter-cmd) - { - fallback-cmd ?= python ; - debug-message No working Python interpreter found. ; - if [ os.name ] != NT || ! [ invokes-cygwin-symlink $(fallback-cmd) ] - { - interpreter-cmd = $(fallback-cmd) ; - debug-message falling back to \"$(interpreter-cmd)\" ; - } - } - - includes = [ path-to-native $(includes) ] ; - libraries = [ path-to-native $(libraries) ] ; - - debug-message "Details of this Python configuration:" ; - debug-message " interpreter command:" \"$(interpreter-cmd:E=)\" ; - debug-message " include path:" \"$(includes:E=)\" ; - debug-message " library path:" \"$(libraries:E=)\" ; - if $(target-os) = windows - { - debug-message " DLL search path:" \"$(exec-prefix:E=)\" ; - } - - # - # Discover the presence of NumPy - # - debug-message "Checking for NumPy..." ; - local full-cmd = "import sys; sys.stderr = sys.stdout; import numpy; print(numpy.get_include())" ; - local full-cmd = $(interpreter-cmd)" -c \"$(full-cmd)\"" ; - debug-message "running command '$(full-cmd)'" ; - local result = [ SHELL $(full-cmd) : strip-eol : exit-status ] ; - if $(result[2]) = 0 - { - .numpy = true ; - .numpy-include = $(result[1]) ; - debug-message "NumPy enabled" ; - } - else - { - debug-message "NumPy disabled. Reason:" ; - debug-message " $(full-cmd) aborted with " ; - debug-message " $(result[1])" ; - } - - # - # End autoconfiguration sequence. - # - - # Normalize and dissect any version number. - local major-minor ; - if $(version) - { - major-minor = [ split-version $(version) ] ; - version = $(major-minor:J=.) ; - } - - - local target-requirements = $(condition) ; - - # Add the version, if any, to the target requirements. - if $(version) - { - if ! $(version) in [ feature.values python ] - { - feature.extend python : $(version) ; - py$(major-minor[1])-version ?= $(version) ; - if $(py$(major-minor[1])-version) < $(version) - { - py$(major-minor[1])-version = $(version) ; - } - } - target-requirements += $(version:E=default) ; - } - - target-requirements += $(target-os) ; - - # See if we can find a framework directory on darwin. - local framework-directory ; - if $(target-os) = darwin - { - # Search upward for the framework directory. - local framework-directory = $(libraries[-1]) ; - while $(framework-directory:D=) && $(framework-directory:D=) != Python.framework - { - framework-directory = $(framework-directory:D) ; - } - - if $(framework-directory:D=) = Python.framework - { - debug-message framework directory is \"$(framework-directory)\" ; - } - else - { - debug-message "no framework directory found; using library path" ; - framework-directory = ; - } - } - - local dll-path = $(libraries) ; - - # Make sure that we can find the Python DLL on Windows. - if ( $(target-os) = windows ) && $(exec-prefix) - { - dll-path += $(exec-prefix) ; - } - - # - # Prepare usage requirements. - # - local usage-requirements = [ system-library-dependencies $(target-os) ] ; - usage-requirements += $(includes) $(interpreter-cmd) ; - if on in $(condition) - { - if $(target-os) = windows - { - # In pyconfig.h, Py_DEBUG is set if _DEBUG is set. If we define - # Py_DEBUG we will get multiple definition warnings. - usage-requirements += _DEBUG ; - } - else - { - usage-requirements += Py_DEBUG ; - } - } - - # In case we added duplicate requirements from what the user specified. - target-requirements = [ sequence.unique $(target-requirements) ] ; - - # Global, but conditional, requirements to give access to the interpreter - # for general utilities, like other toolsets, that run Python scripts. - toolset.add-requirements - "$(target-requirements:J=,):$(interpreter-cmd)" ; - - # Register the right suffix for extensions. - register-extension-suffix $(extension-suffix) : $(target-requirements) ; - - # Make sure that the python feature is always considered - # relevant for any targets that depend on python. Without - # this, it would only be considered relevant when there are - # multiple configurations defined within the same build. - target-requirements += python ; - - # - # Declare the "python" target. This should really be called - # python_for_embedding. - # - - if $(framework-directory) - { - alias python - : - : $(target-requirements) - : - : $(usage-requirements) $(framework-directory) - ; - } - else - { - declare-libpython-target $(version) : $(target-requirements) ; - - # This is an evil hack. On, Windows, when Python is embedded, nothing - # seems to set up sys.path to include Python's standard library - # (http://article.gmane.org/gmane.comp.python.general/544986). The evil - # here, aside from the workaround necessitated by Python's bug, is that: - # - # a. we're guessing the location of the python standard library from the - # location of pythonXX.lib - # - # b. we're hijacking the property to get the - # environment variable set up, and the user may want to use it for - # something else (e.g. launch the debugger). - local set-PYTHONPATH ; - if $(target-os) = windows - { - set-PYTHONPATH = [ common.prepend-path-variable-command PYTHONPATH : - $(libraries:D)/Lib ] ; - } - - alias python - : - : $(target-requirements) - : - # Why python.lib must be listed here instead of along with the - # system libs is a mystery, but if we do not do it, on cygwin, - # -lpythonX.Y never appears in the command line (although it does on - # linux). - : $(usage-requirements) - $(set-PYTHONPATH) - $(libraries) $(dll-path) python.lib - ; - } - - # On *nix, we do not want to link either Boost.Python or Python extensions - # to libpython, because the Python interpreter itself provides all those - # symbols. If we linked to libpython, we would get duplicate symbols. So - # declare two targets -- one for building extensions and another for - # embedding. - if $(target-os) in windows cygwin - { - alias python_for_extensions : python : $(target-requirements) ; - } - else if $(target-os) = darwin { - alias python_for_extensions - : - : $(target-requirements) - : - : $(usage-requirements) "-undefined dynamic_lookup" - ; - } - # On AIX we need Python extensions and Boost.Python to import symbols from - # the Python interpreter. Dynamic libraries opened with dlopen() do not - # inherit the symbols from the Python interpreter. - else if $(target-os) = aix - { - alias python_for_extensions - : - : $(target-requirements) - : - : $(usage-requirements) "-Wl,-bI:$(libraries[1])/python.exp" - ; - } - else - { - alias python_for_extensions - : - : $(target-requirements) - : - : $(usage-requirements) - ; - } - - # Declare the numpy target, which contains the NumPy include directory - - alias numpy : : $(target-requirements) : : $(.numpy-include) ; -} - -# Conditional rule specification that will prevent building of a target -# if there is no matching python configuration available with the given -# required properties. -rule require-py ( properties * ) -{ - local py-ext-target = [ $(.project).find python_for_extensions : no-error ] ; - if ! $(py-ext-target) - { - return no ; - } - local property-set = [ property-set.create $(properties) ] ; - property-set = [ $(property-set).expand ] ; - local py-ext-alternative = [ $(py-ext-target).select-alternatives $(property-set) ] ; - if ! $(py-ext-alternative) - { - return no ; - } -} - - -rule configured ( ) -{ - return $(.configured) ; -} - -rule numpy ( ) -{ - return $(.numpy) ; -} - -rule numpy-include ( ) -{ - return $(.numpy-include) ; -} - - -type.register PYTHON_EXTENSION : : SHARED_LIB ; - - -local rule register-extension-suffix ( root : condition * ) -{ - local suffix ; - - switch [ feature.get-values target-os : $(condition) ] - { - case windows : suffix = pyd ; - case cygwin : suffix = dll ; - case hpux : - { - if [ feature.get-values python : $(condition) ] in 1.5 1.6 2.0 2.1 2.2 2.3 2.4 - { - suffix = sl ; - } - else - { - suffix = so ; - } - } - case * : suffix = so ; - } - - type.set-generated-target-suffix PYTHON_EXTENSION : $(condition) : <$(root).$(suffix)> ; -} - - -# Unset 'lib' prefix for PYTHON_EXTENSION -type.set-generated-target-prefix PYTHON_EXTENSION : : "" ; - - -rule python-extension ( name : sources * : requirements * : default-build * : - usage-requirements * ) -{ - if [ configured ] - { - requirements += /python//python_for_extensions ; - } - requirements += true ; - - local project = [ project.current ] ; - - targets.main-target-alternative - [ new typed-target $(name) : $(project) : PYTHON_EXTENSION - : [ targets.main-target-sources $(sources) : $(name) ] - : [ targets.main-target-requirements $(requirements) : $(project) ] - : [ targets.main-target-default-build $(default-build) : $(project) ] - ] ; -} - -IMPORT python : python-extension : : python-extension ; - -# Support for testing. -type.register PY : py ; -type.register RUN_PYD_OUTPUT ; -type.register RUN_PYD : : TEST ; - - -class python-test-generator : generator -{ - import set ; - - rule __init__ ( * : * ) - { - generator.__init__ $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ; - self.composing = true ; - } - - rule run ( project name ? : property-set : sources * : multiple ? ) - { - local pyversion = [ $(property-set).get ] ; - local python ; - local other-pythons ; - - for local s in $(sources) - { - if [ $(s).type ] = PY - { - if ! $(python) - { - # First Python source ends up on command line. - python = $(s) ; - - } - else - { - # Other Python sources become dependencies. - other-pythons += $(s) ; - } - } - } - - local extensions ; - for local s in $(sources) - { - if [ $(s).type ] = PYTHON_EXTENSION - { - extensions += $(s) ; - } - } - - local libs ; - for local s in $(sources) - { - if [ type.is-derived [ $(s).type ] LIB ] - && ! $(s) in $(extensions) - { - libs += $(s) ; - } - } - - local new-sources ; - for local s in $(sources) - { - if [ type.is-derived [ $(s).type ] CPP ] - { - local name = [ utility.basename [ $(s).name ] ] ; - if $(name) = [ utility.basename [ $(python).name ] ] - { - name = $(name)_ext ; - } - local extension = [ generators.construct $(project) $(name) : - PYTHON_EXTENSION : $(property-set) : $(s) $(libs) ] ; - - # The important part of usage requirements returned from - # PYTHON_EXTENSION generator are xdll-path properties that will - # allow us to find the python extension at runtime. - property-set = [ $(property-set).add $(extension[1]) ] ; - - # Ignore usage requirements. We're a top-level generator and - # nobody is going to use what we generate. - new-sources += $(extension[2-]) ; - } - } - - property-set = [ $(property-set).add-raw $(other-pythons) ] ; - - return [ construct-result $(python) $(extensions) $(new-sources) : - $(project) $(name) : $(property-set) ] ; - } -} - - -generators.register - [ new python-test-generator python.capture-output : : RUN_PYD_OUTPUT ] ; - -generators.register-standard testing.expect-success - : RUN_PYD_OUTPUT : RUN_PYD ; - - -# There are two different ways of spelling OS names. One is used for [ os.name ] -# and the other is used for the and properties. Until that -# is remedied, this sets up a crude mapping from the latter to the former, that -# will work *for the purposes of cygwin/NT cross-builds only*. Could not think -# of a better name than "translate". -# -.translate-os-windows = NT ; -.translate-os-cygwin = CYGWIN ; -local rule translate-os ( src-os ) -{ - local x = $(.translate-os-$(src-os)) [ os.name ] ; - return $(x[1]) ; -} - - -# Extract the path to a single ".pyd" source. This is used to build the -# PYTHONPATH for running bpl tests. -# -local rule pyd-pythonpath ( source ) -{ - return [ on $(source) return $(LOCATE) $(SEARCH) ] ; -} - - -# The flag settings on testing.capture-output do not apply to python.capture -# output at the moment. Redo this explicitly. -toolset.flags python.capture-output ARGS ; -toolset.flags python.capture-output INPUT_FILES ; - -toolset.uses-features python.capture-output : - - ; - -rule capture-output ( target : sources * : properties * ) -{ - # Setup up a proper DLL search path. Here, $(sources[1]) is a python module - # and $(sources[2]) is a DLL. Only $(sources[1]) is passed to - # testing.capture-output, so RUN_PATH variable on $(sources[2]) is not - # consulted. Move it over explicitly. - RUN_PATH on $(sources[1]) = [ on $(sources[2-]) return $(RUN_PATH) ] ; - - PYTHONPATH = [ sequence.transform pyd-pythonpath : $(sources[2-]) ] ; - PYTHONPATH += [ feature.get-values pythonpath : $(properties) ] ; - - # After test is run, we remove the Python module, but not the Python script. - testing.capture-output $(target) : $(sources[1]) : $(properties) ; - - # PYTHONPATH is different; it will be interpreted by whichever Python is - # invoked and so must follow path rules for the target os. The only OSes - # where we can run python for other OSes currently are NT and CYGWIN so we - # only need to handle those cases. - local target-os = [ feature.get-values target-os : $(properties) ] ; - # Oddly, host-os is not in properties, so grab the default value. - local host-os = [ feature.defaults host-os ] ; - host-os = $(host-os:G=) ; - if $(target-os) != $(host-os) && $(target-os) in windows cygwin && $(host-os) in windows cygwin - { - PYTHONPATH = [ sequence.transform $(host-os)-to-$(target-os)-path : - $(PYTHONPATH) ] ; - } - local path-separator = [ os.path-separator [ translate-os $(target-os) ] ] ; - local set-PYTHONPATH = [ common.variable-setting-command PYTHONPATH : - $(PYTHONPATH:E=:J=$(path-separator)) ] ; - LAUNCHER on $(target) = $(set-PYTHONPATH) [ on $(target) return \"$(PYTHON)\" ] ; -} - - -rule bpl-test ( name : sources * : requirements * ) -{ - local s ; - sources ?= $(name).py $(name).cpp ; - return [ testing.make-test run-pyd : $(sources) /boost/python//boost_python - : $(requirements) : $(name) ] ; -} - -# The same as bpl-test but additionally require (and link to) boost_numpy. -# Masked whenever NumPy is not enabled. -rule numpy-test ( name : sources * : requirements * ) -{ - numpy-include = [ python.numpy-include ] ; - # yuk ! - if ! $(.numpy) { requirements += no ; } - sources ?= $(name).py $(name).cpp ; - name = [ regex.replace $(name) "[/]" "~" ] ; - return [ testing.make-test run-pyd - : $(sources) /boost/python//boost_numpy /boost/python//boost_python - : $(requirements) $(numpy-include) - : $(name) ] ; -} - -rule py-version ( n ) -{ - return $(py$(n)-version) ; -} - -IMPORT $(__name__) : bpl-test : : bpl-test ; -IMPORT $(__name__) : numpy-test : : numpy-test ; -IMPORT $(__name__) : py-version : : py-version ; diff -Nru boost1.81-1.81.0/.pc/fix-mpi-python37.patch/libs/mpi/build/__init__.py boost1.81-1.81.0/.pc/fix-mpi-python37.patch/libs/mpi/build/__init__.py --- boost1.81-1.81.0/.pc/fix-mpi-python37.patch/libs/mpi/build/__init__.py 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/fix-mpi-python37.patch/libs/mpi/build/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -import sys -if sys.platform == 'linux2': - import DLFCN as dl - flags = sys.getdlopenflags() - sys.setdlopenflags(dl.RTLD_NOW|dl.RTLD_GLOBAL) - import mpi - sys.setdlopenflags(flags) -else: - import mpi - diff -Nru boost1.81-1.81.0/.pc/.quilt_patches boost1.81-1.81.0/.pc/.quilt_patches --- boost1.81-1.81.0/.pc/.quilt_patches 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/.quilt_patches 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -/home/buildd/build-RECIPEBRANCHBUILD-3583832/chroot-autobuild/home/buildd/work/tree/recipe/debian/patches diff -Nru boost1.81-1.81.0/.pc/.quilt_series boost1.81-1.81.0/.pc/.quilt_series --- boost1.81-1.81.0/.pc/.quilt_series 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/.quilt_series 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -/home/buildd/build-RECIPEBRANCHBUILD-3583832/chroot-autobuild/home/buildd/work/tree/recipe/debian/patches/series diff -Nru boost1.81-1.81.0/.pc/.version boost1.81-1.81.0/.pc/.version --- boost1.81-1.81.0/.pc/.version 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/.pc/.version 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -2 diff -Nru boost1.81-1.81.0/tools/boostbook/index.html boost1.81-1.81.0/tools/boostbook/index.html --- boost1.81-1.81.0/tools/boostbook/index.html 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/boostbook/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ - - - - - - - - - - - - Automatic redirection failed, please go to ../../doc/html/boostbook.html - - diff -Nru boost1.81-1.81.0/tools/boostbook/xsl/annotation.xsl boost1.81-1.81.0/tools/boostbook/xsl/annotation.xsl --- boost1.81-1.81.0/tools/boostbook/xsl/annotation.xsl 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/boostbook/xsl/annotation.xsl 2022-12-24 13:24:17.329609900 +0000 @@ -426,7 +426,7 @@ - + diff -Nru boost1.81-1.81.0/tools/boostbook/xsl/html-base.xsl boost1.81-1.81.0/tools/boostbook/xsl/html-base.xsl --- boost1.81-1.81.0/tools/boostbook/xsl/html-base.xsl 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/boostbook/xsl/html-base.xsl 2022-12-24 13:24:17.333610000 +0000 @@ -234,6 +234,28 @@ + +

+ + Last revised: + + + + + + + + + + + + + + + + +

+
diff -Nru boost1.81-1.81.0/tools/build/bootstrap.bat boost1.81-1.81.0/tools/build/bootstrap.bat --- boost1.81-1.81.0/tools/build/bootstrap.bat 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/build/bootstrap.bat 2022-12-24 13:24:17.393610500 +0000 @@ -1,39 +1,39 @@ -@ECHO OFF - -REM Copyright (C) 2009 Vladimir Prus -REM Copyright 2019-2020 Rene Rivera -REM -REM Distributed under the Boost Software License, Version 1.0. -REM (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) - - -:b2_build -ECHO Building the B2 engine.. -pushd src\engine -call .\build.bat %* -@ECHO OFF -popd -if exist ".\src\engine\b2.exe" ( - copy .\src\engine\b2.exe . > nul - goto :b2_built) -goto :b2_failure - - -:b2_built -ECHO. -ECHO Building is done. To install, run: -ECHO. -ECHO .\b2 --prefix=DIR install -ECHO. -goto :end - - -:b2_failure -ECHO. -ECHO Failed to build the B2 engine. -ECHO. -goto :end - - -:end -exit /b %ERRORLEVEL% +@ECHO OFF + +REM Copyright (C) 2009 Vladimir Prus +REM Copyright 2019-2020 Rene Rivera +REM +REM Distributed under the Boost Software License, Version 1.0. +REM (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + + +:b2_build +ECHO Building the B2 engine.. +pushd src\engine +call .\build.bat %* +@ECHO OFF +popd +if exist ".\src\engine\b2.exe" ( + copy .\src\engine\b2.exe . > nul + goto :b2_built) +goto :b2_failure + + +:b2_built +ECHO. +ECHO Building is done. To install, run: +ECHO. +ECHO .\b2 --prefix=DIR install +ECHO. +goto :end + + +:b2_failure +ECHO. +ECHO Failed to build the B2 engine. +ECHO. +goto :end + + +:end +exit /b %ERRORLEVEL% diff -Nru boost1.81-1.81.0/tools/build/src/engine/boost-no-inspect boost1.81-1.81.0/tools/build/src/engine/boost-no-inspect --- boost1.81-1.81.0/tools/build/src/engine/boost-no-inspect 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/build/src/engine/boost-no-inspect 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -this really out of our hands, so tell inspect to ignore directory \ No newline at end of file diff -Nru boost1.81-1.81.0/tools/build/src/engine/build.bat boost1.81-1.81.0/tools/build/src/engine/build.bat --- boost1.81-1.81.0/tools/build/src/engine/build.bat 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/build/src/engine/build.bat 2022-12-24 13:24:17.405610600 +0000 @@ -1,194 +1,194 @@ -@ECHO OFF - -REM ~ Copyright 2002-2007 Rene Rivera. -REM ~ Distributed under the Boost Software License, Version 1.0. -REM ~ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) - -setlocal -goto Start - - -:Set_Error -color 00 -goto :eof - - -:Clear_Error -ver >nul -goto :eof - - -:Error_Print -REM Output an error message and set the errorlevel to indicate failure. -setlocal -ECHO ### -ECHO ### %1 -ECHO ### -ECHO ### You can specify the toolset as the argument, i.e.: -ECHO ### .\build.bat msvc -ECHO ### -ECHO ### Toolsets supported by this script are: borland, como, gcc, -ECHO ### gcc-nocygwin, intel-win32, mingw, -ECHO ### vc12, vc14, vc141, vc142, vc143 -ECHO ### -ECHO ### If you have Visual Studio 2017 installed you will need to either update -ECHO ### the Visual Studio 2017 installer or run from VS 2017 Command Prompt -ECHO ### as we where unable to detect your toolset installation. -ECHO ### -call :Set_Error -endlocal -goto :eof - - -:Test_Option -REM Tests whether the given string is in the form of an option: "--*" -call :Clear_Error -setlocal -set test=%1 -if not defined test ( - call :Set_Error - goto Test_Option_End -) -set test=###%test%### -set test=%test:"###=% -set test=%test:###"=% -set test=%test:###=% -if not "-" == "%test:~1,1%" call :Set_Error -:Test_Option_End -endlocal -goto :eof - - -:Test_Empty -REM Tests whether the given string is not empty -call :Clear_Error -setlocal -set test=%1 -if not defined test ( - call :Clear_Error - goto Test_Empty_End -) -set test=###%test%### -set test=%test:"###=% -set test=%test:###"=% -set test=%test:###=% -if not "" == "%test%" call :Set_Error -:Test_Empty_End -endlocal -goto :eof - - -:Guess_Toolset -set local -REM Try and guess the toolset to bootstrap the build with... -REM Sets B2_TOOLSET to the first found toolset. -REM May also set B2_TOOLSET_ROOT to the -REM location of the found toolset. - -call :Clear_Error -call :Test_Empty "%ProgramFiles%" -if not errorlevel 1 set "ProgramFiles=C:\Program Files" - -REM Visual Studio is by default installed to %ProgramFiles% on 32-bit machines and -REM %ProgramFiles(x86)% on 64-bit machines. Making a common variable for both. -call :Clear_Error -call :Test_Empty "%ProgramFiles(x86)%" -if errorlevel 1 ( - set "VS_ProgramFiles=%ProgramFiles(x86)%" -) else ( - set "VS_ProgramFiles=%ProgramFiles%" -) - -call guess_toolset.bat -if errorlevel 1 ( - call :Error_Print "Could not find a suitable toolset.") -goto :eof - -endlocal -goto :eof - - -:Start -set B2_TOOLSET= -set B2_BUILD_ARGS= - -REM If no arguments guess the toolset; -REM or if first argument is an option guess the toolset; -REM otherwise the argument is the toolset to use. -call :Clear_Error -call :Test_Empty %1 -if not errorlevel 1 ( - call :Guess_Toolset - if not errorlevel 1 ( goto Setup_Toolset ) else ( goto Finish ) -) - -call :Clear_Error -call :Test_Option %1 -if not errorlevel 1 ( - call :Guess_Toolset - if not errorlevel 1 ( goto Setup_Toolset ) else ( goto Finish ) -) - -call :Clear_Error -set B2_TOOLSET=%1 -shift -goto Setup_Toolset - - -:Setup_Toolset -REM Setup the toolset command and options. This bit of code -REM needs to be flexible enough to handle both when -REM the toolset was guessed at and found, or when the toolset -REM was indicated in the command arguments. -REM NOTE: The strange multiple "if ?? == _toolset_" tests are that way -REM because in BAT variables are subsituted only once during a single -REM command. A complete "if ... else ..." -REM is a single command, even though it's in multiple lines here. -:Setup_Args -call :Clear_Error -call :Test_Empty %1 -if not errorlevel 1 goto Config_Toolset -call :Clear_Error -call :Test_Option %1 -if errorlevel 1 ( - set B2_BUILD_ARGS=%B2_BUILD_ARGS% %1 - shift - goto Setup_Args -) -:Config_Toolset -call config_toolset.bat -if "_%_known_%_" == "__" ( - call :Error_Print "Unknown toolset: %B2_TOOLSET%" -) -if errorlevel 1 goto Finish - -echo ### -echo ### Using '%B2_TOOLSET%' toolset. -echo ### - -set B2_SOURCES= -set B2_SOURCES=%B2_SOURCES% builtins.cpp class.cpp -set B2_SOURCES=%B2_SOURCES% command.cpp compile.cpp constants.cpp cwd.cpp -set B2_SOURCES=%B2_SOURCES% debug.cpp debugger.cpp -set B2_SOURCES=%B2_SOURCES% execcmd.cpp execnt.cpp execunix.cpp filent.cpp filesys.cpp fileunix.cpp frames.cpp function.cpp -set B2_SOURCES=%B2_SOURCES% glob.cpp hash.cpp hcache.cpp hdrmacro.cpp headers.cpp jam.cpp -set B2_SOURCES=%B2_SOURCES% jamgram.cpp lists.cpp make.cpp make1.cpp md5.cpp mem.cpp modules.cpp -set B2_SOURCES=%B2_SOURCES% native.cpp object.cpp option.cpp output.cpp parse.cpp pathnt.cpp -set B2_SOURCES=%B2_SOURCES% pathsys.cpp pathunix.cpp regexp.cpp rules.cpp scan.cpp search.cpp jam_strings.cpp -set B2_SOURCES=%B2_SOURCES% startup.cpp subst.cpp sysinfo.cpp -set B2_SOURCES=%B2_SOURCES% timestamp.cpp variable.cpp w32_getreg.cpp -set B2_SOURCES=%B2_SOURCES% modules/order.cpp -set B2_SOURCES=%B2_SOURCES% modules/path.cpp -set B2_SOURCES=%B2_SOURCES% modules/property-set.cpp -set B2_SOURCES=%B2_SOURCES% modules/regex.cpp -set B2_SOURCES=%B2_SOURCES% modules/sequence.cpp -set B2_SOURCES=%B2_SOURCES% modules/set.cpp - -set B2_CXXFLAGS=%B2_CXXFLAGS% -DNDEBUG - -@echo ON -%B2_CXX% %CXXFLAGS% %B2_CXXFLAGS% %B2_SOURCES% %B2_CXX_LINK% -dir *.exe - -:Finish -@exit /b %ERRORLEVEL% +@ECHO OFF + +REM ~ Copyright 2002-2007 Rene Rivera. +REM ~ Distributed under the Boost Software License, Version 1.0. +REM ~ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + +setlocal +goto Start + + +:Set_Error +color 00 +goto :eof + + +:Clear_Error +ver >nul +goto :eof + + +:Error_Print +REM Output an error message and set the errorlevel to indicate failure. +setlocal +ECHO ### +ECHO ### %1 +ECHO ### +ECHO ### You can specify the toolset as the argument, i.e.: +ECHO ### .\build.bat msvc +ECHO ### +ECHO ### Toolsets supported by this script are: borland, como, gcc, +ECHO ### gcc-nocygwin, intel-win32, mingw, +ECHO ### vc12, vc14, vc141, vc142, vc143 +ECHO ### +ECHO ### If you have Visual Studio 2017 installed you will need to either update +ECHO ### the Visual Studio 2017 installer or run from VS 2017 Command Prompt +ECHO ### as we where unable to detect your toolset installation. +ECHO ### +call :Set_Error +endlocal +goto :eof + + +:Test_Option +REM Tests whether the given string is in the form of an option: "--*" +call :Clear_Error +setlocal +set test=%1 +if not defined test ( + call :Set_Error + goto Test_Option_End +) +set test=###%test%### +set test=%test:"###=% +set test=%test:###"=% +set test=%test:###=% +if not "-" == "%test:~1,1%" call :Set_Error +:Test_Option_End +endlocal +goto :eof + + +:Test_Empty +REM Tests whether the given string is not empty +call :Clear_Error +setlocal +set test=%1 +if not defined test ( + call :Clear_Error + goto Test_Empty_End +) +set test=###%test%### +set test=%test:"###=% +set test=%test:###"=% +set test=%test:###=% +if not "" == "%test%" call :Set_Error +:Test_Empty_End +endlocal +goto :eof + + +:Guess_Toolset +set local +REM Try and guess the toolset to bootstrap the build with... +REM Sets B2_TOOLSET to the first found toolset. +REM May also set B2_TOOLSET_ROOT to the +REM location of the found toolset. + +call :Clear_Error +call :Test_Empty "%ProgramFiles%" +if not errorlevel 1 set "ProgramFiles=C:\Program Files" + +REM Visual Studio is by default installed to %ProgramFiles% on 32-bit machines and +REM %ProgramFiles(x86)% on 64-bit machines. Making a common variable for both. +call :Clear_Error +call :Test_Empty "%ProgramFiles(x86)%" +if errorlevel 1 ( + set "VS_ProgramFiles=%ProgramFiles(x86)%" +) else ( + set "VS_ProgramFiles=%ProgramFiles%" +) + +call guess_toolset.bat +if errorlevel 1 ( + call :Error_Print "Could not find a suitable toolset.") +goto :eof + +endlocal +goto :eof + + +:Start +set B2_TOOLSET= +set B2_BUILD_ARGS= + +REM If no arguments guess the toolset; +REM or if first argument is an option guess the toolset; +REM otherwise the argument is the toolset to use. +call :Clear_Error +call :Test_Empty %1 +if not errorlevel 1 ( + call :Guess_Toolset + if not errorlevel 1 ( goto Setup_Toolset ) else ( goto Finish ) +) + +call :Clear_Error +call :Test_Option %1 +if not errorlevel 1 ( + call :Guess_Toolset + if not errorlevel 1 ( goto Setup_Toolset ) else ( goto Finish ) +) + +call :Clear_Error +set B2_TOOLSET=%1 +shift +goto Setup_Toolset + + +:Setup_Toolset +REM Setup the toolset command and options. This bit of code +REM needs to be flexible enough to handle both when +REM the toolset was guessed at and found, or when the toolset +REM was indicated in the command arguments. +REM NOTE: The strange multiple "if ?? == _toolset_" tests are that way +REM because in BAT variables are subsituted only once during a single +REM command. A complete "if ... else ..." +REM is a single command, even though it's in multiple lines here. +:Setup_Args +call :Clear_Error +call :Test_Empty %1 +if not errorlevel 1 goto Config_Toolset +call :Clear_Error +call :Test_Option %1 +if errorlevel 1 ( + set B2_BUILD_ARGS=%B2_BUILD_ARGS% %1 + shift + goto Setup_Args +) +:Config_Toolset +call config_toolset.bat +if "_%_known_%_" == "__" ( + call :Error_Print "Unknown toolset: %B2_TOOLSET%" +) +if errorlevel 1 goto Finish + +echo ### +echo ### Using '%B2_TOOLSET%' toolset. +echo ### + +set B2_SOURCES= +set B2_SOURCES=%B2_SOURCES% builtins.cpp class.cpp +set B2_SOURCES=%B2_SOURCES% command.cpp compile.cpp constants.cpp cwd.cpp +set B2_SOURCES=%B2_SOURCES% debug.cpp debugger.cpp +set B2_SOURCES=%B2_SOURCES% execcmd.cpp execnt.cpp execunix.cpp filent.cpp filesys.cpp fileunix.cpp frames.cpp function.cpp +set B2_SOURCES=%B2_SOURCES% glob.cpp hash.cpp hcache.cpp hdrmacro.cpp headers.cpp jam.cpp +set B2_SOURCES=%B2_SOURCES% jamgram.cpp lists.cpp make.cpp make1.cpp md5.cpp mem.cpp modules.cpp +set B2_SOURCES=%B2_SOURCES% native.cpp object.cpp option.cpp output.cpp parse.cpp pathnt.cpp +set B2_SOURCES=%B2_SOURCES% pathsys.cpp pathunix.cpp regexp.cpp rules.cpp scan.cpp search.cpp jam_strings.cpp +set B2_SOURCES=%B2_SOURCES% startup.cpp subst.cpp sysinfo.cpp +set B2_SOURCES=%B2_SOURCES% timestamp.cpp variable.cpp w32_getreg.cpp +set B2_SOURCES=%B2_SOURCES% modules/order.cpp +set B2_SOURCES=%B2_SOURCES% modules/path.cpp +set B2_SOURCES=%B2_SOURCES% modules/property-set.cpp +set B2_SOURCES=%B2_SOURCES% modules/regex.cpp +set B2_SOURCES=%B2_SOURCES% modules/sequence.cpp +set B2_SOURCES=%B2_SOURCES% modules/set.cpp + +set B2_CXXFLAGS=%B2_CXXFLAGS% -DNDEBUG + +@echo ON +%B2_CXX% %CXXFLAGS% %B2_CXXFLAGS% %B2_SOURCES% %B2_CXX_LINK% +dir *.exe + +:Finish +@exit /b %ERRORLEVEL% diff -Nru boost1.81-1.81.0/tools/build/src/engine/config_toolset.bat boost1.81-1.81.0/tools/build/src/engine/config_toolset.bat --- boost1.81-1.81.0/tools/build/src/engine/config_toolset.bat 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/build/src/engine/config_toolset.bat 2022-12-24 13:24:17.405610600 +0000 @@ -1,239 +1,239 @@ -@ECHO OFF - -REM ~ Copyright 2002-2018 Rene Rivera. -REM ~ Distributed under the Boost Software License, Version 1.0. -REM ~ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) - -:Start -REM Setup the toolset command and options. -if "_%B2_TOOLSET%_" == "_msvc_" call :Config_MSVC -if "_%B2_TOOLSET%_" == "_vc12_" call :Config_VC12 -if "_%B2_TOOLSET%_" == "_vc14_" call :Config_VC14 -if "_%B2_TOOLSET%_" == "_vc141_" call :Config_VC141 -if "_%B2_TOOLSET%_" == "_vc142_" call :Config_VC142 -if "_%B2_TOOLSET%_" == "_vc143_" call :Config_VC143 -if "_%B2_TOOLSET%_" == "_borland_" call :Config_BORLAND -if "_%B2_TOOLSET%_" == "_como_" call :Config_COMO -if "_%B2_TOOLSET%_" == "_gcc_" call :Config_GCC -if "_%B2_TOOLSET%_" == "_clang_" call :Config_CLANG -if "_%B2_TOOLSET%_" == "_gcc-nocygwin_" call :Config_GCC_NOCYGWIN -if "_%B2_TOOLSET%_" == "_intel-win32_" call :Config_INTEL_WIN32 -if "_%B2_TOOLSET%_" == "_mingw_" call :Config_MINGW -exit /b %errorlevel% - -:Call_If_Exists -ECHO Call_If_Exists %* -if EXIST %1 call %* -goto :eof - -:Config_MSVC -if not defined CXX ( set "CXX=cl" ) -if NOT "_%MSVCDir%_" == "__" ( - set "B2_TOOLSET_ROOT=%MSVCDir%\" - ) -call :Call_If_Exists "%B2_TOOLSET_ROOT%bin\VCVARS32.BAT" -if not "_%B2_TOOLSET_ROOT%_" == "__" ( - set "PATH=%B2_TOOLSET_ROOT%bin;%PATH%" - ) -set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" -set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" -set "_known_=1" -goto :eof - -:Config_VC11 -if not defined CXX ( set "CXX=cl" ) -if NOT "_%VS110COMNTOOLS%_" == "__" ( - set "B2_TOOLSET_ROOT=%VS110COMNTOOLS%..\..\VC\" - ) -if "_%VCINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%VCVARSALL.BAT" %B2_BUILD_ARGS% -if NOT "_%B2_TOOLSET_ROOT%_" == "__" ( - if "_%VCINSTALLDIR%_" == "__" ( - set "PATH=%B2_TOOLSET_ROOT%bin;%PATH%" - ) ) -set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" -set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" -set "_known_=1" -goto :eof - -:Config_VC12 -if not defined CXX ( set "CXX=cl" ) -if NOT "_%VS120COMNTOOLS%_" == "__" ( - set "B2_TOOLSET_ROOT=%VS120COMNTOOLS%..\..\VC\" - ) - -if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% -set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% - -if "_%VCINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%VCVARSALL.BAT" %B2_BUILD_ARGS% -if NOT "_%B2_TOOLSET_ROOT%_" == "__" ( - if "_%VCINSTALLDIR%_" == "__" ( - set "PATH=%B2_TOOLSET_ROOT%bin;%PATH%" - ) ) -set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" -set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" -set "_known_=1" -goto :eof - -:Config_VC14 -if not defined CXX ( set "CXX=cl" ) -if "_%B2_TOOLSET_ROOT%_" == "__" ( - if NOT "_%VS140COMNTOOLS%_" == "__" ( - set "B2_TOOLSET_ROOT=%VS140COMNTOOLS%..\..\VC\" - )) - -if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% -set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% - -if "_%VCINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%VCVARSALL.BAT" %B2_BUILD_ARGS% -if NOT "_%B2_TOOLSET_ROOT%_" == "__" ( - if "_%VCINSTALLDIR%_" == "__" ( - set "PATH=%B2_TOOLSET_ROOT%bin;%PATH%" - ) ) -set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" -set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" -set "_known_=1" -goto :eof - -:Config_VC141 -if not defined CXX ( set "CXX=cl" ) -call vswhere_usability_wrapper.cmd -REM Reset ERRORLEVEL since from now on it's all based on ENV vars -ver > nul 2> nul -if "_%B2_TOOLSET_ROOT%_" == "__" ( - if NOT "_%VS150COMNTOOLS%_" == "__" ( - set "B2_TOOLSET_ROOT=%VS150COMNTOOLS%..\..\VC\" - )) - -if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% -set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% - -REM return to current directory as vsdevcmd_end.bat switches to %USERPROFILE%\Source if it exists. -pushd %CD% -if "_%VSINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%Auxiliary\Build\vcvarsall.bat" %B2_BUILD_ARGS% -popd -set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" -set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" -set "_known_=1" -goto :eof - -:Config_VC142 -if not defined CXX ( set "CXX=cl" ) -call vswhere_usability_wrapper.cmd -REM Reset ERRORLEVEL since from now on it's all based on ENV vars -ver > nul 2> nul -if "_%B2_TOOLSET_ROOT%_" == "__" ( - if NOT "_%VS160COMNTOOLS%_" == "__" ( - set "B2_TOOLSET_ROOT=%VS160COMNTOOLS%..\..\VC\" - )) - -if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% -set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% - -REM return to current directory as vsdevcmd_end.bat switches to %USERPROFILE%\Source if it exists. -pushd %CD% -if "_%VSINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%Auxiliary\Build\vcvarsall.bat" %B2_BUILD_ARGS% -popd -set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" -set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" -set "_known_=1" -goto :eof - -:Config_VC143 -if not defined CXX ( set "CXX=cl" ) -call vswhere_usability_wrapper.cmd -REM Reset ERRORLEVEL since from now on it's all based on ENV vars -ver > nul 2> nul -if "_%B2_TOOLSET_ROOT%_" == "__" ( - if NOT "_%VS170COMNTOOLS%_" == "__" ( - set "B2_TOOLSET_ROOT=%VS170COMNTOOLS%..\..\VC\" - )) - -if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% -set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% - -REM return to current directory as vsdevcmd_end.bat switches to %USERPROFILE%\Source if it exists. -pushd %CD% -if "_%VSINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%Auxiliary\Build\vcvarsall.bat" %B2_BUILD_ARGS% -popd -@REM set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" -set "B2_CXX="%CXX%" /nologo -TP /wd4996 /wd4675 /EHs /GR /Zc:throwingNew /O2 /Ob2 /W3 /MD /Zc:forScope /Zc:wchar_t /Zc:inline /Gw /favor:blend /Feb2" -set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" -set "_known_=1" -goto :eof - -:Config_VCUNK -if NOT "_%B2_TOOLSET%_" == "_vcunk_" goto Skip_VCUNK -call vswhere_usability_wrapper.cmd -REM Reset ERRORLEVEL since from now on it's all based on ENV vars -ver > nul 2> nul -if "_%B2_TOOLSET_ROOT%_" == "__" ( - if NOT "_%VSUNKCOMNTOOLS%_" == "__" ( - set "B2_TOOLSET_ROOT=%VSUNKCOMNTOOLS%..\..\VC\" - )) - -if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% -set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% - -REM return to current directory as vsdevcmd_end.bat switches to %USERPROFILE%\Source if it exists. -pushd %CD% -if "_%VSINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%Auxiliary\Build\vcvarsall.bat" %B2_BUILD_ARGS% -popd -set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" -set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" -set "_known_=1" -goto :eof - -:Config_BORLAND -if not defined CXX ( set "CXX=bcc32c" ) -if "_%B2_TOOLSET_ROOT%_" == "__" ( - call guess_toolset.bat test_path bcc32c.exe ) -if "_%B2_TOOLSET_ROOT%_" == "__" ( - if not errorlevel 1 ( - set "B2_TOOLSET_ROOT=%FOUND_PATH%..\" - ) ) -if not "_%B2_TOOLSET_ROOT%_" == "__" ( - set "PATH=%B2_TOOLSET_ROOT%Bin;%PATH%" - ) -set "B2_CXX="%CXX%" -tC -P -O2 -w- -I"%B2_TOOLSET_ROOT%Include" -L"%B2_TOOLSET_ROOT%Lib" -eb2" -set "_known_=1" -goto :eof - -:Config_COMO -if not defined CXX ( set "CXX=como" ) -set "B2_CXX="%CXX%" --inlining -o b2.exe" -set "_known_=1" -goto :eof - -:Config_GCC -if not defined CXX ( set "CXX=g++" ) -set "B2_CXX="%CXX%" -x c++ -std=c++11 -s -O3 -o b2.exe -D_GNU_SOURCE" -set "_known_=1" -goto :eof - -:Config_CLANG -if not defined CXX ( set "CXX=clang++" ) -set "B2_CXX="%CXX%" -x c++ -std=c++11 -s -O3 -o b2.exe" -set "_known_=1" -goto :eof - -:Config_GCC_NOCYGWIN -if not defined CXX ( set "CXX=g++" ) -set "B2_CXX="%CXX%" -x c++ -std=c++11 -s -O3 -mno-cygwin -o b2.exe" -set "_known_=1" -goto :eof - -:Config_INTEL_WIN32 -if not defined CXX ( set "CXX=icl" ) -set "B2_CXX="%CXX%" /nologo /MT /O2 /Ob2 /Gy /GF /GA /GB /Feb2" -set "_known_=1" -goto :eof - -:Config_MINGW -if not defined CXX ( set "CXX=g++" ) -if not "_%B2_TOOLSET_ROOT%_" == "__" ( - set "PATH=%B2_TOOLSET_ROOT%bin;%PATH%" - ) -for /F "delims=" %%I in ("%CXX%") do set "PATH=%PATH%;%%~dpI" -set "B2_CXX="%CXX%" -x c++ -std=c++11 -s -O3 -o b2.exe" -set "_known_=1" -goto :eof +@ECHO OFF + +REM ~ Copyright 2002-2018 Rene Rivera. +REM ~ Distributed under the Boost Software License, Version 1.0. +REM ~ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + +:Start +REM Setup the toolset command and options. +if "_%B2_TOOLSET%_" == "_msvc_" call :Config_MSVC +if "_%B2_TOOLSET%_" == "_vc12_" call :Config_VC12 +if "_%B2_TOOLSET%_" == "_vc14_" call :Config_VC14 +if "_%B2_TOOLSET%_" == "_vc141_" call :Config_VC141 +if "_%B2_TOOLSET%_" == "_vc142_" call :Config_VC142 +if "_%B2_TOOLSET%_" == "_vc143_" call :Config_VC143 +if "_%B2_TOOLSET%_" == "_borland_" call :Config_BORLAND +if "_%B2_TOOLSET%_" == "_como_" call :Config_COMO +if "_%B2_TOOLSET%_" == "_gcc_" call :Config_GCC +if "_%B2_TOOLSET%_" == "_clang_" call :Config_CLANG +if "_%B2_TOOLSET%_" == "_gcc-nocygwin_" call :Config_GCC_NOCYGWIN +if "_%B2_TOOLSET%_" == "_intel-win32_" call :Config_INTEL_WIN32 +if "_%B2_TOOLSET%_" == "_mingw_" call :Config_MINGW +exit /b %errorlevel% + +:Call_If_Exists +ECHO Call_If_Exists %* +if EXIST %1 call %* +goto :eof + +:Config_MSVC +if not defined CXX ( set "CXX=cl" ) +if NOT "_%MSVCDir%_" == "__" ( + set "B2_TOOLSET_ROOT=%MSVCDir%\" + ) +call :Call_If_Exists "%B2_TOOLSET_ROOT%bin\VCVARS32.BAT" +if not "_%B2_TOOLSET_ROOT%_" == "__" ( + set "PATH=%B2_TOOLSET_ROOT%bin;%PATH%" + ) +set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" +set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" +set "_known_=1" +goto :eof + +:Config_VC11 +if not defined CXX ( set "CXX=cl" ) +if NOT "_%VS110COMNTOOLS%_" == "__" ( + set "B2_TOOLSET_ROOT=%VS110COMNTOOLS%..\..\VC\" + ) +if "_%VCINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%VCVARSALL.BAT" %B2_BUILD_ARGS% +if NOT "_%B2_TOOLSET_ROOT%_" == "__" ( + if "_%VCINSTALLDIR%_" == "__" ( + set "PATH=%B2_TOOLSET_ROOT%bin;%PATH%" + ) ) +set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" +set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" +set "_known_=1" +goto :eof + +:Config_VC12 +if not defined CXX ( set "CXX=cl" ) +if NOT "_%VS120COMNTOOLS%_" == "__" ( + set "B2_TOOLSET_ROOT=%VS120COMNTOOLS%..\..\VC\" + ) + +if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% +set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% + +if "_%VCINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%VCVARSALL.BAT" %B2_BUILD_ARGS% +if NOT "_%B2_TOOLSET_ROOT%_" == "__" ( + if "_%VCINSTALLDIR%_" == "__" ( + set "PATH=%B2_TOOLSET_ROOT%bin;%PATH%" + ) ) +set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" +set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" +set "_known_=1" +goto :eof + +:Config_VC14 +if not defined CXX ( set "CXX=cl" ) +if "_%B2_TOOLSET_ROOT%_" == "__" ( + if NOT "_%VS140COMNTOOLS%_" == "__" ( + set "B2_TOOLSET_ROOT=%VS140COMNTOOLS%..\..\VC\" + )) + +if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% +set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% + +if "_%VCINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%VCVARSALL.BAT" %B2_BUILD_ARGS% +if NOT "_%B2_TOOLSET_ROOT%_" == "__" ( + if "_%VCINSTALLDIR%_" == "__" ( + set "PATH=%B2_TOOLSET_ROOT%bin;%PATH%" + ) ) +set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" +set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" +set "_known_=1" +goto :eof + +:Config_VC141 +if not defined CXX ( set "CXX=cl" ) +call vswhere_usability_wrapper.cmd +REM Reset ERRORLEVEL since from now on it's all based on ENV vars +ver > nul 2> nul +if "_%B2_TOOLSET_ROOT%_" == "__" ( + if NOT "_%VS150COMNTOOLS%_" == "__" ( + set "B2_TOOLSET_ROOT=%VS150COMNTOOLS%..\..\VC\" + )) + +if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% +set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% + +REM return to current directory as vsdevcmd_end.bat switches to %USERPROFILE%\Source if it exists. +pushd %CD% +if "_%VSINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%Auxiliary\Build\vcvarsall.bat" %B2_BUILD_ARGS% +popd +set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" +set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" +set "_known_=1" +goto :eof + +:Config_VC142 +if not defined CXX ( set "CXX=cl" ) +call vswhere_usability_wrapper.cmd +REM Reset ERRORLEVEL since from now on it's all based on ENV vars +ver > nul 2> nul +if "_%B2_TOOLSET_ROOT%_" == "__" ( + if NOT "_%VS160COMNTOOLS%_" == "__" ( + set "B2_TOOLSET_ROOT=%VS160COMNTOOLS%..\..\VC\" + )) + +if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% +set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% + +REM return to current directory as vsdevcmd_end.bat switches to %USERPROFILE%\Source if it exists. +pushd %CD% +if "_%VSINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%Auxiliary\Build\vcvarsall.bat" %B2_BUILD_ARGS% +popd +set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" +set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" +set "_known_=1" +goto :eof + +:Config_VC143 +if not defined CXX ( set "CXX=cl" ) +call vswhere_usability_wrapper.cmd +REM Reset ERRORLEVEL since from now on it's all based on ENV vars +ver > nul 2> nul +if "_%B2_TOOLSET_ROOT%_" == "__" ( + if NOT "_%VS170COMNTOOLS%_" == "__" ( + set "B2_TOOLSET_ROOT=%VS170COMNTOOLS%..\..\VC\" + )) + +if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% +set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% + +REM return to current directory as vsdevcmd_end.bat switches to %USERPROFILE%\Source if it exists. +pushd %CD% +if "_%VSINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%Auxiliary\Build\vcvarsall.bat" %B2_BUILD_ARGS% +popd +@REM set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" +set "B2_CXX="%CXX%" /nologo -TP /wd4996 /wd4675 /EHs /GR /Zc:throwingNew /O2 /Ob2 /W3 /MD /Zc:forScope /Zc:wchar_t /Zc:inline /Gw /favor:blend /Feb2" +set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" +set "_known_=1" +goto :eof + +:Config_VCUNK +if NOT "_%B2_TOOLSET%_" == "_vcunk_" goto Skip_VCUNK +call vswhere_usability_wrapper.cmd +REM Reset ERRORLEVEL since from now on it's all based on ENV vars +ver > nul 2> nul +if "_%B2_TOOLSET_ROOT%_" == "__" ( + if NOT "_%VSUNKCOMNTOOLS%_" == "__" ( + set "B2_TOOLSET_ROOT=%VSUNKCOMNTOOLS%..\..\VC\" + )) + +if "_%B2_ARCH%_" == "__" set B2_ARCH=%PROCESSOR_ARCHITECTURE% +set B2_BUILD_ARGS=%B2_BUILD_ARGS% %B2_ARCH% + +REM return to current directory as vsdevcmd_end.bat switches to %USERPROFILE%\Source if it exists. +pushd %CD% +if "_%VSINSTALLDIR%_" == "__" call :Call_If_Exists "%B2_TOOLSET_ROOT%Auxiliary\Build\vcvarsall.bat" %B2_BUILD_ARGS% +popd +set "B2_CXX="%CXX%" /nologo /MP /MT /TP /Feb2 /wd4996 /O2 /GL /EHsc" +set "B2_CXX_LINK=/link kernel32.lib advapi32.lib user32.lib" +set "_known_=1" +goto :eof + +:Config_BORLAND +if not defined CXX ( set "CXX=bcc32c" ) +if "_%B2_TOOLSET_ROOT%_" == "__" ( + call guess_toolset.bat test_path bcc32c.exe ) +if "_%B2_TOOLSET_ROOT%_" == "__" ( + if not errorlevel 1 ( + set "B2_TOOLSET_ROOT=%FOUND_PATH%..\" + ) ) +if not "_%B2_TOOLSET_ROOT%_" == "__" ( + set "PATH=%B2_TOOLSET_ROOT%Bin;%PATH%" + ) +set "B2_CXX="%CXX%" -tC -P -O2 -w- -I"%B2_TOOLSET_ROOT%Include" -L"%B2_TOOLSET_ROOT%Lib" -eb2" +set "_known_=1" +goto :eof + +:Config_COMO +if not defined CXX ( set "CXX=como" ) +set "B2_CXX="%CXX%" --inlining -o b2.exe" +set "_known_=1" +goto :eof + +:Config_GCC +if not defined CXX ( set "CXX=g++" ) +set "B2_CXX="%CXX%" -x c++ -std=c++11 -s -O3 -o b2.exe -D_GNU_SOURCE" +set "_known_=1" +goto :eof + +:Config_CLANG +if not defined CXX ( set "CXX=clang++" ) +set "B2_CXX="%CXX%" -x c++ -std=c++11 -s -O3 -o b2.exe" +set "_known_=1" +goto :eof + +:Config_GCC_NOCYGWIN +if not defined CXX ( set "CXX=g++" ) +set "B2_CXX="%CXX%" -x c++ -std=c++11 -s -O3 -mno-cygwin -o b2.exe" +set "_known_=1" +goto :eof + +:Config_INTEL_WIN32 +if not defined CXX ( set "CXX=icl" ) +set "B2_CXX="%CXX%" /nologo /MT /O2 /Ob2 /Gy /GF /GA /GB /Feb2" +set "_known_=1" +goto :eof + +:Config_MINGW +if not defined CXX ( set "CXX=g++" ) +if not "_%B2_TOOLSET_ROOT%_" == "__" ( + set "PATH=%B2_TOOLSET_ROOT%bin;%PATH%" + ) +for /F "delims=" %%I in ("%CXX%") do set "PATH=%PATH%;%%~dpI" +set "B2_CXX="%CXX%" -x c++ -std=c++11 -s -O3 -o b2.exe" +set "_known_=1" +goto :eof diff -Nru boost1.81-1.81.0/tools/build/src/engine/guess_toolset.bat boost1.81-1.81.0/tools/build/src/engine/guess_toolset.bat --- boost1.81-1.81.0/tools/build/src/engine/guess_toolset.bat 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/build/src/engine/guess_toolset.bat 2022-12-24 13:24:17.409610500 +0000 @@ -1,107 +1,107 @@ -@ECHO OFF - -REM ~ Copyright 2002-2018 Rene Rivera. -REM ~ Distributed under the Boost Software License, Version 1.0. -REM ~ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) - -if "_%1_" == "_yacc_" goto Guess_Yacc -if "_%1_" == "_test_path_" ( - shift - goto Test_Path) -goto Guess - - -:Clear_Error -ver >nul -goto :eof - - -:Test_Path -REM Tests for the given executable file presence in the directories in the PATH -REM environment variable. Additionally sets FOUND_PATH to the path of the -REM found file. -call :Clear_Error -setlocal -set test=%~$PATH:1 -endlocal -if not errorlevel 1 set FOUND_PATH=%~dp$PATH:1 -goto :eof - - -:Guess -REM Let vswhere tell us where msvc is at, if available. -call :Clear_Error -call vswhere_usability_wrapper.cmd -call :Clear_Error -if NOT "_%VS170COMNTOOLS%_" == "__" ( - set "B2_TOOLSET=vc143" - set "B2_TOOLSET_ROOT=%VS170COMNTOOLS%..\..\VC\" - goto :eof) -if NOT "_%VS160COMNTOOLS%_" == "__" ( - set "B2_TOOLSET=vc142" - set "B2_TOOLSET_ROOT=%VS160COMNTOOLS%..\..\VC\" - goto :eof) -if NOT "_%VS150COMNTOOLS%_" == "__" ( - set "B2_TOOLSET=vc141" - set "B2_TOOLSET_ROOT=%VS150COMNTOOLS%..\..\VC\" - goto :eof) -REM VSUNKCOMNTOOLS represents unknown but detected version from vswhere -if NOT "_%VSUNKCOMNTOOLS%_" == "__" ( - set "B2_TOOLSET=vcunk" - set "B2_TOOLSET_ROOT=%VSUNKCOMNTOOLS%..\..\VC\" - goto :eof) -if EXIST "%VS_ProgramFiles%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ( - set "B2_TOOLSET=vc141" - set "B2_TOOLSET_ROOT=%VS_ProgramFiles%\Microsoft Visual Studio\2017\Enterprise\VC\" - exit /b 0) -if EXIST "%VS_ProgramFiles%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat" ( - set "B2_TOOLSET=vc141" - set "B2_TOOLSET_ROOT=%VS_ProgramFiles%\Microsoft Visual Studio\2017\Professional\VC\" - exit /b 0) -if EXIST "%VS_ProgramFiles%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" ( - set "B2_TOOLSET=vc141" - set "B2_TOOLSET_ROOT=%VS_ProgramFiles%\Microsoft Visual Studio\2017\Community\VC\" - exit /b 0) -if NOT "_%VS140COMNTOOLS%_" == "__" ( - set "B2_TOOLSET=vc14" - set "B2_TOOLSET_ROOT=%VS140COMNTOOLS%..\..\VC\" - exit /b 0) -if EXIST "%VS_ProgramFiles%\Microsoft Visual Studio 14.0\VC\VCVARSALL.BAT" ( - set "B2_TOOLSET=vc14" - set "B2_TOOLSET_ROOT=%VS_ProgramFiles%\Microsoft Visual Studio 14.0\VC\" - exit /b 0) -if NOT "_%VS120COMNTOOLS%_" == "__" ( - set "B2_TOOLSET=vc12" - set "B2_TOOLSET_ROOT=%VS120COMNTOOLS%..\..\VC\" - exit /b 0) -if EXIST "%VS_ProgramFiles%\Microsoft Visual Studio 12.0\VC\VCVARSALL.BAT" ( - set "B2_TOOLSET=vc12" - set "B2_TOOLSET_ROOT=%VS_ProgramFiles%\Microsoft Visual Studio 12.0\VC\" - exit /b 0) -call :Test_Path cl.exe -if not errorlevel 1 ( - set "B2_TOOLSET=msvc" - set "B2_TOOLSET_ROOT=%FOUND_PATH%..\" - exit /b 0) -call :Test_Path vcvars32.bat -if not errorlevel 1 ( - set "B2_TOOLSET=msvc" - call "%FOUND_PATH%VCVARS32.BAT" - set "B2_TOOLSET_ROOT=%MSVCDir%\" - exit /b 0) -call :Test_Path bcc32c.exe -if not errorlevel 1 ( - set "B2_TOOLSET=borland" - set "B2_TOOLSET_ROOT=%FOUND_PATH%..\" - exit /b 0) -call :Test_Path icl.exe -if not errorlevel 1 ( - set "B2_TOOLSET=intel-win32" - set "B2_TOOLSET_ROOT=%FOUND_PATH%..\" - exit /b 0) -if EXIST "C:\MinGW\bin\gcc.exe" ( - set "B2_TOOLSET=mingw" - set "B2_TOOLSET_ROOT=C:\MinGW\" - exit /b 0) -REM Could not find a suitable toolset -exit /b 1 +@ECHO OFF + +REM ~ Copyright 2002-2018 Rene Rivera. +REM ~ Distributed under the Boost Software License, Version 1.0. +REM ~ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + +if "_%1_" == "_yacc_" goto Guess_Yacc +if "_%1_" == "_test_path_" ( + shift + goto Test_Path) +goto Guess + + +:Clear_Error +ver >nul +goto :eof + + +:Test_Path +REM Tests for the given executable file presence in the directories in the PATH +REM environment variable. Additionally sets FOUND_PATH to the path of the +REM found file. +call :Clear_Error +setlocal +set test=%~$PATH:1 +endlocal +if not errorlevel 1 set FOUND_PATH=%~dp$PATH:1 +goto :eof + + +:Guess +REM Let vswhere tell us where msvc is at, if available. +call :Clear_Error +call vswhere_usability_wrapper.cmd +call :Clear_Error +if NOT "_%VS170COMNTOOLS%_" == "__" ( + set "B2_TOOLSET=vc143" + set "B2_TOOLSET_ROOT=%VS170COMNTOOLS%..\..\VC\" + goto :eof) +if NOT "_%VS160COMNTOOLS%_" == "__" ( + set "B2_TOOLSET=vc142" + set "B2_TOOLSET_ROOT=%VS160COMNTOOLS%..\..\VC\" + goto :eof) +if NOT "_%VS150COMNTOOLS%_" == "__" ( + set "B2_TOOLSET=vc141" + set "B2_TOOLSET_ROOT=%VS150COMNTOOLS%..\..\VC\" + goto :eof) +REM VSUNKCOMNTOOLS represents unknown but detected version from vswhere +if NOT "_%VSUNKCOMNTOOLS%_" == "__" ( + set "B2_TOOLSET=vcunk" + set "B2_TOOLSET_ROOT=%VSUNKCOMNTOOLS%..\..\VC\" + goto :eof) +if EXIST "%VS_ProgramFiles%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ( + set "B2_TOOLSET=vc141" + set "B2_TOOLSET_ROOT=%VS_ProgramFiles%\Microsoft Visual Studio\2017\Enterprise\VC\" + exit /b 0) +if EXIST "%VS_ProgramFiles%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat" ( + set "B2_TOOLSET=vc141" + set "B2_TOOLSET_ROOT=%VS_ProgramFiles%\Microsoft Visual Studio\2017\Professional\VC\" + exit /b 0) +if EXIST "%VS_ProgramFiles%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" ( + set "B2_TOOLSET=vc141" + set "B2_TOOLSET_ROOT=%VS_ProgramFiles%\Microsoft Visual Studio\2017\Community\VC\" + exit /b 0) +if NOT "_%VS140COMNTOOLS%_" == "__" ( + set "B2_TOOLSET=vc14" + set "B2_TOOLSET_ROOT=%VS140COMNTOOLS%..\..\VC\" + exit /b 0) +if EXIST "%VS_ProgramFiles%\Microsoft Visual Studio 14.0\VC\VCVARSALL.BAT" ( + set "B2_TOOLSET=vc14" + set "B2_TOOLSET_ROOT=%VS_ProgramFiles%\Microsoft Visual Studio 14.0\VC\" + exit /b 0) +if NOT "_%VS120COMNTOOLS%_" == "__" ( + set "B2_TOOLSET=vc12" + set "B2_TOOLSET_ROOT=%VS120COMNTOOLS%..\..\VC\" + exit /b 0) +if EXIST "%VS_ProgramFiles%\Microsoft Visual Studio 12.0\VC\VCVARSALL.BAT" ( + set "B2_TOOLSET=vc12" + set "B2_TOOLSET_ROOT=%VS_ProgramFiles%\Microsoft Visual Studio 12.0\VC\" + exit /b 0) +call :Test_Path cl.exe +if not errorlevel 1 ( + set "B2_TOOLSET=msvc" + set "B2_TOOLSET_ROOT=%FOUND_PATH%..\" + exit /b 0) +call :Test_Path vcvars32.bat +if not errorlevel 1 ( + set "B2_TOOLSET=msvc" + call "%FOUND_PATH%VCVARS32.BAT" + set "B2_TOOLSET_ROOT=%MSVCDir%\" + exit /b 0) +call :Test_Path bcc32c.exe +if not errorlevel 1 ( + set "B2_TOOLSET=borland" + set "B2_TOOLSET_ROOT=%FOUND_PATH%..\" + exit /b 0) +call :Test_Path icl.exe +if not errorlevel 1 ( + set "B2_TOOLSET=intel-win32" + set "B2_TOOLSET_ROOT=%FOUND_PATH%..\" + exit /b 0) +if EXIST "C:\MinGW\bin\gcc.exe" ( + set "B2_TOOLSET=mingw" + set "B2_TOOLSET_ROOT=C:\MinGW\" + exit /b 0) +REM Could not find a suitable toolset +exit /b 1 diff -Nru boost1.81-1.81.0/tools/build/src/engine/jamgram.cpp boost1.81-1.81.0/tools/build/src/engine/jamgram.cpp --- boost1.81-1.81.0/tools/build/src/engine/jamgram.cpp 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/build/src/engine/jamgram.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,2287 +0,0 @@ -/* A Bison parser, made by GNU Bison 3.8.2. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, - Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, - especially those whose name start with YY_ or yy_. They are - private implementation details that can be changed or removed. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output, and Bison version. */ -#define YYBISON 30802 - -/* Bison version string. */ -#define YYBISON_VERSION "3.8.2" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 0 - -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - - - -/* First part of user prologue. */ -#line 99 "src/engine/jamgram.y" - -#include "jam.h" - -#include "lists.h" -#include "parse.h" -#include "scan.h" -#include "compile.h" -#include "object.h" -#include "rules.h" - -# define YYINITDEPTH 5000 /* for C++ parsing */ -# define YYMAXDEPTH 10000 /* for OSF and other less endowed yaccs */ - -# define F0 -1 -static PARSE * P0 = nullptr; -# define S0 (OBJECT *)0 - -# define pappend( l,r ) parse_make( PARSE_APPEND,l,r,P0,S0,S0,0 ) -# define peval( c,l,r ) parse_make( PARSE_EVAL,l,r,P0,S0,S0,c ) -# define pfor( s,l,r,x ) parse_make( PARSE_FOREACH,l,r,P0,s,S0,x ) -# define pif( l,r,t ) parse_make( PARSE_IF,l,r,t,S0,S0,0 ) -# define pincl( l ) parse_make( PARSE_INCLUDE,l,P0,P0,S0,S0,0 ) -# define plist( s ) parse_make( PARSE_LIST,P0,P0,P0,s,S0,0 ) -# define plocal( l,r,t ) parse_make( PARSE_LOCAL,l,r,t,S0,S0,0 ) -# define pmodule( l,r ) parse_make( PARSE_MODULE,l,r,P0,S0,S0,0 ) -# define pclass( l,r ) parse_make( PARSE_CLASS,l,r,P0,S0,S0,0 ) -# define pnull() parse_make( PARSE_NULL,P0,P0,P0,S0,S0,0 ) -# define pon( l,r ) parse_make( PARSE_ON,l,r,P0,S0,S0,0 ) -# define prule( s,p ) parse_make( PARSE_RULE,p,P0,P0,s,S0,0 ) -# define prules( l,r ) parse_make( PARSE_RULES,l,r,P0,S0,S0,0 ) -# define pset( l,r,a ) parse_make( PARSE_SET,l,r,P0,S0,S0,a ) -# define pset1( l,r,t,a ) parse_make( PARSE_SETTINGS,l,r,t,S0,S0,a ) -# define psetc( s,p,a,l ) parse_make( PARSE_SETCOMP,p,a,P0,s,S0,l ) -# define psete( s,l,s1,f ) parse_make( PARSE_SETEXEC,l,P0,P0,s,s1,f ) -# define pswitch( l,r ) parse_make( PARSE_SWITCH,l,r,P0,S0,S0,0 ) -# define pwhile( l,r ) parse_make( PARSE_WHILE,l,r,P0,S0,S0,0 ) -# define preturn( l ) parse_make( PARSE_RETURN,l,P0,P0,S0,S0,0 ) -# define pbreak() parse_make( PARSE_BREAK,P0,P0,P0,S0,S0,0 ) -# define pcontinue() parse_make( PARSE_CONTINUE,P0,P0,P0,S0,S0,0 ) - -# define pnode( l,r ) parse_make( F0,l,r,P0,S0,S0,0 ) -# define psnode( s,l ) parse_make( F0,l,P0,P0,s,S0,0 ) - - -#line 116 "src/engine/jamgram.cpp" - -# ifndef YY_CAST -# ifdef __cplusplus -# define YY_CAST(Type, Val) static_cast (Val) -# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) -# else -# define YY_CAST(Type, Val) ((Type) (Val)) -# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) -# endif -# endif -# ifndef YY_NULLPTR -# if defined __cplusplus -# if 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif -# else -# define YY_NULLPTR ((void*)0) -# endif -# endif - -#include "jamgram.hpp" -/* Symbol kind. */ -enum yysymbol_kind_t -{ - YYSYMBOL_YYEMPTY = -2, - YYSYMBOL_YYEOF = 0, /* "end of file" */ - YYSYMBOL_YYerror = 1, /* error */ - YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ - YYSYMBOL__BANG_t = 3, /* _BANG_t */ - YYSYMBOL__BANG_EQUALS_t = 4, /* _BANG_EQUALS_t */ - YYSYMBOL__AMPER_t = 5, /* _AMPER_t */ - YYSYMBOL__AMPERAMPER_t = 6, /* _AMPERAMPER_t */ - YYSYMBOL__LPAREN_t = 7, /* _LPAREN_t */ - YYSYMBOL__RPAREN_t = 8, /* _RPAREN_t */ - YYSYMBOL__PLUS_EQUALS_t = 9, /* _PLUS_EQUALS_t */ - YYSYMBOL__COLON_t = 10, /* _COLON_t */ - YYSYMBOL__SEMIC_t = 11, /* _SEMIC_t */ - YYSYMBOL__LANGLE_t = 12, /* _LANGLE_t */ - YYSYMBOL__LANGLE_EQUALS_t = 13, /* _LANGLE_EQUALS_t */ - YYSYMBOL__EQUALS_t = 14, /* _EQUALS_t */ - YYSYMBOL__RANGLE_t = 15, /* _RANGLE_t */ - YYSYMBOL__RANGLE_EQUALS_t = 16, /* _RANGLE_EQUALS_t */ - YYSYMBOL__QUESTION_EQUALS_t = 17, /* _QUESTION_EQUALS_t */ - YYSYMBOL__LBRACKET_t = 18, /* _LBRACKET_t */ - YYSYMBOL__RBRACKET_t = 19, /* _RBRACKET_t */ - YYSYMBOL_ACTIONS_t = 20, /* ACTIONS_t */ - YYSYMBOL_BIND_t = 21, /* BIND_t */ - YYSYMBOL_BREAK_t = 22, /* BREAK_t */ - YYSYMBOL_CASE_t = 23, /* CASE_t */ - YYSYMBOL_CLASS_t = 24, /* CLASS_t */ - YYSYMBOL_CONTINUE_t = 25, /* CONTINUE_t */ - YYSYMBOL_DEFAULT_t = 26, /* DEFAULT_t */ - YYSYMBOL_ELSE_t = 27, /* ELSE_t */ - YYSYMBOL_EXISTING_t = 28, /* EXISTING_t */ - YYSYMBOL_FOR_t = 29, /* FOR_t */ - YYSYMBOL_IF_t = 30, /* IF_t */ - YYSYMBOL_IGNORE_t = 31, /* IGNORE_t */ - YYSYMBOL_IN_t = 32, /* IN_t */ - YYSYMBOL_INCLUDE_t = 33, /* INCLUDE_t */ - YYSYMBOL_LOCAL_t = 34, /* LOCAL_t */ - YYSYMBOL_MODULE_t = 35, /* MODULE_t */ - YYSYMBOL_ON_t = 36, /* ON_t */ - YYSYMBOL_PIECEMEAL_t = 37, /* PIECEMEAL_t */ - YYSYMBOL_QUIETLY_t = 38, /* QUIETLY_t */ - YYSYMBOL_RETURN_t = 39, /* RETURN_t */ - YYSYMBOL_RULE_t = 40, /* RULE_t */ - YYSYMBOL_SWITCH_t = 41, /* SWITCH_t */ - YYSYMBOL_TOGETHER_t = 42, /* TOGETHER_t */ - YYSYMBOL_UPDATED_t = 43, /* UPDATED_t */ - YYSYMBOL_WHILE_t = 44, /* WHILE_t */ - YYSYMBOL__LBRACE_t = 45, /* _LBRACE_t */ - YYSYMBOL__BAR_t = 46, /* _BAR_t */ - YYSYMBOL__BARBAR_t = 47, /* _BARBAR_t */ - YYSYMBOL__RBRACE_t = 48, /* _RBRACE_t */ - YYSYMBOL_ARG = 49, /* ARG */ - YYSYMBOL_STRING = 50, /* STRING */ - YYSYMBOL_YYACCEPT = 51, /* $accept */ - YYSYMBOL_run = 52, /* run */ - YYSYMBOL_block = 53, /* block */ - YYSYMBOL_rules = 54, /* rules */ - YYSYMBOL_55_1 = 55, /* $@1 */ - YYSYMBOL_56_2 = 56, /* $@2 */ - YYSYMBOL_null = 57, /* null */ - YYSYMBOL_assign_list_opt = 58, /* assign_list_opt */ - YYSYMBOL_59_3 = 59, /* $@3 */ - YYSYMBOL_arglist_opt = 60, /* arglist_opt */ - YYSYMBOL_local_opt = 61, /* local_opt */ - YYSYMBOL_else_opt = 62, /* else_opt */ - YYSYMBOL_rule = 63, /* rule */ - YYSYMBOL_64_4 = 64, /* $@4 */ - YYSYMBOL_65_5 = 65, /* $@5 */ - YYSYMBOL_66_6 = 66, /* $@6 */ - YYSYMBOL_67_7 = 67, /* $@7 */ - YYSYMBOL_68_8 = 68, /* $@8 */ - YYSYMBOL_69_9 = 69, /* $@9 */ - YYSYMBOL_70_10 = 70, /* $@10 */ - YYSYMBOL_71_11 = 71, /* $@11 */ - YYSYMBOL_72_12 = 72, /* $@12 */ - YYSYMBOL_73_13 = 73, /* $@13 */ - YYSYMBOL_74_14 = 74, /* $@14 */ - YYSYMBOL_75_15 = 75, /* $@15 */ - YYSYMBOL_76_16 = 76, /* $@16 */ - YYSYMBOL_77_17 = 77, /* $@17 */ - YYSYMBOL_78_18 = 78, /* $@18 */ - YYSYMBOL_79_19 = 79, /* $@19 */ - YYSYMBOL_80_20 = 80, /* $@20 */ - YYSYMBOL_81_21 = 81, /* $@21 */ - YYSYMBOL_82_22 = 82, /* $@22 */ - YYSYMBOL_83_23 = 83, /* $@23 */ - YYSYMBOL_84_24 = 84, /* $@24 */ - YYSYMBOL_85_25 = 85, /* $@25 */ - YYSYMBOL_86_26 = 86, /* $@26 */ - YYSYMBOL_assign = 87, /* assign */ - YYSYMBOL_expr = 88, /* expr */ - YYSYMBOL_89_27 = 89, /* $@27 */ - YYSYMBOL_90_28 = 90, /* $@28 */ - YYSYMBOL_91_29 = 91, /* $@29 */ - YYSYMBOL_92_30 = 92, /* $@30 */ - YYSYMBOL_93_31 = 93, /* $@31 */ - YYSYMBOL_94_32 = 94, /* $@32 */ - YYSYMBOL_95_33 = 95, /* $@33 */ - YYSYMBOL_96_34 = 96, /* $@34 */ - YYSYMBOL_97_35 = 97, /* $@35 */ - YYSYMBOL_98_36 = 98, /* $@36 */ - YYSYMBOL_99_37 = 99, /* $@37 */ - YYSYMBOL_100_38 = 100, /* $@38 */ - YYSYMBOL_101_39 = 101, /* $@39 */ - YYSYMBOL_cases = 102, /* cases */ - YYSYMBOL_case = 103, /* case */ - YYSYMBOL_104_40 = 104, /* $@40 */ - YYSYMBOL_105_41 = 105, /* $@41 */ - YYSYMBOL_lol = 106, /* lol */ - YYSYMBOL_list = 107, /* list */ - YYSYMBOL_listp = 108, /* listp */ - YYSYMBOL_arg = 109, /* arg */ - YYSYMBOL_110_42 = 110, /* @42 */ - YYSYMBOL_func = 111, /* func */ - YYSYMBOL_112_43 = 112, /* $@43 */ - YYSYMBOL_113_44 = 113, /* $@44 */ - YYSYMBOL_114_45 = 114, /* $@45 */ - YYSYMBOL_eflags = 115, /* eflags */ - YYSYMBOL_eflag = 116, /* eflag */ - YYSYMBOL_bindlist = 117, /* bindlist */ - YYSYMBOL_118_46 = 118 /* $@46 */ -}; -typedef enum yysymbol_kind_t yysymbol_kind_t; - - - - -#ifdef short -# undef short -#endif - -/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure - and (if available) are included - so that the code can choose integer types of a good width. */ - -#ifndef __PTRDIFF_MAX__ -# include /* INFRINGES ON USER NAME SPACE */ -# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_STDINT_H -# endif -#endif - -/* Narrow types that promote to a signed type and that can represent a - signed or unsigned integer of at least N bits. In tables they can - save space and decrease cache pressure. Promoting to a signed type - helps avoid bugs in integer arithmetic. */ - -#ifdef __INT_LEAST8_MAX__ -typedef __INT_LEAST8_TYPE__ yytype_int8; -#elif defined YY_STDINT_H -typedef int_least8_t yytype_int8; -#else -typedef signed char yytype_int8; -#endif - -#ifdef __INT_LEAST16_MAX__ -typedef __INT_LEAST16_TYPE__ yytype_int16; -#elif defined YY_STDINT_H -typedef int_least16_t yytype_int16; -#else -typedef short yytype_int16; -#endif - -/* Work around bug in HP-UX 11.23, which defines these macros - incorrectly for preprocessor constants. This workaround can likely - be removed in 2023, as HPE has promised support for HP-UX 11.23 - (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of - . */ -#ifdef __hpux -# undef UINT_LEAST8_MAX -# undef UINT_LEAST16_MAX -# define UINT_LEAST8_MAX 255 -# define UINT_LEAST16_MAX 65535 -#endif - -#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ -typedef __UINT_LEAST8_TYPE__ yytype_uint8; -#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ - && UINT_LEAST8_MAX <= INT_MAX) -typedef uint_least8_t yytype_uint8; -#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX -typedef unsigned char yytype_uint8; -#else -typedef short yytype_uint8; -#endif - -#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ -typedef __UINT_LEAST16_TYPE__ yytype_uint16; -#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ - && UINT_LEAST16_MAX <= INT_MAX) -typedef uint_least16_t yytype_uint16; -#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX -typedef unsigned short yytype_uint16; -#else -typedef int yytype_uint16; -#endif - -#ifndef YYPTRDIFF_T -# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ -# define YYPTRDIFF_T __PTRDIFF_TYPE__ -# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ -# elif defined PTRDIFF_MAX -# ifndef ptrdiff_t -# include /* INFRINGES ON USER NAME SPACE */ -# endif -# define YYPTRDIFF_T ptrdiff_t -# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX -# else -# define YYPTRDIFF_T long -# define YYPTRDIFF_MAXIMUM LONG_MAX -# endif -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned -# endif -#endif - -#define YYSIZE_MAXIMUM \ - YY_CAST (YYPTRDIFF_T, \ - (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ - ? YYPTRDIFF_MAXIMUM \ - : YY_CAST (YYSIZE_T, -1))) - -#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) - - -/* Stored state numbers (used for stacks). */ -typedef yytype_uint8 yy_state_t; - -/* State numbers in computations. */ -typedef int yy_state_fast_t; - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - - -#ifndef YY_ATTRIBUTE_PURE -# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) -# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) -# else -# define YY_ATTRIBUTE_PURE -# endif -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) -# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -# else -# define YY_ATTRIBUTE_UNUSED -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YY_USE(E) ((void) (E)) -#else -# define YY_USE(E) /* empty */ -#endif - -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ -# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") -# else -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# endif -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") -#else -# define YY_INITIAL_VALUE(Value) Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ -# define YY_IGNORE_USELESS_CAST_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") -# define YY_IGNORE_USELESS_CAST_END \ - _Pragma ("GCC diagnostic pop") -#endif -#ifndef YY_IGNORE_USELESS_CAST_BEGIN -# define YY_IGNORE_USELESS_CAST_BEGIN -# define YY_IGNORE_USELESS_CAST_END -#endif - - -#define YY_ASSERT(E) ((void) (0 && (E))) - -#if !defined yyoverflow - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's 'empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* !defined yyoverflow */ - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yy_state_t yyss_alloc; - YYSTYPE yyvs_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYPTRDIFF_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / YYSIZEOF (*yyptr); \ - } \ - while (0) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYPTRDIFF_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (0) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 42 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 242 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 51 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 68 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 121 -/* YYNSTATES -- Number of states. */ -#define YYNSTATES 207 - -/* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 305 - - -/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, with out-of-bounds checking. */ -#define YYTRANSLATE(YYX) \ - (0 <= (YYX) && (YYX) <= YYMAXUTOK \ - ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ - : YYSYMBOL_YYUNDEF) - -/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex. */ -static const yytype_int8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 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, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50 -}; - -#if YYDEBUG -/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_int16 yyrline[] = -{ - 0, 146, 146, 148, 159, 161, 165, 167, 169, 169, - 169, 174, 177, 177, 179, 183, 186, 189, 192, 195, - 198, 200, 202, 202, 204, 204, 206, 206, 208, 208, - 208, 210, 210, 212, 214, 216, 216, 216, 218, 218, - 218, 220, 220, 220, 222, 222, 222, 224, 224, 224, - 226, 226, 226, 228, 228, 228, 228, 230, 233, 235, - 232, 244, 246, 248, 250, 257, 259, 259, 261, 261, - 263, 263, 265, 265, 267, 267, 269, 269, 271, 271, - 273, 273, 275, 275, 277, 277, 279, 279, 281, 281, - 283, 283, 295, 296, 300, 300, 300, 309, 311, 321, - 326, 327, 331, 333, 333, 342, 342, 344, 344, 346, - 346, 357, 358, 362, 364, 366, 368, 370, 372, 382, - 383, 383 -}; -#endif - -/** Accessing symbol of state STATE. */ -#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) - -#if YYDEBUG || 0 -/* The user-facing name of the symbol whose (internal) number is - YYSYMBOL. No bounds checking. */ -static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; - -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "\"end of file\"", "error", "\"invalid token\"", "_BANG_t", - "_BANG_EQUALS_t", "_AMPER_t", "_AMPERAMPER_t", "_LPAREN_t", "_RPAREN_t", - "_PLUS_EQUALS_t", "_COLON_t", "_SEMIC_t", "_LANGLE_t", - "_LANGLE_EQUALS_t", "_EQUALS_t", "_RANGLE_t", "_RANGLE_EQUALS_t", - "_QUESTION_EQUALS_t", "_LBRACKET_t", "_RBRACKET_t", "ACTIONS_t", - "BIND_t", "BREAK_t", "CASE_t", "CLASS_t", "CONTINUE_t", "DEFAULT_t", - "ELSE_t", "EXISTING_t", "FOR_t", "IF_t", "IGNORE_t", "IN_t", "INCLUDE_t", - "LOCAL_t", "MODULE_t", "ON_t", "PIECEMEAL_t", "QUIETLY_t", "RETURN_t", - "RULE_t", "SWITCH_t", "TOGETHER_t", "UPDATED_t", "WHILE_t", "_LBRACE_t", - "_BAR_t", "_BARBAR_t", "_RBRACE_t", "ARG", "STRING", "$accept", "run", - "block", "rules", "$@1", "$@2", "null", "assign_list_opt", "$@3", - "arglist_opt", "local_opt", "else_opt", "rule", "$@4", "$@5", "$@6", - "$@7", "$@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14", "$@15", - "$@16", "$@17", "$@18", "$@19", "$@20", "$@21", "$@22", "$@23", "$@24", - "$@25", "$@26", "assign", "expr", "$@27", "$@28", "$@29", "$@30", "$@31", - "$@32", "$@33", "$@34", "$@35", "$@36", "$@37", "$@38", "$@39", "cases", - "case", "$@40", "$@41", "lol", "list", "listp", "arg", "@42", "func", - "$@43", "$@44", "$@45", "eflags", "eflag", "bindlist", "$@46", YY_NULLPTR -}; - -static const char * -yysymbol_name (yysymbol_kind_t yysymbol) -{ - return yytname[yysymbol]; -} -#endif - -#define YYPACT_NINF (-119) - -#define yypact_value_is_default(Yyn) \ - ((Yyn) == YYPACT_NINF) - -#define YYTABLE_NINF (-25) - -#define yytable_value_is_error(Yyn) \ - 0 - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -static const yytype_int16 yypact[] = -{ - 140, -119, -119, 1, -119, 2, -18, -119, -119, -23, - -119, -9, -119, -119, -119, 140, 12, 31, -119, 4, - 140, 77, -17, 186, -119, -119, -119, -119, -7, 3, - -119, -119, -119, -119, 177, -119, -119, 3, -5, -119, - -119, -119, -119, -119, -119, -119, -119, -119, 33, -119, - -119, -9, -119, 29, -119, -119, -119, -119, -119, -119, - 35, -119, 14, 50, -9, 34, -119, -119, 23, 39, - 52, 53, 40, -119, 66, 45, 94, -119, 67, 30, - -119, -119, -119, 16, -119, -119, -119, 47, -119, -119, - -119, -119, 3, 3, -119, -119, -119, -119, -119, -119, - -119, -119, -119, -119, -119, -119, -119, -119, -119, 84, - -119, -119, -119, 51, -119, -119, 32, 105, -119, -119, - -119, -119, -119, 140, -119, -119, -119, 68, 3, 3, - 3, 3, 3, 3, 3, 3, 140, 3, 3, -119, - -119, -119, 140, 95, 140, 110, -119, -119, -119, -119, - -119, 69, 73, 87, -119, 89, 139, 139, -119, -119, - 89, -119, -119, 90, 226, 226, -119, -119, 140, 91, - -119, 97, 95, 98, -119, -119, -119, -119, -119, -119, - -119, -119, 108, -119, -119, 88, -119, -119, -119, 141, - 177, 145, 102, 140, 177, -119, 149, -119, -119, -119, - -119, 115, -119, -119, -119, 140, -119 -}; - -/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ -static const yytype_int8 yydefact[] = -{ - 2, 103, 111, 0, 47, 0, 18, 41, 22, 8, - 44, 0, 31, 38, 50, 11, 102, 0, 3, 0, - 6, 0, 0, 0, 33, 100, 34, 17, 0, 0, - 100, 100, 100, 102, 18, 100, 100, 0, 0, 5, - 4, 100, 1, 53, 7, 62, 61, 63, 0, 28, - 26, 0, 105, 0, 118, 115, 117, 116, 114, 113, - 119, 112, 0, 97, 99, 0, 88, 90, 0, 65, - 0, 11, 0, 57, 0, 0, 51, 21, 0, 0, - 64, 100, 100, 0, 100, 104, 120, 0, 48, 100, - 101, 35, 0, 0, 68, 78, 80, 70, 72, 66, - 74, 76, 42, 82, 84, 86, 23, 12, 14, 0, - 45, 32, 39, 0, 25, 54, 0, 0, 109, 107, - 106, 100, 58, 11, 98, 100, 89, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 0, 0, 100, - 100, 9, 11, 92, 11, 16, 29, 27, 100, 100, - 121, 0, 0, 0, 91, 69, 79, 81, 71, 73, - 67, 75, 77, 0, 83, 85, 87, 13, 11, 0, - 94, 0, 92, 0, 100, 55, 100, 110, 108, 59, - 49, 36, 20, 10, 46, 0, 40, 93, 52, 0, - 18, 0, 0, 11, 18, 43, 0, 15, 56, 30, - 60, 0, 19, 95, 37, 11, 96 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -119, -119, -118, 25, -119, -119, 96, -119, -119, -119, - 160, -119, -33, -119, -119, -119, -119, -119, -119, -119, - -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, - -119, -119, -119, -119, -119, -119, 55, -4, -119, -119, - -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, - -119, 5, -119, -119, -119, -27, -28, -119, 0, -119, - -119, -119, -119, -119, -119, -119, -119, -119 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_uint8 yydefgoto[] = -{ - 0, 17, 38, 39, 31, 168, 40, 109, 140, 175, - 19, 195, 20, 30, 41, 82, 81, 176, 35, 125, - 193, 36, 143, 29, 136, 32, 142, 25, 123, 37, - 113, 79, 145, 190, 151, 192, 50, 68, 133, 128, - 131, 132, 134, 135, 129, 130, 137, 138, 139, 92, - 93, 171, 172, 185, 205, 62, 63, 64, 69, 22, - 53, 84, 149, 148, 23, 61, 87, 121 -}; - -/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_int16 yytable[] = -{ - 21, 73, 70, 71, 72, 152, 66, 74, 75, 1, - 67, 34, 24, 26, 78, 21, 27, -17, 163, 51, - 21, 1, -24, -24, 169, 18, 173, 94, 95, 96, - -24, 42, 52, 76, 21, 97, 98, 99, 100, 101, - 33, 45, 65, 77, 43, 44, 46, 80, 85, 47, - 183, 83, 33, 116, 117, 118, 86, 120, 48, 88, - 89, -24, 124, 106, 90, 119, 91, 107, 102, 103, - 104, 105, 94, 95, 96, 201, 154, 111, 114, 115, - 97, 98, 99, 100, 101, 110, 45, 206, 126, 127, - 112, 46, 122, 150, 47, 141, 144, 153, 94, 95, - 96, 97, 98, 48, 100, 101, 97, 98, 99, 100, - 101, 166, 167, 49, 103, 104, 147, 174, 170, 179, - 177, 180, 178, 21, 155, 156, 157, 158, 159, 160, - 161, 162, 181, 164, 165, 194, 21, 196, 182, 184, - 103, 104, 21, 94, 21, 186, 188, 189, 191, 197, - 200, 97, 98, 99, 100, 101, 199, 198, 1, 203, - 2, 202, 3, 204, 4, 5, 28, 108, 21, 6, - 7, 146, 0, 8, 9, 10, 11, 187, 0, 12, - -18, 13, 0, 0, 14, 15, 0, 0, 0, 16, - 21, 0, 0, 21, 21, 1, 0, 2, 0, 3, - 0, 4, 5, 0, 0, 21, 6, 7, 0, 0, - 8, 27, 10, 11, 54, 0, 12, 55, 13, 0, - 0, 14, 15, 56, 57, 0, 16, 0, 58, 59, - 94, 95, 96, 0, 0, 60, 0, 0, 97, 98, - 99, 100, 101 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 34, 30, 31, 32, 123, 3, 35, 36, 18, - 7, 11, 11, 11, 41, 15, 34, 40, 136, 36, - 20, 18, 10, 11, 142, 0, 144, 4, 5, 6, - 18, 0, 49, 37, 34, 12, 13, 14, 15, 16, - 49, 9, 49, 48, 40, 20, 14, 14, 19, 17, - 168, 51, 49, 81, 82, 39, 21, 84, 26, 45, - 10, 49, 89, 11, 64, 49, 32, 14, 45, 46, - 47, 32, 4, 5, 6, 193, 8, 11, 11, 49, - 12, 13, 14, 15, 16, 45, 9, 205, 92, 93, - 45, 14, 45, 121, 17, 11, 45, 125, 4, 5, - 6, 12, 13, 26, 15, 16, 12, 13, 14, 15, - 16, 139, 140, 36, 46, 47, 11, 7, 23, 50, - 148, 48, 149, 123, 128, 129, 130, 131, 132, 133, - 134, 135, 45, 137, 138, 27, 136, 49, 48, 48, - 46, 47, 142, 4, 144, 48, 48, 174, 176, 8, - 48, 12, 13, 14, 15, 16, 11, 190, 18, 10, - 20, 194, 22, 48, 24, 25, 6, 71, 168, 29, - 30, 116, -1, 33, 34, 35, 36, 172, -1, 39, - 40, 41, -1, -1, 44, 45, -1, -1, -1, 49, - 190, -1, -1, 193, 194, 18, -1, 20, -1, 22, - -1, 24, 25, -1, -1, 205, 29, 30, -1, -1, - 33, 34, 35, 36, 28, -1, 39, 31, 41, -1, - -1, 44, 45, 37, 38, -1, 49, -1, 42, 43, - 4, 5, 6, -1, -1, 49, -1, -1, 12, 13, - 14, 15, 16 -}; - -/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of - state STATE-NUM. */ -static const yytype_int8 yystos[] = -{ - 0, 18, 20, 22, 24, 25, 29, 30, 33, 34, - 35, 36, 39, 41, 44, 45, 49, 52, 54, 61, - 63, 109, 110, 115, 11, 78, 11, 34, 61, 74, - 64, 55, 76, 49, 109, 69, 72, 80, 53, 54, - 57, 65, 0, 40, 54, 9, 14, 17, 26, 36, - 87, 36, 49, 111, 28, 31, 37, 38, 42, 43, - 49, 116, 106, 107, 108, 49, 3, 7, 88, 109, - 107, 107, 107, 63, 107, 107, 88, 48, 106, 82, - 14, 67, 66, 109, 112, 19, 21, 117, 45, 10, - 109, 32, 100, 101, 4, 5, 6, 12, 13, 14, - 15, 16, 45, 46, 47, 32, 11, 14, 57, 58, - 45, 11, 45, 81, 11, 49, 107, 107, 39, 49, - 106, 118, 45, 79, 106, 70, 88, 88, 90, 95, - 96, 91, 92, 89, 93, 94, 75, 97, 98, 99, - 59, 11, 77, 73, 45, 83, 87, 11, 114, 113, - 107, 85, 53, 107, 8, 88, 88, 88, 88, 88, - 88, 88, 88, 53, 88, 88, 107, 107, 56, 53, - 23, 102, 103, 53, 7, 60, 68, 107, 106, 50, - 48, 45, 48, 53, 48, 104, 48, 102, 48, 106, - 84, 107, 86, 71, 27, 62, 49, 8, 63, 11, - 48, 53, 63, 10, 48, 105, 53 -}; - -/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ -static const yytype_int8 yyr1[] = -{ - 0, 51, 52, 52, 53, 53, 54, 54, 55, 56, - 54, 57, 59, 58, 58, 60, 60, 61, 61, 62, - 62, 63, 64, 63, 65, 63, 66, 63, 67, 68, - 63, 69, 63, 63, 63, 70, 71, 63, 72, 73, - 63, 74, 75, 63, 76, 77, 63, 78, 79, 63, - 80, 81, 63, 82, 83, 84, 63, 63, 85, 86, - 63, 87, 87, 87, 87, 88, 89, 88, 90, 88, - 91, 88, 92, 88, 93, 88, 94, 88, 95, 88, - 96, 88, 97, 88, 98, 88, 99, 88, 100, 88, - 101, 88, 102, 102, 104, 105, 103, 106, 106, 107, - 108, 108, 109, 110, 109, 112, 111, 113, 111, 114, - 111, 115, 115, 116, 116, 116, 116, 116, 116, 117, - 118, 117 -}; - -/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ -static const yytype_int8 yyr2[] = -{ - 0, 2, 0, 1, 1, 1, 1, 2, 0, 0, - 7, 0, 0, 3, 1, 3, 0, 1, 0, 2, - 0, 3, 0, 4, 0, 4, 0, 5, 0, 0, - 8, 0, 4, 2, 2, 0, 0, 10, 0, 0, - 7, 0, 0, 8, 0, 0, 7, 0, 0, 7, - 0, 0, 7, 0, 0, 0, 8, 3, 0, 0, - 9, 1, 1, 1, 2, 1, 0, 4, 0, 4, - 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, - 0, 4, 0, 4, 0, 4, 0, 4, 0, 3, - 0, 4, 0, 2, 0, 0, 6, 1, 3, 1, - 0, 2, 1, 0, 4, 0, 3, 0, 5, 0, - 5, 0, 2, 1, 1, 1, 1, 1, 1, 0, - 0, 3 -}; - - -enum { YYENOMEM = -2 }; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab -#define YYNOMEM goto yyexhaustedlab - - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ - do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ - while (0) - -/* Backward compatibility with an undocumented macro. - Use YYerror or YYUNDEF. */ -#define YYERRCODE YYUNDEF - - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - - - - -# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Kind, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - - -/*-----------------------------------. -| Print this symbol's value on YYO. | -`-----------------------------------*/ - -static void -yy_symbol_value_print (FILE *yyo, - yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) -{ - FILE *yyoutput = yyo; - YY_USE (yyoutput); - if (!yyvaluep) - return; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); - YY_IGNORE_MAYBE_UNINITIALIZED_END -} - - -/*---------------------------. -| Print this symbol on YYO. | -`---------------------------*/ - -static void -yy_symbol_print (FILE *yyo, - yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) -{ - YYFPRINTF (yyo, "%s %s (", - yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); - - yy_symbol_value_print (yyo, yykind, yyvaluep); - YYFPRINTF (yyo, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -static void -yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) -{ - YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -static void -yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, - int yyrule) -{ - int yylno = yyrline[yyrule]; - int yynrhs = yyr2[yyrule]; - int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, - YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), - &yyvsp[(yyi + 1) - (yynrhs)]); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) ((void) 0) -# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - - - - - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -static void -yydestruct (const char *yymsg, - yysymbol_kind_t yykind, YYSTYPE *yyvaluep) -{ - YY_USE (yyvaluep); - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); - YY_IGNORE_MAYBE_UNINITIALIZED_END -} - - -/* Lookahead token kind. */ -int yychar; - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; -/* Number of syntax errors so far. */ -int yynerrs; - - - - -/*----------. -| yyparse. | -`----------*/ - -int -yyparse (void) -{ - yy_state_fast_t yystate = 0; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus = 0; - - /* Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* Their size. */ - YYPTRDIFF_T yystacksize = YYINITDEPTH; - - /* The state stack: array, bottom, top. */ - yy_state_t yyssa[YYINITDEPTH]; - yy_state_t *yyss = yyssa; - yy_state_t *yyssp = yyss; - - /* The semantic value stack: array, bottom, top. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp = yyvs; - - int yyn; - /* The return value of yyparse. */ - int yyresult; - /* Lookahead symbol kind. */ - yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yychar = YYEMPTY; /* Cause a token to be read. */ - - goto yysetstate; - - -/*------------------------------------------------------------. -| yynewstate -- push a new state, which is found in yystate. | -`------------------------------------------------------------*/ -yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - -/*--------------------------------------------------------------------. -| yysetstate -- set current state (the top of the stack) to yystate. | -`--------------------------------------------------------------------*/ -yysetstate: - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - YY_IGNORE_USELESS_CAST_BEGIN - *yyssp = YY_CAST (yy_state_t, yystate); - YY_IGNORE_USELESS_CAST_END - YY_STACK_PRINT (yyss, yyssp); - - if (yyss + yystacksize - 1 <= yyssp) -#if !defined yyoverflow && !defined YYSTACK_RELOCATE - YYNOMEM; -#else - { - /* Get the current used size of the three stacks, in elements. */ - YYPTRDIFF_T yysize = yyssp - yyss + 1; - -# if defined yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - yy_state_t *yyss1 = yyss; - YYSTYPE *yyvs1 = yyvs; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * YYSIZEOF (*yyssp), - &yyvs1, yysize * YYSIZEOF (*yyvsp), - &yystacksize); - yyss = yyss1; - yyvs = yyvs1; - } -# else /* defined YYSTACK_RELOCATE */ - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - YYNOMEM; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yy_state_t *yyss1 = yyss; - union yyalloc *yyptr = - YY_CAST (union yyalloc *, - YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); - if (! yyptr) - YYNOMEM; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - YY_IGNORE_USELESS_CAST_BEGIN - YYDPRINTF ((stderr, "Stack size increased to %ld\n", - YY_CAST (long, yystacksize))); - YY_IGNORE_USELESS_CAST_END - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } -#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - - - if (yystate == YYFINAL) - YYACCEPT; - - goto yybackup; - - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token\n")); - yychar = yylex (); - } - - if (yychar <= YYEOF) - { - yychar = YYEOF; - yytoken = YYSYMBOL_YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else if (yychar == YYerror) - { - /* The scanner already issued an error message, process directly - to error recovery. But do not keep the error token as - lookahead, it is too special and may lead us to an endless - loop in error recovery. */ - yychar = YYUNDEF; - yytoken = YYSYMBOL_YYerror; - goto yyerrlab1; - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yytable_value_is_error (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - /* Discard the shifted token. */ - yychar = YYEMPTY; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - '$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 3: /* run: rules */ -#line 149 "src/engine/jamgram.y" - { parse_save( yyvsp[0].parse ); } -#line 1384 "src/engine/jamgram.cpp" - break; - - case 4: /* block: null */ -#line 160 "src/engine/jamgram.y" - { yyval.parse = yyvsp[0].parse; } -#line 1390 "src/engine/jamgram.cpp" - break; - - case 5: /* block: rules */ -#line 162 "src/engine/jamgram.y" - { yyval.parse = yyvsp[0].parse; } -#line 1396 "src/engine/jamgram.cpp" - break; - - case 6: /* rules: rule */ -#line 166 "src/engine/jamgram.y" - { yyval.parse = yyvsp[0].parse; } -#line 1402 "src/engine/jamgram.cpp" - break; - - case 7: /* rules: rule rules */ -#line 168 "src/engine/jamgram.y" - { yyval.parse = prules( yyvsp[-1].parse, yyvsp[0].parse ); } -#line 1408 "src/engine/jamgram.cpp" - break; - - case 8: /* $@1: %empty */ -#line 169 "src/engine/jamgram.y" - { yymode( SCAN_ASSIGN ); } -#line 1414 "src/engine/jamgram.cpp" - break; - - case 9: /* $@2: %empty */ -#line 169 "src/engine/jamgram.y" - { yymode( SCAN_NORMAL ); } -#line 1420 "src/engine/jamgram.cpp" - break; - - case 10: /* rules: LOCAL_t $@1 list assign_list_opt _SEMIC_t $@2 block */ -#line 170 "src/engine/jamgram.y" - { yyval.parse = plocal( yyvsp[-4].parse, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1426 "src/engine/jamgram.cpp" - break; - - case 11: /* null: %empty */ -#line 174 "src/engine/jamgram.y" - { yyval.parse = pnull(); } -#line 1432 "src/engine/jamgram.cpp" - break; - - case 12: /* $@3: %empty */ -#line 177 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1438 "src/engine/jamgram.cpp" - break; - - case 13: /* assign_list_opt: _EQUALS_t $@3 list */ -#line 178 "src/engine/jamgram.y" - { yyval.parse = yyvsp[0].parse; yyval.number = ASSIGN_SET; } -#line 1444 "src/engine/jamgram.cpp" - break; - - case 14: /* assign_list_opt: null */ -#line 180 "src/engine/jamgram.y" - { yyval.parse = yyvsp[0].parse; yyval.number = ASSIGN_APPEND; } -#line 1450 "src/engine/jamgram.cpp" - break; - - case 15: /* arglist_opt: _LPAREN_t lol _RPAREN_t */ -#line 184 "src/engine/jamgram.y" - { yyval.parse = yyvsp[-1].parse; } -#line 1456 "src/engine/jamgram.cpp" - break; - - case 16: /* arglist_opt: %empty */ -#line 186 "src/engine/jamgram.y" - { yyval.parse = P0; } -#line 1462 "src/engine/jamgram.cpp" - break; - - case 17: /* local_opt: LOCAL_t */ -#line 190 "src/engine/jamgram.y" - { yyval.number = 1; } -#line 1468 "src/engine/jamgram.cpp" - break; - - case 18: /* local_opt: %empty */ -#line 192 "src/engine/jamgram.y" - { yyval.number = 0; } -#line 1474 "src/engine/jamgram.cpp" - break; - - case 19: /* else_opt: ELSE_t rule */ -#line 196 "src/engine/jamgram.y" - { yyval.parse = yyvsp[0].parse; } -#line 1480 "src/engine/jamgram.cpp" - break; - - case 20: /* else_opt: %empty */ -#line 198 "src/engine/jamgram.y" - { yyval.parse = pnull(); } -#line 1486 "src/engine/jamgram.cpp" - break; - - case 21: /* rule: _LBRACE_t block _RBRACE_t */ -#line 201 "src/engine/jamgram.y" - { yyval.parse = yyvsp[-1].parse; } -#line 1492 "src/engine/jamgram.cpp" - break; - - case 22: /* $@4: %empty */ -#line 202 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1498 "src/engine/jamgram.cpp" - break; - - case 23: /* rule: INCLUDE_t $@4 list _SEMIC_t */ -#line 203 "src/engine/jamgram.y" - { yyval.parse = pincl( yyvsp[-1].parse ); yymode( SCAN_NORMAL ); } -#line 1504 "src/engine/jamgram.cpp" - break; - - case 24: /* $@5: %empty */ -#line 204 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1510 "src/engine/jamgram.cpp" - break; - - case 25: /* rule: ARG $@5 lol _SEMIC_t */ -#line 205 "src/engine/jamgram.y" - { yyval.parse = prule( yyvsp[-3].string, yyvsp[-1].parse ); yymode( SCAN_NORMAL ); } -#line 1516 "src/engine/jamgram.cpp" - break; - - case 26: /* $@6: %empty */ -#line 206 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1522 "src/engine/jamgram.cpp" - break; - - case 27: /* rule: arg assign $@6 list _SEMIC_t */ -#line 207 "src/engine/jamgram.y" - { yyval.parse = pset( yyvsp[-4].parse, yyvsp[-1].parse, yyvsp[-3].number ); yymode( SCAN_NORMAL ); } -#line 1528 "src/engine/jamgram.cpp" - break; - - case 28: /* $@7: %empty */ -#line 208 "src/engine/jamgram.y" - { yymode( SCAN_ASSIGN ); } -#line 1534 "src/engine/jamgram.cpp" - break; - - case 29: /* $@8: %empty */ -#line 208 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1540 "src/engine/jamgram.cpp" - break; - - case 30: /* rule: arg ON_t $@7 list assign $@8 list _SEMIC_t */ -#line 209 "src/engine/jamgram.y" - { yyval.parse = pset1( yyvsp[-7].parse, yyvsp[-4].parse, yyvsp[-1].parse, yyvsp[-3].number ); yymode( SCAN_NORMAL ); } -#line 1546 "src/engine/jamgram.cpp" - break; - - case 31: /* $@9: %empty */ -#line 210 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1552 "src/engine/jamgram.cpp" - break; - - case 32: /* rule: RETURN_t $@9 list _SEMIC_t */ -#line 211 "src/engine/jamgram.y" - { yyval.parse = preturn( yyvsp[-1].parse ); yymode( SCAN_NORMAL ); } -#line 1558 "src/engine/jamgram.cpp" - break; - - case 33: /* rule: BREAK_t _SEMIC_t */ -#line 213 "src/engine/jamgram.y" - { yyval.parse = pbreak(); } -#line 1564 "src/engine/jamgram.cpp" - break; - - case 34: /* rule: CONTINUE_t _SEMIC_t */ -#line 215 "src/engine/jamgram.y" - { yyval.parse = pcontinue(); } -#line 1570 "src/engine/jamgram.cpp" - break; - - case 35: /* $@10: %empty */ -#line 216 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1576 "src/engine/jamgram.cpp" - break; - - case 36: /* $@11: %empty */ -#line 216 "src/engine/jamgram.y" - { yymode( SCAN_NORMAL ); } -#line 1582 "src/engine/jamgram.cpp" - break; - - case 37: /* rule: FOR_t local_opt ARG IN_t $@10 list _LBRACE_t $@11 block _RBRACE_t */ -#line 217 "src/engine/jamgram.y" - { yyval.parse = pfor( yyvsp[-7].string, yyvsp[-4].parse, yyvsp[-1].parse, yyvsp[-8].number ); } -#line 1588 "src/engine/jamgram.cpp" - break; - - case 38: /* $@12: %empty */ -#line 218 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1594 "src/engine/jamgram.cpp" - break; - - case 39: /* $@13: %empty */ -#line 218 "src/engine/jamgram.y" - { yymode( SCAN_NORMAL ); } -#line 1600 "src/engine/jamgram.cpp" - break; - - case 40: /* rule: SWITCH_t $@12 list _LBRACE_t $@13 cases _RBRACE_t */ -#line 219 "src/engine/jamgram.y" - { yyval.parse = pswitch( yyvsp[-4].parse, yyvsp[-1].parse ); } -#line 1606 "src/engine/jamgram.cpp" - break; - - case 41: /* $@14: %empty */ -#line 220 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1612 "src/engine/jamgram.cpp" - break; - - case 42: /* $@15: %empty */ -#line 220 "src/engine/jamgram.y" - { yymode( SCAN_NORMAL ); } -#line 1618 "src/engine/jamgram.cpp" - break; - - case 43: /* rule: IF_t $@14 expr _LBRACE_t $@15 block _RBRACE_t else_opt */ -#line 221 "src/engine/jamgram.y" - { yyval.parse = pif( yyvsp[-5].parse, yyvsp[-2].parse, yyvsp[0].parse ); } -#line 1624 "src/engine/jamgram.cpp" - break; - - case 44: /* $@16: %empty */ -#line 222 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1630 "src/engine/jamgram.cpp" - break; - - case 45: /* $@17: %empty */ -#line 222 "src/engine/jamgram.y" - { yymode( SCAN_NORMAL ); } -#line 1636 "src/engine/jamgram.cpp" - break; - - case 46: /* rule: MODULE_t $@16 list _LBRACE_t $@17 block _RBRACE_t */ -#line 223 "src/engine/jamgram.y" - { yyval.parse = pmodule( yyvsp[-4].parse, yyvsp[-1].parse ); } -#line 1642 "src/engine/jamgram.cpp" - break; - - case 47: /* $@18: %empty */ -#line 224 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1648 "src/engine/jamgram.cpp" - break; - - case 48: /* $@19: %empty */ -#line 224 "src/engine/jamgram.y" - { yymode( SCAN_NORMAL ); } -#line 1654 "src/engine/jamgram.cpp" - break; - - case 49: /* rule: CLASS_t $@18 lol _LBRACE_t $@19 block _RBRACE_t */ -#line 225 "src/engine/jamgram.y" - { yyval.parse = pclass( yyvsp[-4].parse, yyvsp[-1].parse ); } -#line 1660 "src/engine/jamgram.cpp" - break; - - case 50: /* $@20: %empty */ -#line 226 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1666 "src/engine/jamgram.cpp" - break; - - case 51: /* $@21: %empty */ -#line 226 "src/engine/jamgram.y" - { yymode( SCAN_NORMAL ); } -#line 1672 "src/engine/jamgram.cpp" - break; - - case 52: /* rule: WHILE_t $@20 expr $@21 _LBRACE_t block _RBRACE_t */ -#line 227 "src/engine/jamgram.y" - { yyval.parse = pwhile( yyvsp[-4].parse, yyvsp[-1].parse ); } -#line 1678 "src/engine/jamgram.cpp" - break; - - case 53: /* $@22: %empty */ -#line 228 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1684 "src/engine/jamgram.cpp" - break; - - case 54: /* $@23: %empty */ -#line 228 "src/engine/jamgram.y" - { yymode( SCAN_PARAMS ); } -#line 1690 "src/engine/jamgram.cpp" - break; - - case 55: /* $@24: %empty */ -#line 228 "src/engine/jamgram.y" - { yymode( SCAN_NORMAL ); } -#line 1696 "src/engine/jamgram.cpp" - break; - - case 56: /* rule: local_opt RULE_t $@22 ARG $@23 arglist_opt $@24 rule */ -#line 229 "src/engine/jamgram.y" - { yyval.parse = psetc( yyvsp[-4].string, yyvsp[0].parse, yyvsp[-2].parse, yyvsp[-7].number ); } -#line 1702 "src/engine/jamgram.cpp" - break; - - case 57: /* rule: ON_t arg rule */ -#line 231 "src/engine/jamgram.y" - { yyval.parse = pon( yyvsp[-1].parse, yyvsp[0].parse ); } -#line 1708 "src/engine/jamgram.cpp" - break; - - case 58: /* $@25: %empty */ -#line 233 "src/engine/jamgram.y" - { yymode( SCAN_STRING ); } -#line 1714 "src/engine/jamgram.cpp" - break; - - case 59: /* $@26: %empty */ -#line 235 "src/engine/jamgram.y" - { yymode( SCAN_NORMAL ); } -#line 1720 "src/engine/jamgram.cpp" - break; - - case 60: /* rule: ACTIONS_t eflags ARG bindlist _LBRACE_t $@25 STRING $@26 _RBRACE_t */ -#line 237 "src/engine/jamgram.y" - { yyval.parse = psete( yyvsp[-6].string,yyvsp[-5].parse,yyvsp[-2].string,yyvsp[-7].number ); } -#line 1726 "src/engine/jamgram.cpp" - break; - - case 61: /* assign: _EQUALS_t */ -#line 245 "src/engine/jamgram.y" - { yyval.number = ASSIGN_SET; } -#line 1732 "src/engine/jamgram.cpp" - break; - - case 62: /* assign: _PLUS_EQUALS_t */ -#line 247 "src/engine/jamgram.y" - { yyval.number = ASSIGN_APPEND; } -#line 1738 "src/engine/jamgram.cpp" - break; - - case 63: /* assign: _QUESTION_EQUALS_t */ -#line 249 "src/engine/jamgram.y" - { yyval.number = ASSIGN_DEFAULT; } -#line 1744 "src/engine/jamgram.cpp" - break; - - case 64: /* assign: DEFAULT_t _EQUALS_t */ -#line 251 "src/engine/jamgram.y" - { yyval.number = ASSIGN_DEFAULT; } -#line 1750 "src/engine/jamgram.cpp" - break; - - case 65: /* expr: arg */ -#line 258 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_EXISTS, yyvsp[0].parse, pnull() ); yymode( SCAN_COND ); } -#line 1756 "src/engine/jamgram.cpp" - break; - - case 66: /* $@27: %empty */ -#line 259 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1762 "src/engine/jamgram.cpp" - break; - - case 67: /* expr: expr _EQUALS_t $@27 expr */ -#line 260 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_EQUALS, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1768 "src/engine/jamgram.cpp" - break; - - case 68: /* $@28: %empty */ -#line 261 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1774 "src/engine/jamgram.cpp" - break; - - case 69: /* expr: expr _BANG_EQUALS_t $@28 expr */ -#line 262 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_NOTEQ, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1780 "src/engine/jamgram.cpp" - break; - - case 70: /* $@29: %empty */ -#line 263 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1786 "src/engine/jamgram.cpp" - break; - - case 71: /* expr: expr _LANGLE_t $@29 expr */ -#line 264 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_LESS, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1792 "src/engine/jamgram.cpp" - break; - - case 72: /* $@30: %empty */ -#line 265 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1798 "src/engine/jamgram.cpp" - break; - - case 73: /* expr: expr _LANGLE_EQUALS_t $@30 expr */ -#line 266 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_LESSEQ, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1804 "src/engine/jamgram.cpp" - break; - - case 74: /* $@31: %empty */ -#line 267 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1810 "src/engine/jamgram.cpp" - break; - - case 75: /* expr: expr _RANGLE_t $@31 expr */ -#line 268 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_MORE, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1816 "src/engine/jamgram.cpp" - break; - - case 76: /* $@32: %empty */ -#line 269 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1822 "src/engine/jamgram.cpp" - break; - - case 77: /* expr: expr _RANGLE_EQUALS_t $@32 expr */ -#line 270 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_MOREEQ, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1828 "src/engine/jamgram.cpp" - break; - - case 78: /* $@33: %empty */ -#line 271 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1834 "src/engine/jamgram.cpp" - break; - - case 79: /* expr: expr _AMPER_t $@33 expr */ -#line 272 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_AND, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1840 "src/engine/jamgram.cpp" - break; - - case 80: /* $@34: %empty */ -#line 273 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1846 "src/engine/jamgram.cpp" - break; - - case 81: /* expr: expr _AMPERAMPER_t $@34 expr */ -#line 274 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_AND, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1852 "src/engine/jamgram.cpp" - break; - - case 82: /* $@35: %empty */ -#line 275 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1858 "src/engine/jamgram.cpp" - break; - - case 83: /* expr: expr _BAR_t $@35 expr */ -#line 276 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_OR, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1864 "src/engine/jamgram.cpp" - break; - - case 84: /* $@36: %empty */ -#line 277 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1870 "src/engine/jamgram.cpp" - break; - - case 85: /* expr: expr _BARBAR_t $@36 expr */ -#line 278 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_OR, yyvsp[-3].parse, yyvsp[0].parse ); } -#line 1876 "src/engine/jamgram.cpp" - break; - - case 86: /* $@37: %empty */ -#line 279 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1882 "src/engine/jamgram.cpp" - break; - - case 87: /* expr: arg IN_t $@37 list */ -#line 280 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_IN, yyvsp[-3].parse, yyvsp[0].parse ); yymode( SCAN_COND ); } -#line 1888 "src/engine/jamgram.cpp" - break; - - case 88: /* $@38: %empty */ -#line 281 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1894 "src/engine/jamgram.cpp" - break; - - case 89: /* expr: _BANG_t $@38 expr */ -#line 282 "src/engine/jamgram.y" - { yyval.parse = peval( EXPR_NOT, yyvsp[0].parse, pnull() ); } -#line 1900 "src/engine/jamgram.cpp" - break; - - case 90: /* $@39: %empty */ -#line 283 "src/engine/jamgram.y" - { yymode( SCAN_CONDB ); } -#line 1906 "src/engine/jamgram.cpp" - break; - - case 91: /* expr: _LPAREN_t $@39 expr _RPAREN_t */ -#line 284 "src/engine/jamgram.y" - { yyval.parse = yyvsp[-1].parse; } -#line 1912 "src/engine/jamgram.cpp" - break; - - case 92: /* cases: %empty */ -#line 295 "src/engine/jamgram.y" - { yyval.parse = P0; } -#line 1918 "src/engine/jamgram.cpp" - break; - - case 93: /* cases: case cases */ -#line 297 "src/engine/jamgram.y" - { yyval.parse = pnode( yyvsp[-1].parse, yyvsp[0].parse ); } -#line 1924 "src/engine/jamgram.cpp" - break; - - case 94: /* $@40: %empty */ -#line 300 "src/engine/jamgram.y" - { yymode( SCAN_CASE ); } -#line 1930 "src/engine/jamgram.cpp" - break; - - case 95: /* $@41: %empty */ -#line 300 "src/engine/jamgram.y" - { yymode( SCAN_NORMAL ); } -#line 1936 "src/engine/jamgram.cpp" - break; - - case 96: /* case: CASE_t $@40 ARG _COLON_t $@41 block */ -#line 301 "src/engine/jamgram.y" - { yyval.parse = psnode( yyvsp[-3].string, yyvsp[0].parse ); } -#line 1942 "src/engine/jamgram.cpp" - break; - - case 97: /* lol: list */ -#line 310 "src/engine/jamgram.y" - { yyval.parse = pnode( P0, yyvsp[0].parse ); } -#line 1948 "src/engine/jamgram.cpp" - break; - - case 98: /* lol: list _COLON_t lol */ -#line 312 "src/engine/jamgram.y" - { yyval.parse = pnode( yyvsp[0].parse, yyvsp[-2].parse ); } -#line 1954 "src/engine/jamgram.cpp" - break; - - case 99: /* list: listp */ -#line 322 "src/engine/jamgram.y" - { yyval.parse = yyvsp[0].parse; } -#line 1960 "src/engine/jamgram.cpp" - break; - - case 100: /* listp: %empty */ -#line 326 "src/engine/jamgram.y" - { yyval.parse = pnull(); } -#line 1966 "src/engine/jamgram.cpp" - break; - - case 101: /* listp: listp arg */ -#line 328 "src/engine/jamgram.y" - { yyval.parse = pappend( yyvsp[-1].parse, yyvsp[0].parse ); } -#line 1972 "src/engine/jamgram.cpp" - break; - - case 102: /* arg: ARG */ -#line 332 "src/engine/jamgram.y" - { yyval.parse = plist( yyvsp[0].string ); } -#line 1978 "src/engine/jamgram.cpp" - break; - - case 103: /* @42: %empty */ -#line 333 "src/engine/jamgram.y" - { yyval.number = yymode( SCAN_CALL ); } -#line 1984 "src/engine/jamgram.cpp" - break; - - case 104: /* arg: _LBRACKET_t @42 func _RBRACKET_t */ -#line 334 "src/engine/jamgram.y" - { yyval.parse = yyvsp[-1].parse; yymode( yyvsp[-2].number ); } -#line 1990 "src/engine/jamgram.cpp" - break; - - case 105: /* $@43: %empty */ -#line 342 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 1996 "src/engine/jamgram.cpp" - break; - - case 106: /* func: ARG $@43 lol */ -#line 343 "src/engine/jamgram.y" - { yyval.parse = prule( yyvsp[-2].string, yyvsp[0].parse ); } -#line 2002 "src/engine/jamgram.cpp" - break; - - case 107: /* $@44: %empty */ -#line 344 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 2008 "src/engine/jamgram.cpp" - break; - - case 108: /* func: ON_t arg ARG $@44 lol */ -#line 345 "src/engine/jamgram.y" - { yyval.parse = pon( yyvsp[-3].parse, prule( yyvsp[-2].string, yyvsp[0].parse ) ); } -#line 2014 "src/engine/jamgram.cpp" - break; - - case 109: /* $@45: %empty */ -#line 346 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 2020 "src/engine/jamgram.cpp" - break; - - case 110: /* func: ON_t arg RETURN_t $@45 list */ -#line 347 "src/engine/jamgram.y" - { yyval.parse = pon( yyvsp[-3].parse, yyvsp[0].parse ); } -#line 2026 "src/engine/jamgram.cpp" - break; - - case 111: /* eflags: %empty */ -#line 357 "src/engine/jamgram.y" - { yyval.number = 0; } -#line 2032 "src/engine/jamgram.cpp" - break; - - case 112: /* eflags: eflags eflag */ -#line 359 "src/engine/jamgram.y" - { yyval.number = yyvsp[-1].number | yyvsp[0].number; } -#line 2038 "src/engine/jamgram.cpp" - break; - - case 113: /* eflag: UPDATED_t */ -#line 363 "src/engine/jamgram.y" - { yyval.number = EXEC_UPDATED; } -#line 2044 "src/engine/jamgram.cpp" - break; - - case 114: /* eflag: TOGETHER_t */ -#line 365 "src/engine/jamgram.y" - { yyval.number = EXEC_TOGETHER; } -#line 2050 "src/engine/jamgram.cpp" - break; - - case 115: /* eflag: IGNORE_t */ -#line 367 "src/engine/jamgram.y" - { yyval.number = EXEC_IGNORE; } -#line 2056 "src/engine/jamgram.cpp" - break; - - case 116: /* eflag: QUIETLY_t */ -#line 369 "src/engine/jamgram.y" - { yyval.number = EXEC_QUIETLY; } -#line 2062 "src/engine/jamgram.cpp" - break; - - case 117: /* eflag: PIECEMEAL_t */ -#line 371 "src/engine/jamgram.y" - { yyval.number = EXEC_PIECEMEAL; } -#line 2068 "src/engine/jamgram.cpp" - break; - - case 118: /* eflag: EXISTING_t */ -#line 373 "src/engine/jamgram.y" - { yyval.number = EXEC_EXISTING; } -#line 2074 "src/engine/jamgram.cpp" - break; - - case 119: /* bindlist: %empty */ -#line 382 "src/engine/jamgram.y" - { yyval.parse = pnull(); } -#line 2080 "src/engine/jamgram.cpp" - break; - - case 120: /* $@46: %empty */ -#line 383 "src/engine/jamgram.y" - { yymode( SCAN_PUNCT ); } -#line 2086 "src/engine/jamgram.cpp" - break; - - case 121: /* bindlist: BIND_t $@46 list */ -#line 384 "src/engine/jamgram.y" - { yyval.parse = yyvsp[0].parse; } -#line 2092 "src/engine/jamgram.cpp" - break; - - -#line 2096 "src/engine/jamgram.cpp" - - default: break; - } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - - *++yyvsp = yyval; - - /* Now 'shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - { - const int yylhs = yyr1[yyn] - YYNTOKENS; - const int yyi = yypgoto[yylhs] + *yyssp; - yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp - ? yytable[yyi] - : yydefgoto[yylhs]); - } - - goto yynewstate; - - -/*--------------------------------------. -| yyerrlab -- here on detecting error. | -`--------------------------------------*/ -yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; - yyerror (YY_("syntax error")); - } - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - /* Pacify compilers when the user code never invokes YYERROR and the - label yyerrorlab therefore never appears in user code. */ - if (0) - YYERROR; - ++yynerrs; - - /* Do not reclaim the symbols of the rule whose action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - /* Pop stack until we find a state that shifts the error token. */ - for (;;) - { - yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYSYMBOL_YYerror; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - - yydestruct ("Error: popping", - YY_ACCESSING_SYMBOL (yystate), yyvsp); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturnlab; - - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturnlab; - - -/*-----------------------------------------------------------. -| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | -`-----------------------------------------------------------*/ -yyexhaustedlab: - yyerror (YY_("memory exhausted")); - yyresult = 2; - goto yyreturnlab; - - -/*----------------------------------------------------------. -| yyreturnlab -- parsing is finished, clean up and return. | -`----------------------------------------------------------*/ -yyreturnlab: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); - } - /* Do not reclaim the symbols of the rule whose action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - YY_ACCESSING_SYMBOL (+*yyssp), yyvsp); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - - return yyresult; -} - diff -Nru boost1.81-1.81.0/tools/build/src/engine/jamgram.hpp boost1.81-1.81.0/tools/build/src/engine/jamgram.hpp --- boost1.81-1.81.0/tools/build/src/engine/jamgram.hpp 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/build/src/engine/jamgram.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,176 +0,0 @@ -/* A Bison parser, made by GNU Bison 3.8.2. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, - Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, - especially those whose name start with YY_ or yy_. They are - private implementation details that can be changed or removed. */ - -#ifndef YY_YY_SRC_ENGINE_JAMGRAM_HPP_INCLUDED -# define YY_YY_SRC_ENGINE_JAMGRAM_HPP_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Token kinds. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - YYEMPTY = -2, - YYEOF = 0, /* "end of file" */ - YYerror = 256, /* error */ - YYUNDEF = 257, /* "invalid token" */ - _BANG_t = 258, /* _BANG_t */ - _BANG_EQUALS_t = 259, /* _BANG_EQUALS_t */ - _AMPER_t = 260, /* _AMPER_t */ - _AMPERAMPER_t = 261, /* _AMPERAMPER_t */ - _LPAREN_t = 262, /* _LPAREN_t */ - _RPAREN_t = 263, /* _RPAREN_t */ - _PLUS_EQUALS_t = 264, /* _PLUS_EQUALS_t */ - _COLON_t = 265, /* _COLON_t */ - _SEMIC_t = 266, /* _SEMIC_t */ - _LANGLE_t = 267, /* _LANGLE_t */ - _LANGLE_EQUALS_t = 268, /* _LANGLE_EQUALS_t */ - _EQUALS_t = 269, /* _EQUALS_t */ - _RANGLE_t = 270, /* _RANGLE_t */ - _RANGLE_EQUALS_t = 271, /* _RANGLE_EQUALS_t */ - _QUESTION_EQUALS_t = 272, /* _QUESTION_EQUALS_t */ - _LBRACKET_t = 273, /* _LBRACKET_t */ - _RBRACKET_t = 274, /* _RBRACKET_t */ - ACTIONS_t = 275, /* ACTIONS_t */ - BIND_t = 276, /* BIND_t */ - BREAK_t = 277, /* BREAK_t */ - CASE_t = 278, /* CASE_t */ - CLASS_t = 279, /* CLASS_t */ - CONTINUE_t = 280, /* CONTINUE_t */ - DEFAULT_t = 281, /* DEFAULT_t */ - ELSE_t = 282, /* ELSE_t */ - EXISTING_t = 283, /* EXISTING_t */ - FOR_t = 284, /* FOR_t */ - IF_t = 285, /* IF_t */ - IGNORE_t = 286, /* IGNORE_t */ - IN_t = 287, /* IN_t */ - INCLUDE_t = 288, /* INCLUDE_t */ - LOCAL_t = 289, /* LOCAL_t */ - MODULE_t = 290, /* MODULE_t */ - ON_t = 291, /* ON_t */ - PIECEMEAL_t = 292, /* PIECEMEAL_t */ - QUIETLY_t = 293, /* QUIETLY_t */ - RETURN_t = 294, /* RETURN_t */ - RULE_t = 295, /* RULE_t */ - SWITCH_t = 296, /* SWITCH_t */ - TOGETHER_t = 297, /* TOGETHER_t */ - UPDATED_t = 298, /* UPDATED_t */ - WHILE_t = 299, /* WHILE_t */ - _LBRACE_t = 300, /* _LBRACE_t */ - _BAR_t = 301, /* _BAR_t */ - _BARBAR_t = 302, /* _BARBAR_t */ - _RBRACE_t = 303, /* _RBRACE_t */ - ARG = 304, /* ARG */ - STRING = 305 /* STRING */ - }; - typedef enum yytokentype yytoken_kind_t; -#endif -/* Token kinds. */ -#define YYEMPTY -2 -#define YYEOF 0 -#define YYerror 256 -#define YYUNDEF 257 -#define _BANG_t 258 -#define _BANG_EQUALS_t 259 -#define _AMPER_t 260 -#define _AMPERAMPER_t 261 -#define _LPAREN_t 262 -#define _RPAREN_t 263 -#define _PLUS_EQUALS_t 264 -#define _COLON_t 265 -#define _SEMIC_t 266 -#define _LANGLE_t 267 -#define _LANGLE_EQUALS_t 268 -#define _EQUALS_t 269 -#define _RANGLE_t 270 -#define _RANGLE_EQUALS_t 271 -#define _QUESTION_EQUALS_t 272 -#define _LBRACKET_t 273 -#define _RBRACKET_t 274 -#define ACTIONS_t 275 -#define BIND_t 276 -#define BREAK_t 277 -#define CASE_t 278 -#define CLASS_t 279 -#define CONTINUE_t 280 -#define DEFAULT_t 281 -#define ELSE_t 282 -#define EXISTING_t 283 -#define FOR_t 284 -#define IF_t 285 -#define IGNORE_t 286 -#define IN_t 287 -#define INCLUDE_t 288 -#define LOCAL_t 289 -#define MODULE_t 290 -#define ON_t 291 -#define PIECEMEAL_t 292 -#define QUIETLY_t 293 -#define RETURN_t 294 -#define RULE_t 295 -#define SWITCH_t 296 -#define TOGETHER_t 297 -#define UPDATED_t 298 -#define WHILE_t 299 -#define _LBRACE_t 300 -#define _BAR_t 301 -#define _BARBAR_t 302 -#define _RBRACE_t 303 -#define ARG 304 -#define STRING 305 - -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef int YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 -#endif - - -extern YYSTYPE yylval; - - -int yyparse (void); - - -#endif /* !YY_YY_SRC_ENGINE_JAMGRAM_HPP_INCLUDED */ diff -Nru boost1.81-1.81.0/tools/build/src/engine/vswhere_usability_wrapper.cmd boost1.81-1.81.0/tools/build/src/engine/vswhere_usability_wrapper.cmd --- boost1.81-1.81.0/tools/build/src/engine/vswhere_usability_wrapper.cmd 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/build/src/engine/vswhere_usability_wrapper.cmd 2022-12-24 13:24:17.417610600 +0000 @@ -1,73 +1,73 @@ -:: Copyright 2020 - Rene Ferdinand Rivera Morell -:: Copyright 2017 - Refael Ackermann -:: Copyright 2019 - Thomas Kent -:: Distributed under MIT style license -:: See accompanying file LICENSE at https://github.com/node4good/windows-autoconf -:: Forked from version: 1.15.4 - -@if not defined DEBUG_HELPER @ECHO OFF -setlocal -set "InstallerPath=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer" -if not exist "%InstallerPath%" set "InstallerPath=%ProgramFiles%\Microsoft Visual Studio\Installer" -if not exist "%InstallerPath%" goto :no-vswhere -:: Manipulate %Path% for easier " handeling -set Path=%Path%;%InstallerPath% -where vswhere 2> nul > nul -if errorlevel 1 goto :no-vswhere -set VSWHERE_REQ=-requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -set VSWHERE_PRP=-property installationPath - -REM Visual Studio Unknown Version, Beyond 2022 -set VSWHERE_LMT=-version "[18.0,19.0)" -set VSWHERE_PRERELEASE=-prerelease -SET VSWHERE_ARGS=-latest -products * %VSWHERE_REQ% %VSWHERE_PRP% %VSWHERE_LMT% %VSWHERE_PRERELEASE% -for /f "usebackq tokens=*" %%i in (`vswhere %VSWHERE_ARGS%`) do ( - endlocal - echo Found with vswhere %%i - @rem comment out setting VCINSTALLDIR for Boost.build - @rem set "VCINSTALLDIR=%%i\VC\" - set "VSUNKCOMNTOOLS=%%i\Common7\Tools\" - exit /B 0 -) - -REM Visual Studio 2022 -set VSWHERE_LMT=-version "[17.0,18.0)" -set VSWHERE_PRERELEASE=-prerelease -SET VSWHERE_ARGS=-latest -products * %VSWHERE_REQ% %VSWHERE_PRP% %VSWHERE_LMT% %VSWHERE_PRERELEASE% -for /f "usebackq tokens=*" %%i in (`vswhere %VSWHERE_ARGS%`) do ( - endlocal - echo Found with vswhere %%i - @rem comment out setting VCINSTALLDIR for Boost.build - @rem set "VCINSTALLDIR=%%i\VC\" - set "VS170COMNTOOLS=%%i\Common7\Tools\" - exit /B 0 -) - -REM Visual Studio 2019 (16.X, toolset 14.2) -set VSWHERE_LMT=-version "[16.0,17.0)" -SET VSWHERE_ARGS=-latest -products * %VSWHERE_REQ% %VSWHERE_PRP% %VSWHERE_LMT% %VSWHERE_PRERELEASE% -for /f "usebackq tokens=*" %%i in (`vswhere %VSWHERE_ARGS%`) do ( - endlocal - echo Found with vswhere %%i - @rem comment out setting VCINSTALLDIR for Boost.build - @rem set "VCINSTALLDIR=%%i\VC\" - set "VS160COMNTOOLS=%%i\Common7\Tools\" - exit /B 0 -) - -REM Visual Studio 2017 (15.X, toolset 14.1) -set VSWHERE_LMT=-version "[15.0,16.0)" -SET VSWHERE_ARGS=-latest -products * %VSWHERE_REQ% %VSWHERE_PRP% %VSWHERE_LMT% -for /f "usebackq tokens=*" %%i in (`vswhere %VSWHERE_ARGS%`) do ( - endlocal - echo Found with vswhere %%i - @rem comment out setting VCINSTALLDIR for Boost.build - @rem set "VCINSTALLDIR=%%i\VC\" - set "VS150COMNTOOLS=%%i\Common7\Tools\" - exit /B 0 -) - -:no-vswhere -endlocal -echo could not find "vswhere" -exit /B 1 +:: Copyright 2020 - Rene Ferdinand Rivera Morell +:: Copyright 2017 - Refael Ackermann +:: Copyright 2019 - Thomas Kent +:: Distributed under MIT style license +:: See accompanying file LICENSE at https://github.com/node4good/windows-autoconf +:: Forked from version: 1.15.4 + +@if not defined DEBUG_HELPER @ECHO OFF +setlocal +set "InstallerPath=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer" +if not exist "%InstallerPath%" set "InstallerPath=%ProgramFiles%\Microsoft Visual Studio\Installer" +if not exist "%InstallerPath%" goto :no-vswhere +:: Manipulate %Path% for easier " handeling +set Path=%Path%;%InstallerPath% +where vswhere 2> nul > nul +if errorlevel 1 goto :no-vswhere +set VSWHERE_REQ=-requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 +set VSWHERE_PRP=-property installationPath + +REM Visual Studio Unknown Version, Beyond 2022 +set VSWHERE_LMT=-version "[18.0,19.0)" +set VSWHERE_PRERELEASE=-prerelease +SET VSWHERE_ARGS=-latest -products * %VSWHERE_REQ% %VSWHERE_PRP% %VSWHERE_LMT% %VSWHERE_PRERELEASE% +for /f "usebackq tokens=*" %%i in (`vswhere %VSWHERE_ARGS%`) do ( + endlocal + echo Found with vswhere %%i + @rem comment out setting VCINSTALLDIR for Boost.build + @rem set "VCINSTALLDIR=%%i\VC\" + set "VSUNKCOMNTOOLS=%%i\Common7\Tools\" + exit /B 0 +) + +REM Visual Studio 2022 +set VSWHERE_LMT=-version "[17.0,18.0)" +set VSWHERE_PRERELEASE=-prerelease +SET VSWHERE_ARGS=-latest -products * %VSWHERE_REQ% %VSWHERE_PRP% %VSWHERE_LMT% %VSWHERE_PRERELEASE% +for /f "usebackq tokens=*" %%i in (`vswhere %VSWHERE_ARGS%`) do ( + endlocal + echo Found with vswhere %%i + @rem comment out setting VCINSTALLDIR for Boost.build + @rem set "VCINSTALLDIR=%%i\VC\" + set "VS170COMNTOOLS=%%i\Common7\Tools\" + exit /B 0 +) + +REM Visual Studio 2019 (16.X, toolset 14.2) +set VSWHERE_LMT=-version "[16.0,17.0)" +SET VSWHERE_ARGS=-latest -products * %VSWHERE_REQ% %VSWHERE_PRP% %VSWHERE_LMT% %VSWHERE_PRERELEASE% +for /f "usebackq tokens=*" %%i in (`vswhere %VSWHERE_ARGS%`) do ( + endlocal + echo Found with vswhere %%i + @rem comment out setting VCINSTALLDIR for Boost.build + @rem set "VCINSTALLDIR=%%i\VC\" + set "VS160COMNTOOLS=%%i\Common7\Tools\" + exit /B 0 +) + +REM Visual Studio 2017 (15.X, toolset 14.1) +set VSWHERE_LMT=-version "[15.0,16.0)" +SET VSWHERE_ARGS=-latest -products * %VSWHERE_REQ% %VSWHERE_PRP% %VSWHERE_LMT% +for /f "usebackq tokens=*" %%i in (`vswhere %VSWHERE_ARGS%`) do ( + endlocal + echo Found with vswhere %%i + @rem comment out setting VCINSTALLDIR for Boost.build + @rem set "VCINSTALLDIR=%%i\VC\" + set "VS150COMNTOOLS=%%i\Common7\Tools\" + exit /B 0 +) + +:no-vswhere +endlocal +echo could not find "vswhere" +exit /B 1 diff -Nru boost1.81-1.81.0/tools/build/src/tools/python.jam boost1.81-1.81.0/tools/build/src/tools/python.jam --- boost1.81-1.81.0/tools/build/src/tools/python.jam 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/build/src/tools/python.jam 2022-12-24 13:24:17.425610800 +0000 @@ -954,32 +954,8 @@ toolset.add-requirements "$(target-requirements:J=,):$(interpreter-cmd)" ; - # - # Discover and set extension suffix - # - debug-message "Checking for extension suffix..." ; - local full-cmd = "from __future__ import print_function; import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))" ; - local full-cmd = $(interpreter-cmd)" -c \"$(full-cmd)\"" ; - debug-message "running command '$(full-cmd)'" ; - local result = [ SHELL $(full-cmd) : strip-eol : exit-status ] ; - if $(result[2]) = 0 - { - debug-message "Python extenssion suffix is $(result[1])" ; - type.set-generated-target-suffix PYTHON_EXTENSION : $(target-requirements) : <$(result[1])> ; - } - else - { - debug-message "Failed to determine python extension suffix" ; - debug-message "Falling back to old behaviour" ; - if $(target-os) = windows && on in $(condition) - { - extension-suffix ?= _d ; - } - extension-suffix ?= "" ; - - # Register the right suffix for extensions. - register-extension-suffix $(extension-suffix) : $(target-requirements) ; - } + # Register the right suffix for extensions. + register-extension-suffix $(extension-suffix) : $(target-requirements) ; # Make sure that the python feature is always considered # relevant for any targets that depend on python. Without diff -Nru boost1.81-1.81.0/tools/build/test/test_system.html boost1.81-1.81.0/tools/build/test/test_system.html --- boost1.81-1.81.0/tools/build/test/test_system.html 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/build/test/test_system.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,623 +0,0 @@ - - - - - - - - - A testing system for B2 - - - - -

- -

A testing system for B2
-

-
- -
-
Introduction for users
- -
-
-
Command line options
-
-
- -
Introduction for developers
- -
-
-
Changing the working - directory
- -
Examining the working directory and - changing it
- -
Test result
-
-
- -
Reference documentation
- -
-
-
Method __init__
- -
Method set_tree
- -
Method write
- -
Method copy
- -
Method touch
- -
Method - run_build_system
- -
Method read
- -
Method - read_and_strip
- -
Methods for declaring - expectations
- -
Methods for ignoring - changes
- -
Methods for explicitly specifying - results
- -
Helper class List
-
-
-
-
- -

Introduction for users

- -

The testing system for B2 is a small set of Python modules and - scripts for automatically testing user-obversable behaviour. It uses - components from testing systems of Scons - and Subversion, together with - some additional functionality.

- -

To run the tests you need to:

- -
    -
  1. Get the source tree of B2 (located at tools/build - in Boost)
  2. - -
  3. Have Python installed. Version - 2.1 is known to work.
  4. - -
  5. Build Boost.Jam. See $boost_build_root/engine/index.html for - instructions.
  6. - -
  7. Configure at least one toolset. You can edit site-config.jam - or user-config.jam to add new toolsets. Or you can create file - test-config.jam in $boost_build_root/test directory. In - this case, site-config.jam and user-config.jam will be - ignored for testing.
  8. - -
  9. Make sure that in the configuration jam file(s) that you use you generate - no console output, ie. with the Boost Build 'ECHO' rule. Such console output - in the configuration jam file(s) will cause a number of tests to automatically - fail which would otherwise succeed.
  10. -
- -

When all is set, you can run all the tests using the test_all.py - script or you can run a specific test by starting its Python script - directly.

- -

Examples:

- -
-python test_all.py
-python generators_test.py
-
- -

If everything is OK, you will see a list of passed tests. Otherwise, a - failure will be reported.

- -

Command line options

- -

Test scripts will use the toolset you configured to be the default or - you can specify a specific one on the command line:

- -
-python test_all.py borland
-python generators_test.py msvc-7.1
-
- -

Other test script flags you can specify on the command line are:

- -
    -
  • --default-bjam -- By default the test system will use the - Boost Jam executable found built in its default development build - location. This option makes it use the default one available on your - system, i.e. the one found in the system path.
  • - -
  • --preserve -- In case of a failed test its working - directory will be copied to the "failed_test" directory under the - current directory.
  • - -
  • --verbose -- Makes the test system and the run build system - display additional output. Note though that this may cause tests that - check the build system output to fail.
  • -
- -

Introduction for developers

- -

It is suggested that every new functionality come together with tests, - and that bugfixes are accompanied by tests. There's no need to say that - tests are good, but two points are extremely important:

- -
    -
  • For an interpreted language like Jam, without any static checks, - testing is simply the only sefeguard we can have.
  • - -
  • Good tests allow us to change internal design much more safely, and we - have not gotten everything nailed down yet.
  • -
- -

Adding a new test is simple:

- -
    -
  1. Go to $boost_build_root/test/test_all.py and add new test - name to the list at the end of the file. Suppose the test name is "hello". -
  2. - -
  3. Add a new python module, in this example "hello.py", to do the actual - testing.
  4. -
- -

The module, in general will perform these basic actions:

- -
    -
  1. Set up the initial working directory state
  2. - -
  3. - Run the build system and check the results: - -
      -
    1. generated output,
    2. - -
    3. changes made to the working directory,
    4. - -
    5. new content of the working directory.
    6. -
    -
  4. - -
  5. Add, remove or touch files or change their content and then repeat - the previous step until satisfied.
  6. - -
  7. Clean up
  8. -
- -

The "hello.py" module might contain:

-
-from BoostBuild import List
-
-# Create a temporary working directory
-t = BoostBuild.Tester()
-
-# Create the needed files
-t.write("jamroot.jam", "")
-t.write("jamfile.jam", """
-exe hello : hello.cpp ;
-""")
-t.write("hello.cpp", """
-int main()
-{
-    return 0;
-}
-
-""")
-
-t.run_build_system()
-
-# First, create a list of three pathnames.
-file_list = List("bin/$toolset/debug/") * List("hello.exe hello.obj")
-# Second, assert that those files were added as result of the last build system invocation.
-t.expect_addition(file_list)
-
-# Invoke the build system once again.
-t.run_build_system("clean")
-# Check if the files added previously were removed.
-t.expect_removal(file_list)
-
-# Remove temporary directories
-t.cleanup()
-
- -

The test directory contains a file "template.py" which can be - used as a start for your own tests.

- -

Overview of the most important methods of class Tester follows. -

- -

Changing the working directory

- -

The class Tester creates a temporary directory in its - constructor and changes to that directory. It can be modified by calling - these methods:

- -
    -
  • set_tree -- sets the content of the working directory to be - equal to the content of the specified directory. This method is - preferable when directory tree for testing is large.
  • - -
  • write -- sets the content of file in a working directory. - This is optimal if you want to create a directory tree with 3-4 small - files.
  • - -
  • touch -- changes the modification times of a file
  • -
- -

Examining the working directory and - changing it

- -

The method read, inherited from the TestCmd class, can - be used to read any file in the working directory and check its content. - Tester adds another method for tracking changes. Whenever the build - system is run (using run_build_system - ), the working dir state before and after running is recorded. In - addition, difference between the two states -- i.e. lists of files that were - added, removed, modified or touched -- are stored in two member variables - - tree_difference and unexpected_difference.

- -

After than, the test author may specify that some change is expected, for - example, by calling expect_addition("foo"). This call will check if - the file was indeed added, and if so, will remove its name from the list of - added files in unexpected_difference. Likewise, it is possible to - specify that some changes are not interesting, for example a call to - ignore("*.obj") will just remove every file with the ".obj" - extension from unexpected_difference.

- -

When test has finished with expectations and ignoring, the member - unexpected_difference will contain the list of all changes not yet - accounted for. It is possible to assure that this list is empty by calling - the expect_nothing_more member function.

- -

Test result

- -

Any of the expect* methods below will fail the test if the - expectation is not met. It is also possible to perform manually arbitrary - test and explicitly cause the test to either pass or fail. Ordinary - filesystem functions can be used to work with the directory tree. Methods - pass_test and fail_test are used to explicitly give the - test outcome.

- -

Typically, after test termination, the working directory is erased. See - the "--preserve" command line option - for information on how to preserve the working directory content for failed - tests for debugging purposes.

- -

Reference documentation

- -

The test system is composed of class Tester, derived form - TestCmd.TestCmd, and helper class List. Tester - and List methods are described below.

- -

The documentation frequently refers to filename. In all cases, - files are specified in unix style: a sequence of components, separated by - "/". This is true on all platforms. In some contexts a list of files is - allowed. In those cases any object with a sequence interface is allowed.

- -

Method __init__(self, arguments="", - executable="bjam", match=TestCmd.match_exact, boost_build_path=None, - translate_suffixes=True, pass_toolset=True, use_test_config=True, - ignore_toolset_requirements=True, workdir="", **keywords)

- -

Optional arguments:

- -
    -
  • arguments - -- Arguments passed to the run executable.
  • -
  • executable - -- Name of the executable to invoke.
  • -
  • match - -- Function to use for compating actual and expected file contents. -
  • -
  • boost_build_path - -- Boost build path to be passed to the run executable.
  • -
  • translate_suffixes - -- Whether to update suffixes on the the file names passed from the - test script so they match those actually created by the current - toolset. For example, static library files are specified by using - the .lib suffix but when the 'gcc' toolset is used it actually - creates them using the .a suffix.
  • -
  • pass_toolset - -- Whether the test system should pass the specified toolset to the - run executable.
  • -
  • use_test_config - -- Whether the test system should tell the run executable to read in - the test_config.jam configuration file.
  • -
  • ignore_toolset_requirements - -- Whether the test system should tell the run executable to ignore - toolset requirements.
  • -
  • workdir - -- Indicates an absolute directory where the test will be run from. -
  • -
- -

Optional arguments inherited from the base class:

- -
    -
  • description - -- Test description string displayed in case of a failed test.
  • -
  • subdir - -- List of subdirectories to automatically create under the working - directory. Each subdirectory needs to be specified separately - parent coming before its child.
  • -
  • verbose - -- Flag that may be used to enable more verbose test system output. - Note that it does not also enable more verbose build system output - like the "--verbose" command - line option does.
  • -
- -

Effects:

- -
    -
  1. Remembers the current working directory in member - original_workdir.
  2. - -
  3. Determines the location of the executable (bjam by - default) and build system files, assuming that the current directory is - tools/build/test. Formulates jam invocation command, which - will include explicit setting for the BOOST_BUILD_PATH variable - and arguments passed to this methods, if any. This command will be used - by subsequent invocation of - run_build_system. Finally, initializes the base class.
  4. - -
  5. Changes the current working directory to the temporary working - directory created by the base constructor.
  6. - -
  7. If you want to run a test in an existing directory, pass it as - workdir.
  8. - -
  9. Most parameters passed to this constructor function may be overruled - for each specific test system run using run_build_system parameters. -
- -

Method set_tree(self, - tree_location)

- -

Effects:

- -

Replaces the content of the current working directory with the content - of directory at tree_location. If tree_location is not - absolute pathname, it will be treated as relative to - self.original_workdir. This methods also explicitly makes the - copied files writeable.

- -

Method write(self, name, - content)

- -

Effects:

- -

Writes the specified content to the file given by name under - the temporary working directory. If the file already exists, it is - overwritten. Any required directories are automatically created.

- -

Method copy(self, src, dst)

- -

Effects:

- -

Equvivalent to self.write(self.read(src), dst).

- -

Method touch(self, names)

- -

Effects:

- -

Sets the access and modification times for all files in names to - the current time. All the elements in names should be relative - paths.

- -

Method run_build_system(self, - extra_args="", subdir="", stdout=None, stderr="", status=0, match=None, - pass_toolset=None, use_test_config=None, ignore_toolset_requirements=None, - expected_duration=None, **kw)

- -

Effects:

- -
    -
  1. Stores the state of the working directory in - self.previous_tree.
  2. - -
  3. Changes to subdir, if it is specified. It is relative to - the original_workdir or the workdir specified in - __init.
  4. - -
  5. Invokes the bjam executable, passing extra_args - to it. The binary should be located under - <test_invocation_dir>/../jam/src/bin.<platform>. - This is to make sure tests use the version of jam build from CVS.
  6. - -
  7. Compares the stdout, stderr and exit status of build system - invocation with values to appropriate parameters, if they are not - None. If any difference is found, the test fails.
  8. - -
  9. If the expected_duration parameter is specified then it - represents the maximal allowed time in seconds for the test to run. The - test will be marked as failed if its duration is greater than the given - expected_duration parameter value.
  10. - -
  11. Stores the new state of the working directory in self.tree. - Computes the difference between previous and current trees and stores them - in variables self.tree_difference and - self.unexpected_difference. Both variables are instances of class - tree.Trees_different, which have four attributes: - added_files, removed_files, modified_files and - touched_files. Each is a list of strings.

  12. -
- -

Method read(self, name)

- -

Effects:

- -

Read the specified file and returns it content. Raises an exception is - the file is absent.

- -

Method read_and_strip(self, name) -

- -

Effects:

- -

Read the specified file and returns it content, after removing trailing - whitespace from every line. Raises an exception is the file is absent.

- -

Rationale:

- -

Although this method is questionable, there are a lot of cases when jam - or shells it uses insert spaces. It seems that introducing this method is - much simpler than dealing with all those cases.

- -

Methods for declaring expectations -

- -

Accordingly to the number of changes kinds that are detected, there are - four methods that specify that test author expects a specific change to - occur. They check self.unexpected_difference, and if the change is - present there, it is removed. Otherwise, test fails.

- -

Each method accepts a list of names. Those names use / path - separator on all systems. Additionally, the test system translates suffixes - appropriately. For the test to be portable, suffixes should use Windows - convention: exe for executables, dll for dynamic libraries - and lib for static libraries. Lastly, the string "$toolset" in file - names is replaced by the name of tested toolset.

- -

Note: The List helper class might be useful to create - lists of names.

- -

Note: The file content can be examined using the - TestCmd.read function.

- -

The members are:

- -
    -
  • expect_addition
  • -
  • expect_removal
  • -
  • expect_modification
  • -
  • expect_nothing
  • -
- -

Note that expect_modification is used to check that a either - file content or timestamp has changed. The rationale is that some compilers - change content even if sources does not change, and it's easier to have a - method which checks for both content and time changes.

- -

There's also a member expect_nothing_more, which checks that all - the changes are either expected or ignored, in other words that - unexpected_difference is empty by now.

- -

Lastly, there's a method to compare file content with expected content: -

- expect_content(self, name, content, exact=0) - -

The method fails the test if the content of file identified by 'name' is - different from 'content'. If 'exact' is true, the file content is used - as-is, otherwise, two transformations are applied:

- -
    -
  • The read_and_strip method is used to read the file, which - removes trailing whitespace
  • - -
  • Each backslash in the file content is converted to forward slash.
  • -
- -

Methods for ignoring changes

- -

There are five methods which ignore changes made to the working tree. - They silently remove elements from self.unexpected_difference, and - don't generate error if element is not found. They accept shell style - wildcard.

- -

The following methods correspond to four kinds of changes:

- -
    -
  • ignore_addition(self, wildcard)
  • -
  • ignore_removal(self, wildcard)
  • -
  • ignore_modification(self, wildcard)
  • -
  • ignore_touch(self, wildcard)
  • -
- -

The method ignore(self, wildcard) ignores all the changes made - to files that match a wildcard.

- -

Methods for explicitly specifying results -

- -

Method pass_test(self, condition=1)

- -
- At this moment, the method should not be used. -
- -

Method fail_test(self, condition=1)

- -

Effects: Cause the test to fail if condition is true.

- -

Helper class List

- The class has sequence interface and two additional methods. - -

Method __init__(self, string)

- -

Effects: Splits the string on unescaped spaces and tabs. The split - components can further be retrieved using standard sequence access.

- -

Method __mul__(self, other)

- -

Effects: Returns an List instance, which elements are all - possible concatenations of two string, first of which is from self, - and second of which is from other.

- -

The class also defines __str__ and __repr__ methods. - Finally, there's __coerce__ method which allows to convert strings - to instances of List.

- -

Example:

-
-    l = "a b" * List("c d")
-    for e in l:
-        print e
-
- -

will output:

-
-    ac
-    ad
-    bc
-    bd
-
-
-
-

Last modified: May 02, 2008

-

© Copyright Vladimir Prus 2002, 2003, 2004, 2005.
- © Copyright Jurko Gospodnetic 2008.
- Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt)

- - diff -Nru boost1.81-1.81.0/tools/index.html boost1.81-1.81.0/tools/index.html --- boost1.81-1.81.0/tools/index.html 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ - - - - - - - - - - - - Boost Tools - - - - - - - - - - - - - -
- - boost.png (6897 bytes) - Tools -
- - - - - -
Getting Started    -       - Libraries    -      Web Site    -      News    -     Community    -      - FAQ    -      More Info 
- -

Boost developers, testers, and maintainers have developed various tools to - help with the administration of the Boost Libraries. Like everything else about - Boost, these tools are available in source form, and are part of the regular - Boost distribution.

-

Users may find these tools useful when porting Boost libraries to a new - platform, or for use with their own applications.

-
    -
  • - Boost.Build - The Boost build system, including - the full Boost version of the jam sources.
    -   -
  • - Inspect - The inspection tool used to detect - errors in the Boost directory hierarchy.
    -   -
  • - BoostBook - A Boost documentation - system, based on DocBook and the - Extensible Stylesheet Language (XSL), used by some Boost libraries.
    -   -
  • - bcp - A utility to extract subsets of Boost; to - determine which parts of Boost your code is using; and to print reports on - Boost usage (including Licence information).
    -   -
  • - QuickBook - QuickBook is a WikiWiki style - documentation tool geared towards C++ documentation using simple rules and markup - for simple formatting tasks. QuickBook generates - BoostBook XML.
    -   -
  • - Wave - A Standards conformant C/C++ - preprocessor usable on top of any other compiler. Usable for instance for the debugging - of the expansion of macros in your code or as a replacement for your built-in - preprocessor.
    -   -
  • - AutoIndex - A tool for indexing Boostbook/Docbook - documents.
    -   -
  • -
-
-

Revised -13 Mar 2008

- -

© Copyright Beman Dawes 2003
-© Copyright Douglas Gregor 2003
-© Copyright Aleksey Gurtovoy 2004
-© Copyright John Maddock 2004
-© Copyright Eric Niebler 2005
-© Copyright Hartmut Kaiser 2005
-
-Distributed under the Boost Software License, Version 1.0. -(See file LICENSE_1_0.txt -or www.boost.org/LICENSE_1_0.txt)

- - diff -Nru boost1.81-1.81.0/tools/inspect/index.html boost1.81-1.81.0/tools/inspect/index.html --- boost1.81-1.81.0/tools/inspect/index.html 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/inspect/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ - - - - - - - -Inspect Tool - - - - -

-boost.png (6897 bytes)Inspect -Tool

-

It is not uncommon for various common errors or -guideline violations to creep into the -Boost libraries. The inspect program detects and reports several common -problems. It can be used to scan a proposed Boost submission to identify various -failures.

-

The inspect program is written in C++ to limit tool chain -dependencies, and should be portable to any system.

-

The program is run in the directory to be scanned for errors. Sub-directories -are also included in the scan.

-

If the first program argument is -help, a usage message is -displayed, showing all available program options.

-

The program sources include:

- -

A Jamfile is provided to build the program -using Boost.Build.

-

A Microsoft Visual Studio solution file is provided to aid maintenance. See -readme.txt -before using it.

-
-

Revised -29 June, 2008

- -

© Copyright Beman Dawes, 2003

-

Distributed under the Boost Software -License, Version 1.0. (See accompanying file -LICENSE_1_0.txt or copy at -www.boost.org/LICENSE_1_0.txt)

- - - - diff -Nru boost1.81-1.81.0/tools/inspect/link_check_test.html boost1.81-1.81.0/tools/inspect/link_check_test.html --- boost1.81-1.81.0/tools/inspect/link_check_test.html 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/inspect/link_check_test.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ - - - - - - - -valid link - - - - -

valid bookmark link

-

valid relative link

-

broken relative link with bookmark

-

broken bookmark link

-

bookmark

-

second bookmark

-

duplicate second bookmark

-

 

- - - - \ No newline at end of file diff -Nru boost1.81-1.81.0/tools/quickbook/doc/block.qbk boost1.81-1.81.0/tools/quickbook/doc/block.qbk --- boost1.81-1.81.0/tools/quickbook/doc/block.qbk 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/quickbook/doc/block.qbk 2022-12-24 13:24:17.617612100 +0000 @@ -557,12 +557,14 @@ marked up). Example: ``` -[def sf_logo []] +[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] sf_logo ``` Now everywhere the sf_logo is placed, the picture will be inlined. +[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] +sf_logo [tip It's a good idea to use macro identifiers that are distinguishable. For instance, in this document, macro identifiers have two leading and @@ -602,8 +604,8 @@ [table Predefined Macros [[Macro] [Meaning] [Example]] - [[[^\__DATE__]] [Today's date] [2022-04-20]] - [[[^\__TIME__]] [The current time] [01:42:48 PM]] + [[[^\__DATE__]] [Today's date] [__DATE__]] + [[[^\__TIME__]] [The current time] [__TIME__]] [[[^\__FILENAME__]][Quickbook source filename] [__FILENAME__]] ] diff -Nru boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.gold boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.gold --- boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.gold 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.gold 2022-12-24 13:24:17.645612200 +0000 @@ -1756,10 +1756,14 @@ character or the underscore. The replacement text can be any phrase (even marked up). Example: +[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] +sf_logo + Now everywhere the sf_logo is placed, the picture will be inlined. + sflogo diff -Nru boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.gold-html boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.gold-html --- boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.gold-html 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.gold-html 2022-12-24 13:24:17.645612200 +0000 @@ -1934,9 +1934,16 @@ an alphabetic character or the underscore. The replacement text can be any phrase (even marked up). Example:

+
[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]]
+sf_logo
+

Now everywhere the sf_logo is placed, the picture will be inlined.

+

+ [] +

It's a good idea to use macro identifiers that are distinguishable. @@ -3273,6 +3280,7 @@ : my_doc : + <xsl:param>boost.image.src=images/my_project_logo.png <xsl:param>boost.image.alt="\"My Project\"" <xsl:param>boost.image.w=100 <xsl:param>boost.image.h=50 diff -Nru boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.quickbook boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.quickbook --- boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.quickbook 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/quickbook/test/quickbook_manual-1_4.quickbook 2022-12-24 13:24:17.645612200 +0000 @@ -1081,9 +1081,14 @@ character or the underscore. The replacement text can be any phrase (even marked up). Example: +[pre''' +[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] +sf_logo +'''] Now everywhere the sf_logo is placed, the picture will be inlined. +[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] sf_logo [tip It's a good idea to use macro identifiers that are distinguishable. @@ -1873,6 +1878,7 @@ : my_doc : + boost.image.src=images/my_project_logo.png boost.image.alt="\\"My Project\\"" boost.image.w=100 boost.image.h=50 diff -Nru boost1.81-1.81.0/tools/quickbook/test/xinclude/sub/boost-no-inspect boost1.81-1.81.0/tools/quickbook/test/xinclude/sub/boost-no-inspect --- boost1.81-1.81.0/tools/quickbook/test/xinclude/sub/boost-no-inspect 2023-08-04 06:01:47.000000000 +0000 +++ boost1.81-1.81.0/tools/quickbook/test/xinclude/sub/boost-no-inspect 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -This directory just contains simple test files, which might be disrupted by -adding copyright etc.